Every Spec page renders the stated rung beside the floor reached, on one line, whether or not the two agree; the index and the Pack member table carry the same pair as two columns.
The divergence banner is raised only in the dishonest direction — the floor reached standing below the stated rung. A floor reached at or above the stated rung raises nothing, because a floor is a floor and never a quota that nags upward.
A raised banner names the first unmet clause by its clause id and its description, so the reader is told which clause to satisfy rather than only that something is wrong.
When even the idea floor is unmet, the floor reached renders as none rather than as a rung, and a raised banner states that the floor stands below idea.
The banner is rendering, never a check: the same divergence is already the readiness floor's own finding, and the page shows it in context rather than gating on it.
Given the graph holds a rule spec {specId: "spec:probe.overstated-rung"} whose stated readiness is {statedReadiness: "ready"}
Given the spec {structure: "records a blocking open question"}
When the Design Review renders the graph
Then the spec page renders the floor reached {floorReached: "scoped"}
Then the divergence banner is raised: {bannerRaised: true}
Then the banner names the first unmet clause {clauseId: "no-blocking-open-questions"}
Given
the graph holds a rule spec {specId: "spec:probe.overstated-rung"} whose stated readiness is {statedReadiness: "ready"}
the spec {structure: "records a blocking open question"}
When
the Design Review renders the graph
Then
the spec page renders the floor reached {floorReached: "scoped"}
the divergence banner is raised: {bannerRaised: true}
the banner names the first unmet clause {clauseId: "no-blocking-open-questions"}
Given the graph holds a rule spec {specId: "spec:probe.understated-rung"} whose stated readiness is {statedReadiness: "scoped"}
Given the spec {structure: "clears every floor clause"}
When the Design Review renders the graph
Then the spec page renders the floor reached {floorReached: "ready"}
Then the divergence banner is raised: {bannerRaised: false}
Given
the graph holds a rule spec {specId: "spec:probe.understated-rung"} whose stated readiness is {statedReadiness: "scoped"}
the spec {structure: "clears every floor clause"}
When
the Design Review renders the graph
Then
the spec page renders the floor reached {floorReached: "ready"}
the divergence banner is raised: {bannerRaised: false}
Given the graph holds a rule spec {specId:string} whose stated readiness is {statedReadiness:"scoped"|"ready"}
Given the spec {structure:"clears every floor clause"|"records a blocking open question"}
When the Design Review renders the graph
Then the spec page renders the floor reached {floorReached:"scoped"|"ready"}
Then the divergence banner is raised: {bannerRaised:boolean}
Then the banner names the first unmet clause {clauseId:string}
The view is the graph read twice, and the corpus is untouched by reading it (spec:consumers.design-review.pure-projection)
passed
99.39 ms
executes the bound example against a fresh world
An overstated rung raises the banner and names the clause that refused (spec:consumers.derived-readiness-banner.dishonest-divergence)
passed
2.14 ms
executes the bound example against a fresh world
A rung the structure overshoots renders as information, not as a banner (spec:consumers.derived-readiness-banner.honest-headroom)
passed
1.17 ms
renders a Spec whose idea floor is unmet with no rung and a below-idea banner
not recorded
passed
0.85 ms
executes the bound example against a fresh world
A fully bound Spec renders binding language on the page and in the index (spec:consumers.binding-language-views.bound-spec-page)
passed
1.85 ms
executes the bound example against a fresh world
The Pack member table speaks the page's binding language, not a shorthand (spec:consumers.binding-language-views.pack-member-table)
passed
1.91 ms
executes the bound example against a fresh world
A page from an earlier run does not survive the next one (spec:consumers.wholesale-view-rewrite.stale-page-removed)
passed
7.25 ms
executes the bound example against a fresh world
A page the build's invalidation never saw still does not survive the swap (spec:consumers.wholesale-view-rewrite.late-stale-page)
passed
4.19 ms
executes the bound example against a fresh world
A run that cannot produce a current view leaves no view at all (spec:consumers.wholesale-view-rewrite.failed-run-view-removed)
passed
2.63 ms
executes the bound example against a fresh world
A build that never renders still takes the old view down (spec:consumers.wholesale-view-rewrite.build-invalidates-view)
passed
2.79 ms
executes the bound example against a fresh world
One finding, three location shapes, one composition rule (spec:validation.diagnostic-rendering.composed-location)
passed
0.65 ms
executes the bound example against a fresh world
The same three location shapes, rendered as table cells (spec:validation.diagnostic-rendering.table-cell-location)
passed
0.43 ms
spec:consumers.derived-readiness-banner.honest-headroom · A rung the structure overshoots renders as information, not as a banner · declared · example enabled · specs/consumers/derived-readiness-banner.honest-headroom.sdp.md
test:protocol.derived-readiness-banner.idea-floor-unmet · a Spec below the idea floor renders the floor reached as none and the banner below idea · anchored · test anchor binding present · test/self-hosting-projections.test.ts:518
Example space
specId · string · declared by the graph holds a rule spec {specId} whose stated readiness is {statedReadiness}
statedReadiness · "scoped" | "ready" · declared by the graph holds a rule spec {specId} whose stated readiness is {statedReadiness}
structure · "clears every floor clause" | "records a blocking open question" · declared by the spec {structure}
the graph holds a rule spec {specId:string} whose stated readiness is {statedReadiness:"scoped"|"ready"}
the spec {structure:"clears every floor clause"|"records a blocking open question"}
When
the Design Review renders the graph
Then
the spec page renders the floor reached {floorReached:"scoped"|"ready"}
the divergence banner is raised: {bannerRaised:boolean}
the banner names the first unmet clause {clauseId:string}
Composing needs the script.
Design view
Requirement drawing
Requirement drawing for spec:consumers.derived-readiness-bannerThe diagram as text
spec:consumers.derived-readiness-banner: Derived readiness renders beside the stated rung and warns in one direction · declared Spec
spec:consumers.derived-readiness-banner.dishonest-divergence: An overstated rung raises the banner and names the clause that refused · declared Spec
spec:consumers.derived-readiness-banner.honest-headroom: A rung the structure overshoots renders as information, not as a banner · declared Spec
spec:consumers.design-review: Design Review renders graph context without becoming a gate · declared Spec
impl:protocol.derived-readiness-banner: renders stated readiness beside the structural floor and dishonest divergence · anchored code · src/projections/design-review-context.ts:18
test:protocol.derived-readiness-banner.dishonest-divergence: the overstated-rung point verifies the banner and its first unmet clause · anchored test binding · binding present · test/self-hosting-projections.test.ts:461
test:protocol.derived-readiness-banner.honest-headroom: the understated-rung point verifies the one-direction bound on the banner · anchored test binding · binding present · test/self-hosting-projections.test.ts:482
test:protocol.derived-readiness-banner.idea-floor-unmet: a Spec below the idea floor renders the floor reached as none and the banner below idea · anchored test binding · binding present · test/self-hosting-projections.test.ts:518
spec:consumers.design-review.pack-design-page dependsOn spec:consumers.derived-readiness-banner · declared — the member table renders the stated rung and floor reached as this rule specifies
spec:consumers.spec-studio.pack-page.maturity-map dependsOn spec:consumers.derived-readiness-banner · declared — the map sets each stated rung beside the floor reached, as the banner reads them
spec:consumers.derived-readiness-banner.honest-headroom · A rung the structure overshoots renders as information, not as a banner · declared · specs/consumers/derived-readiness-banner.honest-headroom.sdp.md · example enabled
test:protocol.derived-readiness-banner.idea-floor-unmet · a Spec below the idea floor renders the floor reached as none and the banner below idea · anchored · test/self-hosting-projections.test.ts:518 · test anchor