Skip to content

Disable automatic staging gate release trigger - #1502

Open
Chris0Jeky wants to merge 10 commits into
mainfrom
issue-1228/release-trigger
Open

Disable automatic staging gate release trigger#1502
Chris0Jeky wants to merge 10 commits into
mainfrom
issue-1228/release-trigger

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Closes #1228

Summary

  • remove the release: published subscription and unreachable release-event tag handling from the parked staging workflow
  • retain required-string manual dispatch, jobs, permissions, smoke/build phases, and the parked environment-handoff semantics
  • validate the operator-supplied image tag before it reaches shell/docker expressions
  • pin the complete reviewed parked workflow by normalized SHA-256 so any textual or semantic workflow drift requires an explicit checker/test review; keep Actionlint as the YAML-semantics gate
  • correct deployment/revival documentation and stop claiming that the currently unconfigured environment binding is an approval gate

Review finding follow-up

  • real environment required-reviewer protection remains maintainer-only [Deployment] Require real environment protection before staging-gate reactivation #1504 (Blocked / Priority II) in GitHub and the unchecked human-action list
  • the superseded archive wording is corrected to the accepted ADR-0044 revival/public-beta posture
  • 13 regressions cover the exact reviewed workflow, CRLF normalization, alternate trigger forms, optional/non-string/defaulted inputs, comment/scalar/escaped-key forgeries, bracket/environment release references, and the valid enclosing-scalar bypass found in final review
  • all bespoke line/subtree YAML inspectors were removed after repeated adversarial bypasses; a complete-file digest is intentionally stricter and dependency-free

Verification

  • node --test scripts/check-github-ops-governance.test.mjs — 13/13 passed
  • node scripts/check-docs-governance.mjs — passed
  • node scripts/check-golden-principles.mjs — passed
  • node scripts/check-github-ops-governance.mjs — passed
  • pinned rhysd/actionlint:1.7.12 on the checked-in workflow — passed
  • the reported enclosing-scalar mutation with an effective release trigger remains Actionlint-valid and is rejected by the digest regression
  • git diff --check — passed

Not verified

  • no release event was emitted; absence of that subscription is enforced by the reviewed full-file pin and Actions lint
  • no manual staging deployment or environment approval was run because the staged cloud path remains parked and the live repository has no protected production environment
  • workflow-equivalent Compose validation currently fails without the mandatory connector-encryption key; this newly discovered manual-rehearsal blocker is tracked in [CI] Make the parked staging-gate rehearsal reach its handoff #1506, so the PR is parked under the review-loop ceiling

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1ec17437a1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/IMPLEMENTATION_MASTERPLAN.md Outdated
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent adversarial review #2 — security / governance / tests

Exact head reviewed: 1ec17437a1a6c04de2feba95b456baf3e1af8fd3

I first inspected the PR conversation, reviews, and review threads, plus linked issue #1228 and its existing maintainer comment. At posting time the PR has the @codex review request and one Codex DCO thread; no other PR comments/reviews were present.

MEDIUM

  1. The retained “manual approval” is not an active gate, so the workflow and canonical docs would report an approval that never occurred.

    The promotion job merely references environment: production and then unconditionally writes “Manual approval: granted” (workflow lines 188–205). A live GET /repos/Chris0Jeky/Taskdeck/environments immediately before this review returned only copilot and github-pages; there is no production environment or required-reviewer rule. GitHub documents that a workflow reference to a missing environment creates it without protection rules or secrets, so this job will not wait for approval (GitHub environment documentation).

    This contradicts the new Masterplan claim that manual approval “remain[s] available” (line 15), the deployment guide’s “Requires manual approval” statement (line 298), and the PR summary. The job does not itself deploy, which limits immediate blast radius, but it emits a false production-approval record. Either configure and prove a protected production environment with required reviewers (and record that external prerequisite), or make the job, PR body, and canonical docs truthful about the current unprotected environment reference.

  2. The verification does not prove cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build #1228’s requested negative-trigger behavior.

    The existing maintainer comment on cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build #1228 explicitly asks to confirm that a test tag/release event triggers nothing waiting on production. The PR’s Not verified section confirms no release event was emitted. Exact-head Workflow Lint proves Actions syntax, while Docs Governance proves the repository’s mechanical documentation rules; neither emits a release event nor asserts this workflow’s trigger set. The diff is persuasive manual evidence that release: published was deleted, but the linked verification requirement remains unproved and there is no executable regression guard. Add a deterministic trigger-contract check (Actions-aware parsing/assertion that this workflow exposes only workflow_dispatch with required image_tag) or keep cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build #1228 open until authorized post-merge live negative-event evidence is recorded. The PR should not say hosted workflow validation will “exercise” the release-trigger change when it only lints it.

Existing-feedback triage

The Codex DCO thread is invalid for this exact head: it cites 2087697bf039c8ae6541a39067aad7a26ccff9e7, which is not in the PR’s two-commit list and is not found by the repository commit API. The actual commits are 948d5705b1f9cc337382ca0a14556777f86087e9 and 1ec17437a1a6c04de2feba95b456baf3e1af8fd3; both include matching Signed-off-by: trailers, and the exact-head DCO check is green. No DCO rewrite is needed.

Other reviewed surfaces

  • Event syntax is valid and the head’s top-level trigger is now only workflow_dispatch.
  • image_tag remains a required string; skip_smoke remains a boolean, and the build/smoke job dependency behavior is unchanged.
  • Workflow permissions remain read-only (contents: read, actions: read); no new secret or write permission was introduced.
  • Scope is otherwise faithful: one trigger subscription removed, existing jobs retained, and the six-file diff is limited to workflow truth and its documentation mirrors.

Copy link
Copy Markdown
Owner Author

Independent adversarial review #1 — correctness / operational semantics

Reviewed exact head 1ec17437a1a6c04de2feba95b456baf3e1af8fd3 against base 2f62c8ca82a66c5417abd03688e9dbbd219319d4.

Inspected: the PR body; linked issue #1228 and its existing comment; every current PR conversation comment, review submission, and inline thread; the complete six-file patch; the full staging workflow; adjacent release-desktop.yml, ci-release.yml, and release-security.yml trigger surfaces; ADR-0028 and the changed current-state/roadmap/ops/packaging docs; live repository environment and workflow-run state; and exact-blob actionlint:1.7.12.

CRITICAL

None.

HIGH

None.

MEDIUM

  1. The retained “manual approval gate” is not enforced and currently records approval without a reviewer.
    Locations: .github/workflows/cd-staging-gate.yml:188-208, docs/IMPLEMENTATION_MASTERPLAN.md:15, docs/STATUS.md:585, and docs/ops/DEPLOYMENT_WORKFLOW.md:298.

    The workflow only declares environment: production. The live environments API reports exactly copilot and github-pages; there is no production environment or required-reviewer rule. GitHub documents that a workflow referencing a missing environment creates it without protection rules or secrets (GitHub environment documentation). A manual dispatch after merge can therefore create an unprotected production environment and immediately write “Promotion Gate -- APPROVED” / “Manual approval: granted” without human review.

    Risk: the trigger deletion correctly prevents release publication from starting this workflow, but the PR body and updated canonical docs falsely preserve an approval control and a trustworthy approval record for the remaining manual path. The promotion job is summary-only, so I found no direct production mutation or data-loss path, but the operator/audit semantics are fail-open.

    Required fix/evidence: either configure and API-verify a production environment with the intended required reviewer before claiming this control exists, or change the workflow and docs so the parked manual path fails closed / accurately states that no environment approval is configured. Verification should prove the live required-reviewer rule or prove the revised no-approval behavior; syntax lint alone cannot establish repository environment protection.

LOW

  1. The changed packaging document still presents the superseded archive plan as current.
    Location: docs/strategy/02_PACKAGING_DISTRIBUTION_STRATEGY.md:7.

    This PR edits the banner paragraph but still calls v0.1.0 an “optional archival” release and ends with “Current scope … then archive.” That conflicts with OUTSTANDING_TASKS.md:38,62 and source-of-truth docs/STATUS.md:13, where the archive pivot is superseded and v0.1.0 is a required free-beta ship gate.

    Risk: an actively synchronized packaging page can route operators/agents to the opposite release decision despite canonical-doc precedence.

    Required fix: update this touched banner so the archive language is explicitly historical/checkpoint-only and the required revival/beta release is current; retain only the genuinely parked multi-channel/store/GTM scope.

Existing feedback disposition

  • The @codex review conversation comment is an informational review trigger.
  • The current Codex P1 DCO inline finding is invalid at this exact head. GitHub’s PR-commits endpoint lists only 948d5705b1f9cc337382ca0a14556777f86087e9 and 1ec17437a1a6c04de2feba95b456baf3e1af8fd3; both commit messages contain a matching Signed-off-by: trailer, and the exact-head DCO (advisory) check is passing. The cited 2087697bf039c8ae6541a39067aad7a26ccff9e7 is not in the PR commit set, so it should be replied to/dismissed as a false positive rather than prompting history changes.

Trigger and regression conclusion

Removing the release stanza fully removes automatic release.published subscription once this head reaches the default branch. No workflow_call or indirect workflow caller exists, and exact-head actionlint:1.7.12 passes. The changed trigger reduces automatic execution exposure; I found no security or data-loss regression in the patch. Hosted CI/CI Extended completion and an actual release/manual event were not part of this review proof.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

Testing

  • node --test scripts/ci/check-staging-gate-trigger.test.mjs — 3 tests passed.
  • node scripts/check-docs-governance.mjs
  • node scripts/check-golden-principles.mjs
  • node scripts/check-github-ops-governance.mjs
  • git diff --check
  • git diff --cached --check
  • git status --short --branch — clean on branch work.
  • ⚠️ docker run --rm -v "${PWD}:/repo" -w /repo rhysd/actionlint:1.7.12 .github/workflows/cd-staging-gate.yml .github/workflows/reusable-docs-governance.yml — Docker is unavailable in this environment, so hosted Workflow Lint remains responsible for actionlint validation.

Documentation

Outstanding Maintainer Checklist

OUTSTANDING_TASKS.md remains human-owned and unchanged. Its open work includes #1133, the cohort-metrics and Ollama-streaming gaps, the remaining #1134 criteria, #1123, #1132, #1131, #1166, #1138, #1136 remainder, #1137, #1135/#1140/#1141/#1139, GEN-00/#1327 and its checkpoint, REVIVAL-00/#1311 and Phases 0–3, #1278, #1269#1272, #1274#1277, #1291, #1173, #1303, #1482, the maintainer check-off for #1458, #1330, #1282/#1332/#1335, #1338, #1343, the #1345 check-off, #1347/#1348, #1323, the gated #1456/#1457 canaries, merged-worktree pruning, and explicit-base branch discipline.

View task →

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Review finding resolution ? af8bbeee

All findings from the two exact-head review comments are addressed:

  • MEDIUM ? absent environment protection / false approval claim: renamed the final job as an environment handoff, removed every ?approved/manual approval granted? assertion, and corrected STATUS/MASTERPLAN/ops docs. The real maintainer-owned environment protection requirement is tracked in [Deployment] Require real environment protection before staging-gate reactivation #1504 (Blocked / Priority II).
  • MEDIUM ? no persistent negative release-event proof: scripts/check-github-ops-governance.mjs now fails unless this parked workflow's only top-level trigger is workflow_dispatch; it also rejects stale github.event.release handling. The unreachable release tag branch was removed.
  • LOW ? superseded packaging framing: the strategy header now states that ADR-0044 superseded the archive pivot and that v0.1.0 is the required free-beta gate, while non-ratified distribution tracks remain parked.
  • LOW ? dead release-event resolution logic: removed; required inputs.image_tag is now validated against the container-tag character/length contract before use.
  • Invalid DCO bot signal: no code change; all three commits have Signed-off-by trailers and the hosted DCO check is green.

Fresh local verification on af8bbeee:

  • GitHub operations governance: pass
  • Docs governance: pass
  • Golden principles: pass
  • pinned actionlint 1.7.12: pass
  • git diff --check: pass

Fresh exact-head CI, CodeQL, Codex, and two independent re-reviews are now required; all prior head evidence is stale.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

Testing

  • node scripts/check-github-ops-governance.mjs
  • node scripts/check-docs-governance.mjs
  • node scripts/check-golden-principles.mjs
  • go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.12 .github/workflows/cd-staging-gate.yml
  • git diff --check
  • git commit -s --no-gpg-sign -m "Make parked staging verification fail closed"
  • ⚠️ docker run --rm -v "${PWD}:/repo" -w /repo rhysd/actionlint:1.7.12 .github/workflows/cd-staging-gate.yml — Docker is unavailable in this environment; the exact Actionlint version passed through the Go runner instead.
  • ⚠️ No live release event or staging dispatch was emitted because the cloud staging path is parked; the new deterministic governance check proves the trigger/input/no-environment contract statically.

Outstanding Maintainer Checklist

No OUTSTANDING_TASKS.md items were checked off. The principal open groups remain:

  • Product/code follow-ups: #1133, cohort metrics/#1142, Ollama streaming, #1134, #1123, #1132, #1131, #1166, #1138, #1136, #1137, and #1135/#1140/#1141/#1139. OUTSTANDING_TASKS.mdL28-L51
  • Generalist and revival gates: GEN-00/#1327, GEN-12/#1326, REVIVAL-00/#1311, dogfooding/#1271, and Phases 1–3 plus the checkpoint. OUTSTANDING_TASKS.mdL53-L69
  • Historical-wave work retained under the revival plan: #1278, #1269#1272, #1274#1277, and #1291. OUTSTANDING_TASKS.mdL71-L86
  • Maintainer/overnight deferrals: #1173, #1303, #1482, #1458 record check-off, #1330, #1282/#1332/#1335, #1338, #1343, #1345 record check-off, #1274/#1347/#1348, #1323, #1456, and merged-worktree pruning. OUTSTANDING_TASKS.mdL89-L104

View task →

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: af8bbeee2b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/check-github-ops-governance.mjs Outdated
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent security/governance re-review

Exact head: af8bbeee2b45d056b252d18dc59dbbbc38cd6a66
Base: 2f62c8ca82a66c5417abd03688e9dbbd219319d4

I inspected all seven conversation comments, both review submissions, both inline threads, linked #1228 and its comment, the complete seven-file base-to-head diff, the full workflow and governance script, live environment/project state, and exact-head checks.

CRITICAL / HIGH

None.

MEDIUM

  1. The new “manual-only” governance check is not fail-closed for valid GitHub Actions event syntax.

    At scripts/check-github-ops-governance.mjs:167-169, trigger discovery only recognizes an indentation-two key when the colon is followed by whitespace and end-of-line. Therefore this valid workflow fragment:

    on:
      workflow_dispatch:
      release: { types: [published] }

    is parsed by the new checker as ["workflow_dispatch"], so its “exactly one trigger” condition passes while release.published is live again. I independently passed that exact fragment through pinned rhysd/actionlint:1.7.12 via stdin; it exited 0. A quoted key such as "release": { types: [published] } also passes Actionlint and is likewise invisible. The separate stale-handler check is brittle too: EVENT_NAME == "release" does not match the former shell spelling "$EVENT_NAME" == "release".

    This corroborates the newly posted current-head Codex P2 thread with independent execution evidence. Fix trigger parsing so every valid top-level event key/value form is recognized—or conservatively reject any unrecognized indentation-two mapping entry—and add adversarial regression cases for inline/flow values, quoted keys, and comment-suffixed keys. Until then, Required Docs Governance does not provide the persistent negative-trigger proof claimed by the PR.

LOW

  1. Maintainer-only [Deployment] Require real environment protection before staging-gate reactivation #1504 is correctly tracked in GitHub, but missing from the repository’s durable human-action checklist.

    Live state is good as far as it goes: #1504 is open with explicit acceptance criteria, labels hardening / Priority II / ci, and project fields Blocked / Priority II. However, OUTSTANDING_TASKS.md:3-10 defines that file as the durable human-owned cross-session checklist and requires substantial deferred work to be added there. #1504 does not appear in the file, even though this PR deliberately defers environment protection and rehearsal to the maintainer. Add one lean unchecked [Deployment] Require real environment protection before staging-gate reactivation #1504 entry under the human/overnight deferrals; keep the detail in the issue.

Verified fixes and unchanged safeguards

  • The checked-in workflow itself is genuinely workflow_dispatch-only, and exact-head Workflow Lint is green.
  • The new tag regex matches the Docker tag contract and closes the shell/output injection seam: representative valid values plus the 128-character boundary pass; leading -/., separators such as ; and /, newline input, and 129 characters reject.
  • Permissions remain read-only (contents: read, actions: read); no secret or deployment write was added.
  • Environment language is now truthful. The live repository still has only copilot and github-pages, no production; the workflow records a handoff rather than approval, and [Deployment] Require real environment protection before staging-gate reactivation #1504 owns required-reviewer protection before reactivation.
  • Revival/packaging wording now correctly makes v0.1.0 a required free-beta gate while leaving unratified distribution tracks parked.
  • All three PR commits contain Signed-off-by: trailers and exact-head DCO is green. The old DCO thread remains an outdated false positive.
  • Exact-head Docs Governance is green. At review time two broader jobs were still running, with no current failures.

Existing-comment disposition

The owner’s af8bbeee resolution comment matches the actual head except for the fail-closed claim above. The two automated coding-task summaries citing eb3fcb... / 24617e..., separate checker/test files, or removal of the environment job do not describe this PR’s commit set or seven-file diff and should not be counted as exact-head fix evidence. The two @codex review comments are informational triggers.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

  • Hardened staging-trigger discovery to recognize block, inline/flow, quoted, and comment-suffixed event mappings. Unrecognized top-level on entries are now rejected conservatively, preserving the manual-only contract. scripts/check-github-ops-governance.mjsL144-L168 scripts/check-github-ops-governance.mjsL195-L207
  • Added adversarial regression coverage for inline automatic triggers, quoted keys, comment-suffixed keys, and otherwise unrecognized indentation-two mappings. scripts/check-github-ops-governance.test.mjsL6-L45
  • Added the regression suite to Required Docs Governance before the production governance check executes. .github/workflows/reusable-docs-governance.ymlL60-L63
  • Added the maintainer-only #1504 environment-protection configuration and rehearsal task to the durable checklist. No existing checklist item was checked off. OUTSTANDING_TASKS.mdL89-L95
  • Created signed-off commit 438e146b2919b222d77700733acd05092d51413d (Fail closed on staging trigger mappings).
  • Created follow-up PR metadata through make_pr with title “Fail closed on all staging trigger mappings.”
  • Canonical docs/STATUS.md and docs/IMPLEMENTATION_MASTERPLAN.md were not changed because this follow-up hardens governance verification without changing shipped product or roadmap reality.

Testing

  • node --test scripts/check-github-ops-governance.test.mjs — 3 tests passed.
  • node scripts/check-github-ops-governance.mjs
  • node scripts/check-docs-governance.mjs
  • node scripts/check-golden-principles.mjs
  • go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.12 .github/workflows/reusable-docs-governance.yml .github/workflows/cd-staging-gate.yml
  • git diff --check
  • git diff --cached --check
  • git commit -s --no-gpg-sign -m "Fail closed on staging trigger mappings"
  • git status --short --branch — clean working tree on branch work.

Outstanding Maintainer Work

The durable checklist remains open, including #1173, newly recorded #1504, #1303, #1482, #1458 maintainer check-off, #1330, #1282/#1332/#1335, #1338, #1343, #1345 check-off, #1274, #1347/#1348, #1323, #1456/PR #1457, and merged-worktree pruning. OUTSTANDING_TASKS.mdL91-L105

View task →

Copy link
Copy Markdown
Owner Author

Independent exact-head re-review #1 — correctness / operational semantics

Head: af8bbeee2b45d056b252d18dc59dbbbc38cd6a66
Base: 2f62c8ca82a66c5417abd03688e9dbbd219319d4

Before reviewing the final diff, I inspected all eight current conversation comments, both review submissions, both inline threads, linked #1228 plus its comment, and #1504. I then inspected the complete seven-file base-to-head diff, the full workflow/checker/docs, live environment and ProjectV2 state, the PR commit set, and exact-head checks.

CRITICAL / HIGH

None.

MEDIUM

  1. The new trigger/input governance contract is still fail-open, so the prior persistent-proof finding is not resolved.
    Location: scripts/check-github-ops-governance.mjs:143-179.

    The checker only recognizes a two-space event key when the colon is followed by whitespace and end-of-line. I injected this valid sibling into the exact-head workflow in memory:

    on:
      workflow_dispatch:
        # existing inputs...
      release: { types: [published] }

    Pinned rhysd/actionlint:1.7.12 accepted the mutated workflow, while executing the exact extraction/conditions from lines 151–179 returned:

    {"triggerNames":["workflow_dispatch"],"governanceErrors":[]}

    Therefore Required Docs Governance can stay green while release.published is live again. This independently confirms the current-head Codex P2 thread.

    The check also does not inspect workflow_dispatch.inputs.image_tag at all, despite the PR claiming that it preserves a required string input. Both required: false and type: boolean mutations pass Actionlint and the new governance conditions; with type: boolean, the runtime regex accepts the resulting "true"/"false" value as a container tag.

    Risk: the checked-in workflow is manual-only today, but the purported fail-closed regression gate does not prove the trigger or input contract it is being used to close cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build #1228 with. A valid future YAML spelling can silently restore automatic runs.

    Required fix/tests: structurally parse the complete on mapping, or conservatively reject every unrecognized indentation-two mapping entry regardless of value syntax. Assert image_tag.required === true and type === "string". Add adversarial tests for block and flow event values, quoted/comment-suffixed keys, required: false, and a non-string type. The current-head runtime tag regex itself is sound; this finding concerns the persistent governance proof.

LOW

  1. Maintainer-owned [Deployment] Require real environment protection before staging-gate reactivation #1504 is correctly tracked live but is missing from the durable human-action checklist.
    OUTSTANDING_TASKS.md:3-10 requires substantial deferred/human work to be recorded in that human-owned cross-session list. Live verification shows [Deployment] Require real environment protection before staging-gate reactivation #1504 is open with clear no-reactivation acceptance criteria, labels hardening / Priority II / ci, and project fields Blocked / Priority II; however, OUTSTANDING_TASKS.md contains no [Deployment] Require real environment protection before staging-gate reactivation #1504 entry.

    Required fix: add one lean unchecked [Deployment] Require real environment protection before staging-gate reactivation #1504 item under the human/overnight deferrals, keeping implementation detail in the issue. This independently confirms the current security/governance re-review’s LOW finding.

Prior-finding resolution verdict

  • False manual-approval claim: resolved. The workflow and docs now describe an unprotected environment handoff, not approval. [Deployment] Require real environment protection before staging-gate reactivation #1504 correctly owns required-reviewer protection and rehearsal before any reactivation.
  • Revival packaging truth: resolved. The banner makes ADR-0044/free-beta v0.1.0 current and the older distribution plan explicitly historical.
  • Dead release-event fallback: resolved.
  • Runtime image-tag validation: verified against representative valid/rejected values and the 128/129-character boundary; it fails closed before shell/Docker use.
  • Persistent negative-trigger/input proof: not resolved, per the MEDIUM finding above.
  • Old DCO thread: remains an outdated false positive. The PR contains only 948d5705, 1ec17437, and af8bbeee; all three have Signed-off-by: trailers and exact-head DCO is green.
  • The automated summaries citing eb3fcb... / 24617e..., separate checker/test files, or removal of the environment job describe transient alternatives, not this PR’s final commit set/diff; they are stale, not exact-head evidence.

Current-head conclusion

The actual workflow is workflow_dispatch-only, exact-head Actionlint and git diff --check pass, permissions remain read-only, #1228 is still the sole closing issue, and I found no current security or data-loss regression. At posting time exact-head checks had no failures, with broader CI jobs still pending; no live release event or staging dispatch was performed.

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Review-fix evidence — exact head 239625530e695a74752598560817b344231fe257

Both independent re-review reports are addressed in signed commit 23962553:

  • MEDIUM, fail-open event parsing: the governance contract now recognizes block, inline/flow, quoted, and comment-suffixed top-level event keys and fails closed on unfamiliar indentation-two entries.
  • MEDIUM, unguarded manual input: the same contract now requires exactly one workflow_dispatch.inputs.image_tag with required: true and type: string.
  • MEDIUM, brittle stale-branch detection: github.event_name, github.event.release, and EVENT_NAME release-era handling are rejected regardless of the former shell quoting.
  • LOW, deferred human action: unchecked maintainer-only [Deployment] Require real environment protection before staging-gate reactivation #1504 is now in OUTSTANDING_TASKS.md; no item was checked off.

Verification on this exact commit:

  • node --test scripts/check-github-ops-governance.test.mjs — 8 passed
  • node scripts/check-github-ops-governance.mjs — passed
  • node scripts/check-docs-governance.mjs — passed
  • node scripts/check-golden-principles.mjs — passed
  • pinned rhysd/actionlint:1.7.12 — passed
  • git diff HEAD^ --check — passed
  • signed-off commit trailer present

The push invalidates prior CI/review evidence; fresh exact-head automation and both independent re-reviews are required before merge.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

@codex review

Please re-review exact head 2396255, including the new fail-closed trigger/input governance regressions and #1504 human-action record.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 239625530e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/check-github-ops-governance.mjs Outdated
Comment thread scripts/check-github-ops-governance.mjs Outdated
Comment thread .github/workflows/reusable-docs-governance.yml
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent security/governance exact-head re-review — findings remain

Head: 239625530e695a74752598560817b344231fe257
Base: 2f62c8ca82a66c5417abd03688e9dbbd219319d4

I inspected all 12 conversation comments, all three review submissions, all five inline threads, linked #1228 and its maintainer comment, #1504, the complete ten-file base-to-head diff, the four-file fix commit, the full workflow/checker/tests/docs, live environments and ProjectV2 state, the four-commit set, and exact-head checks.

CRITICAL / HIGH

None.

MEDIUM

  1. The required image_tag governance contract permits a default, so it does not require a deliberate operator-supplied tag.
    Location: scripts/check-github-ops-governance.mjs:228-299.

    I added default: latest beneath an otherwise valid required: true / type: string input in memory. Pinned rhysd/actionlint:1.7.12 accepted the workflow (exit 0), and the exact-head validateParkedStagingGateWorkflow() returned []. A manual dispatch can therefore use the prefilled default while the guard still describes the input as explicit and fail-closed; the runtime tag regex accepts latest.

    The checked-in workflow has no default, so this is a persistent-proof defect rather than a current dispatch regression. Extend the input inspection to reject any default entry and add a regression case.

  2. Release-era handling written with supported bracket notation bypasses the stale-handler invariant.
    Location: scripts/check-github-ops-governance.mjs:180-181.

    These actionlint-valid expressions all returned false from retainsReleaseEventHandling() and left the full validator green:

    • github['event_name'] == 'release'
    • github['event']['release']['tag_name']
    • github.event['release'].tag_name

    The trigger parser still prevents a release subscription today, so there is no live automatic-run path from this gap alone. However, the new cleanup invariant can silently admit release-specific dead code, contrary to the claimed fail-closed contract. Cover bracket/mixed property access and add regression tests.

LOW

  1. The canonical local governance sequences omit the new unit-test command.
    Locations: docs/TESTING_GUIDE.md:84-106 and .github/workflows/reusable-docs-governance.yml:60-63.

    Required Docs Governance now runs node --test scripts/check-github-ops-governance.test.mjs, but both documented local sequences run only the production checker. Add the test command to Windows with the documented fail-fast handling and to the POSIX sequence before the checker.

Verified fixes and unchanged safeguards

  • The actual workflow is manual-only. Direct exact-head validation returned no errors; block, flow, quoted, comment-suffixed, push, explicit-mapping, and inline-on automatic forms were either discovered or rejected conservatively.
  • Missing, optional, non-string, inline, and duplicate input-field mutations fail through the governance-plus-pinned-actionlint gate. The exact workflow and reusable governance workflow both pass pinned actionlint.
  • The runtime tag regex still passes representative safe tags and the 128-character boundary, while rejecting leading -/., separators, newline input, and 129 characters.
  • False approval language, revival packaging truth, and dead dot-notation/EVENT_NAME release fallback findings remain fixed. Live environments are still only copilot and github-pages; no production protection is being claimed.
  • [Deployment] Require real environment protection before staging-gate reactivation #1504 is open with the correct maintainer-only acceptance criteria, labels hardening / Priority II / ci, and project fields Blocked / Priority II. It is now recorded as an unchecked human action in OUTSTANDING_TASKS.md:91.
  • All four PR commits have Signed-off-by: trailers and exact-head DCO is green. The old DCO thread is an outdated false positive; the old trigger-parser thread is resolved by the current code and outdated.
  • The two earlier automated coding-task summaries still describe transient non-PR alternatives and are not exact-head evidence.

Exact-head checks / residual risk

At the final pre-post refresh: 32 checks succeeded, 5 were skipped, 0 were neutral, and 3 were still running; no completed check had failed. Docs Governance, Workflow Lint, and DCO were green.

No release event or manual staging dispatch was emitted, and no environment approval was exercised. Those live operations remain intentionally unverified while the path is parked. The three current Codex threads are valid and must be addressed under the repository review policy before this head is merge-ready.

Copy link
Copy Markdown
Owner Author

Independent exact-head re-review #1 — correctness follow-up

Head: 2396255
Base: 2f62c8c

Before opening the new commit, I read all 13 current conversation comments, all three review submissions, and all five inline threads, plus #1228 and #1504. I then reviewed the complete ten-file base-to-head diff and the four-file af8bbee..2396255 fix, and ran the exact-head checker/tests plus independent Actionlint-valid adversarial fixtures.

CRITICAL / HIGH

None.

MEDIUM

  1. A column-zero YAML comment still lets an automatic event escape trigger discovery.
    Location: scripts/check-github-ops-governance.mjs lines 153–175.

    The raw-line scan breaks on the first non-whitespace line before distinguishing a YAML comment. Comments do not close the surrounding mapping, so this is a valid Actions workflow:

    on:
      workflow_dispatch:
        inputs:
          image_tag:
            required: true
            type: string
    # This comment does not end the on mapping.
      release:
        types: [published]

    Pinned rhysd/actionlint:1.7.12 returned exit 0. The exact-head inspector reported only workflow_dispatch, and validateParkedStagingGateWorkflow() returned an empty error list. Required Docs Governance can therefore remain green while release.published is active again. Add this exact regression fixture; moving comment handling before the break would close this bypass, but not the input-parser defect below.

  2. The input guard reads lexical lines rather than the effective YAML mapping, so fake fields inside a scalar can satisfy it.
    Location: scripts/check-github-ops-governance.mjs lines 184–266.

    This Actionlint-valid input also returned no governance errors:

    image_tag:
      description: "
      required: true
      type: string
      "
      "requ\u0069red": false
      "t\u0079pe": boolean

    The scanner mistakes the continuation text inside description for real fields and does not YAML-decode the escaped keys. PyYAML’s effective mapping was:

    {"description":" required: true type: string ","required":"false","type":"boolean"}

    Removing the two escaped fields is also accepted by Actionlint and the validator: required is then absent/default-false while the multiline description supplies the fake text. Separately, I confirmed the current Codex/default finding: adding default: latest to a real required string input is Actionlint-valid and also returns no governance errors.

    Expected fix/tests: inspect a YAML-decoded structure using the same effective key/scalar semantics as Actions, require effective required === true and type === string, and reject an effective default. Add multiline quoted-scalar and escaped-key fixtures in addition to the current default case.

  3. The release-era cleanup predicate remains bypassable through supported expression and environment forms.
    Location: scripts/check-github-ops-governance.mjs lines 180–181.

    I independently confirmed the current bracket-notation thread: github['event_name'], github['event']['release'], and github.event['release'] all pass Actionlint while retainsReleaseEventHandling() returns false. The standard shell form using "$GITHUB_EVENT_NAME" == "release" is missed as well. The checked-in workflow contains no such branch, but the claimed cleanup invariant is incomplete. Cover the supported bracket/mixed access forms and GITHUB_EVENT_NAME, or narrow/remove the invariant rather than describe it as fail-closed.

LOW

  1. The canonical local verification sequences omit the new regression-test command.
    docs/TESTING_GUIDE.md lines 80–106 lists only the production checker for Windows and POSIX, while Required Docs Governance runs node --test scripts/check-github-ops-governance.test.mjs first. I confirm the current Codex thread: add the test command, including PowerShell fail-fast handling.

Prior-finding resolution verdict

  • The direct inline/quoted/comment-suffixed event cases from the prior round are now recognized, but the persistent trigger proof is not resolved because of the column-zero-comment fixture.
  • Required-string field checks were added, but the effective input contract is not resolved because of default and scalar/escaped-key fixtures.
  • [Deployment] Require real environment protection before staging-gate reactivation #1504 is now accurately recorded as an unchecked maintainer-only action in OUTSTANDING_TASKS.md; that LOW is resolved.
  • False approval language, revival packaging truth, dead checked-in release fallback, runtime tag validation, read-only permissions, and the actual workflow’s manual-only trigger remain resolved/correct.
  • The old DCO thread remains an outdated false positive; all four PR commits contain Signed-off-by trailers and exact-head DCO is green.
  • The transient bot summaries citing non-PR commits remain non-evidence. The three current Codex threads and the current security/governance report are valid; this review adds the column-zero-comment, multiline-scalar/escaped-key, and GITHUB_EVENT_NAME cases.

Exact-head evidence / residual risk

Exact-head unit tests passed 8/8; the production governance, docs-governance, and golden-principles checks passed; both changed workflows passed pinned Actionlint; and git diff --check passed. The adversarial fixtures above also pass pinned Actionlint while the governance validator returns success.

At the immediate pre-post refresh, exact-head CI had 33 successes, 5 skips, 2 jobs still running, and no failures. No release event, manual staging dispatch, or environment approval was exercised. The checked-in workflow itself is safe today, but this head is not merge-ready because its required persistent proof remains fail-open and the current all-severity review findings are unresolved.

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Fix evidence for exact head b5c3c1c593a32fedbab45c1898638632b0612395 (Close staging gate governance bypasses):

  • Defaulted image_tag, column-zero-comment trigger insertion, multiline-scalar property forgery, escaped-key forgery, and all alternate trigger shapes now fail the same frozen contract: the complete reviewed on:/input block must match exactly. The brittle line-oriented YAML inspectors were removed.
  • Bracket, mixed-dot/bracket, and $GITHUB_EVENT_NAME release references are normalized and rejected as stale release handling.
  • docs/TESTING_GUIDE.md now includes the governance test command in both canonical command sequences.

Verification on this exact commit:

  • node --test scripts/check-github-ops-governance.test.mjs — 12/12 passed, including every adversarial fixture above.
  • node scripts/check-github-ops-governance.mjs — passed.
  • node scripts/check-docs-governance.mjs — passed.
  • node scripts/check-golden-principles.mjs — passed.
  • docker run --rm -i rhysd/actionlint:1.7.12 - against .github/workflows/cd-staging-gate.yml — passed.
  • git diff --check — passed.

The exact-block invariant is intentionally strict for this parked workflow: any future trigger/input change must be a deliberate checker-and-test change, while Actionlint remains the YAML semantics backstop.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

@codex review exact head b5c3c1c after the final review-finding fix batch, please.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b5c3c1c593

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/IMPLEMENTATION_MASTERPLAN.md Outdated
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent governance/security exact-head review — findings

Head: b5c3c1c593a32fedbab45c1898638632b0612395
Base: 2f62c8ca82a66c5417abd03688e9dbbd219319d4

Before reviewing the final diff, I inspected all 16 conversation comments, all eight review submissions, all five inline threads (all currently resolved), linked #1228 and its maintainer comment, and the complete 11-file/five-commit patch.

CRITICAL / HIGH

None.

MEDIUM

  1. The frozen raw-text block can be hidden inside a multiline YAML scalar, so Required Docs Governance can pass while the effective workflow regains release.published.
    Location: scripts/check-github-ops-governance.mjs:164-180, invoked by reusable Docs Governance.

    The validator proves that a byte-identical on:permissions: substring exists, but not that those lines are the effective YAML mapping. I constructed an in-memory mutation that:

    • changes the preceding workflow name to an open multiline single-quoted scalar (name: ');
    • leaves the entire expected raw on:/input block untouched inside that scalar and closes the quote after the first raw permissions: section;
    • adds the effective key as quoted "on":, containing the same workflow_dispatch inputs plus release: { types: [published] }.

    On that valid mutation:

    {"governanceErrors":[],"actionlintStatus":0,"effectiveTriggerKeys":["workflow_dispatch","release"]}

    Pinned rhysd/actionlint:1.7.12 accepted it, and PyYAML independently decoded the effective trigger keys above. Thus both checks in Required CI remain green even though a published release starts the parked workflow again. The checked-in workflow itself is manual-only today; this is a defect in the persistent fail-closed proof used to close cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build #1228.

    Expected fix/test: inspect the effective YAML document with a parser (including duplicate/multi-document rejection), assert that the effective top-level on mapping contains exactly workflow_dispatch with the reviewed inputs, and add this enclosing-scalar fixture. A raw substring equality check is not sufficient to establish YAML semantics.

LOW

  1. The PR body’s final verification metadata is stale.
    It still says “eight regressions” and 8 passed, while exact head adds and passes 12 tests. Update the PR body to the final count/fixture set so the durable review summary agrees with exact-head evidence.

Existing-feedback disposition

  • All five inline threads have evidence replies and are resolved; the old DCO signal remains an outdated false positive, and every PR commit has a Signed-off-by: trailer.
  • The final commit does close the previously reported default, comment-boundary, scalar-field, escaped-key, bracket/mixed-access, GITHUB_EVENT_NAME, and testing-guide cases.
  • Earlier automated coding-task summaries that cite non-PR commits remain stale/non-evidence.
  • The actual checked-in workflow has only workflow_dispatch, read-only permissions, validated tag output, truthful unprotected-environment wording, and no current release-event branch.

Exact-head evidence / CI state

  • node --test scripts/check-github-ops-governance.test.mjs12/12 passed
  • node scripts/check-github-ops-governance.mjs — passed
  • node scripts/check-docs-governance.mjs — passed
  • node scripts/check-golden-principles.mjs — passed
  • pinned Actionlint on the checked-in workflow — passed
  • git diff 2f62c8ca..b5c3c1c5 --check — passed
  • adversarial enclosing-scalar fixture — governance returned no errors; pinned Actionlint passed; effective triggers decoded as workflow_dispatch, release

Immediately before posting, exact-head checks showed 24 successes, 4 skips, 2 jobs still running, and no failures. Pending CI is not itself a finding. No release event, manual staging run, or environment approval was exercised.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent correctness/regression exact-head review - corroborated finding

Head: b5c3c1c593a32fedbab45c1898638632b0612395
Base: 2f62c8ca82a66c5417abd03688e9dbbd219319d4

I inspected all 16 conversation comments then present, all eight review submissions, all five inline threads and replies, linked #1228 and #1504, all five commits, and the complete 11-file patch before reviewing. A parallel review posted while I was running the fixture; this is an independent reproduction of the same root cause.

MEDIUM

  1. The frozen substring is not proven to be the effective YAML on mapping.
    Location: scripts/check-github-ops-governance.mjs:164-180.

    I put the byte-identical reviewed on: through permissions: block inside a valid top-level multiline single-quoted name scalar, then added the effective key as quoted "on" with both workflow_dispatch and release: { types: [published] }. The exact-head validator returned []; pinned rhysd/actionlint:1.7.12 exited 0; and independent YAML decoding returned effective triggers release, workflow_dispatch.

    The checked-in workflow is manual-only, but Required Docs Governance can therefore stay green while an Actionlint-valid future edit restores release.published, defeating the persistent proof used to close cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build #1228.

    Required fix/test: inspect the effective YAML document, including duplicate/multi-document rejection, or use an equivalently semantic fail-closed mechanism; add this enclosing-scalar fixture. Raw substring equality between regex-discovered offsets is insufficient.

LOW

  1. The PR body is stale at the final head. It still records eight regressions / 8 passed; this head contains and passes 12 tests. Update the durable PR verification summary to the exact-head count and fixture set.

Existing feedback / exact-head evidence

  • All five inline threads have evidence replies and are resolved. The old DCO thread is an outdated false positive; all five current commits have Signed-off-by: trailers and exact-head DCO is green.
  • The final commit does resolve the previously reported default, comment-boundary, nested scalar-property, escaped-key, bracket/mixed-access, $GITHUB_EVENT_NAME, and TESTING_GUIDE cases.
  • I found no additional unique correctness, workflow-permission, tag-validation, or canonical-doc defect beyond the current enclosing-scalar blocker and stale PR metadata.
  • node --test scripts/check-github-ops-governance.test.mjs: 12/12 passed.
  • GitHub operations, docs-governance, golden-principles, pinned Actionlint on both changed workflows, and git diff 2f62c8ca..b5c3c1c5 --check: passed.
  • Adversarial fixture: validator []; Actionlint exit 0; effective triggers release, workflow_dispatch.

Final pre-post CI: 25 succeeded / 5 skipped / 9 running / 0 failed. Pending CI is status, not a defect. No live release event, staging dispatch, or environment approval was exercised.

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Final review-finding fix evidence for exact head d1e1c20d41cfed916b4a6ec919584b5fe1bd39b6:

  • MEDIUM enclosing-scalar bypass: fixed in signed d1e1c20d. The checker no longer searches for a trusted substring. It normalizes line endings and verifies the SHA-256 of the complete reviewed parked workflow, so hiding any bytes in a scalar, adding an effective quoted on mapping, changing inputs, or changing any other workflow text fails closed. The line/subtree YAML inspectors are gone; Actionlint still proves the pinned file is valid workflow YAML.
  • LOW stale PR metadata: the PR body now records the final complete-file invariant, 13/13 tests, and the enclosing-scalar fixture.

Exact-head local proof:

  • governance regression: 13/13 passed, including LF/CRLF acceptance and the Actionlint-valid enclosing-scalar/release mutation
  • GitHub operations governance: passed
  • docs governance: passed
  • golden principles: passed
  • pinned Actionlint 1.7.12 on the checked-in workflow: passed
  • independently constructed enclosing-scalar/release mutation: Actionlint accepted it, and the digest regression rejects it
  • git diff --check: passed

This is the final fix round. The original two lenses are being asked only to verify this reported defect on the exact head; any further non-critical finding parks the PR under the review-loop ceiling.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

@codex review exact final head d1e1c20 after the complete-workflow pin fix, please.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: d1e1c20d41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Scoped final-fix verification — digest fix passes; one existing thread remains

Exact head: d1e1c20d41cfed916b4a6ec919584b5fe1bd39b6

I refreshed all 20 conversation comments, nine review submissions, and all six inline threads before testing only the final fix.

Reported findings

  • PASS — enclosing-scalar bypass is closed. The normalized complete-workflow SHA-256 independently computes to 3b38f6eec8cc5e1b5ef486697bb4d746db97a5ce05baa8d96a3663de503dc110, matching the pinned value. The canonical LF and CRLF forms are accepted.
  • PASS — adversarial reproduction is rejected. The previously reported enclosing-scalar/effective-release mutation remains valid to pinned Actionlint (exit 0), but hasExpectedParkedStagingGateWorkflow() returns false and the validator reports the digest mismatch. Because the whole normalized file is pinned, the mutation cannot preserve the reviewed digest.
  • PASS — PR metadata is truthful. The body now states the complete-file invariant, 13 regressions / 13 passed, the enclosing-scalar fixture, and the intentionally unverified live operations.
  • Signed commit d1e1c20d is the exact PR head and includes the required Signed-off-by: trailer.

Exact-head verification

  • node --test scripts/check-github-ops-governance.test.mjs13/13 passed
  • GitHub-operations governance, docs governance, and golden-principles checks — passed
  • pinned Actionlint on the checked-in workflow — passed
  • git diff 2f62c8ca..d1e1c20d --check — passed
  • independent digest/mutation probe — canonical accepted; CRLF accepted; Actionlint-valid mutation rejected

Current unresolved feedback

The current Codex P2 thread about manual-path runnability is valid and separate from the digest fix. With TASKDECK_CONNECTORS_ENCRYPTION_KEY absent and only the workflow's TASKDECK_JWT_SECRET supplied, the exact Compose validation command exits 1:

services.api.environment.Connectors__EncryptionKey: required variable
TASKDECK_CONNECTORS_ENCRYPTION_KEY is missing a value

Therefore the canonical “available for deliberate operator runs” claim remains unproved/false on a clean runner, and the thread is still unresolved. Under the declared final-fix ceiling, this is the non-critical concern to park or track rather than silently treating the PR as comment-clean.

No additional concern was found in the scoped b5c3c1c5..d1e1c20d digest/test diff. Immediately before posting, exact-head CI showed 17 successes, 4 skips, 8 jobs pending, and no failures; pending CI is status, not a finding.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent scoped final-fix verification - fix passes, PR parks

Exact head: d1e1c20d41cfed916b4a6ec919584b5fe1bd39b6

I refreshed the complete PR conversation, reviews, and all six inline threads, then inspected only signed commit d1e1c20d and the reported regressions. A parallel verifier posted the same disposition while these commands were running; this is independent corroboration.

  • PASS - enclosing-scalar defect closed. The normalized complete-workflow SHA-256 independently computes to 3b38f6eec8cc5e1b5ef486697bb4d746db97a5ce05baa8d96a3663de503dc110, exactly matching the pin. The Actionlint-valid enclosing-scalar/effective-release fixture is rejected with the digest error.
  • PASS - PR metadata current. The body now describes the full-file invariant and records 13 regressions / 13 passed, including the enclosing-scalar case.
  • PASS - signed exact head. d1e1c20d is the PR head and carries the required Signed-off-by: trailer.
  • No additional concern in the scoped b5c3c1c5..d1e1c20d digest/test/documentation diff.

Exact-head local results: governance tests 13/13; GitHub-operations governance, docs governance, golden principles, pinned Actionlint, and diff check all passed.

Park disposition

The existing current Codex P2 thread is valid, separate, and still unresolved. Running the workflow-equivalent Compose validation with only TASKDECK_JWT_SECRET exits 1 because TASKDECK_CONNECTORS_ENCRYPTION_KEY is mandatory and absent. Therefore the canonical claim that the path is available for deliberate operator runs is not true on a clean runner.

Under the declared final-fix ceiling this confirmed non-critical concern parks the PR; it must not be treated as comment-clean. The exact-head Codex no-major-issues notice is informational and does not resolve that thread.

Pre-post hosted state: 20 succeeded / 4 skipped / 6 running / 0 failed. Pending CI is status, not a defect.

…igger

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>

# Conflicts:
#	docs/IMPLEMENTATION_MASTERPLAN.md
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Base reconciliation evidence — exact head 20fbcf9993b9ad3e66b25d6c39983fc8fc95d85e

Merged current origin/main (397ba9d2368a7c5e7eb2daf31e1e43640b3ca144) with signed merge commit 20fbcf99. The only conflict was the independent additive 2026-07-27 delivery-update sections in docs/IMPLEMENTATION_MASTERPLAN.md; the resolution retains both verbatim and makes no policy decision.

Exact-head local verification:

  • node --test scripts/check-github-ops-governance.test.mjs — 13/13 passed
  • node scripts/check-github-ops-governance.mjs — passed
  • node scripts/check-docs-governance.mjs — passed
  • node scripts/check-golden-principles.mjs — passed
  • pinned rhysd/actionlint:1.7.12 on cd-staging-gate.yml and reusable-docs-governance.yml — passed
  • git diff --check origin/main...HEAD — passed

The open P2 review thread is intentionally not resolved here: its Compose-input/runnable-path root cause is owned by stacked PR #1514 (Closes #1506). This parent has fresh CI and an exact-head review owed after the merge; it is not merge-ready until the stacked remediation is reconciled and the thread disposition is proven.

@codex review exact head 20fbcf9993b9ad3e66b25d6c39983fc8fc95d85e.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 20fbcf9993

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…igger

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Stack refresh evidence for exact head 4efd2852 (base main at 88eb6776):

No workflow dispatch, environment configuration, deployment, retarget, or merge was performed. Please review this exact head: @codex review.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit: 4efd285251

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…igger

Signed-off-by: Chris0Jeky <jeky.tck@gmail.com>

Copy link
Copy Markdown
Owner Author

Post-#1516 base refresh — exact head f42151a2f0fd5b6e687710f51b27d6c4f6dee447

Merged authoritative main 840874acac3c5a30c6b031b6abe55fa0031deb3e with signed merge commit f42151a2. The merge was clean; no conflict resolution or product/workflow edit was needed. The PR-range diff against current main remains the same 11-file #1228 trigger/governance/documentation slice, and the canonical chronology still records #1228 as the historical manual-only parent while #1506 owns the successor no-environment/no-deploy current truth.

Fresh exact-head local evidence:

  • node --test scripts/check-github-ops-governance.test.mjs — 13/13 passed
  • node scripts/check-github-ops-governance.mjs — passed
  • node scripts/check-docs-governance.mjs — passed
  • node scripts/check-golden-principles.mjs — passed
  • pinned rhysd/actionlint:1.7.12 on cd-staging-gate.yml and reusable-docs-governance.yml — passed
  • git diff --check origin/main...HEAD — passed
  • DCO trailer audit — 10/10 PR-range commits signed
  • all 27 conversation comments, 11 review submissions, and six inline threads re-read; zero threads unresolved

No workflow dispatch, environment change, deployment, retarget, or merge was performed. Hosted Required CI / Extended / Workflow Lint / CodeQL and a fresh exact-head review are re-owed after this base change.

@codex review exact head f42151a2f0fd5b6e687710f51b27d6c4f6dee447.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f42151a2f0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


export function retainsReleaseEventHandling(workflowText) {
const normalizedReferences = workflowText.toLowerCase().replace(/[^a-z0-9_]+/g, '.')
return normalizedReferences.includes('event_name') || normalizedReferences.includes('github.event.release')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Match only release-specific event references

When a later reviewed manual-only edit uses github.event_name for a workflow_dispatch condition, diagnostic, or summary, this predicate returns true solely because event_name appears; even after updating the expected digest, Required Docs Governance then falsely reports retained release handling and blocks CI. Restrict this check to references actually compared with release (while continuing to detect github.event.release) rather than banning the event-name context entirely.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Blocked

Development

Successfully merging this pull request may close these issues.

cd-staging-gate.yml still auto-triggers on release.published — gate/disable it for the archive-pivot personal build

1 participant