rdmbair15m5-changelog-20260922-0100-ticket-lifecycle-app-docs-and-hook-worktree-resolution
Resolved ISSUE-20260906-15 (ticket CLI lifecycle metadata clearing & folder movement), ISSUE-20260905-09 (Docs/ case normalization across 10 app repos), and ISSUE-20260831-23 (project_state_hook.py v1.4 worktree awareness and fleet deployment).
Scope
- Hosts Touched:
rdmsm4x(canonical hub),rdmbair15m5(canary host), and fleet peers (rdmbair13m5,rdmpw3265m,rdmpw3275m,jdmbair13m5). - Repositories Modified:
issues(git.ecs0.net:git/dev/issues.git& GitHub backup)fleet(git.ecs0.net:git/root/fleet.git& GitHub backup)apps/bookmarkROO(git.ecs0.net:git/apps/bookmarkROO.git& GitHub backup)apps/AINetNode(git.ecs0.net:git/apps/AINetNode.git& GitHub backup)apps/AirFleet(git.ecs0.net:git/apps/AirFleet.git& GitHub backup)apps/CoreAudit(git.ecs0.net:git/apps/CoreAudit.git& GitHub backup)apps/iCloudMonitor(git.ecs0.net:git/apps/iCloudMonitor.git& GitHub backup)apps/KeyRingScope(git.ecs0.net:git/apps/KeyRingScope.git& GitHub backup)apps/ModelVault(git.ecs0.net:git/apps/ModelVault.git& GitHub backup)apps/PasswordScope(git.ecs0.net:git/apps/PasswordScope.git& GitHub backup)apps/SQLiteScope(git.ecs0.net:git/apps/SQLiteScope.git& GitHub backup)apps/ThermalScope(git.ecs0.net:git/apps/ThermalScope.git& GitHub backup)dev-root-rdmbair15m5(git.ecs0.net:git/fleet/dev-root-rdmbair15m5.git& GitHub backup)
1. Ticket
Store Lifecycle Resolution (ISSUE-20260906-15)
Problem
In ~/dev/issues/bin/ticket line 3687,
cmd_status set meta['resolved_at'] when
transitioning to resolved or closed, but
failed to clear resolved_at or verifier when
reopening tickets back to open, in-progress,
blocked, or needs-decision. This created
contradictory metadata states where active in-progress tickets retained
historic resolution timestamps and verifier tags. Furthermore, reopened
ticket markdown files remained stranded in resolved/ rather
than moving back to open/.
Remediation
- Modified
cmd_statusinbin/ticketon canonical hubrdmsm4x:- Added conditional logic to
pop("resolved_at", None)andpop("verifier", None)when transitioning to non-terminal statuses (open,in-progress,blocked,needs-decision). - Added filesystem directory routing: moves the markdown file between
open/,resolved/, andclosed/to match its lifecycle state, unlinking the old path when different and updating the SQLite FTS5 index with the newfile_path.
- Added conditional logic to
- Authored regression test suite
tests/test_status_reopen_clears_metadata.pyexercising 6 scenarios using the isolated test store harness. - Validated all 13 test suites in
issues/tests/(100% pass). - Committed
a6fa6d5, pushed tofleetand GitHub backup remotes. - Marked
ISSUE-20260906-15resolved in the ticket store.
2.
App Repositories Docs Case Normalization
(ISSUE-20260905-09)
Problem
Ten app repositories tracked documentation under a capitalized
Docs/ directory while generator scripts
(scripts/generate_project_prds.py and
scripts/extract_project_metadata.py) wrote to lowercase
docs/project_prd.html. On APFS case-insensitive filesystems
this was invisible to git status, but broke case-sensitive
environments (Docker containers, Linux CI, and
git ls-files --error-unmatch).
Remediation
- Executed two-step APFS-safe directory renames (
Docs->Docs_tmp->docs) across all 10 repositories:apps/bookmarkROO: commit72fe446apps/AINetNode: commit08f3307apps/AirFleet: commit5133adeapps/CoreAudit: commit407de1dapps/iCloudMonitor: commite456e64apps/KeyRingScope: commit356adaeapps/ModelVault: commitea24a13apps/PasswordScope: commitf78cd4bapps/SQLiteScope: commit6331e51apps/ThermalScope: commit196a1c5
- Pushed each commit to
fleet(git.ecs0.net) and GitHub backup remotes. - Fast-forwarded local clones on
rdmbair15m5(AirFleet,CoreAudit,KeyRingScope,ModelVault,PasswordScope,SQLiteScope,ThermalScope). - Marked
ISSUE-20260905-09resolved in the ticket store.
3.
SessionStart Hook Worktree Awareness
(ISSUE-20260831-23)
Problem
The SessionStart advisory hook
(fleet/ops/project-state/project_state_hook.py) printed
stale session ages when work occurred on a branch worktree (e.g.
reporting SESSION-STATE.md written 46h ago from the primary
checkout when active branch work had published a fresh state file 5h
ago). Successor agents were misled into distrusting current records or
repeating completed work.
Remediation
- Upgraded
project_state_hook.pytov1.4:- Added
git_worktrees(proj)helper queryinggit worktree list --porcelainwith 1-second timeout. - In
state_file(), added worktree candidate evaluation: if branch worktrees contain newerSESSION-STATE.mdfiles than the primary checkout, the hook surfaces the newest state file. - If executing within a linked worktree itself
(
(p / ".git").is_file()), local branch state is strictly prioritized without extraneous path noise. - In
read_state()andrender(), addedsourcetracking to annotate the advisory line when reading from a worktree:STATE <status> (written <age> in <source-path>) - Updated
Stopevent check so recent worktree updates prevent false missing/stale nag prompts.
- Added
- Authored regression test
ops/project-state/test_project_state_hook.pycovering worktree detection, in-worktree priority, primary update override, and render formatting (4/4 pass). - Committed
db8d63dinfleet, pushed tofleetand GitHub backup remotes. - Deployed byte-identical v1.4 script (
ea9e8001804618bf) across all six Mac hosts (rdmsm4x,rdmbair15m5,rdmbair13m5,rdmpw3265m,rdmpw3275m,jdmbair13m5). - Marked
ISSUE-20260831-23resolved in the ticket store.
4. Verification Evidence & Artifacts
- All 13 Issue Test Suites Passing:
test_adversarial_suite.py,test_claim_leases_and_plans.py,test_cli_and_mcp_adversarial.py,test_concurrent_locks.py,test_e2e_adversarial_suite.py,test_fts5_queries.py,test_isolation_coverage.py,test_jsonrpc_stdio.py,test_offer_accept.py,test_project_case_folding.py,test_stale_index_resolve.py,test_status_reopen_clears_metadata.py,test_sync_trailers.py. - Project State Hook Test: 4/4 passing on canonical hub and local canary.
- Fleet Message Bus: Broadcast
20260922-005752-14450402sent and replicated to all 5 peers viaagent_msg.zsh sync. - SYNC-STATUS.md: Updated and pushed to origin and
backup (
02c4cbd).
5. Rollback / Undo
issues:git -C ~/dev/issues revert a6fa6d5fleet:git -C ~/dev/fleet revert db8d63d- App repos:
git -C ~/dev/apps/<repo> revert HEAD