Agent: Claude Code Model: Claude Sonnet 5 (claude-sonnet-5) P4 identity used: bot_Claude_Anthropic (except where noted)
Note on dates: this log was opened picking up from SessionLog-2026-08-28.md,
but the conversation ran continuously (no session restart) across several
calendar days, finally wrapping up on 2026-08-31. Rather than guess false
day-boundaries inside one continuous conversation, this single file covers
the whole span. Tomorrow's work should start a fresh SessionLog-2026-09-01.md
(or whatever date it actually is) per the usual convention.
Refreshed both Public Depot and PPN tickets to full 24h duration at the
start. Completed the remaining Task 4 (Implement SDP 2026.1 features) work:
SDP-1286, SDP-1161, SDP-799, and SDP-1379 all investigated, implemented,
verified, and closed. Also did a fair amount of adjacent cleanup and
infrastructure work discovered along the way (test fleet trap, BSW lab
client config, doc URL strategy). Task 4 is now done except for SDP-1170
(deliberately deferred). Task 5 (Redesign SDP Release Process) is next,
starting with //p4-sdp/dev_rebrand/doc/ReleaseProcessOverview.md.
//p4-sdp/dev_rebrand/doc/ReleaseProcessOverview.md.p4-hms depot population..p4ignore in the product
tree -- HMS relies on in-situ versioning in production, so a blanket
ignore could interfere with that. If revisited, use a differently
named ignore file (e.g. .p4ignore.SDP_QA) scoped to the lab, not a
plain .p4ignore.snapshot.sh's p4depots/p4logs
matching -- still not confirmed against real deployed infrastructure.Investigation (carried over from 2026-08-28) found three disagreeing
patterns for the auth.id default across configure_new_server.sh,
ccheck.sh's advice text, and the SDP Guide doc's own TIP. User resolved
it: the doc's p4_[<OrgName>.]<SDPInstance> pattern is correct. Implemented:
p4_vars.template: new ORGNAME export (blank default).mkdirs.cfg/mkdirs.sh: new ORGNAME= field, MASTER_ID default made
OrgName-aware (master.${ORGNAME:+${ORGNAME}.}${SDP_INSTANCE}).configure_new_server.sh: auth.id default now OrgName-aware,
independent of $P4SERVER (which stays a fixed p4_<instance>
shorthand used elsewhere for filenames/log tags -- changing it would
have broken those other uses).install_sdp.sh: new Config['OrgName']/ConfigDoc['OrgName'], wired
into generated mkdirs.<N>.cfg.ccheck.sh: fixed auth.id auto-fix advice, which had been wrong
(based on P4MASTER_ID, not ORGNAME/SDPInstance).auth.id TIP in SDP_Guide.Unix.adoc to note the
cross-organization p4 push/p4 fetch collision-avoidance benefit.LocalInstallOrgNameDefaults test group to
//test-install_sdp/dev/cli_tests.cfg.mkrep.sh changes needed (confirmed with user -- it just inherits
$P4MASTER_ID).Changes: 33366 (main implementation), 33369 (test fix -- switched a live
p4 configure show check to a log-based check, since a -local -init
install doesn't leave bruno/jam_ws reachable the way the generic p4
test-harness substitution assumes).
While validating SDP-1286, found the AWS install-sdp test fleet has TWO
generations of machines: an old/Classic one (ssh-install_sdp-test-*
wrapper scripts, meaningful hostnames like p4d-test-r10-01, DVCS remotes
pointing at stale personal/Classic guest depot paths) and a new/correct
one (ssh-test-install_sdp-* wrappers, untouched AWS-default ip-...
hostnames, DVCS remotes correctly mapping to //test-install_sdp/dev/...
and //p4-sdp/dev_rebrand/...). Running against the old fleet silently
tests stale code with no error. Updated the install-sdp-test-suite-run
skill with a prominent warning and the 3 ways to tell the fleets apart.
Also fixed the actual root cause of a hostname/timezone hygiene gap:
bootstrap_test_machine.sh -host <hostname> already sets both hostname
and America/Los_Angeles timezone (so Public Depot submit timestamps
aren't skewed) -- it just hadn't been run with -host for the new fleet.
Applied it manually to all 7 new-fleet boxes (r8/r9/r10/sles15/u22/u24/u26).
Side effect: new and old fleets now share the same hostnames (confirmed
fine with the user -- hostname was never the reliable way to tell them
apart anyway; the wrapper script name and p4 remote -o origin check are).
Found the $Id:$/$Change:$ RCS-keyword VersionID Block mechanism was
already implemented for most scripts. Finished the rollout:
gen_p4dtg_env.sh,
p4login, p4p_base, p4broker_base, p4d_base, run.lib) to the
block, adding the +k filetype where missing.verify_sdp.sh had
stale leftover declare Version= lines; os_tweaks.sh had a duplicate
dead comment-only block).testUpgradeSBDLowSecurityAborts-style regression test earlier
in the week for SDP-1350; for this ticket, verified via -V output on
the real fleet post-fetch that keyword expansion resolves correctly
(e.g. DEV_REBRAND.33368).Change: 33368.
.lib files'
VersionID blocks were real declare statements, which silently
clobber the sourcing script's own $Version/$VersionID (confirmed
by direct test: sourcing utils.lib overwrote a script's own already-set
$Version). Converted all sourced library files (the 6 new ones, plus
retroactively run.lib) to a comment-only marker instead -- grep-able
by show_versions(), never executed, so no clobbering risk.libcore.sh's show_versions() (used by the legacy
mkrep.sh/clear_depot_Map_fields.sh via $BASH_LIBS) to parse the
comment-only marker and to auto-detect a script's sourced .lib files
by grepping its own source lines, rather than trusting a
manually-maintained list.libcore.sh/p4u_env.sh/libp4u.sh are a
separate, legacy, parallel library mechanism to the newer *.lib
files -- predates it, incompatible with it, still used by a couple of
scripts, and NOT something to extend or document as current guidance.
Added show_versions() to utils.lib instead (the new-mechanism home),
reusing the same auto-detection logic. Wired ccheck.sh and
configure_new_server.sh to also source utils.lib and call
show_versions() on -V/--version (previously just printed their own
$Version); opt_perforce_sdp_backup.sh already sourced utils.lib,
just needed its -V handler updated the same way.configure_new_server.sh:
its own VersionID block had been left comment-only by mistake (unlike a
library, it isn't sourced by anything, so it just needed to be a real
declare) -- its -V was printing an empty version.ShowVersions cli_tests.cfg test group (fast, no-install-required,
exercises -V/--version on every script that supports it) to
//test-install_sdp/dev/cli_tests.cfg, validated on the real fleet
(8/8 pass in ~1 second).Changes: 33371 (lib fixes + libcore.sh + doc), 33372 (configure_new_server.sh
-V bug fix), 33373 (ShowVersions test group), 33374 (utils.lib
show_versions() + wiring).
Investigated all 5 checklist items against the real codebase rather than
assuming. 3 of 5 were already fully done (docs, Helix Swarm->P4 Code
Review, helix_binaries->p4_binaries, mount points). Found 2 real gaps:
doc/gen/sdp_install.cfg (a checked-in generated artifact) was stale,
predating the rebrand entirely -- regenerated it directly from
install_sdp.sh -C.swarm.workshop.perforce.com URLs remained in scripts/libs/
docs (the old Classic-depot domain+path), not yet swapped to
workshop.perforce.com/view/p4-sdp/main/.... Fixed all of them except
one (a P4Survey link in P4_Server_Overview.md -- different project,
migration status unknown, left alone rather than guessed).Changes: 33376 (URL sweep), 33377 (doc/gen regen).
User raised: now that SDP is in Streams, internal doc-to-doc (and doc-to-script) cross-references should become relative links instead of absolute URLs pinned to a stream, so they "just work" under whatever release a reader is viewing, without per-release hand-editing. Validated the idea for real before committing to it broadly:
/view/<stream>/<depot-path> URL structure mirrors
the depot tree 1:1 per stream, so relative links (including doc-to-script)
resolve correctly under any stream.//p4-sdp/main isn't populated yet -- had to verify against
//p4-sdp/dev_rebrand instead; user confirmed this is a valid proxy
(main will work the same way once populated).SDP_CodingStandard_bash.adoc, verified
locally with asciidoctor, then did the full remaining sweep across
SDP_Win2Linux_Guide.adoc, SDP_MigrationAndUpgradeGuide.adoc,
SDP_Legacy_Upgrades.Unix.adoc (9 links total).SDP_Guide.Windows.html#_instance, should be #_instance_names) that
had been hiding behind an unclickable absolute URL. Fixed.SDP_Guide.Windows.html itself (found ~5 months stale relative to its
own .adoc source -- exactly how the broken anchor went unnoticed).curl download URL alone -- those need to stay absolute (no renderer
to resolve a relative path against; a curl command needs a real URI).Documentation= fields also need to stay
absolute (systemd doesn't support relative paths there), but should be
hard-coded to /main/ rather than pinned per-release, since they don't
want to touch service files every release. Found and fixed 10 such
fields across both the real deployed *.service.t templates (which an
initial narrower search had missed -- wrong file extension) and the
illustrative sample files/README.Changes: 33378 (systemd Documentation= fields), 33379 (relative link sweep + regenerated HTML + broken anchor fix).
User asked for an honest assessment of whether the DRAFT tag could come off now that its original blocking reason (reliance on Streams) was resolved. Found and fixed several real rough edges before dropping DRAFT:
terminate() always
comes from logging.lib, never defined locally -- but install_sdp.sh
and mkdirs.sh both define their own local terminate() by deliberate
design (they source no SDP libraries at all). Added an explicit,
permanent exception rather than leaving an inaccurate blanket rule. Per
user: it's fine for the standard to describe a target some scripts
don't meet yet (e.g. the exec/tee logging standardization, SDP-568,
deferred to 2026.2) -- but that's different from a permanent, correct
design choice being mis-stated as universal.bash -n on every file, before
ShellCheck) -- previously only practiced, never written down.# shellcheck disable=SC2072 for
lexicographic version-string comparison).doc/SDP_CodingStandard_bash.html for the first time (never
existed before).Change: 33380.
User specifically worried about order-of-operations bugs around the SDP
Library Functions block relative to command-line parsing and p4_vars
sourcing (having "struggled to get it right" in real scripts). Checked
directly: the placement was already correct and already matched the best
real scripts (configure_new_server.sh/ccheck.sh) -- libraries have no
top-level executable code outside function definitions, so sourcing them
early (before parsing, before p4_vars) is safe, and p4_vars is
correctly sourced only after parsing completes in both the template and
the real scripts.
Found two different, real, concrete bugs instead:
-i <sdp_instance> option (including its
default-value behavior) that the command-line parsing case statement
never actually implemented. Added the missing case.-V/--version still used the old one-line $Version display instead
of utils.lib/show_versions(). Fixed and verified end-to-end (-V
correctly lists the script plus all 3 sourced libs; -i correctly
propagates through to the source "$SDPEnv" call).Change: 33381.
p4 sync clobber fixUser hit "Can't clobber writable file" running the qa alias's
p4 -s sync on p4c-bos-01. Root cause found in
//BattleSchool/Gen7/labscripts/qa/swap_insitu_source.sh: its
brand-new-client-creation branch only set Root/Type explicitly, so
Options fell through to p4's default noclobber template -- this
client's files are writable (a live, mutable SDP install), so p4 sync
correctly refused to overwrite them. Not a doc gap (no separate
"how to set up the workspace" doc exists; the script is the sole source
of truth) -- fixed the script to also set Options=... clobber ... when
creating a brand-new client, and added a short note to
SDP-QA-LabEnvironment.adoc. Change: 2763686 (//BattleSchool/Gen7).
User set clobber manually on the already-existing broken client
(bot_SDP_QA.p4c-bos-01.SDP_QA_dev_rebrand) themselves, since the fix
only prevents the bug for future brand-new clients.
Also found and deleted genuine stale cruft while investigating a
follow-up qa sync run: test/docker/Dockerfile.rocky9.base and
.sdp on p4c-bos-01 were leftover local files predating an upstream
consolidation into a single Dockerfile.rocky9 (change 33267 by a
colleague, 2026-08-25) -- confirmed nothing references the old names
anymore, deleted them from the lab machine.
Closed (with P4Blog set to a representative changelist, per established
convention): SDP-1286, SDP-1161, SDP-799, SDP-1379. Created SDP-1384
(Priority Backlog, linked Relates to SDP-799). Rovo/Atlassian MCP
write access dropped to read-only mid-session with no visible error until
a write call failed -- added a check for this to the "P4 Session Start
Situational Awareness" section of P4Info.md so future sessions catch it
proactively (change 33370).
Gave the user a Slack-formatted status update (zoom-in on the 8 JIRA issues, zoom-out on the 5 original Tasks) partway through wrap-up.
Task 4 is done (all 7 tracked issues closed; SDP-1170 deliberately
deferred). Next session: start Task 5 (Redesign SDP Release Process),
beginning with //p4-sdp/dev_rebrand/doc/ReleaseProcessOverview.md.
# Session Log - 2026-08-29 (continued through 2026-08-31)
Agent: Claude Code
Model: Claude Sonnet 5 (claude-sonnet-5)
P4 identity used: bot_Claude_Anthropic (except where noted)
Note on dates: this log was opened picking up from `SessionLog-2026-08-28.md`,
but the conversation ran continuously (no session restart) across several
calendar days, finally wrapping up on 2026-08-31. Rather than guess false
day-boundaries inside one continuous conversation, this single file covers
the whole span. Tomorrow's work should start a fresh `SessionLog-2026-09-01.md`
(or whatever date it actually is) per the usual convention.
## Summary
Refreshed both Public Depot and PPN tickets to full 24h duration at the
start. Completed the remaining Task 4 (Implement SDP 2026.1 features) work:
SDP-1286, SDP-1161, SDP-799, and SDP-1379 all investigated, implemented,
verified, and closed. Also did a fair amount of adjacent cleanup and
infrastructure work discovered along the way (test fleet trap, BSW lab
client config, doc URL strategy). Task 4 is now done except for SDP-1170
(deliberately deferred). Task 5 (Redesign SDP Release Process) is next,
starting with `//p4-sdp/dev_rebrand/doc/ReleaseProcessOverview.md`.
## Where Things Stand
- **Task 1 (SDP Installer Test Suite): complete.**
- **Task 2 (prepare SDP-QA-Gen7): substantially complete.**
- **Task 3 (Docker/Podman/Jenkins test suite): core objective achieved.**
- **Task 4 (Implement SDP 2026.1 features): done**, except SDP-1170
(deliberately deferred, see below). All 7 other tracked issues closed:
SDP-1350, SDP-1323, SDP-1320, SDP-1286, SDP-1161, SDP-799, SDP-1379.
- **Task 5 (Redesign SDP Release Process): starting next session.**
Starting point: `//p4-sdp/dev_rebrand/doc/ReleaseProcessOverview.md`.
- **Open/deferred, not urgent**:
- SDP-1170 (Migrate Classic->Streams URLs/redirects) -- open, not
started, deliberately deferred as better suited to the Task 5 work.
- SDP-1383 (Priority Backlog) -- ccheck.sh/configurables.cfg P4D
version-awareness, cross-linked to SDP-1131 and SDP-828.
- SDP-1384 (Priority Backlog, new this session) -- extend SDP-799's
version-identification mechanism to Python/Perl scripts (currently
exempt for 2026.1). Draft Python/Perl idiom captured in the ticket.
- SDP-1050 -- overhaul of p4dstate.sh/p4pstate.sh/p4brokerstate.sh,
referenced as the reason those 3 scripts stay exempt from the
Version ID Block requirement for now.
- SDP-568 -- "Standardize logging method to exec & tee" -- explicitly
NOT for 2026.1, too risky/intense this close to release; earmarked
for 2026.2, likely bundled with paying off the legacy
libcore.sh/p4u_env.sh vs. newer *.lib mechanism split (see below).
- HMS URL fixes pending `p4-hms` depot population.
- A P4IGNORE strategy for BSW-lab-only generated local files (e.g.
P4Topology.cfg, crontabs, upgrade.disabled/* hooks) was discussed but
explicitly NOT implemented as generic `.p4ignore` in the product
tree -- HMS relies on in-situ versioning in production, so a blanket
ignore could interfere with that. If revisited, use a differently
named ignore file (e.g. `.p4ignore.SDP_QA`) scoped to the lab, not a
plain `.p4ignore`.
- AWS EBS Name-tag question for `snapshot.sh`'s `p4depots`/`p4logs`
matching -- still not confirmed against real deployed infrastructure.
## Timeline
### SDP-1286: OrgName-aware auth.id/ServerID defaults (closed)
Investigation (carried over from 2026-08-28) found three disagreeing
patterns for the `auth.id` default across `configure_new_server.sh`,
`ccheck.sh`'s advice text, and the SDP Guide doc's own TIP. User resolved
it: the doc's `p4_[<OrgName>.]<SDPInstance>` pattern is correct. Implemented:
- `p4_vars.template`: new `ORGNAME` export (blank default).
- `mkdirs.cfg`/`mkdirs.sh`: new `ORGNAME=` field, `MASTER_ID` default made
OrgName-aware (`master.${ORGNAME:+${ORGNAME}.}${SDP_INSTANCE}`).
- `configure_new_server.sh`: `auth.id` default now OrgName-aware,
independent of `$P4SERVER` (which stays a fixed `p4_<instance>`
shorthand used elsewhere for filenames/log tags -- changing it would
have broken those other uses).
- `install_sdp.sh`: new `Config['OrgName']`/`ConfigDoc['OrgName']`, wired
into generated `mkdirs.<N>.cfg`.
- `ccheck.sh`: fixed `auth.id` auto-fix advice, which had been wrong
(based on `P4MASTER_ID`, not `ORGNAME`/`SDPInstance`).
- Doc: expanded the `auth.id` TIP in `SDP_Guide.Unix.adoc` to note the
cross-organization `p4 push`/`p4 fetch` collision-avoidance benefit.
- Added `LocalInstallOrgNameDefaults` test group to
`//test-install_sdp/dev/cli_tests.cfg`.
- No `mkrep.sh` changes needed (confirmed with user -- it just inherits
`$P4MASTER_ID`).
Changes: 33366 (main implementation), 33369 (test fix -- switched a live
`p4 configure show` check to a log-based check, since a `-local -init`
install doesn't leave `bruno`/`jam_ws` reachable the way the generic `p4 `
test-harness substitution assumes).
### Test fleet trap discovered and fixed
While validating SDP-1286, found the AWS install-sdp test fleet has TWO
generations of machines: an old/Classic one (`ssh-install_sdp-test-*`
wrapper scripts, meaningful hostnames like `p4d-test-r10-01`, DVCS remotes
pointing at stale personal/Classic guest depot paths) and a new/correct
one (`ssh-test-install_sdp-*` wrappers, untouched AWS-default `ip-...`
hostnames, DVCS remotes correctly mapping to `//test-install_sdp/dev/...`
and `//p4-sdp/dev_rebrand/...`). Running against the old fleet silently
tests stale code with no error. Updated the `install-sdp-test-suite-run`
skill with a prominent warning and the 3 ways to tell the fleets apart.
Also fixed the actual root cause of a hostname/timezone hygiene gap:
`bootstrap_test_machine.sh -host <hostname>` already sets both hostname
and `America/Los_Angeles` timezone (so Public Depot submit timestamps
aren't skewed) -- it just hadn't been run with `-host` for the new fleet.
Applied it manually to all 7 new-fleet boxes (r8/r9/r10/sles15/u22/u24/u26).
Side effect: new and old fleets now share the same hostnames (confirmed
fine with the user -- hostname was never the *reliable* way to tell them
apart anyway; the wrapper script name and `p4 remote -o origin` check are).
### SDP-1161: Replace script version numbers with RCS keywords (closed)
Found the `$Id:$`/`$Change:$` RCS-keyword VersionID Block mechanism was
already implemented for most scripts. Finished the rollout:
- Migrated the last 6 un-migrated executables (`gen_p4dtg_env.sh`,
`p4login`, `p4p_base`, `p4broker_base`, `p4d_base`, `run.lib`) to the
block, adding the `+k` filetype where missing.
- Cleaned up 2 files with dead pre-migration cruft (`verify_sdp.sh` had
stale leftover `declare Version=` lines; `os_tweaks.sh` had a duplicate
dead comment-only block).
- Added a `testUpgradeSBDLowSecurityAborts`-style regression test earlier
in the week for SDP-1350; for this ticket, verified via `-V` output on
the real fleet post-fetch that keyword expansion resolves correctly
(e.g. `DEV_REBRAND.33368`).
Change: 33368.
### SDP-799: Capture SDP version in script output (closed)
- Discovered and fixed a real bug: the 6 newly-migrated `.lib` files'
VersionID blocks were real `declare` statements, which silently
clobber the *sourcing script's* own `$Version`/`$VersionID` (confirmed
by direct test: sourcing `utils.lib` overwrote a script's own already-set
`$Version`). Converted all sourced library files (the 6 new ones, plus
retroactively `run.lib`) to a comment-only marker instead -- `grep`-able
by `show_versions()`, never executed, so no clobbering risk.
- Rewrote `libcore.sh`'s `show_versions()` (used by the legacy
`mkrep.sh`/`clear_depot_Map_fields.sh` via `$BASH_LIBS`) to parse the
comment-only marker and to auto-detect a script's sourced `.lib` files
by grepping its own `source` lines, rather than trusting a
manually-maintained list.
- Realized (per user) that `libcore.sh`/`p4u_env.sh`/`libp4u.sh` are a
**separate, legacy, parallel library mechanism** to the newer `*.lib`
files -- predates it, incompatible with it, still used by a couple of
scripts, and NOT something to extend or document as current guidance.
Added `show_versions()` to `utils.lib` instead (the new-mechanism home),
reusing the same auto-detection logic. Wired `ccheck.sh` and
`configure_new_server.sh` to also source `utils.lib` and call
`show_versions()` on `-V`/`--version` (previously just printed their own
`$Version`); `opt_perforce_sdp_backup.sh` already sourced `utils.lib`,
just needed its `-V` handler updated the same way.
- Along the way, found and fixed a real bug in `configure_new_server.sh`:
its own VersionID block had been left comment-only by mistake (unlike a
library, it isn't sourced by anything, so it just needed to be a real
`declare`) -- its `-V` was printing an empty version.
- Added a `ShowVersions` cli_tests.cfg test group (fast, no-install-required,
exercises `-V`/`--version` on every script that supports it) to
`//test-install_sdp/dev/cli_tests.cfg`, validated on the real fleet
(8/8 pass in ~1 second).
- Filed SDP-1384 (Priority Backlog) to extend this to Python/Perl, out of
scope for 2026.1.
Changes: 33371 (lib fixes + libcore.sh + doc), 33372 (configure_new_server.sh
`-V` bug fix), 33373 (ShowVersions test group), 33374 (utils.lib
show_versions() + wiring).
### SDP-1379: Rebranding from Helix back to P4 for SDP (closed)
Investigated all 5 checklist items against the real codebase rather than
assuming. 3 of 5 were already fully done (docs, Helix Swarm->P4 Code
Review, `helix_binaries`->`p4_binaries`, mount points). Found 2 real gaps:
- `doc/gen/sdp_install.cfg` (a checked-in generated artifact) was stale,
predating the rebrand entirely -- regenerated it directly from
`install_sdp.sh -C`.
- 11 real, live `swarm.workshop.perforce.com` URLs remained in scripts/libs/
docs (the old Classic-depot domain+path), not yet swapped to
`workshop.perforce.com/view/p4-sdp/main/...`. Fixed all of them except
one (a P4Survey link in `P4_Server_Overview.md` -- different project,
migration status unknown, left alone rather than guessed).
Changes: 33376 (URL sweep), 33377 (doc/gen regen).
### Doc URL strategy: relative links (new initiative, pilot + partial sweep done)
User raised: now that SDP is in Streams, internal doc-to-doc (and
doc-to-script) cross-references should become relative links instead of
absolute URLs pinned to a stream, so they "just work" under whatever
release a reader is viewing, without per-release hand-editing. Validated
the idea for real before committing to it broadly:
- Confirmed Workshop's `/view/<stream>/<depot-path>` URL structure mirrors
the depot tree 1:1 per stream, so relative links (including doc-to-script)
resolve correctly under any stream.
- IMPORTANT: `//p4-sdp/main` isn't populated yet -- had to verify against
`//p4-sdp/dev_rebrand` instead; user confirmed this is a valid proxy
(main will work the same way once populated).
- Piloted the conversion in `SDP_CodingStandard_bash.adoc`, verified
locally with `asciidoctor`, then did the full remaining sweep across
`SDP_Win2Linux_Guide.adoc`, `SDP_MigrationAndUpgradeGuide.adoc`,
`SDP_Legacy_Upgrades.Unix.adoc` (9 links total).
- Verification caught a genuine pre-existing broken anchor
(`SDP_Guide.Windows.html#_instance`, should be `#_instance_names`) that
had been hiding behind an unclickable absolute URL. Fixed.
- Regenerated the checked-in HTML for all touched docs plus
`SDP_Guide.Windows.html` itself (found ~5 months stale relative to its
own `.adoc` source -- exactly how the broken anchor went unnoticed).
- Left script-embedded comment URLs (e.g. LICENSE header lines) and a
`curl` download URL alone -- those need to stay absolute (no renderer
to resolve a relative path against; a `curl` command needs a real URI).
- Per user: systemd unit `Documentation=` fields also need to stay
absolute (systemd doesn't support relative paths there), but should be
hard-coded to `/main/` rather than pinned per-release, since they don't
want to touch service files every release. Found and fixed 10 such
fields across both the real deployed `*.service.t` templates (which an
initial narrower search had missed -- wrong file extension) and the
illustrative sample files/README.
Changes: 33378 (systemd Documentation= fields), 33379 (relative link
sweep + regenerated HTML + broken anchor fix).
### SDP Bash Coding Standard: DRAFT status removed
User asked for an honest assessment of whether the DRAFT tag could come
off now that its original blocking reason (reliance on Streams) was
resolved. Found and fixed several real rough edges before dropping DRAFT:
- Removed a duplicate DRAFT NOTICE section (appeared both at the top and
again as a bottom appendix).
- Reconciled the Bash Version section, which gave 3 different version
floors in 3 sentences (4.3+, 3.x/4.x, 4.0+) -- settled on bash 4.0+,
tied to actual language features already relied on (associative arrays,
case-conversion parameter expansion), and consistent with the doc's own
claim that RHEL 7 (bash 4.2) is supported.
- Fixed a factually wrong "must": the doc claimed `terminate()` always
comes from `logging.lib`, never defined locally -- but `install_sdp.sh`
and `mkdirs.sh` both define their own local `terminate()` by deliberate
design (they source no SDP libraries at all). Added an explicit,
permanent exception rather than leaving an inaccurate blanket rule. Per
user: it's fine for the standard to describe a target some scripts
don't meet yet (e.g. the exec/tee logging standardization, SDP-568,
deferred to 2026.2) -- but that's different from a permanent, correct
design choice being mis-stated as universal.
- Added a "Syntax Checking" requirement (`bash -n` on every file, before
ShellCheck) -- previously only practiced, never written down.
- Confirmed ShellCheck 0.10.0 (already the doc's stated floor) matches
what's actually installed/used -- no change needed there.
- Populated the previously-empty ShellCheck appendix with a real example
from this session's own work (`# shellcheck disable=SC2072` for
lexicographic version-string comparison).
- Generated `doc/SDP_CodingStandard_bash.html` for the first time (never
existed before).
Change: 33380.
### template.sh brought up to par
User specifically worried about order-of-operations bugs around the SDP
Library Functions block relative to command-line parsing and `p4_vars`
sourcing (having "struggled to get it right" in real scripts). Checked
directly: the placement was already correct and already matched the best
real scripts (`configure_new_server.sh`/`ccheck.sh`) -- libraries have no
top-level executable code outside function definitions, so sourcing them
early (before parsing, before `p4_vars`) is safe, and `p4_vars` is
correctly sourced only after parsing completes in both the template and
the real scripts.
Found two different, real, concrete bugs instead:
- The usage text documented a `-i <sdp_instance>` option (including its
default-value behavior) that the command-line parsing `case` statement
never actually implemented. Added the missing case.
- `-V`/`--version` still used the old one-line `$Version` display instead
of `utils.lib`/`show_versions()`. Fixed and verified end-to-end (`-V`
correctly lists the script plus all 3 sourced libs; `-i` correctly
propagates through to the `source "$SDPEnv"` call).
Change: 33381.
### BSW Gen7 lab: `p4 sync` clobber fix
User hit "Can't clobber writable file" running the `qa` alias's
`p4 -s sync` on `p4c-bos-01`. Root cause found in
`//BattleSchool/Gen7/labscripts/qa/swap_insitu_source.sh`: its
brand-new-client-creation branch only set `Root`/`Type` explicitly, so
`Options` fell through to p4's default `noclobber` template -- this
client's files are writable (a live, mutable SDP install), so `p4 sync`
correctly refused to overwrite them. Not a doc gap (no separate
"how to set up the workspace" doc exists; the script is the sole source
of truth) -- fixed the script to also set `Options=... clobber ...` when
creating a brand-new client, and added a short note to
`SDP-QA-LabEnvironment.adoc`. Change: 2763686 (`//BattleSchool/Gen7`).
User set `clobber` manually on the already-existing broken client
(`bot_SDP_QA.p4c-bos-01.SDP_QA_dev_rebrand`) themselves, since the fix
only prevents the bug for future brand-new clients.
Also found and deleted genuine stale cruft while investigating a
follow-up `qa` sync run: `test/docker/Dockerfile.rocky9.base` and
`.sdp` on `p4c-bos-01` were leftover local files predating an upstream
consolidation into a single `Dockerfile.rocky9` (change 33267 by a
colleague, 2026-08-25) -- confirmed nothing references the old names
anymore, deleted them from the lab machine.
### JIRA housekeeping
Closed (with P4Blog set to a representative changelist, per established
convention): SDP-1286, SDP-1161, SDP-799, SDP-1379. Created SDP-1384
(Priority Backlog, linked `Relates` to SDP-799). Rovo/Atlassian MCP
write access dropped to read-only mid-session with no visible error until
a write call failed -- added a check for this to the "P4 Session Start
Situational Awareness" section of `P4Info.md` so future sessions catch it
proactively (change 33370).
### Misc
Gave the user a Slack-formatted status update (zoom-in on the 8 JIRA
issues, zoom-out on the 5 original Tasks) partway through wrap-up.
## Wrap-Up
Task 4 is done (all 7 tracked issues closed; SDP-1170 deliberately
deferred). Next session: start Task 5 (Redesign SDP Release Process),
beginning with `//p4-sdp/dev_rebrand/doc/ReleaseProcessOverview.md`.
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 33382 | Claude (AI Agent by Anthropic) | Finalize session log for the 2026-08-29 (through 2026-08-31) continued session: Task 4 completion (SDP-1286, SDP-1161, SDP-799, SDP-1379 closed), test fleet trap fix, doc URL relative-link strategy, coding standard DRAFT removal, template.sh fixes, and BSW lab clobber fix. |