Ticket-047 built a working GitHub acquisition adapter but could never publish
it. Its work sits on a local main that branch protection refuses, and the
squashed commits fail CI governance twice over. This ticket republishes the
same bounded adapter through a route governance accepts, and removes the defect
that made it unpublishable.
Three findings drive the scope:
GOV-INTENT-003 — ticket-047’s intent.json and its implementation
landed in one commit. The standard requires the plan to exist in an earlier
commit than the implementation it authorizes.GOV-TICKET-001 — ticket-047 reached DONE before publication, and a
closed ticket holds no authority over implementation paths, so its own PR is
rejected.scripts/github-event-log.mjs read
process.env.GITHUB_EVENT_PATH and process.env.GITHUB_REPOSITORY as
fallbacks. verify:env scans scripts/** and requires every referenced key
in .env.example, but no workstream in .governance/manifest.json owns
.env.example, and the manifest is hash-locked to the pinned upstream
standard. No ticket can legally make that edit.Finding 3 is a defect, not a governance inconvenience: a bounded acquisition
boundary should not silently inherit ambient process state. Both flags are
already explicit, so the fallbacks are removed and the flags become required.
.env.example then needs no change at all.
Ticket-047’s directory travels with this ticket as its historical record. Its
DONE status and its log — including the explicit note that it carries no Koru
or Validator approval — are preserved verbatim, not rewritten.
process.env
fallbacks and the carried-over ticket-047 record are approved by a human
owner.scripts/github-event-log.mjs resolves the event path and the
repository only from --event-path and --repository, fails closed with a
named error when either is absent, and reads no process.env key.npm run verify:env passes with .env.example unchanged from
main, proving the unownable-path conflict is resolved at its cause.SYSTEM_FACT trust class, same immutable atomic publication — except that
every event now records SOURCE "github-actions" instead of github-api,
because the adapter reads a delivered payload and makes no API call.docs/EVENT_LOG_DSL.md documents both flags as required and
records that the adapter deliberately reads no environment variable.project/governance-check.sh --actor ci --base <base>
--head <head> passes against the PR base.scripts/github-event-log.mjs, republished with strictly
flag-driven input resolution. The ticket-046 codec remains the single
renderer, validator, digest chain and atomic writer.test/workflow-validation.test.ts, its bounded payload fixture and
docs/EVENT_LOG_DSL.md — extended with one case proving the adapter ignores
ambient environment state.main this PR targets, so the diff
contains no .env.example change and no path outside the integration
workstream or the manifest’s governancePaths..github/workflows/** wiring of the adapter; that stays deferred..env.example, .governance/** or the pinned standard, and no
attempt to widen workstream ownership to cover .env.example.CHANGELOG.md entry: that path is owned by no workstream, the same trap
this ticket removes for .env.example.The human owner approved this ticket on 2026-08-06, directing that the previous
changes be carried forward and the underlying problem fixed. The plan commit
carrying this file and intent.json precedes the implementation commit, as the
standard requires.
Publication completed after Validator approval of exact head 92f99dc and all
protected checks. PR #66 merged as main@f1b3d5d; this ticket is therefore
DONE. The earlier validation evidence remains unchanged in the ticket audit
record.