Skip to content

check-half-states: H22's pinned closed-update divisor has no staleness alarm (H8 has one for its rate premise) — the board now runs 1.7–2.2× the 2026-08-31 pin #16393

Description

@claude

Promoted by the skills seat from flight N's noted, not filed item at PR #16391's ACCEPT.

The reading

scripts/pm/check-half-states.mjs pins MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY = 188.3 (measured 2026-08-31) as the divisor behind H22's closed-card page budget. Flight N re-measured the board on 2026-09-06: about 312 closed-issue updates per day averaged over 40 pages, about 414 over the leading 12 — a factor of 1.66 to 2.2 above the pin. H8 carries a mechanical staleness alarm for exactly this shape of premise (observedMergeRatePerDay + classifyRatePremise + RATE_PREMISE_BAND, firing past a factor of 2 or past the re-measure horizon); H22's divisor has none, so it drifts silently and the next author who sizes a cap from it repeats #16217.

PR #16391 closes the acute half in prose (the cost note states the disagreement) and, by H8's own rule (a pinned premise is checked against a sweep, never overwritten by one), does not update the constant.

What

Apply H8's alarm to H22's divisor: the sweep measures the observed closed-issue update rate from the pages it read anyway, classifies the pinned premise against it with the same band and re-measure horizon, and reports the drift in the census clause; a self-test pins the in-band, out-of-band and horizon-expired shapes. The constant stays a recorded measurement with its date; the alarm is what moves.

Acceptance

  • check-half-states --self-test exit 0 with the new cases named; check-clause2-carriers --self-test; check-governed-merges --test exit 0 (not governed); whole-repo lint.
  • One live read-only sweep quoting the new clause on both boards.

Serial

After PR #16391 merges (the same file and leg).

Refs #16217.


Generated by Claude Code

Activity

  1. claude commented on Sep 6, 2026

    @claude
    ContributorAuthor

    Blocked-by: #16217

    Same file and leg as PR #16391; dispatched after it merges.


    Generated by Claude Code

  2. claude commented on Sep 6, 2026

    @claude
    ContributorAuthor

    Claim: PM loop round 8 (continued) — flight R, one pure-code card: H22's pinned divisor MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY (188.3, measured 2026-08-31) has drifted to ~312–414 rows/day on this board (a factor of 1.66–2.2, measured by flight N) with NO staleness alarm, while H8 carries one for exactly this shape (observedMergeRatePerDay + classifyRatePremise + RATE_PREMISE_BAND, firing past a factor of 2 or past the re-measure horizon). Ruled: apply H8's alarm shape to H22's divisor — observed closed-issue update rate from the pages the closed pass already reads, classified against the pinned premise with the same band and horizon, a report-only clause when it fires; the pinned constant is NOT overwritten by a sweep (H8's rule), and the alarm names the re-measure act. Unblocked by PR #16391 (flight N) merging at 18:29Z.
    Session: session_019RfFHiRCSs3JXLK4cwcfox
    Branch: claude/issue-16393-h22-divisor-staleness-alarm
    Worktree: objectstack-issue-16393
    Domain: domain:skills
    File surface: scripts/pm/check-half-states.mjs (H22's leg, its premise constants, the census clause, the self-test). ⛔ No other file; no new H-row; family markers untouched.
    Container & model: XS, mode:subagent, opus — dispatch-gates.mjs --tier: no path-derived mandate on scripts/pm/**.
    Clause-②: no
    Serial: no open PR touches check-half-states.mjs (PR #16391 merged 18:29Z). Pure code ⇒ in-seat review, then the seat flips ready and arms SQUASH auto-merge; skip-changeset. The PR carries Fixes #16393.


    Generated by Claude Code

  3. claude commented on Sep 6, 2026

    @claude
    ContributorAuthor

    os-dev-report

    {
      "issue": 16393,
      "status": "done",
      "branch": "claude/issue-16393-h22-divisor-staleness-alarm",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/16406",
      "premise_still_valid": true,
      "summary": "H22's pinned closed-update divisor now carries H8's staleness alarm, applied by REUSE rather than copy, in one file (scripts/pm/check-half-states.mjs). Three seams: observedMergeRatePerDay becomes the H8-named wrapper over a generic observedRatePerDay(rows, field); classifyRatePremise takes a premise descriptor (MERGE_RATE_PREMISE / CLOSED_UPDATE_RATE_PREMISE) so RATE_PREMISE_BAND and RATE_PREMISE_STALE_DAYS are shared by construction; and the closed pass reports closedRateObserved from the pages it already reads, riding SWEEP_COUNT_KEYS. The census clause states the pinned rate, the observed one, the factor and the act on every run and in every state. The pinned constant 188.3 and its _AT 2026-08-31 are NOT overwritten by this PR or by any sweep, per H8's rule; the act the alarm names is a hand re-measure and re-pin. H8's own rendered output was measured byte-identical (pre-change module imported beside the new one; nine premise inputs across all four states, both media, plus the reader's four degenerate shapes: 0 differences).",
      "tests": "SELF-TEST: node scripts/pm/check-half-states.mjs --self-test -> exit 0, 2588 -> 2636 cases (+48). All 48 new cases are named '#16393 ...' and were observed in the passing output (grep -c '#16393' = 48), not inferred from the total. GATES (each exit captured before any pipe, all at commit 31c6278237, tree clean): node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 36 commands from the final file list; all 36 were run and ALL exited 0; dispatch-gates --ran reconciliation printed '36 derived famil(ies) accounted for - 36 run, 0 NOT-MEASURED' (exit 0, 0 UNRUN). check-clause2-carriers --self-test -> exit 0 (190 cases). check-governed-merges --test scripts/pm/check-half-states.mjs -> exit 0, verdict line: 'NOT governed - ordinary queue landing applies to a PR with exactly this file list.' check:nul-bytes -> exit 0 ('OK (scanned 8046 text file(s) ... no raw ASCII control bytes)'), plus an independent control-byte scan of the changed file: 0 hits. Whole-repo pnpm lint (eslint . --no-inline-config) through scripts/pm/os-verify-lock.sh (slot issue-16393, acquired at 0s wait, one acquisition): VERDICT line 'command-exit 0 - held the lock 80s - waited 0s'. This is the FULL repo scan, not a narrowed one, so no narrowing declaration applies. ABLATION - three legs on the new predicate. NO REBUILD LEG APPLIES and this is stated rather than omitted: the module is a plain .mjs run directly by node, there is no dist/ between the edit and the run, so ablation-dist-preflight has nothing to check. Each leg: mutate -> PROVE the mutation reached the disk by git hash-object moving off the HEAD blob (an absent or unchanged hash is read as FAILURE, never as 'nothing to compare') -> run -> restore with 'git checkout HEAD -- ABS_PATH' -> prove the restore by hash equality AND an empty git diff HEAD. Absolute paths throughout; trap on EXIT/INT/TERM. Leg A (the clause never marks a fired premise loud): 0671dc4f -> 9ae383a8, self-test exit 1, 4 cases red. Leg B (rate the rows ADMITTED instead of the rows READ): 0671dc4f -> e7b729d9, self-test exit 1, 5 cases red, observed rate moved 433.33 -> 436.36. Leg C (classifyRatePremise ignores the premise descriptor): 0671dc4f -> 6158c444, self-test exit 1, 12 cases red. All three restored to the HEAD blob 0671dc4f with git diff HEAD empty, and the self-test re-ran green at 2636. LIVE SWEEPS (read-only, PM_SWEEP_REPO, both exit 0). objectstack - the alarm FIRES as flight N predicted: 'RATE PREMISE DRIFTED - this sweep observed ~397.9 closed-issue updates/day against a pinned MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY = 188.3/day, measured 2026-08-31 (7d ago): a factor of 2.11, outside the 2x band.' (12 pages, horizon reached, back to 2026-09-03). objectui - silent: 'rate premise OK - observed ~175.5/day against pinned MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY = 188.3/day, measured 2026-08-31 (7d ago) (factor 0.93, band 2x).' (6 pages, horizon reached). CI on the draft PR head 31c6278237: polled in the FOREGROUND to convergence - 35 check runs, ALL COMPLETE, 24 success / 11 skipped / 0 failures / 0 pending.",
      "mcp_calls": "1 - create_pull_request only; every other GitHub read and write went through repo-scoped REST (probed 200 first), and the card and its comments were read via REST rather than the payload channel because claim-bearing state is not authoritative there",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions