Agent: Claude Code Model: Claude Sonnet 5 (claude-sonnet-5) P4 identity used: bot_Claude_Anthropic (except where noted)
Picking up from SessionLog-2026-08-29.md (which ran through 2026-08-31).
Refreshed Public Depot and PPN tickets to full 24h; confirmed JIRA write
access still present; no dangling opened files anywhere. Closed out the
AWS EBS Name-tag loose end for good. Started Task 5 (Redesign SDP Release
Process): read doc/ReleaseProcessOverview.md end to end, then had a
substantial design discussion with the user defining the actual Streams
topology, patch-release model, and several concrete doc/tooling fixes.
No rewrite of ReleaseProcessOverview.md itself yet -- that's the next
session's main task, now that the design questions below are settled.
main (mainline) -> dev (long-lived,
always release-ready) -> dev_* short-lived per-task streams (e.g.
dev_rebrand, future dev_SDP-<n>). Small/low-risk/urgent work can
go straight to dev; larger/riskier work starts in a dev_* stream.dev -> main -> release flow for
everything, including patches -- no patching directly in an old
release stream (avoids a second, backflow merge direction). A patch
between majors just means cutting a fresh release stream from main
(e.g. r26.1.1, r26.1.2, ...). Considering r26.1.0 for GA to make
the numbering scheme consistent up front.Fix versions naming (adding .0 for GA to match) is explicitly
on hold -- user wants to check with Brent (P4 Product Owner) on
whether SDP should match however P4-proper does Fix versions, before
deciding.main; do one final regen pass in the release stream once
cut, since RCS-keyword-derived script versions differ per stream.
Confirmed acceptable that docs viewed on main will show "MAIN" in
version tags rather than a release number -- that's accurate, not a
bug, and consistent with the relative-link doc strategy from the
prior session.r26.1.0 etc.) just stay
around indefinitely once superseded by patches. Confirmed fine.cd-command inconsistency in the old doc: fix by establishing
WSRoot=$(p4 -ztag -F %clientRoot% info) early and using
cd "$WSRoot/<subdir>" throughout the rewrite, instead of the old
doc's inconsistent relative cd chains.tools/ packaging gap found and fixed (see Timeline) -- real
regression from the Classic->Streams migration, not yet released.doc/ReleaseNotes.adoc may need a URL update now that
tools/ is excluded from packaging -- checked today, and the
existing download URL there already correctly points at
Server/Unix/p4/common/bin/sdp_health_check.sh, not tools/, so
this may already be fine. Needs a final confirm next session (maybe
there's a different stale reference elsewhere).dev_c2s is done and
retired (merged into dev_rebrand); dev_rebrand2 was aborted;
dev_SDP-1265/dev_SDP-1267 are experimental placeholders (Version-file
isolation testing, and an empty placeholder respectively) that may or may
not ever be used.p4-hms depot population.tools/sdp_health_check.sh -- confirmed stale duplicate of the real
Server/Unix/p4/common/bin/sdp_health_check.sh; harmless (now
excluded from packaging either way), worth deleting eventually as
plain cleanup, not urgent.Confirmed the risk was real, not hypothetical: checked the actual AWS
account this environment has access to (helix-bsw-bot, account
572096036492) and found a live, in-use host, perforce-01, whose EBS
volumes were still tagged perforce-01-hxdepots/perforce-01-hxlogs (the
pre-2026.1-rebrand convention) while snapshot.sh (since change 33326)
only matches p4depots/p4logs. Fixed both ends:
snapshot.sh (change 33395): added a LegacyVolumeBaseName fallback --
if the current-style Name tag isn't found, retries the pre-rebrand tag
name and warns that the volume should be re-tagged, rather than
silently skipping it. Added a comment block explaining the Name-tag
convention and that it must stay in sync with real AWS tags on live
production volumes. Verified the fallback logic with a mocked aws CLI
reproducing the exact perforce-01 scenario.perforce-01's two volumes to
perforce-01-p4depots/perforce-01-p4logs, confirmed via
describe-volumes. This was flagged to the user as a live-infrastructure
change before doing it, given their go-ahead.Never shipped in a release, so no separate JIRA issue -- folded directly into this fix as "just an outcome of the rebranding."
Read the whole 18-step document. It's detailed and clearly still useful in
spirit, but a lot of it is written for the old Classic-depot
branch-and-merge model (p4 merge -b perforce_software-sdp-dev, an
mdcu.sh script, mixed //guest/perforce_software/sdp/dev/... and
//p4-sdp/... paths) and needs a real Streams-native rework, not
search-and-replace.
Before proposing a rewrite, surfaced the most load-bearing open question:
what's the actual relationship between //p4-sdp/dev, //p4-sdp/dev_rebrand,
and //p4-sdp/main? Grounded this against the real depot via p4 stream -o
and p4 streams //p4-sdp/... rather than guessing, which is what surfaced
the full topology (see below) and the extra streams (dev_c2s,
dev_rebrand2, dev_SDP-1265, dev_SDP-1267) not otherwise mentioned.
User's response (this is the actual design-definition conversation for Task 5, not documentation of an already-decided design -- "the intended stream workflow will be exercised for the first time with this release"):
Stream topology:
main (mainline, parent none) -- long-lived, stable, reflects the
latest shipped release. Confirmed via p4 stream -o: has both
isolate ai_dev_support/... and isolate Version already set.r26.1) -- long-lived, generally stable except
briefly during the release process itself (doc regen, heavy retesting).
None exist yet.dev (development, parent main) -- long-lived, always has WIP, but
always kept release-ready/stable enough to ship on short notice.dev_* project streams (development type; sparsedev was tried but
doesn't support fetch/push, so plain development is used per-developer
choice instead) -- short-lived, per-task, parented by dev. Naming
convention: can be issue-specific, e.g. a future dev_SDP-568.dev; larger/higher-risk work should start in a
dev_* stream first (confirmed with the user: an earlier "or high-risk
... can go right to dev" in their own phrasing was a typo, not intended).Patch model -- the one substantive decision made today: the original
doc's implicit model (patch directly in an old release stream, then
presumably backflow into main to keep it current) was rejected as too
much complexity for a small team -- it requires two merge directions
instead of one. Decided instead: patches follow the exact same
dev -> main -> release flow as any other change; a patch between
majors just means cutting a new release stream from main
(r26.1.1, r26.1.2, ...). Since dev is designed to always be
release-ready, this costs no speed even for urgent fixes. Naming: possibly
r26.1.0 for GA (not yet r26.1) so the numbering scheme is consistent
from the start -- this would deliberately diverge from JIRA's existing
Fix versions convention (2026.1, no .0), which is fine since they're
different systems, but needs to be documented clearly so it's not
confusing. Whether to also change the JIRA convention to add .0 for GA
is explicitly on hold pending the user's conversation with Brent (P4
Product Owner) about whether SDP should match P4-proper's own convention.
No formal release-stream retirement/pruning -- P4 has no "mark inactive" stream feature (a long-standing, known gap the user has already requested upstream), so old release streams just accumulate and stay around indefinitely once superseded. Confirmed fine, no action needed unless/until that feature exists.
One nice side effect noted: since patches and GA releases now run through an identical mechanism (just gated by "major releases only" step-skips, which the old doc already used for some steps), the redesigned doc's overall shape probably won't need to change much -- patch and GA procedures collapse into one, which is a simplification, not just a relabeling.
Doc/script version regeneration sequencing (a real technical
constraint, not just a design preference): because script versions are now
derived from $Id:$/$Change:$ RCS keywords (SDP-1161/SDP-799), the same
script's -man output -- and therefore the generated docs built from it --
will show different version strings in different streams, even when the
content is otherwise identical, since submitting/integrating a file into a
new stream changes its $Change:$ value. Plan: do as much doc prep as
possible in main (revnumbers, etc.), then do one final regen pass in the
release stream right after cutting it, to pick up correct per-release
version strings. Confirmed with the user that main's own docs will
legitimately show "MAIN" in version tags in the meantime (e.g.
MAIN.33368 instead of R26.1.0.33368) -- judged this is fine, even
good: it's an honest signal to the reader that they're viewing the rolling
main, not a specific release, which fits naturally with the relative-link
doc strategy adopted the prior session.
Stream housekeeping (no action needed, just status confirmed by user):
dev_c2s (Classic-to-Streams migration work) is done and retired, already
merged into dev_rebrand. dev_rebrand2 was an aborted attempt.
dev_SDP-1265 (an experiment with how the isolated Version file behaves)
and dev_SDP-1267 (an empty placeholder) are just sitting there,
unresolved, possibly never to be used -- fine as-is; if ever merged down,
the only effect will be bumping the changelist number on their share
line, since they have no other resident files.
Concrete fixes made today, arising directly from this discussion:
tools/excludes.downloads.cfg: added D:ai_dev_support (change 33398)
and, after checking real packaging behavior, D:tools (change 33401).
In the Classic structure, tools/ lived outside the dev/main branches
entirely and was never a packaging concern; the Classic->Streams
migration moved it inside the stream tree, where
package_downloads.sh's cp -pr <stream>/... $SDPRoot now sweeps it
into the customer tarball unless excluded. Verified tools/ contains
only release-engineering tooling; the one file that looked
customer-facing (sdp_health_check.sh) already has its real, correct,
customer-shipped copy at Server/Unix/p4/common/bin/sdp_health_check.sh,
so nothing real is lost by excluding tools/. Confirmed only one
directory named tools exists anywhere in the tree, so the exclusion
can't accidentally catch anything else.excludes.downloads.cfg a second time via the Edit tool without
re-running p4 edit first (the file had gone read-only again after the
first submit). The edit silently succeeded on disk anyway -- p4 opened correctly showed nothing open, and p4 submit correctly said
"No files to submit" since nothing was tracked, so no harm done, but it
confirms the Edit tool has the exact same rename()-based read-only
bypass previously seen with sed -i. Fixed properly (p4 edit picked
up the existing on-disk diff cleanly) and broadened the existing
feedback_sed_bypasses_p4_readonly memory to cover this: the rule
isn't "watch out right after sed," it's "p4 edit unconditionally
before touching any tracked file with any tool, every time."WSRoot=$(p4 -ztag -F %clientRoot% info) idiom to fix
the old doc's inconsistent cd commands -- to be applied throughout
the ReleaseProcessOverview.md rewrite next session.doc/ReleaseNotes.adoc
as possibly needing a URL update now that tools/ is excluded from
packaging. Checked today: the existing download URL there already
points at Server/Unix/p4/common/bin/sdp_health_check.sh, not
tools/, so it may already be correct -- flagged for a final confirm
next session rather than assumed fixed or assumed broken.Good foundational-design day for Task 5 -- the actual stream topology and
patch model are now decided (not just documented), which is most of the
hard thinking done before the ReleaseProcessOverview.md rewrite itself.
Next session: write the actual rewrite, applying the WSRoot idiom
throughout, restructuring the merge-down/copy-up steps to match the
uniform dev -> main -> release flow (no backflow), rewriting the
Classic-era p4 merge -b/mdcu.sh mechanics to their Streams-native
equivalents, and doing the final confirm on the SDP Health Checks URL
question above. SDP-1170 (Classic->Streams URL/redirect migration) is
still open and part of this same Task 5 scope, not yet started for real.
# Session Log - 2026-09-01
Agent: Claude Code
Model: Claude Sonnet 5 (claude-sonnet-5)
P4 identity used: bot_Claude_Anthropic (except where noted)
## Summary
Picking up from `SessionLog-2026-08-29.md` (which ran through 2026-08-31).
Refreshed Public Depot and PPN tickets to full 24h; confirmed JIRA write
access still present; no dangling opened files anywhere. Closed out the
AWS EBS Name-tag loose end for good. Started Task 5 (Redesign SDP Release
Process): read `doc/ReleaseProcessOverview.md` end to end, then had a
substantial design discussion with the user defining the actual Streams
topology, patch-release model, and several concrete doc/tooling fixes.
No rewrite of `ReleaseProcessOverview.md` itself yet -- that's the next
session's main task, now that the design questions below are settled.
## Where Things Stand
- **Tasks 1-4: done.** SDP-1170 remains open, folded into Task 5 scope.
- **Task 5 (Redesign SDP Release Process): design phase, in progress.**
Key decisions made today (see Timeline for full detail):
- Stream topology confirmed: `main` (mainline) -> `dev` (long-lived,
always release-ready) -> `dev_*` short-lived per-task streams (e.g.
`dev_rebrand`, future `dev_SDP-<n>`). Small/low-risk/urgent work can
go straight to `dev`; larger/riskier work starts in a `dev_*` stream.
- **Patch model decided**: uniform `dev` -> `main` -> release flow for
*everything*, including patches -- no patching directly in an old
release stream (avoids a second, backflow merge direction). A patch
between majors just means cutting a fresh release stream from `main`
(e.g. `r26.1.1`, `r26.1.2`, ...). Considering `r26.1.0` for GA to make
the numbering scheme consistent up front.
- JIRA `Fix versions` naming (adding `.0` for GA to match) is explicitly
**on hold** -- user wants to check with Brent (P4 Product Owner) on
whether SDP should match however P4-proper does `Fix versions`, before
deciding.
- Doc/script version regeneration sequencing: front-load doc/revnumber
prep in `main`; do one final regen pass in the release stream once
cut, since RCS-keyword-derived script versions differ per stream.
Confirmed acceptable that docs viewed on `main` will show "MAIN" in
version tags rather than a release number -- that's accurate, not a
bug, and consistent with the relative-link doc strategy from the
prior session.
- No formal release-stream pruning/retirement -- P4 has no "inactive
stream" concept, so old release streams (`r26.1.0` etc.) just stay
around indefinitely once superseded by patches. Confirmed fine.
- `cd`-command inconsistency in the old doc: fix by establishing
`WSRoot=$(p4 -ztag -F %clientRoot% info)` early and using
`cd "$WSRoot/<subdir>"` throughout the rewrite, instead of the old
doc's inconsistent relative `cd` chains.
- `tools/` packaging gap found and fixed (see Timeline) -- real
regression from the Classic->Streams migration, not yet released.
- Open item flagged by user for next time: the "SDP Health Checks"
section of `doc/ReleaseNotes.adoc` may need a URL update now that
`tools/` is excluded from packaging -- checked today, and the
existing download URL there already correctly points at
`Server/Unix/p4/common/bin/sdp_health_check.sh`, not `tools/`, so
this may already be fine. Needs a final confirm next session (maybe
there's a different stale reference elsewhere).
- Stream housekeeping clarified (no action needed): `dev_c2s` is done and
retired (merged into `dev_rebrand`); `dev_rebrand2` was aborted;
`dev_SDP-1265`/`dev_SDP-1267` are experimental placeholders (Version-file
isolation testing, and an empty placeholder respectively) that may or may
not ever be used.
- Loose ends carried over, still open, not urgent:
- SDP-1170 (Migrate Classic->Streams URLs/redirects) -- part of Task 5.
- SDP-1383 / SDP-1384 (Priority Backlog) -- ccheck.sh version-awareness,
Python/Perl version identification.
- SDP-1050 -- p4dstate.sh/p4pstate.sh/p4brokerstate.sh overhaul.
- SDP-568 -- exec/tee logging standardization, deferred to 2026.2.
- HMS URL fixes -- blocked on `p4-hms` depot population.
- `tools/sdp_health_check.sh` -- confirmed stale duplicate of the real
`Server/Unix/p4/common/bin/sdp_health_check.sh`; harmless (now
excluded from packaging either way), worth deleting eventually as
plain cleanup, not urgent.
## Timeline
### AWS EBS Name-tag loose end (closed)
Confirmed the risk was real, not hypothetical: checked the actual AWS
account this environment has access to (`helix-bsw-bot`, account
572096036492) and found a live, in-use host, `perforce-01`, whose EBS
volumes were still tagged `perforce-01-hxdepots`/`perforce-01-hxlogs` (the
pre-2026.1-rebrand convention) while `snapshot.sh` (since change 33326)
only matches `p4depots`/`p4logs`. Fixed both ends:
- `snapshot.sh` (change 33395): added a `LegacyVolumeBaseName` fallback --
if the current-style Name tag isn't found, retries the pre-rebrand tag
name and warns that the volume should be re-tagged, rather than
silently skipping it. Added a comment block explaining the Name-tag
convention and that it must stay in sync with real AWS tags on live
production volumes. Verified the fallback logic with a mocked `aws` CLI
reproducing the exact `perforce-01` scenario.
- Renamed the real AWS EBS tags on `perforce-01`'s two volumes to
`perforce-01-p4depots`/`perforce-01-p4logs`, confirmed via
`describe-volumes`. This was flagged to the user as a live-infrastructure
change before doing it, given their go-ahead.
Never shipped in a release, so no separate JIRA issue -- folded directly
into this fix as "just an outcome of the rebranding."
### Task 5 kickoff: ReleaseProcessOverview.md read + design discussion
Read the whole 18-step document. It's detailed and clearly still useful in
spirit, but a lot of it is written for the old Classic-depot
branch-and-merge model (`p4 merge -b perforce_software-sdp-dev`, an
`mdcu.sh` script, mixed `//guest/perforce_software/sdp/dev/...` and
`//p4-sdp/...` paths) and needs a real Streams-native rework, not
search-and-replace.
Before proposing a rewrite, surfaced the most load-bearing open question:
what's the actual relationship between `//p4-sdp/dev`, `//p4-sdp/dev_rebrand`,
and `//p4-sdp/main`? Grounded this against the real depot via `p4 stream -o`
and `p4 streams //p4-sdp/...` rather than guessing, which is what surfaced
the full topology (see below) and the extra streams (`dev_c2s`,
`dev_rebrand2`, `dev_SDP-1265`, `dev_SDP-1267`) not otherwise mentioned.
User's response (this is the actual design-definition conversation for
Task 5, not documentation of an already-decided design -- "the intended
stream workflow will be exercised for the first time with this release"):
**Stream topology**:
- `main` (`mainline`, parent none) -- long-lived, stable, reflects the
latest shipped release. Confirmed via `p4 stream -o`: has both
`isolate ai_dev_support/...` and `isolate Version` already set.
- Release streams (e.g. `r26.1`) -- long-lived, generally stable except
briefly during the release process itself (doc regen, heavy retesting).
None exist yet.
- `dev` (`development`, parent `main`) -- long-lived, always has WIP, but
always kept release-ready/stable enough to ship on short notice.
- `dev_*` project streams (`development` type; `sparsedev` was tried but
doesn't support fetch/push, so plain `development` is used per-developer
choice instead) -- short-lived, per-task, parented by `dev`. Naming
convention: can be issue-specific, e.g. a future `dev_SDP-568`.
- Developers choose where to start work: small/low-risk/hyper-urgent work
can go straight to `dev`; larger/higher-risk work should start in a
`dev_*` stream first (confirmed with the user: an earlier "or high-risk
... can go right to dev" in their own phrasing was a typo, not intended).
**Patch model -- the one substantive decision made today**: the original
doc's implicit model (patch directly in an old release stream, then
presumably backflow into `main` to keep it current) was rejected as too
much complexity for a small team -- it requires two merge directions
instead of one. Decided instead: patches follow the exact same
`dev` -> `main` -> release flow as any other change; a patch between
majors just means cutting a *new* release stream from `main`
(`r26.1.1`, `r26.1.2`, ...). Since `dev` is designed to always be
release-ready, this costs no speed even for urgent fixes. Naming: possibly
`r26.1.0` for GA (not yet `r26.1`) so the numbering scheme is consistent
from the start -- this would deliberately diverge from JIRA's existing
`Fix versions` convention (`2026.1`, no `.0`), which is fine since they're
different systems, but needs to be documented clearly so it's not
confusing. Whether to *also* change the JIRA convention to add `.0` for GA
is explicitly on hold pending the user's conversation with Brent (P4
Product Owner) about whether SDP should match P4-proper's own convention.
No formal release-stream retirement/pruning -- P4 has no "mark inactive"
stream feature (a long-standing, known gap the user has already requested
upstream), so old release streams just accumulate and stay around
indefinitely once superseded. Confirmed fine, no action needed unless/until
that feature exists.
One nice side effect noted: since patches and GA releases now run through
an *identical* mechanism (just gated by "major releases only" step-skips,
which the old doc already used for some steps), the redesigned doc's
overall shape probably won't need to change much -- patch and GA
procedures collapse into one, which is a simplification, not just a
relabeling.
**Doc/script version regeneration sequencing** (a real technical
constraint, not just a design preference): because script versions are now
derived from `$Id:$`/`$Change:$` RCS keywords (SDP-1161/SDP-799), the same
script's `-man` output -- and therefore the generated docs built from it --
will show different version strings in different streams, even when the
content is otherwise identical, since submitting/integrating a file into a
new stream changes its `$Change:$` value. Plan: do as much doc prep as
possible in `main` (revnumbers, etc.), then do one final regen pass in the
release stream right after cutting it, to pick up correct per-release
version strings. Confirmed with the user that `main`'s own docs will
legitimately show "MAIN" in version tags in the meantime (e.g.
`MAIN.33368` instead of `R26.1.0.33368`) -- judged this is fine, even
good: it's an honest signal to the reader that they're viewing the rolling
`main`, not a specific release, which fits naturally with the relative-link
doc strategy adopted the prior session.
**Stream housekeeping** (no action needed, just status confirmed by user):
`dev_c2s` (Classic-to-Streams migration work) is done and retired, already
merged into `dev_rebrand`. `dev_rebrand2` was an aborted attempt.
`dev_SDP-1265` (an experiment with how the isolated `Version` file behaves)
and `dev_SDP-1267` (an empty placeholder) are just sitting there,
unresolved, possibly never to be used -- fine as-is; if ever merged down,
the only effect will be bumping the changelist number on their `share`
line, since they have no other resident files.
**Concrete fixes made today, arising directly from this discussion**:
1. `tools/excludes.downloads.cfg`: added `D:ai_dev_support` (change 33398)
and, after checking real packaging behavior, `D:tools` (change 33401).
In the Classic structure, `tools/` lived outside the dev/main branches
entirely and was never a packaging concern; the Classic->Streams
migration moved it inside the stream tree, where
`package_downloads.sh`'s `cp -pr <stream>/... $SDPRoot` now sweeps it
into the customer tarball unless excluded. Verified `tools/` contains
only release-engineering tooling; the one file that looked
customer-facing (`sdp_health_check.sh`) already has its real, correct,
customer-shipped copy at `Server/Unix/p4/common/bin/sdp_health_check.sh`,
so nothing real is lost by excluding `tools/`. Confirmed only one
directory named `tools` exists anywhere in the tree, so the exclusion
can't accidentally catch anything else.
2. Along the way, hit a real (harmless) self-inflicted mistake: edited
`excludes.downloads.cfg` a second time via the Edit tool without
re-running `p4 edit` first (the file had gone read-only again after the
first submit). The edit silently succeeded on disk anyway -- `p4
opened` correctly showed nothing open, and `p4 submit` correctly said
"No files to submit" since nothing was tracked, so no harm done, but it
confirms the Edit tool has the exact same rename()-based read-only
bypass previously seen with `sed -i`. Fixed properly (`p4 edit` picked
up the existing on-disk diff cleanly) and broadened the existing
`feedback_sed_bypasses_p4_readonly` memory to cover this: the rule
isn't "watch out right after sed," it's "`p4 edit` unconditionally
before touching any tracked file with any tool, every time."
3. Established the `WSRoot=$(p4 -ztag -F %clientRoot% info)` idiom to fix
the old doc's inconsistent `cd` commands -- to be applied throughout
the `ReleaseProcessOverview.md` rewrite next session.
4. User flagged the "SDP Health Checks" section of `doc/ReleaseNotes.adoc`
as possibly needing a URL update now that `tools/` is excluded from
packaging. Checked today: the existing download URL there already
points at `Server/Unix/p4/common/bin/sdp_health_check.sh`, not
`tools/`, so it may already be correct -- flagged for a final confirm
next session rather than assumed fixed or assumed broken.
## Wrap-Up
Good foundational-design day for Task 5 -- the actual stream topology and
patch model are now decided (not just documented), which is most of the
hard thinking done before the `ReleaseProcessOverview.md` rewrite itself.
Next session: write the actual rewrite, applying the `WSRoot` idiom
throughout, restructuring the merge-down/copy-up steps to match the
uniform `dev` -> `main` -> release flow (no backflow), rewriting the
Classic-era `p4 merge -b`/`mdcu.sh` mechanics to their Streams-native
equivalents, and doing the final confirm on the SDP Health Checks URL
question above. SDP-1170 (Classic->Streams URL/redirect migration) is
still open and part of this same Task 5 scope, not yet started for real.
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 33402 | Claude (AI Agent by Anthropic) | Session log for 2026-09-01: closed the AWS EBS Name-tag loose end, kicked off Task 5 (Release Process redesign) with a full read of ReleaseProcessOverview.md, and defined the actual Streams topology and patch-release model with the user for the first time. |