Skip to content

feat(discovery): add a forward reusable/action dependency passport - #82

Open
iperev wants to merge 1 commit into
feat/config-lifecycle-parityfrom
feat/dependency-passport
Open

iperev wants to merge 1 commit into
feat/config-lifecycle-parityfrom
feat/dependency-passport

Conversation

@iperev

@iperev iperev commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Stacked PR 27 — base: #81 (feat/config-lifecycle-parity). Do not merge yet. Review only the top commit.

Context

CI-022 needs exact caller, callee and action revisions without a second parser, a broad token or new omission authority. Discovery kept only the declared remote ref; step actions had no typed reference.

What changed

  • A component passport, outside the inventory digest, with one reference per job-level uses and per step uses.
  • Each reference carries its declared immutability, declarationsComplete, and a resolution: observed, unresolved (closed reason) or denied.
  • Same-commit callees are observed at the caller commit with their source blob.
  • Remote Git components are resolved under provisional owner decision (2026-10-11) D6, narrowed to the caller installation: same-account repository, found in the installation inventory, actor authorized for its scope, existing installation credential and existing provider operations.
  • Bounds: 8 targets, 4 concurrent reads, a 10-second deadline and one resolution per process. Reads run in a task group, so they are cancelled and finished before the admission is released.
  • References that the parser accepts but the component contract rejects (whitespace, Docker tag syntax, workflow-path contract) become invalid_reference and are never read.
  • The server and browser share one 2,097,152-byte discovery response budget. Above it, the passport is sent with referencesOmitted: true and no references, and the UI shows the omission explicitly.
  • API contract, regenerated OpenAPI/TS, strict browser re-admission, a Dependency passport table, docs, requirements and the CI-022 ROADMAP row.

Expected result

The operator sees every reusable workflow, action and Docker image with its caller. Authorized same-installation callees show an exact commit (and the callee blob for reusable workflows) with the read time. Everything else is explicitly denied or unresolved. Incomplete declarations, and references omitted for size, are never shown as a dependency-free list. A discovery the parser accepted never fails because of how its references are classified.

Non-claims:

  • No retained or historical resolution: moving tags are not yet prevented from rewriting past resolution.
  • No reverse consumers and no incomplete-not-none query.
  • No observed run usage.
  • No component inputs, annotated-tag dereference, other installations or registry digests.
  • Remote callee contents are not parsed.
  • No omission authority.
  • Responses that exceed the budget even without the passport are not handled.
  • No native, browser or live-provider qualification; no tests were run locally.

Provisional decisions: D6 (2026-10-11), narrowed to the caller installation.

Independent review: gpt-6-astra (xhigh); findings addressed or rejected with reasons in the single commit. Provisional owner decisions (2026-10-11) are labelled in the changed documents.

CI-022 needs exact caller/callee/action revisions without a second parser,
a broad token or a new omission authority. Discovery was request-scoped and
kept only the declared remote ref of a reusable call; step actions had no
typed reference at all.

The completed discovery outcome now carries a component passport outside
the inventory digest: one reference per job-level `uses` (reusable_workflow)
and step `uses` (action or docker_image) of the exact caller commit, with
repository/path/ref/digest split from the admitted syntax, declared
immutability, `declarationsComplete`, and a resolution of observed,
unresolved (closed reason) or denied. A same-commit callee is observed at the
caller commit with its source blob. A remote Git component is resolved under
provisional owner decision (2026-10-11) D6, narrowed to the caller
installation: only a same-account repository found in the caller
installation inventory (at most ten pages) and authorized for the actor is
read, with the existing installation credential and existing workflow
discovery operations (tag before branch, full SHA directly, commit, and the
workflow tree for the callee blob). At most eight targets, four concurrent
reads, a ten-second deadline and one resolution per process bound provider
cost; reads start after the snapshot completes, outside any database
transaction. Annotated tags, other installations, registries and local
actions stay unresolved. Only the operator read route composes a resolver;
proposal review, attestation and activation callers perform no extra reads.

Split coordinates that the parser admits but the component contract rejects
(surrounding whitespace in a ref or path, a Docker tag outside tag syntax, a
remote callee path failing the workflow-path contract) are invalid
references and never read targets, so classification cannot fail an
admitted discovery. Callee reads run in one task group, so a failed read or
the deadline cancels and joins every sibling before the resolution
admission is released. The route and the browser share one 2,097,152-byte
decoded discovery response budget; when the complete response exceeds it,
the passport is sent with `referencesOmitted: true` and no references, which
the browser renders as an explicit omission, never as an empty list.

The HTTP contract, generated OpenAPI/TS, strict browser re-admission and a
Dependency passport table expose the passport. ROADMAP CI-022, the O2 plan,
module/UI/how-to docs, REQ-CI-RUNTIME-019 and REQ-CI-UI-008 record the
delivered source and what remains: retained resolutions, reverse consumers
with incomplete-not-none, observed run usage (persistence, migration queue),
inputs, and native, browser and live-provider qualification.

No test, browser, database or provider witness was executed locally.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant