Filed unassigned by the dev seat that implemented the H22 closure floor (PR #6641). ⛔ Not a request to re-port anything right now — a standing drift with no detector, recorded while it was measurable.
The measurement
Taken 2026-08-28, comparing this repo's scripts/pm/check-half-states.mjs against objectstack-ai/objectstack at 96732b03a:
| |
|---|
| objectui's ported copy | 572 KB |
| objectstack upstream | 784 KB |
diff between them | 4,637 lines |
The workflow header (.github/workflows/half-state-patrol.yml) states the file is "meant to be copied verbatim" and enumerates the divergences a re-sync "must not clobber". Both claims are now much weaker than they read:
- The copy is not verbatim and has not been for a while. Upstream has grown ~212 KB of predicates and fixes since the port; this install has none of them. The header's divergence list describes three deliberate adaptations, which is accurate, but says nothing about the far larger accidental gap.
resolveClosedWindowPages / PM_SWEEP_CLOSED_WINDOW_PAGES exist only here. They were authored during the port and never upstreamed — git log -S resolveClosedWindowPages in objectstack returns nothing. So the "adaptation lives in the workflow, not the script" principle the port's own test file asserts was already untrue for that pair.- No mechanism detects any of this. There is no sync script, no parity gate, no test comparing the two copies.
scripts/__tests__/check-half-states.test.ts pins the adaptations, which is the right thing for it to do, but by construction it cannot see upstream at all.
Why it is worth recording
The failure shape is the one this repo keeps filing port cards for (#5459, #5712, #5789, #6042 — all "our copy drifted, port the fix"), except that those were each found by a human noticing a specific upstream fix. Here the gap is large enough that nobody can hold it in their head, and the direction of harm is silent: upstream lands a predicate fix, this board never gets it, and the patrol keeps rendering a confident report that is simply missing rows.
It became load-bearing during PR #6641: the closure floor had to be ported by hand into this copy, because setting the new env var in the workflow alone would have set a variable this copy does not read — with the closed-card reader running unfloored at ~87% residue density as the visible result. The next person to change patrol behaviour hits the same fork.
What a resolution might produce
Not obvious, and deliberately not decided here — this is a triage question, not a defect with one fix:
- a parity gate that fetches upstream's copy and fails when the non-declared regions differ (needs a way to express "these three regions are ours");
- a scheduled re-port card, accepting the copy will always lag by some bounded amount;
- or a decision that the copies are now genuinely separate files, in which case the workflow header's "copy verbatim" framing should be retired so it stops promising something nobody maintains.
⚠️ Note for whoever takes it: PR #6641 adds resolveClosureFloor here as upstream code (the same function landing in objectstack-ai/objectstack#12906), so that one is not a divergence a re-sync should strip.
Refs: #5791 (the install) · PR #6641 · objectstack-ai/objectstack#12906
Generated by Claude Code
Filed unassigned by the dev seat that implemented the H22 closure floor (PR #6641). ⛔ Not a request to re-port anything right now — a standing drift with no detector, recorded while it was measurable.
The measurement
Taken 2026-08-28, comparing this repo's
scripts/pm/check-half-states.mjsagainstobjectstack-ai/objectstackat96732b03a:diffbetween themThe workflow header (
.github/workflows/half-state-patrol.yml) states the file is "meant to be copied verbatim" and enumerates the divergences a re-sync "must not clobber". Both claims are now much weaker than they read:resolveClosedWindowPages/PM_SWEEP_CLOSED_WINDOW_PAGESexist only here. They were authored during the port and never upstreamed —git log -S resolveClosedWindowPagesin objectstack returns nothing. So the "adaptation lives in the workflow, not the script" principle the port's own test file asserts was already untrue for that pair.scripts/__tests__/check-half-states.test.tspins the adaptations, which is the right thing for it to do, but by construction it cannot see upstream at all.Why it is worth recording
The failure shape is the one this repo keeps filing port cards for (#5459, #5712, #5789, #6042 — all "our copy drifted, port the fix"), except that those were each found by a human noticing a specific upstream fix. Here the gap is large enough that nobody can hold it in their head, and the direction of harm is silent: upstream lands a predicate fix, this board never gets it, and the patrol keeps rendering a confident report that is simply missing rows.
It became load-bearing during PR #6641: the closure floor had to be ported by hand into this copy, because setting the new env var in the workflow alone would have set a variable this copy does not read — with the closed-card reader running unfloored at ~87% residue density as the visible result. The next person to change patrol behaviour hits the same fork.
What a resolution might produce
Not obvious, and deliberately not decided here — this is a triage question, not a defect with one fix:
resolveClosureFloorhere as upstream code (the same function landing in objectstack-ai/objectstack#12906), so that one is not a divergence a re-sync should strip.Refs: #5791 (the install) · PR #6641 · objectstack-ai/objectstack#12906
Generated by Claude Code