You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/BACKLOG.md
+32Lines changed: 32 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16121,3 +16121,35 @@ federation on, the authorization request would travel the browser-visible front
16121
16121
identity provider is the only party positioned to reject tampering. That is true, and it is not by
16122
16122
itself a finding against this cell.
16123
16123
16124
+
16125
+
## 1358. claim.ps1 -Release records the script copy's tree as the actor, and nothing downstream catches a misdirected release
16126
+
16127
+
> 🔢 **Filed 2026-08-25 - not started.** ***The release audit record names WHICHEVER CHECKOUT'S COPY OF THE SCRIPT WAS INVOKED, not the seat that invoked it -- so a release run from another tree is silently misattributed.*** **And the asymmetry is the item:** the same anchoring on `-Take` is caught downstream by the ledger gate, because a claim naming the wrong tree makes the commit fail. **A release is never re-checked by anything**, so a wrong actor in the record stands permanently and looks correct.
**Severity:** no product axis (sec. 0). ***The cost is an audit record that names the wrong actor while reading as authoritative*** -- and that record exists specifically because `-Force` takeovers previously "left no record of who released whose claim". **The defect is the record silently failing at the job it was built for, one verb over.**
16134
+
16135
+
**MEASURED.** `scripts/coord/claim.ps1:69` derives `$repo` from `$PSScriptRoot`, and `released_by` at `:272` and `:302` is that `$repo`. Resolving the same expression against three checked-out copies:
16136
+
16137
+
| script copy invoked | resulting `$repo` |
16138
+
|---|---|
16139
+
| the PRIMARY checkout's copy | the primary checkout, branch `main` |
16140
+
| worktree A's copy | worktree A |
16141
+
| worktree B's copy | worktree B |
16142
+
16143
+
Three copies, three different values, from the one expression at `:69`. The specific trees do not
16144
+
matter and are deliberately not named here -- what matters is that `$repo` tracks the COPY, never the
16145
+
caller.
16146
+
16147
+
A seat that runs its OWN copy is recorded correctly. A seat that runs another copy -- an absolute `-File` path to the primary is the easy way in -- is recorded as that other tree. **A real release performed from the primary was recorded as `released_by: .../MessageFoundry, branch main` and is unattributable.**
16148
+
16149
+
**THE ASYMMETRY, AND WHY `-Take` IS NOT THE SAME BUG.** `claim_check.py` reads the repo from **cwd**, which is correct for it because it runs as a commit hook and cwd IS the committing worktree. So a claim TAKEN against the wrong tree makes the later commit fail the gate -- loudly, at the point of use. **BACKLOG #1297 is the worked instance of exactly that**, from the allocator rather than the claim tool: allocated from the primary checkout, gate correctly refused with *"#1297 was not allocated to this worktree"*, item re-filed at #1298, lesson written up at [docs/BACKLOG.md](BACKLOG.md) lines 53-55. **Nothing plays that role for a release.** Verified: `released_by` and `release` appear nowhere in `scripts/hooks/claim_check.py`, so the enforcing gate never reads a release record at all.
16150
+
16151
+
**DO NOT SIMPLY RE-ANCHOR ON cwd.** The `$PSScriptRoot` anchoring is DELIBERATE, its reasoning is written out at the head of `alloc.ps1` under **BACKLOG #1060**, and `claim.ps1:62-68` records that this file was fixed the same way *"by inspection rather than by a second reproduction"*. For `-Take` the claim must name the tree that will commit, and the anchoring is what makes a mismatch detectable. **Flipping the anchor would trade a silent wrong actor for a silently-passing wrong claim, which is worse.** The likely shape is recording BOTH trees, or refusing/warning when the script's tree and cwd differ -- a design call inside a small file, not a one-liner.
16152
+
16153
+
**Acceptance should include the negative case:** a release invoked from a tree other than the script's must not produce a record that reads as authoritative about who acted. A test that only exercises the same-tree path cannot fail on this defect, since the same-tree path is already correct.
16154
+
16155
+
**Related:** #1297 (the worked `-Take` instance, allocator side), #1060 (why the anchoring exists and must not be naively reverted).
0 commit comments