Skip to content

Promote FEAT-087 / FEAT-088 / FEAT-090 to accepted — v3.4.0 not-ready 7 → 4 - #169

Closed
avrabe wants to merge 1 commit into
sync-required-checks-filefrom
promote-v34-verified
Closed

Promote FEAT-087 / FEAT-088 / FEAT-090 to accepted — v3.4.0 not-ready 7 → 4#169
avrabe wants to merge 1 commit into
sync-required-checks-filefrom
promote-v34-verified

Conversation

@avrabe

@avrabe avrabe commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

proposed counts as not-yet-verified in the release gate, so a shipped, green
feature left there blocks its release indefinitely — which is what v3.4.0 has been
carrying. Promoting these three is the honest counterpart to not promoting the
others.

Evidence, grounded rather than remembered

feature shipped re-verified on main just now
FEAT-087 #162, 11/11 green 3 oracles pass — tier discrimination, tier-2 independence, module-scoped decision
FEAT-088 #163, 11/11 green --self-test PASSES and the real check PASSES; wired in ci.yml self-test-first
FEAT-090 #166, 11/11 green 5 oracles pass, including the polarity test that dies only under &=|=

Each was mutation-checked in both directions when it landed; this re-runs them against
main rather than trusting the merge.

Deliberately NOT promoted

  • FEAT-089filed, not built. Its own AC#1 demands a test that is still red by
    design
    (a correct div-by-zero fix must stop raising the obligation; it doesn't yet).
  • FEAT-064 — AC3 was closed by measurement in FEAT-064 AC3 closed by measurement; FEAT-089 files what it found #164, but AC1 remains falsified
    (FEAT-077 repairs it only for uniquely-named functions). Closing one AC doesn't clear
    the artifact, and REQ-020 stays blocked behind it.
  • FEAT-057 / FEAT-065 / REQ-021 — unbuilt.

Result

v3.4.0: 8 artifacts — accepted 4, proposed 4   (was accepted 1, proposed 7)
remaining: FEAT-057, FEAT-065, FEAT-089, REQ-021

Still not cuttable, and the four that remain are genuine work rather than
bookkeeping — which is the point of doing this separately from shipping features.

rivet=0 claim-check=0 fmt=0

🤖 Generated with Claude Code

https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

@avrabe
avrabe force-pushed the promote-v34-verified branch from 88d5578 to 3129ed0 Compare August 27, 2026 05:47
avrabe added a commit that referenced this pull request Aug 27, 2026
ci.yml recorded the rule: require a job only once its name exists on every PR,
i.e. after it merges to main. Correct, and incomplete -- a PR opened BEFORE the
job existed still does not have it, so it can never report and is blocked
forever.

Observed rather than theorised. When #167 added two jobs and both were required,
PRs #168 and #169 each showed 11 checks with 0 of the 2 new ones. Both would have
deadlocked on a check that could never run. Both were rebased and now register 13.

The complete procedure is now in ci.yml:
  1. merge the PR that adds the job
  2. add the context to the ruleset AND to required-checks.txt, ruleset FIRST
     (CI gates on the file, so a file ahead of the ruleset means CI is gating on
      a fiction -- the live-mode cross-check says exactly that)
  3. REBASE EVERY OPEN PR

drift-gate=0 gate-coverage=0 claim-check=0 rivet=0.

Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📐 rivet artifact delta

PR: #169 Base SHA: b877f455

Validation

head — `rivet validate` result
  SR-11 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-12 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-13 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-2 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-3 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-4 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-5 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-6 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-7 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-8 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-9 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SYS-1 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-2 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-3 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-4 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-5 (system-req, status: accepted) — missing: sys-integration-verification
  → run `rivet validate --explain SR-1` to see which link type and source types satisfy a gap

Result: PASS (158 warnings)
Schemas: common@0.3.0 (embedded), dev@0.3.0 (embedded), research@0.1.0 (embedded), research-ext@0.1.0 (on-disk), safety-case@0.1.0 (embedded), aspice@0.2.0 (embedded)
base — `rivet validate` result (for comparison)
  SR-11 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-12 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-13 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-2 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-3 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-4 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-5 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-6 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-7 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-8 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-9 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SYS-1 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-2 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-3 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-4 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-5 (system-req, status: accepted) — missing: sys-integration-verification
  → run `rivet validate --explain SR-1` to see which link type and source types satisfy a gap

Result: PASS (158 warnings)
Schemas: common@0.3.0 (embedded), dev@0.3.0 (embedded), research@0.1.0 (embedded), research-ext@0.1.0 (on-disk), safety-case@0.1.0 (embedded), aspice@0.2.0 (embedded)

Artifact stats

base head
Total artifacts 262 262
full stats — head
Artifact summary:
  academic-reference               24
  competitive-analysis             11
  design-decision                  22
  feature                          92
  market-finding                    7
  requirement                      21
  safety-context                    3
  safety-goal                       5
  safety-justification              4
  safety-solution                   6
  safety-strategy                   1
  stakeholder-req                   3
  sw-req                           13
  sw-verification                  13
  sys-verification                  5
  system-req                        5
  technology-evaluation            12
  verification                     15
  TOTAL                           262

Orphan artifacts (no links): 12
  CA-001
  CA-002
  CA-003
  CA-004
  CA-005
  CA-006
  CA-007
  CA-008
  CA-009
  CA-010
  CA-011
  FEAT-078

Diagnostics: 0 error(s), 158 warning(s), 25 info(s)

Diff (base → head)

~ FEAT-087
  status: - proposed -> + accepted
~ FEAT-088
  status: - proposed -> + accepted
~ FEAT-090
  status: - proposed -> + accepted

0 added, 0 removed, 3 modified, 259 unchanged

AADL model — head

spar/scry.aadl: OK

Posted by the rivet-delta workflow. Informational only — does not gate the PR.

… 7 -> 4

`implemented`/`proposed` count as NOT-yet-verified in the release gate, so a
shipped, green feature left there blocks its release indefinitely. These three
have shipped AND been verified, so leaving them proposed understates the release
just as promoting them early would overstate it.

Evidence for each, grounded rather than remembered:

  FEAT-087 (#162, 11/11 CI green) -- 3 oracles re-run on main just now:
    the tier-discrimination test, the tier-2 independence pin, and the
    module-scoped decision. Mutation-checked both directions when landed.
  FEAT-088 (#163, 11/11 CI green) -- the gate's --self-test PASSES and the
    real check PASSES on main, and it is wired into ci.yml (self-test before
    the real check). Mutation-checked against the real repo when landed.
  FEAT-090 (#166, 11/11 CI green) -- 5 oracles re-run on main just now,
    including the polarity test that dies only under the `&=` -> `|=` mutant.

NOT promoted, deliberately:
  FEAT-089 -- FILED, not built. The non-zero-fact work does not exist yet; its
    own AC#1 requires a red test that is still red by design.
  FEAT-064 -- AC3 closed by measurement in #164, but AC1 remains FALSIFIED
    (repaired by FEAT-077 only for uniquely-named functions). Closing one AC
    does not clear the artifact, and REQ-020 stays blocked behind it.
  FEAT-057, FEAT-065, REQ-021 -- unbuilt.

rivet=0 claim-check=0 fmt=0.

Refs: FEAT-087

Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@avrabe
avrabe force-pushed the promote-v34-verified branch from 3129ed0 to f70db45 Compare August 27, 2026 06:50
@avrabe
avrabe changed the base branch from main to sync-required-checks-file August 27, 2026 06:50
avrabe added a commit that referenced this pull request Aug 27, 2026
* Sync required-checks.txt to the ruleset: 10 -> 12 (scry#130)

#167 landed FEAT-091 and FEAT-093, so `Commit traceability (rivet)` and
`Required checks track CI jobs (scry#130)` now exist on main and run on every
PR. The drift gate immediately moved them from PENDING to FAIL -- which is the
transition it was built to make: a requirable job that is not required is
scry#130 recurring one job at a time.

Both were added to ruleset 16891064 (10 -> 12 contexts), and this syncs the
checked-in file so the two agree. Order matters: the RULESET was updated first
and the file second, because CI gates on the file -- a file listing checks the
ruleset does not require would mean CI gating on a fiction, which the live-mode
cross-check reports in exactly those words. Briefly red on main is the honest
state during that window.

Verified: file mode PASS, live mode PASS with `file agrees: True`.

rivet=0 claim-check=0 drift-self-test=0.

Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* "Require it after merge" was necessary but not sufficient

ci.yml recorded the rule: require a job only once its name exists on every PR,
i.e. after it merges to main. Correct, and incomplete -- a PR opened BEFORE the
job existed still does not have it, so it can never report and is blocked
forever.

Observed rather than theorised. When #167 added two jobs and both were required,
PRs #168 and #169 each showed 11 checks with 0 of the 2 new ones. Both would have
deadlocked on a check that could never run. Both were rebased and now register 13.

The complete procedure is now in ci.yml:
  1. merge the PR that adds the job
  2. add the context to the ruleset AND to required-checks.txt, ruleset FIRST
     (CI gates on the file, so a file ahead of the ruleset means CI is gating on
      a fiction -- the live-mode cross-check says exactly that)
  3. REBASE EVERY OPEN PR

drift-gate=0 gate-coverage=0 claim-check=0 rivet=0.

Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@avrabe
avrabe deleted the branch sync-required-checks-file August 27, 2026 07:03
@avrabe avrabe closed this Aug 27, 2026
@avrabe

avrabe commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #173 — same branch, rebased onto main.

Auto-closed by GitHub when I deleted sync-required-checks-file while merging #170. That branch was the base of three stacked PRs, so deleting it closed all three. My error, not a problem with the work — the review discussion here remains the record.

avrabe added a commit that referenced this pull request Aug 27, 2026
…175)

Operating the gate exposed a hole in the procedure it enforces. Landing a job
while its required-checks.txt entry arrives in a SEPARATE PR leaves main AND
every open PR red until that follow-up merges. #167 did exactly that: the moment
it merged, main failed its own drift gate and #168/#169 went red on a file they
could not fix.

The fix is structural, not another comment. The gate now FAILS a PR that adds a
requirable job which is not in required-checks.txt, so the job and its entry
ship together and the window does not exist.

VERIFIED ON THE REAL REPO, both directions:
  job added, no file entry -> exit 1, naming it and quoting the instruction
  same job WITH its entry   -> exit 0 (pending the ruleset update only)
  restored                  -> exit 0
Plus two new self-test cases covering exactly those, 7 in total.

The procedure in ci.yml is now three steps with no red window:
  1. in the SAME PR: add the job AND its required-checks.txt entry
  2. after merge: add the context to the ruleset (instant, via the API)
  3. rebase every open PR

Steps 2 and 3 were each learned by getting them wrong. A required context whose
job does not exist deadlocks everything; a job whose context does not exist
deadlocks nothing. The asymmetry is why the ordering matters.

drift-self-test=0 drift-file=0 gate-coverage=0 trailer-self-test=0
claim-check=0 rivet=0 fmt=0.

Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant