Skip to content

feat(fleet): require the central publisher lineage step - #52

Open
hseshadr wants to merge 1 commit into
feat/release-lineage-modulefrom
feat/require-publish-lineage
Open

hseshadr wants to merge 1 commit into
feat/release-lineage-modulefrom
feat/require-publish-lineage

Conversation

@hseshadr

Copy link
Copy Markdown
Owner

TL;DR

ci#50 made publisher lineage a module function and taught the fleet policy to accept it, but not to require it. A publisher with no lineage step still passed (edge-proc and assay today). This makes the lineage step mandatory: every publisher job must open with the exact release-lineage / release-provenance call, and its absence, or placing it after the candidate download, is a publisher-lineage finding (central lineage step required first).

Claim touched: "a publisher only publishes bytes whose candidate run GitHub itself proves came from main" (#49).

Merge order (do not merge early)

Stacked on #50 (feat/release-lineage-module). Merge only after #50, and after all four consumers have adopted lineage on main: edgeproc-core#60, privacy-core#49, edge-proc (fix/publish-lineage-module), assay (fix/publish-lineage-module). Merged earlier, the fleet scan goes red for those four on purpose.

Evidence

Check Result
New tests on #50's policy (red) 3 failed: lineage-less PyPI publisher, lineage-less npm publisher, lineage placed after the download
This branch 281 passed; root poe gate green, 97.54% coverage
Mutation: make lineage optional again (step is None -> ()) 3 failed (same three)
Fleet main workflows under this policy new publisher-lineage only in assay (2 jobs), edge-proc, edgeproc-core, privacy-core; 0 in the other 5 consumers
git merge-tree vs #47, #48, #51, main clean on all

Contract reversal (read this)

Two existing tests asserted lineage-less publishers as compliant: test_should_accept_pinned_dagger_ingress_and_exact_release_transports (its PYPI_BRIDGE / NPM_BRIDGE fixtures) and test_should_document_source_free_official_pypa_boundary (the Python publisher example in docs/dagger-modules.md). Both are updated, not deleted. The fixtures and the docs example now open with the lineage step. The docs' "Not yet enforced" note becomes "Required".

The docs example pins the lineage module at #50's head 3de1c4b. Re-pin it to the ci merge SHA after #50 merges.

🤖 Generated with Claude Code

https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a

ci#50 accepted the module-owned lineage step but did not require it, so a
publisher without it (edge-proc, assay) still passed. Every publisher job
must now open with the exact release-lineage / release-provenance call;
its absence, or placing it after the candidate download, is a
`publisher-lineage` finding.

The fleet_policy bridge fixtures and the docs' Python publisher example
asserted lineage-less publishers as compliant; both now carry the step.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
hseshadr added a commit that referenced this pull request Sep 26, 2026
Brings in #47 -> #48 -> #50 -> #52 so this PR merges last without
conflicts. Their README lines move to the new layout: the consumer list
(now with agentic-context-service and agentic-saga), the uncovered-consumer
failure and the required-minimum pin floor go to docs/ARCHITECTURE.md
"What dagger call fleet checks", with plain one-line versions in the README
intro. Publisher lineage and the dagger-args-expression rule are noted there too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oBArfm762nN1r4F4Fst5a
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