Agent: Claude Code Model: Claude Sonnet 5 (claude-sonnet-5) P4 identity used: bot_Claude_Anthropic (except where noted)
New day, picking up from SessionLog-2026-08-27.md. Refreshed both
Public Depot and PPN tickets to full 24h duration (had to look up the
exact password file path in P4Info.md -- ~/pub/.p4passwd.bot_Claude_Anthropic,
not the path guessed first); confirmed no dangling opened files in
test-install_sdp, p4-sdp_dev_rebrand, or p4-sdp_dev_rebrand_bot.
opt_perforce_sdp_backup.service (confirmed by the user to
predate this project and not be OS-family-specific -- see
project_opt_perforce_sdp_backup_flaky_test.md memory).lab qa_build came back green 2026-08-27 (all 43 scripted tests passed).p4-sdp-build_dev_rebrand build 81 (auto-triggered via
SCM polling, includes all of 2026-08-27's changes) came back SUCCESS./hx* -> /mnt/p4*
mount-name rename verified via a clean final sweep. Remaining
SDP-1379 loose ends: HMS URL fixes once the new p4-hms depot is
populated (marked EDITME-UpdateThisURL for now), and a future
pre-release doc-URL 404 audit (not yet scheduled). 7 more issues
remain on the 2026.1 features list (SDP-1350, 1323, 1320, 1286, 1170,
1161, 799) -- not yet started.opt_perforce_sdp_backup.service
test is occasionally flaky (a systemctl/journal timing issue per the
user's read, not a bug in the script itself) and fix the test.Fixed the opt_perforce_sdp_backup.service test flakiness
(today's first task). Root cause: systemctl start on the
Type=oneshot unit blocks until the script exits, but journald's
indexing of that process's final stdout line can lag slightly behind
-- a pure test-timing race, not a bug in the script. Fix: inserted a
new synchronization step (poll up to 15s for the expected journal
line before proceeding) between the existing "start the service" and
"confirm success in the journal" lines, in both affected test groups
(LocalInstallSampleDepotDeepCfgChanges, BackupRecoveryMultiInstance)
in cli_tests.cfg. Had to use bash process substitution (<(...))
instead of a literal pipe, since cli_tests.cfg's own | field
delimiter can't appear inside a Command value. Submitted as change
33329 in //test-install_sdp/dev.
Validated by re-running both affected groups on Rocky 10 (the
machine that failed twice yesterday): 188/188 tests passed, 0
failures, including both opt_perforce_sdp_backup.service checks
that failed before. Confirmed fixed.
Found and deleted 11 stray -E-suffixed files across several
~/pub workspace directories (test-install_sdp, hi/dev/src,
p4-sdp_dev_rebrand2, p4-sdp-dev_rebrand, p4-sdp,
p4-sdp-build_dev_rebrand, sdp/dev/test/sdp) -- unintentional
backup artifacts from a past sed -i -E invocation on macOS (BSD
sed -i requires an explicit backup-suffix argument; without it,
the -E that follows gets consumed as that argument instead of
enabling extended regex, silently creating a <file>-E backup of
every file touched). Confirmed none were ever added to Perforce
before deleting (all showed "no such file(s)"/no depot history).
Discovered SDP-NNNN issue lookups don't work the way I assumed.
p4 job -o SDP-1350 (and even SDP-1379, which we know is real)
both returned blank "new job" templates -- SDP issue tracking on the
Public Depot moved to JIRA at some point, keeping the same
"SDP-NNNN" naming convention, but the underlying P4 jobs stopped
being updated; workshop.perforce.com/jobs/SDP-NNNN links are
similarly stale now (confirmed by the user). Note: this is the
opposite of BSW/PPN jobs, where p4 job is still the source of
truth. Saved as reference_job_tracking_sources_of_truth.md memory.
Started authenticating the Atlassian/JIRA MCP connector
(claude.ai Atlassian Rovo) via /mcp to get real access -- in
progress, not yet connected.
JIRA connector authenticated (claude.ai Atlassian Rovo, via
/mcp). Confirmed working: perforce.atlassian.net, cloudId
2accdbdb-9d65-4c22-b174-5d4a9d437c59.
Started SDP-1350 ("Adapt to P4D 2026.1 Secure By Default (SBD) initiative, including warning about behavior changes"). Pulled the real JIRA issue plus its linked Confluence requirements doc ("2026.1 Secure By Default Requirements", space P4D) for full context:
security is the one exception: P4D 2026.1+
unconditionally raises it to at least 4 during upgrade, even for
explicitly-configured lower values (unless already >=4). No
official recovery/downgrade procedure is documented anywhere yet.-xu-level warning (a separate,
P4D-team deliverable); SDP-1350 is the complementary warning in
the SDP's own upgrade.sh wrapper.-opt-out-of-security-update flag
(auto-restore the prior security value post-upgrade, via
p4d -cset writing directly to db.config -- works even if the
upgrade's own security bump would otherwise lock out normal
p4 configure set access) is a deliberate follow-up, to be
completed before 2026.1 ships -- but the warning text should
already reference it as if available.-Os override flag (modeled on -Ov): if starting
security is 0-2, abort by default (meaningful risk of
breaking workflows/access patterns, e.g. public-facing or
anonymous-access servers); if 3, warn only (low risk); if
already >=4, no change (matches p4d's own behavior).Implementation landed in Server/Unix/p4/common/bin/upgrade.sh,
inserted right after the existing "to-or-thru P4D 2019.1" milestone
check (same file, same idiom, same nesting) inside the per-binary
analysis loop. Traced through and confirmed the all-or-nothing
requirement is already satisfied by the script's existing
ErrorCount/preflight-bail architecture -- calling errmsg()
(which every other disqualifying condition in this script already
uses, e.g. the -Od downgrade check) increments ErrorCount, which
triggers a hard bail right after the analysis loop, before any
execution loop runs -- so no restructuring was needed, just a
clarifying comment since the dependency isn't obvious on first read.
Added Server/test/test_Upgrade.py:testUpgradeSBDLowSecurityAborts
(Docker/Podman suite, Task 3): sets security=0, stages 26.1
binaries over a 25.2 instance, asserts the expected warning/abort
messages appear, and -- the key assertion -- that p4 info still
reports the old version afterward, directly proving the
all-or-nothing guarantee rather than just checking an error was
printed.
Submitted together as change 33334 (implementation + test).
Validation deferred to the next Jenkins auto-build (SCM polls every
10 min) rather than a local container run, per the user's choice.
Build 82 came back SUCCESS, including change 33334. Confirmed
the new test genuinely ran and passed (not just an unrelated overall
pass): test/docker/files/test_sdp.sh:22 runs python3 /p4/test_Upgrade.py unconditionally with no args, which invokes
unittest.main()'s default discovery over the file's only class --
which now has exactly 2 test methods (the original testUpgrade
plus the new one). The build log shows exactly "Ran 2 tests in
57.753s / OK" in the right position in the sequence (right after
test_SDP.py's own "Ran 1 test ... OK"), which can only correspond
to both methods passing. Detailed per-assertion log content wasn't
directly recoverable from the retained Jenkins console log, since
test_sdp.sh only tails the debug log file on failure and the
container was auto-removed (--rm) after a clean pass -- but the
test-count match plus overall SUCCESS is solid confirmation.
SDP-1350's warning implementation is done, tested, and green.
Implemented the -opt-out-of-security-update follow-up, closing
out SDP-1350 completely. User specified the design precisely:
usage -h "..." mechanism otherwise --
validated right where SERVERID/P4MASTER_ID first become
available, just after p4_vars sourcing.p4d -r $P4ROOT "-cset security=<value>" (writes
directly to db.config, no live connection or auth needed, just
needs to run on the server machine -- already guaranteed for any
SDP upgrade.sh invocation). P4D's own journaling naturally
captures the write; no extra effort needed for that.-cset name=value expression must be ONE quoted argument to p4d
(p4d "-cset security=0") -- p4d -cset "security=0" is a usage
error. Verified against the official p4d command reference
(confirms -r not -p, no live connection needed, run on the
server machine) and implemented by building the whole thing as a
single CSetArg variable passed as one quoted argument.due to '-opt-out-of-security-update') before running it.-Os: -Os lets the upgrade proceed
despite a too-low starting security; -opt-out-of-security-update
controls whether the value gets restored afterward. Both are
needed together for the Public Depot's own security=0 use case.Inserted alongside the existing, structurally identical "Upgrade
protections on master if -c was specified" step (same post-restart,
master-only, live-$P4BIN-adjacent shape) -- found via a quick
research pass confirming exactly where p4d is confirmed back up and
responsive after the restart phase. Submitted as change 33337.
SDP-1350 is now fully complete (warning, abort/override gate,
and the opt-out restore flag, plus its automated test).
Moved to SDP-1323 ("Changed default P4 version in
get_p4_binaries.sh to r26.1"). Turned out to be already done in the
code -- p4_binaries/get_p4_binaries.sh:40's DefaultP4Version was
set to r26.1 back in change 32482 (2026-03-21), well before this
project started; confirmed no other script has its own hardcoded
default version needing the same bump. Just stale JIRA bookkeeping.
New convention established: when closing an SDP JIRA issue, also
set its P4Blog custom field (customfield_10231) to a
workshop.perforce.com/changes/<CL> URL for a representative
changelist -- a deliberately weak, low-effort substitute for real
p4 fix associations (not available here), so no need for
completeness if multiple CLs were involved, just pick one
representative one. P4Blog is a rich-text field requiring
Atlassian Document Format to edit via API, not a plain string.
Saved as reference_jira_p4blog_convention.md memory. Closed
SDP-1323 (P4Blog -> change 32482) and, since it was also fully
done, SDP-1350 too (P4Blog -> change 33337, the final/most-complete
of its two changelists) via the Close transition (id 2, lands on
status Closed, category Done).
Moved to SDP-1320 ("New best practice: Set server.startup.autorestart=1 for P4D is 2026.1+"). Ticket had an explicit blocker noted in its own description: "We should not ship this SDP change until P4-7318 is fixed." Checked P4-7318 first -- Closed/Fixed, fixVersion 2026.1 (released 2026-07-01) -- so unblocked.
Investigated configurables.cfg's format
(Profile|Configurable|ExpectedValue|CompareStyle|Optionality|ServerIDType|SetNotes)
and found it has no way to express "only applies to P4D version X+."
ccheck.sh only handles this today via ad-hoc bespoke code (a
dedicated skip-function for filesys.*.min, and inline per-configurable
special-casing for security) -- no generic mechanism. Discussed
this with the user as a known, deliberately-deferred limitation (not
easy to fix without hurting readability; only a few configurables
need it, and the gating needed can be complex -- major version,
patch level, or simple "available as of X"). Agreed plan:
configurables.cfg
marked Recommended (not Required, my suggestion, user
agreed) so pre-2026.1 servers get a soft warning instead of an
incorrect hard failure; add real P4D_VERSION-gated logic (matching
configure_new_server.sh's own existing idiom for this, e.g. the
server.rolechecks/2011.1 precedent) to configure_new_server.sh
and .bat (.bat gated unconditionally -- no version-gating
infra exists there at all, and Windows/Linux parity was never a
goal for install scripts).ccheck.sh/configurables.cfg to be P4D-version-aware in general,
then port configure_new_server.sh's existing version-gating logic
into that format, eventually letting upgrade.sh call
ccheck.sh -FIX -y instead of maintaining separate logic) --
created SDP-1383. Cross-referenced (Relates) with SDP-1131
("ccheck.sh support for checking configurables of replicas/edge"),
the same underlying config-format-expressiveness gap. Linked
SDP-1383 as Blocks SDP-828 ("Enhance upgrade.sh to safely apply
new best practice configurables," the existing "upgrade.sh should
call ccheck.sh" issue) and updated SDP-828's description to note
the new gating explicitly, per the user's request.Implemented and submitted as change 33338. Closed SDP-1320
(P4Blog -> change 33338).
Set SDP-1383's Fix versions to "Priority Backlog" per the
user: this signals "we intend to do this, not sure when" -- a step
above a plain Open issue ("we'll think about it") but short of
assigning a numbered release (which signals actual planned timing).
Confirmed it's a pre-existing valid version in the SDP project
(description: "Open issues not assigned to a release but higher
priority than other generally open issues").
Started SDP-1286 ("Update default auth.id=p4_<CommitServerID>;
ServerID=commit[.<OrgName>].<SDPInstance>"). Per the JIRA
description, touches install_sdp.sh, sdp_install.cfg (generated),
configure_new_server.sh, mkdirs.sh, the SDP Guide doc, and
mkrep.sh. Investigated before implementing:
{commit|master}[.<OrgName>[.<SDPInstance>]] naming
standard is already fully documented
(doc/SDP_Guide.Unix.adoc:3505-3538, "Commit Server Spec"
section) from a prior doc-only issue, SDP-1167 -- character
rules, length recommendations, and an auth.id TIP already
written. So the doc may need only a small clarifying update
(e.g. stating the actual chosen default once implemented), not a
rewrite.configure_new_server.sh:800 sets auth.id=$P4SERVER (no
prefix), while ccheck.sh:1289 already expects/recommends
auth.id=p4_<ServerID> (matching the documented standard) --
the two already disagree with each other today.OrgName has zero presence in any script or config file today
(grep -rin "orgname" across the whole repo hits only docs) --
needs to be introduced from scratch. Natural home looks to be
Server/Unix/setup/mkdirs.cfg:141's existing
MASTER_ID=master.${SDP_INSTANCE} template (add an ORGNAME=
field, make the template conditionally include it).mkrep.sh's commit-ServerID logic
(Server/Unix/p4/common/bin/mkrep.sh:820-850) and confirmed it
does not independently generate a ServerID -- it just
inherits whatever $P4MASTER_ID already is, and has no
dot-splitting logic elsewhere that a longer, OrgName-containing
ServerID (two dots instead of one) would break. Asked the user
whether there was a specific mkrep.sh concern I was missing;
confirmed no real mkrep.sh change is needed -- it inherits
the fix for free once mkdirs.cfg/install_sdp.sh generate the
right MASTER_ID. Real remaining scope is likely
install_sdp.sh (introduce/plumb the OrgName field, prompts,
character-rule guidance) and mkdirs.sh (apply the new
MASTER_ID template). Not yet investigated in depth.Paused here for the night (user's call, end of day Friday) --
no code changes made yet for SDP-1286. Picking back up Monday
(2026-08-31). First things to look at: install_sdp.sh's current
instance-setup flow (where a new ORGNAME prompt/field would fit)
and mkdirs.sh's handling of the MASTER_ID template from
mkdirs.cfg.
Ending here for the week (Friday, 2026-08-28). Very productive day:
fixed the opt_perforce_sdp_backup.service test flakiness (change
33329, validated clean on Rocky 10); cleaned up 11 stray unversioned
sed-artifact -E files; got JIRA access working via the Atlassian
Rovo MCP connector and learned SDP issue tracking now lives there (not
stale P4 jobs); closed out SDP-1350 completely (warning + -Os +
-opt-out-of-security-update, changes 33334/33337); closed
SDP-1323 (already done, just stale bookkeeping) and SDP-1320
(server.startup.autorestart, change 33338, plus filed the
follow-up architectural issue SDP-1383 for ccheck.sh version-awareness,
cross-linked to SDP-1131 and SDP-828); established the P4Blog
changelist-reference convention for closing SDP issues; and got well
into SDP-1286's investigation before pausing for the weekend with no
code changes yet, next steps clear for Monday. Remaining open items:
SDP-1286 implementation, then SDP-1170, SDP-1161, SDP-799 from the
2026.1 features list; the HMS URL fixes once p4-hms is populated;
the pre-release doc-URL 404 audit; and confirming whether any real
deployed AWS infrastructure needs its EBS volume Name tags updated to
match snapshot.sh's new p4depots/p4logs matching.
# Session Log - 2026-08-28
Agent: Claude Code
Model: Claude Sonnet 5 (claude-sonnet-5)
P4 identity used: bot_Claude_Anthropic (except where noted)
## Summary
New day, picking up from `SessionLog-2026-08-27.md`. Refreshed both
Public Depot and PPN tickets to full 24h duration (had to look up the
exact password file path in `P4Info.md` -- `~/pub/.p4passwd.bot_Claude_Anthropic`,
not the path guessed first); confirmed no dangling opened files in
`test-install_sdp`, `p4-sdp_dev_rebrand`, or `p4-sdp_dev_rebrand_bot`.
## Where Things Stand
- **Task 1 (SDP Installer Test Suite): complete.** Full 8-platform fleet
regression run 2026-08-27 came back clean (574/574 on 7 of 8
platforms) except a known, pre-existing, occasionally-flaky test
against `opt_perforce_sdp_backup.service` (confirmed by the user to
predate this project and not be OS-family-specific -- see
`project_opt_perforce_sdp_backup_flaky_test.md` memory).
- **Task 2 (prepare SDP-QA-Gen7): substantially complete.** `lab
qa_build` came back green 2026-08-27 (all 43 scripted tests passed).
- **Task 3 (Docker/Podman/Jenkins test suite): core objective
achieved.** `p4-sdp-build_dev_rebrand` build 81 (auto-triggered via
SCM polling, includes all of 2026-08-27's changes) came back SUCCESS.
- **Task 4 (Implement SDP 2026.1 features): SDP-1379 (rebranding)
essentially complete** as of 2026-08-27 (9 changelists, 33318-33326):
Helix->P4 product rename, HRA->P4RA, full `/hx*` -> `/mnt/p4*`
mount-name rename verified via a clean final sweep. Remaining
SDP-1379 loose ends: HMS URL fixes once the new `p4-hms` depot is
populated (marked `EDITME-UpdateThisURL` for now), and a future
pre-release doc-URL 404 audit (not yet scheduled). 7 more issues
remain on the 2026.1 features list (SDP-1350, 1323, 1320, 1286, 1170,
1161, 799) -- not yet started.
- **Task 5 (Redesign SDP Release Process): not started**, deliberately
deferred until Task 4's features are done.
- **Today's first task**: dig into why the `opt_perforce_sdp_backup.service`
test is occasionally flaky (a `systemctl`/journal timing issue per the
user's read, not a bug in the script itself) and fix the *test*.
## Timeline
1. **Fixed the `opt_perforce_sdp_backup.service` test flakiness**
(today's first task). Root cause: `systemctl start` on the
`Type=oneshot` unit blocks until the script exits, but journald's
indexing of that process's final stdout line can lag slightly behind
-- a pure test-timing race, not a bug in the script. Fix: inserted a
new synchronization step (poll up to 15s for the expected journal
line before proceeding) between the existing "start the service" and
"confirm success in the journal" lines, in both affected test groups
(`LocalInstallSampleDepotDeepCfgChanges`, `BackupRecoveryMultiInstance`)
in `cli_tests.cfg`. Had to use bash process substitution (`<(...)`)
instead of a literal pipe, since `cli_tests.cfg`'s own `|` field
delimiter can't appear inside a Command value. Submitted as change
`33329` in `//test-install_sdp/dev`.
Validated by re-running both affected groups on Rocky 10 (the
machine that failed twice yesterday): **188/188 tests passed, 0
failures**, including both `opt_perforce_sdp_backup.service` checks
that failed before. Confirmed fixed.
2. **Found and deleted 11 stray `-E`-suffixed files** across several
`~/pub` workspace directories (`test-install_sdp`, `hi/dev/src`,
`p4-sdp_dev_rebrand2`, `p4-sdp-dev_rebrand`, `p4-sdp`,
`p4-sdp-build_dev_rebrand`, `sdp/dev/test/sdp`) -- unintentional
backup artifacts from a past `sed -i -E` invocation on macOS (BSD
`sed -i` requires an explicit backup-suffix argument; without it,
the `-E` that follows gets consumed as that argument instead of
enabling extended regex, silently creating a `<file>-E` backup of
every file touched). Confirmed none were ever added to Perforce
before deleting (all showed "no such file(s)"/no depot history).
3. **Discovered SDP-NNNN issue lookups don't work the way I assumed.**
`p4 job -o SDP-1350` (and even `SDP-1379`, which we know is real)
both returned blank "new job" templates -- SDP issue tracking on the
Public Depot moved to JIRA at some point, keeping the same
"SDP-NNNN" naming convention, but the underlying P4 jobs stopped
being updated; `workshop.perforce.com/jobs/SDP-NNNN` links are
similarly stale now (confirmed by the user). Note: this is the
opposite of BSW/PPN jobs, where `p4 job` *is* still the source of
truth. Saved as `reference_job_tracking_sources_of_truth.md` memory.
Started authenticating the Atlassian/JIRA MCP connector
(`claude.ai Atlassian Rovo`) via `/mcp` to get real access -- in
progress, not yet connected.
4. **JIRA connector authenticated** (`claude.ai Atlassian Rovo`, via
`/mcp`). Confirmed working: `perforce.atlassian.net`, cloudId
`2accdbdb-9d65-4c22-b174-5d4a9d437c59`.
5. **Started SDP-1350** ("Adapt to P4D 2026.1 Secure By Default (SBD)
initiative, including warning about behavior changes"). Pulled the
real JIRA issue plus its linked Confluence requirements doc ("2026.1
Secure By Default Requirements", space P4D) for full context:
- Most SBD-affected configurables only change if never explicitly
set by the customer. `security` is the one exception: P4D 2026.1+
unconditionally raises it to at least 4 during upgrade, even for
explicitly-configured lower values (unless already >=4). No
official recovery/downgrade procedure is documented anywhere yet.
- P4D itself is getting a `-xu`-level warning (a separate,
P4D-team deliverable); SDP-1350 is the complementary warning in
the SDP's own `upgrade.sh` wrapper.
- User's design, refined over a few rounds:
- Warning only for now; the `-opt-out-of-security-update` flag
(auto-restore the prior `security` value post-upgrade, via
`p4d -cset` writing directly to db.config -- works even if the
upgrade's own security bump would otherwise lock out normal
`p4 configure set` access) is a deliberate follow-up, to be
completed before 2026.1 ships -- but the warning text should
already reference it as if available.
- New `-Os` override flag (modeled on `-Ov`): if starting
`security` is 0-2, abort by default (meaningful risk of
breaking workflows/access patterns, e.g. public-facing or
anonymous-access servers); if 3, warn only (low risk); if
already >=4, no change (matches p4d's own behavior).
- **Critical requirement**: any abort must be all-or-nothing --
never leave a customer with some binaries upgraded and not
others just because we had enough information up front to know
we'd abort. (Mid-upgrade failures from unexpected errors are a
separate, accepted pre-existing risk, not in scope here.)
Implementation landed in `Server/Unix/p4/common/bin/upgrade.sh`,
inserted right after the existing "to-or-thru P4D 2019.1" milestone
check (same file, same idiom, same nesting) inside the per-binary
analysis loop. Traced through and confirmed the all-or-nothing
requirement is already satisfied by the script's existing
`ErrorCount`/preflight-`bail` architecture -- calling `errmsg()`
(which every other disqualifying condition in this script already
uses, e.g. the `-Od` downgrade check) increments `ErrorCount`, which
triggers a hard `bail` right after the analysis loop, before any
execution loop runs -- so no restructuring was needed, just a
clarifying comment since the dependency isn't obvious on first read.
Added `Server/test/test_Upgrade.py:testUpgradeSBDLowSecurityAborts`
(Docker/Podman suite, Task 3): sets `security=0`, stages 26.1
binaries over a 25.2 instance, asserts the expected warning/abort
messages appear, and -- the key assertion -- that `p4 info` still
reports the *old* version afterward, directly proving the
all-or-nothing guarantee rather than just checking an error was
printed.
Submitted together as change `33334` (implementation + test).
Validation deferred to the next Jenkins auto-build (SCM polls every
10 min) rather than a local container run, per the user's choice.
**Build 82 came back SUCCESS, including change 33334.** Confirmed
the new test genuinely ran and passed (not just an unrelated overall
pass): `test/docker/files/test_sdp.sh:22` runs `python3
/p4/test_Upgrade.py` unconditionally with no args, which invokes
`unittest.main()`'s default discovery over the file's only class --
which now has exactly 2 test methods (the original `testUpgrade`
plus the new one). The build log shows exactly "Ran 2 tests in
57.753s / OK" in the right position in the sequence (right after
`test_SDP.py`'s own "Ran 1 test ... OK"), which can only correspond
to both methods passing. Detailed per-assertion log content wasn't
directly recoverable from the retained Jenkins console log, since
`test_sdp.sh` only `tail`s the debug log file on failure and the
container was auto-removed (`--rm`) after a clean pass -- but the
test-count match plus overall SUCCESS is solid confirmation.
SDP-1350's warning implementation is done, tested, and green.
6. **Implemented the `-opt-out-of-security-update` follow-up**, closing
out SDP-1350 completely. User specified the design precisely:
- Commit-server-only (SERVERID must match P4MASTER_ID), a usage
error via the existing `usage -h "..."` mechanism otherwise --
validated right where `SERVERID`/`P4MASTER_ID` first become
available, just after `p4_vars` sourcing.
- Restore via `p4d -r $P4ROOT "-cset security=<value>"` (writes
directly to db.config, no live connection or auth needed, just
needs to run on the server machine -- already guaranteed for any
SDP upgrade.sh invocation). P4D's own journaling naturally
captures the write; no extra effort needed for that.
- **Quoting gotcha flagged explicitly by the user**: the entire
`-cset name=value` expression must be ONE quoted argument to p4d
(`p4d "-cset security=0"`) -- `p4d -cset "security=0"` is a usage
error. Verified against the official p4d command reference
(confirms `-r` not `-p`, no live connection needed, run on the
server machine) and implemented by building the whole thing as a
single `CSetArg` variable passed as one quoted argument.
- Pedantic by design: prints the exact command and the reason
(`due to '-opt-out-of-security-update'`) before running it.
- Independent/composable with `-Os`: `-Os` lets the upgrade proceed
despite a too-low starting `security`; `-opt-out-of-security-update`
controls whether the value gets restored afterward. Both are
needed together for the Public Depot's own security=0 use case.
Inserted alongside the existing, structurally identical "Upgrade
protections on master if -c was specified" step (same post-restart,
master-only, live-`$P4BIN`-adjacent shape) -- found via a quick
research pass confirming exactly where p4d is confirmed back up and
responsive after the restart phase. Submitted as change `33337`.
**SDP-1350 is now fully complete** (warning, abort/override gate,
and the opt-out restore flag, plus its automated test).
7. **Moved to SDP-1323** ("Changed default P4 version in
get_p4_binaries.sh to r26.1"). Turned out to be already done in the
code -- `p4_binaries/get_p4_binaries.sh:40`'s `DefaultP4Version` was
set to `r26.1` back in change 32482 (2026-03-21), well before this
project started; confirmed no other script has its own hardcoded
default version needing the same bump. Just stale JIRA bookkeeping.
**New convention established**: when closing an SDP JIRA issue, also
set its `P4Blog` custom field (`customfield_10231`) to a
`workshop.perforce.com/changes/<CL>` URL for a representative
changelist -- a deliberately weak, low-effort substitute for real
`p4 fix` associations (not available here), so no need for
completeness if multiple CLs were involved, just pick one
representative one. `P4Blog` is a rich-text field requiring
Atlassian Document Format to edit via API, not a plain string.
Saved as `reference_jira_p4blog_convention.md` memory. Closed
SDP-1323 (`P4Blog` -> change 32482) and, since it was also fully
done, SDP-1350 too (`P4Blog` -> change 33337, the final/most-complete
of its two changelists) via the `Close` transition (id 2, lands on
status `Closed`, category `Done`).
8. **Moved to SDP-1320** ("New best practice: Set
server.startup.autorestart=1 for P4D is 2026.1+"). Ticket had an
explicit blocker noted in its own description: "We should not ship
this SDP change until P4-7318 is fixed." Checked P4-7318 first --
Closed/Fixed, fixVersion 2026.1 (released 2026-07-01) -- so unblocked.
Investigated `configurables.cfg`'s format
(`Profile|Configurable|ExpectedValue|CompareStyle|Optionality|ServerIDType|SetNotes`)
and found it has no way to express "only applies to P4D version X+."
`ccheck.sh` only handles this today via ad-hoc bespoke code (a
dedicated skip-function for `filesys.*.min`, and inline per-configurable
special-casing for `security`) -- no generic mechanism. Discussed
this with the user as a known, deliberately-deferred limitation (not
easy to fix without hurting readability; only a few configurables
need it, and the gating needed can be complex -- major version,
patch level, or simple "available as of X"). Agreed plan:
- Ship the simple fix now: add the configurable to `configurables.cfg`
marked **`Recommended`** (not `Required`, my suggestion, user
agreed) so pre-2026.1 servers get a soft warning instead of an
incorrect hard failure; add real `P4D_VERSION`-gated logic (matching
`configure_new_server.sh`'s own existing idiom for this, e.g. the
`server.rolechecks`/2011.1 precedent) to `configure_new_server.sh`
and `.bat` (`.bat` gated unconditionally -- no version-gating
infra exists there at all, and Windows/Linux parity was never a
goal for install scripts).
- File a new JIRA for the real architectural fix (enhance
`ccheck.sh`/`configurables.cfg` to be P4D-version-aware in general,
then port `configure_new_server.sh`'s existing version-gating logic
into that format, eventually letting `upgrade.sh` call
`ccheck.sh -FIX -y` instead of maintaining separate logic) --
**created SDP-1383**. Cross-referenced (`Relates`) with SDP-1131
("ccheck.sh support for checking configurables of replicas/edge"),
the same underlying config-format-expressiveness gap. Linked
SDP-1383 as `Blocks` SDP-828 ("Enhance upgrade.sh to safely apply
new best practice configurables," the existing "upgrade.sh should
call ccheck.sh" issue) and updated SDP-828's description to note
the new gating explicitly, per the user's request.
Implemented and submitted as change `33338`. Closed SDP-1320
(`P4Blog` -> change 33338).
9. **Set SDP-1383's `Fix versions` to "Priority Backlog"** per the
user: this signals "we intend to do this, not sure when" -- a step
above a plain Open issue ("we'll think about it") but short of
assigning a numbered release (which signals actual planned timing).
Confirmed it's a pre-existing valid version in the SDP project
(description: "Open issues not assigned to a release but higher
priority than other generally open issues").
10. **Started SDP-1286** ("Update default auth.id=p4_<CommitServerID>;
ServerID=commit[.<OrgName>].<SDPInstance>"). Per the JIRA
description, touches `install_sdp.sh`, `sdp_install.cfg` (generated),
`configure_new_server.sh`, `mkdirs.sh`, the SDP Guide doc, and
`mkrep.sh`. Investigated before implementing:
- The `{commit|master}[.<OrgName>[.<SDPInstance>]]` naming
standard is **already fully documented**
(`doc/SDP_Guide.Unix.adoc:3505-3538`, "Commit Server Spec"
section) from a prior doc-only issue, SDP-1167 -- character
rules, length recommendations, and an `auth.id` TIP already
written. So the doc may need only a small clarifying update
(e.g. stating the actual chosen default once implemented), not a
rewrite.
- **Found a real, pre-existing bug independent of OrgName**:
`configure_new_server.sh:800` sets `auth.id=$P4SERVER` (no
prefix), while `ccheck.sh:1289` already expects/recommends
`auth.id=p4_<ServerID>` (matching the documented standard) --
the two already disagree with each other today.
- `OrgName` has zero presence in any script or config file today
(`grep -rin "orgname"` across the whole repo hits only docs) --
needs to be introduced from scratch. Natural home looks to be
`Server/Unix/setup/mkdirs.cfg:141`'s existing
`MASTER_ID=master.${SDP_INSTANCE}` template (add an `ORGNAME=`
field, make the template conditionally include it).
- Traced `mkrep.sh`'s commit-ServerID logic
(`Server/Unix/p4/common/bin/mkrep.sh:820-850`) and confirmed it
does **not** independently generate a ServerID -- it just
inherits whatever `$P4MASTER_ID` already is, and has no
dot-splitting logic elsewhere that a longer, OrgName-containing
ServerID (two dots instead of one) would break. Asked the user
whether there was a specific `mkrep.sh` concern I was missing;
**confirmed no real `mkrep.sh` change is needed** -- it inherits
the fix for free once `mkdirs.cfg`/`install_sdp.sh` generate the
right `MASTER_ID`. Real remaining scope is likely
`install_sdp.sh` (introduce/plumb the `OrgName` field, prompts,
character-rule guidance) and `mkdirs.sh` (apply the new
`MASTER_ID` template). Not yet investigated in depth.
**Paused here for the night** (user's call, end of day Friday) --
no code changes made yet for SDP-1286. Picking back up Monday
(2026-08-31). First things to look at: `install_sdp.sh`'s current
instance-setup flow (where a new `ORGNAME` prompt/field would fit)
and `mkdirs.sh`'s handling of the `MASTER_ID` template from
`mkdirs.cfg`.
## Wrap-Up
Ending here for the week (Friday, 2026-08-28). Very productive day:
fixed the `opt_perforce_sdp_backup.service` test flakiness (change
`33329`, validated clean on Rocky 10); cleaned up 11 stray unversioned
`sed`-artifact `-E` files; got JIRA access working via the Atlassian
Rovo MCP connector and learned SDP issue tracking now lives there (not
stale P4 jobs); closed out SDP-1350 completely (warning + `-Os` +
`-opt-out-of-security-update`, changes `33334`/`33337`); closed
SDP-1323 (already done, just stale bookkeeping) and SDP-1320
(`server.startup.autorestart`, change `33338`, plus filed the
follow-up architectural issue SDP-1383 for ccheck.sh version-awareness,
cross-linked to SDP-1131 and SDP-828); established the `P4Blog`
changelist-reference convention for closing SDP issues; and got well
into SDP-1286's investigation before pausing for the weekend with no
code changes yet, next steps clear for Monday. Remaining open items:
SDP-1286 implementation, then SDP-1170, SDP-1161, SDP-799 from the
2026.1 features list; the HMS URL fixes once `p4-hms` is populated;
the pre-release doc-URL 404 audit; and confirming whether any real
deployed AWS infrastructure needs its EBS volume Name tags updated to
match `snapshot.sh`'s new `p4depots`/`p4logs` matching.
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 33339 | Claude (AI Agent by Anthropic) |
Session log for 2026-08-28: fixed opt_perforce_sdp_backup.service test flakiness (33329, validated on Rocky 10); cleaned up 11 stray sed -E artifact files; got JIRA (Atlassian Rovo MCP) access working; closed out SDP-1350 (33334/33337), SDP-1323, and SDP-1320 (33338, plus filed follow-up SDP-1383 for ccheck.sh version-awareness, cross-linked to SDP-1131/SDP-828); established the P4Blog changelist-reference convention for closing SDP issues; started SDP-1286 investigation, paused for the weekend with no code changes yet. Agent: Claude Code, model claude-sonnet-5. |