Skip to content

FEAT-071 (REQ-021): scry's scope as DATA, from one source - #171

Closed
avrabe wants to merge 1 commit into
sync-required-checks-filefrom
feat-071-scope-manifest
Closed

FEAT-071 (REQ-021): scry's scope as DATA, from one source#171
avrabe wants to merge 1 commit into
sync-required-checks-filefrom
feat-071-scope-manifest

Conversation

@avrabe

@avrabe avrabe commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Stacked on #170 — it carries the 12-entry required-checks.txt, without which the
drift gate correctly fails here. GitHub will retarget this to main when #170 merges.

The drift this replaces is measured

The dashboard stated scope in hand-written prose, and render_scope ignored its
AnalysisResult entirely
(the parameter was _r) — it said the same thing about
every module.

Worse, its "what scry does NOT prove" list named only provenance limits (WasmCert
not imported, memory-content model, not a qualified tool) and none of the dominant
practical ones:

measured on a real module share was it in the block?
unmodeled-control-flow — an if/else havocs its region 15.6% no
unsupported-op — scrubs the whole function 5.9% no
proven-safe rate 0.6% no

An agent reading that would form a materially more optimistic picture than the numbers
support. The enumerated list now names the region havoc, the function scrub, and the
disequality limit that makes a correct div-by-zero fix invisible (#165).

Single source, so page and feed can't drift

Both are rendered from SCOPE_EVIDENCE / SCOPE_NOT_PROVEN. The oracle requires every
not-proven item to appear in both surfaces.

Mutation-checked on exactly that property: emitting empty strings in the feed
while the page still lists them — asserted a single matching line before applying —
kills the test with not-proven item missing from the FEED.

Red first: the feed must carry a scope manifest, not leave scope to the page, after
the non-vacuity assertion on the constants had already passed.

Human legibility is not traded away

hero_and_scope_copy_finalized — a pre-existing gate on the prose — still passes
unchanged
, because each evidence kind renders its human phrasing and its machine
tag. A manifest a human can't read is a different failure from prose a machine can't
read, not a fix for it.

Schema 5 → 6, and a pin that kept rotting

Three sibling tests pinned the version by equality and broke at once on a bump
unrelated to the field each guarded. They now assert a lower bound parsed from the
document
— still fails if a field ships without a bump, but doesn't rot on unrelated
ones. Mutation-checked: regressing the constant to 4 kills exactly those three.

tests=0 clippy=0 fmt=0 rivet=0 claim-check=0 gate-coverage=0

🤖 Generated with Claude Code

https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc

The dashboard stated scope in hand-written prose, and `render_scope` ignored its
AnalysisResult entirely (the parameter was `_r`), so it said the same thing about
every module. An agent deciding whether to trust a verdict got paragraphs.

THE DRIFT THIS REPLACES IS MEASURED, not hypothetical. The old not-proven list
named only PROVENANCE limits -- WasmCert not imported, the memory-content model,
not a qualified tool -- and NONE of the dominant practical ones. Measured on a
real module: unmodeled-control-flow 15.6% of advisories and unsupported-op 5.9%,
against a proven-safe rate of 0.6%. A reader would have formed a materially more
optimistic picture than the numbers support. The enumerated list now names the
if/else region havoc, the unsupported-op function scrub, and the disequality
limit that makes a correct div-by-zero fix invisible (#165).

SINGLE SOURCE: the page and the feed are both rendered from SCOPE_EVIDENCE and
SCOPE_NOT_PROVEN, so a limitation cannot be stated on one and omitted from the
other. The oracle requires every not-proven item in BOTH surfaces, and is
mutation-checked: emitting empty strings in the FEED while the page still lists
them (asserted a single matching line before applying) kills it with
"not-proven item missing from the FEED".

Red-first: "the feed must carry a scope manifest, not leave scope to the page",
after the non-vacuity assertion on the constants had passed.

Human legibility is NOT traded away: `hero_and_scope_copy_finalized` still passes
unchanged, because each kind renders its human phrasing AND its machine tag. A
manifest a human cannot read is a different failure from prose a machine cannot
read, not a fix for it.

Schema 5 -> 6. Three sibling tests pinned the version by EQUALITY and broke at
once on a bump unrelated to the field each guarded; they now assert a LOWER BOUND
parsed from the document, which still fails if a field ships without a bump.
Mutation-checked: regressing the constant to 4 kills exactly those three.

tests=0 clippy=0 fmt=0 rivet=0 claim-check=0 gate-coverage=0.

Refs: FEAT-071

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: #171 Base SHA: 0261803e

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-071
  field changed: acceptance-criteria

0 added, 0 removed, 1 modified, 261 unchanged

AADL model — head

spar/scry.aadl: OK

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

@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 #174 — 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.

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