Repository navigation
Generated workflow YAMLs declare no provenance in their own bytes, so reviewers correctly apply the hand-shell gate to emitted files - #9954
Merged
Conversation
added 2 commits
September 1, 2026 16:47
# Conflicts: # .github/workflows/fleet-converge.yml # .github/workflows/witnesses.yml
added 5 commits
September 2, 2026 05:53
Contributor
|
Review 58634 is correct: |
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Project artifact-local provenance into every committed generated GitHub workflow.
gunbc.generated_artifact_emitattaches the provenance projection at the single artifact-bytes boundary and refuses a workflow whose projection is absent.Each banner names its declared generating module and function, says not to hand-edit the artifact, and cites the canonical
tools.generated_artifact_gate main_wetmodule-qualified symbol as the adjudication and regeneration route. The banner is a citation to executable evidence, not proof that the bytes were generated or that the declared generator is correct; the generated-artifact gate remains the evidence.Recurrence retired
Four REQUEST_CHANGES cycles reached the same false premise when reviewers encountered shell-bearing generated workflow YAML with no provenance in the diff-visible bytes. The reviews were correct on the evidence presented: generated standing existed only in
.gitattributes. This change places a generated citation to that standing in the artifact being reviewed, bringing the workflows in line with the existingdocs/design-ledgers.mdprecedent.Header attachment is construction rather than a post-hoc all-members validation.
ArtifactGeneratedworkflow content is prepended centrally. If the existing commit-policy registry saysGithubActionsWorkflowbut the provenance projection answersNotApplicable, generation returns typedArtifactGenerationRefused; non-workflow artifacts remain unchanged. The three workflow carriers no longer duplicate header production.The required build lane's generated-artifact drift gate is the executing consumer of the prepend.
observe_generated_artifact_populationreads each committed artifact, obtains its generated bytes throughartifact_generate, andobservation_findingscomparesgenerated_content == committed_content. Removing the central prepend while the committed YAML retains its banner therefore yieldsGeneratedArtifactContentDiffers; this is a live discriminating RED over the emitted bytes, not a second provenance oracle. It establishes that the prepend executed and agrees with committed bytes, while making no claim that the projected generator identity is correct.Rung and evidence boundary
This PR establishes presence, not provenance correctness:
The artifact dispatch and provenance projection remain independently authored mappings over
GeneratedArtifact. The current join therefore makes missing provenance fail closed at rung 3, but cannot adjudicate a plausible-yet-wrong generator citation. An agreement witness would require a machine-readable producer oracle that does not exist; copying that expectation into a test would add another authority rather than execute an agreement.The rung-4 trigger is fusion of workflow provenance with its generating dispatch in the artifact declaration. Then the visible citation is derivable only from the actual producer, making both omission and disagreement unconstructible. That load-bearing model change is out of scope here.
The prior all-members witness regenerated every workflow and duplicated the drift gate's subject while exceeding the required 500 ms per-claim ceiling. It was removed on the construction climb. An unbannered counterfactual workflow cannot currently be expressed as a fixture without altering the closed
GeneratedArtifactauthority; the missing counterfactual-artifact fixture harness is therefore the RED-evidence ceiling. The currently unreachable production refusal arm is retained deliberately: it is the zero-cost fail-closed behavior that becomes reachable if the enum grows, not a permanently green check cited as coverage.Test plan
gunbclocally with two jobs and no sccache.tools.generated_artifact_gate main_wettwice after the final authority cleanup; both passes succeeded and the second preserved diff digest44d1ebc4394f7379a251a9ec726eadf5ae9ecb14699835e40b449bd8017adc93byte-for-byte.tools.generated_artifact_gate main; passed with committed bytes matching generated bytes.cli_run::nfr_tests::nfr_roster_receiptbefore the centralization; passed. The retained provenance projection remains its enrolled site, and the new central join uses exhaustive arms.cargo fmt --all -- --check; passed.src/v1/stage0/src/gunbc_rust_source_type_bindings.rsSHA-256 beginsf2450c8d076de5b2after merging main.The previous-head CI run
33619274554also completed with build, Rust unit, and fabric-evidence green. Its floor refusal hadunexpected_failures=0,changed_witnesses=0, and 15 unrelated budget interruptions; the wording-only final commit starts a fresh run.