Skip to content

Eliminate Work-only Dispatch: Chat-authorized Release trigger and automatic Catalog proposal #75

Open

Description

@ShutenOishi

背景 / rationale

2026-10-12 の司令塔方針変更。通常ChatのGitHub接続には新規 workflow_dispatch 操作がなく、全14拡張の promote.yml が workflow_dispatch 専用であるため、GitHub Cloud Browser/Workへの引き継ぎが反復発生している。Catalogの sync-verified-release.yml も同様。候補作成側は既にスケジュールActionsから gh workflow run windows.yml を呼べるが、失敗・承認待ち・重複・再実行経路のため手動運用が残る。

Current contract: chat-first-publication.md. Fleet-wide E2E and branch-protection audit tracked separately by #61. This issue is an opt-in architecture/implementation task, NOT a Release instruction, permission change authorization, or approval to publish anything.

Desired operator experience

  1. Scheduled upstream detection, SHA-pinned draft candidate creation, all maintained PostgreSQL Windows CI/audits run automatically; exceptional failures are reported, never silently waived.
  2. User explicitly instructs the connected normal Chat to publish a particular already verified new stable candidate. No Work, GitHub Web UI or manual Dispatch handoff in the normal path.
  3. Normal Chat performs exact-head candidate checks and creates and merges one tightly scoped publication authorization PR via existing authenticated GitHub connector operations; branch protection and latest-head required CI apply. This PR records exact candidate PR, decision run, candidate run, new unused release tag, packaging SHA and literal PUBLISH.
  4. A trusted main push to the authorization file triggers an Actions workflow. Shared gate independently verifies real authenticated operator identity and authorized PR merge/event provenance, literal PUBLISH, full source SHA, packaging/main SHA, candidate evidence, maintained-PG matrix, source/license/export checks, signed artifacts and tag create-only constraints. A push/PR/watch/schedule without an exact new authorization merge cannot publish. Malformed, bot-generated, unapproved, stale, replayed and duplicate requests fail closed. Preserve existing recovery behavior.
  5. After an actual published and validated release, Catalog periodically detects a mismatched public stable signed release (or receives a narrowly authenticated post-publish event later) and independently rehashes/signature-checks all assets before using its existing scoped Catalog proposal App to generate a one-record PR. No separate manually dispatched Catalog sync; Chat handles latest-head required CI merge. Website stays on existing CI.
  6. All 14 extensions conform to identical central/local policy. No automatic formal Release, candidate auto-merge, Catalog auto-merge, second independent reviewer or expanded general-purpose privileged command endpoint.

Implementation stages (no live publishes during rollout)

  • A. Read-only matrix and security design: inventory 14 promoters, candidate/Windows run initiation, Catalog sync entrypoints, GitHub event actor semantics and applicable branch rules. Select authorization-PR over issue/comment-as-privileged-command by default; evaluate other alternatives without implementing them inadvertently.
  • B. Shared gate/tests: add opt-in chat-pr-authorization mode alongside existing manual-dispatch. Strict schema; exact allowlist; merge commit/PR/event cross-check; reject bot/unknown actor; reject unprotected or failed required-CI merges; dedupe immutable releaseTag and request; unit/negative tests. No global switch to unattended.
  • C. Single extension pilot: add a non-publishing dry-run fixture/test event first; convert one extension to guarded publication authorization PR with current manual Dispatch retained as rollback until independently accepted. Do not create a real publication request or tag as test data.
  • D. Catalog reconciler: add read-only lightweight public release/record drift check, guarded opt-in scheduled verification+one-record PR with existing catalog-only App and idempotent no-op; test with previously published wal2json 2.7 without creating duplicate branch/PR.
  • E. Fleet rollout: migrate remaining 13 after passing pilot + tests; modify central policy last; document one-Chat command UX, recovery, auditing, historical compatibility and fail-closed rollback.
  • F. Acceptance: demonstrate an actual future eligible release with user explicit PUBLISH and normal-Chat PR authorization, complete attested Release → Catalog PR → protected exact-head merge → EN/JA Website checks, with zero Work-only dispatches. Do not fabricate a Release just for E2E.

Gate/rollout dependencies and non-negotiables

  • #61 reports 13/14 extension main branches unprotected. Do not enable push-to-publish while these lack enforced required CI / appropriate PR protection. No required independent reviewer; if dynamic PG matrix check names are unsafe, implement minimal stable aggregate required check first. Treat existing Fleet-wide 14-extension manual-only formal publication: migration parity and acceptance #61 closure separately.
  • Confirm that an authenticated normal-Chat connector-authored PR and connector-mediated merge appear as permitted nonbot operator events in real GitHub metadata. If GitHub identities differ, STOP rather than silently weakening actor checks.
  • Preserve source SHA pin, candidate-decision, signed PG-major build, SPDX SBOM, Grype(report-only), provenance and SHA256, create-only public Release, no tag deletion, no hidden retry.
  • No new App or secret unless proven necessary. Catalog proposal App retains catalog-only scope. Historical Releases unchanged.
  • GitHub GITHUB_TOKEN event-suppression semantics must be tested. Never claim that a newly authored PR or a newly uploaded artifact will necessarily trigger a workflow without evidence.

Deliverables

Design ADR (threat model), shared implementation PRs, pilot proof, 14/14 parity tests, Catalog reconciler proof, docs change, E2E run IDs and a zero-Work acceptance record. Keep this issue OPEN until fulfilled.

Activity

  1. ShutenOishi commented on Oct 12, 2026

    @ShutenOishi
    ContributorAuthor

    Phase A — read-only security audit + ADR PR (2026-10-12 JST)

    Decision: option A (protected, Chat-authored, one-record release authorization PR). No live Release, tag, new publisher trigger, permission edit, or App setting change was performed.

    Design PR: #76 (DRAFT, one documentation file only; head 85d630be7c8694a81a5846744e670cd18fcc5494; author ShutenOishi under normal GitHub connector).

    Key findings:

    • Directly inspected all 14 extension promote.yml: all workflow_dispatch only, all call central fleet-promotion-gate.py and signed reusable builder; no push publishing trigger.
    • Central 14/14 BUILD and releasePolicy=manual-only; central and local formal promotion currently require manual-dispatch. Existing candidate proposer itself performs GitHub-internal gh workflow run windows.yml.
    • Not just a workflow trigger change: fleet-promotion-gate.py demands dispatch and emits VERIFIED_MANUAL_DISPATCH; fleet-publish-release.py separately demands both the receipt and dispatch event; ZIP PACKAGE-INFO.json also records workflowRun.event=workflow_dispatch. Must migrate gate, typed receipt, publisher, PACKAGE-INFO validation and signer provenance as a coherent tuple.
    • Existing Catalog verifier/App-only proposal works on signed public releases, but Catalog orchestration currently needs manual Dispatch; a separately opt-in periodic reconciler can remove that handoff while keeping Chat-only PR merge.
    • GitHub documented GITHUB_TOKEN-created push event suppression; the connector-authored doc PR shows GitHub human PR author, NOT yet proves human merged_by/push-event origin. A safe nonpublishing merge probe and event/actor evidence remain required.
    • Fleet-wide 14-extension manual-only formal publication: migration parity and acceptance #61 reports 13/14 extension main branches unprotected, so live push publication must not be enabled before protected required CI exists (no external reviewer requirement). Fleet-wide 14-extension manual-only formal publication: migration parity and acceptance #61 remains a separate closure track.

    ADR: docs/adr-0075-chat-authorized-publication.md in PR #76: threat matrix (forged approvals, direct push, mismatched actor, stale SHA, wrong CI, replay/tag race, bot suppression, untrusted PR code), strict JSON schema proposal, event/merge topology validation, opt-in staged implementation and positive/negative test plan.

    Next gates: (1) review/merge documentation PR safely; (2) demonstrate harmless connector-originated PR merge + push event identity and protected checks; (3) finish #61 protection; (4) implement opt-in shared gate/publisher/metadata fixtures without enabling publication; (5) single-extension pilot; (6) Catalog reconciler; (7) 14/14 rollout.

    Phase A status: design and code mapping documented; identity/merge-event proof and enforced branch protection outstanding. #75 OPEN; no real Release authorized.

  2. ShutenOishi commented on Oct 12, 2026

    @ShutenOishi
    ContributorAuthor

    Phase A addendum — nonpublishing Chat merge/actor/push proof + 14/14 protection recheck (2026-10-12 JST)

    Actual safe proof, no Release triggered:

    • Documentation-only Build PR #76 was created via the normal Chat GitHub connection under real human ShutenOishi; exact PR head 85d630be7c8694a81a5846744e670cd18fcc5494.
    • Only changed docs/adr-0075-chat-authorized-publication.md. Existing exact-head PR CI 38256053502 SUCCESS. After marking ready, Chat performed a squash merge with expected_head_sha; resulting main commit: 9164360d8da7a3b8c560a0b6f82cdd63b73b260e.
    • Direct authenticated GitHub REST GET of PR docs: ADR for Chat-authorized Release without Work Dispatch (#75) #76 showed merged=true, merged_by.login=ShutenOishi, merge_commit_sha=9164360d.... Squash commit had one parent (8ff03ef55859f93d5d432b67b6420a5ea986902f) and one changed docs file.
    • Build main push CI run 38256307824 completed SUCCESS, event=push, actor.login=ShutenOishi, triggering_actor.login=ShutenOishi, exact new commit SHA. The connected user merge therefore DID produce a real nonpublishing push-triggered Actions run, unlike suppressed GITHUB_TOKEN pushes.
    • This demonstrates event transport and authentic user identity in the build repository only. It does not demonstrate a future extension publication gate or verify text of the user's Chat instruction.

    Protection dependency reconfirmed, direct GET /branches/main for all 14 extensions: 13 have protected=false; only plpgsql_check has protected=true. This matches #61. Exact required check configuration is NOT proven by a bare boolean, so verify effective check rules separately before enabling anything.

    No live publisher was modified or enabled. No tag, Release, Catalog record, Website or secret was modified.
    Next: #61 protects 13; central opt-in gate/publisher + PACKAGE-INFO event tuple test fixtures; inert one-extension pilot. #75 remains OPEN.

  3. 569 remaining items

  4. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 10:34 JST — Stalled-chat continuation; one-confirmation 17-extension rollout complete in protected main

    Live GitHub GET reconfirmed both previously unresolved protected PRs:

    • wal2json PR #17 was already protected MERGED; 5/5 PG14..18 and Windows required summary SUCCESS; exact merged main SHA bc0f551e409db944510a9f02dd53b56533ae5430, postmerge Run 39698679656 COMPLETED/SUCCESS.
    • plpgsql_check PR #56 had exact-head syntax, immutable Release regression, 5/5 PG Windows and Windows required summary SUCCESS after correcting stale Type PUBLISH string assertions. Normally protected squash-MERGED to main=2487964bf570100f2b14c382bf6782ba69552193. postmerge Run 39706616483 still in_progress at fresh GET: regression/preflight and resolver SUCCESS; PG14..18 Windows jobs in_progress. Do NOT count this 17th postmerge as success yet.
    • The other 16 of 17 exact-current-main push Windows runs are all COMPLETED/SUCCESS: pg_bigm 39696547469; pg_cron 39696913698; pg_hint_plan 39696556583; pgaudit 39697506376; set_user 39697592079; pg_repack 39697517289; pg_ivm 39697528357; pg_qualstats 39697600811; orafce 39697851730; hypopg 39697609740; wal2json 39698679656; pg_partman 39697861989; pg_stat_monitor 39697937260; pgtap 39694945579; pg_variables 39694985716; pg_store_plans 39694995393.

    All 17 caller workflow edits are protected-MERGED and expose 4 user inputs rather than typed PUBLISH, with protected-main human Run workflow as intentional authorization and fixed confirm_release: PUBLISH solely as backward-compatible argument to pinned immutable shared gate. Existing 2 separate gate/publisher runtime source pins unchanged: do NOT claim fully unified runtime. No extra GUI approval, new App, Secret, untrusted automatic Release or new verifier. Existing signature/SLSA/SPDX/hash/unique-tag protections intact.

    Catalog: PR #151 protected-MERGED roster-derived variable capacity; exact main/push 39696921359 (signed live CLI canary), 39696921328 (anonymous download), 39696921841 (Website smoke), 39696921282 (Catalog validate), 39696921298 (CLI candidate) all SUCCESS. PR #152 rebased without source overlap through non-force two-parent commit e9c32372821f09d9a18a521448a432e60e257069, protected CI SUCCESS, MERGED catalog/main=c9537fd26ed4322fa91f03577eb0800fd5d75c29; exact main/push 39698187148 (latest CLI canary), 39698187558 (Website), 39698187069 (Catalog validate) each COMPLETED/SUCCESS. Signed C# CLI/Python and CI now derive live counts from trusted roster/Catalog signed receipt; frozen historical --fixed remains fixed as intended. No new test workflow added.

    Current remaining operational work: 1) GET final plpgsql_check postmerge result; do not skip if failed. 2) Wave3 pgtap/pg_variables/pg_store_plans still have 0/3 actual public Releases and catalog index remains 14, although central allowlist now exact 17 and all local opt-in flags true. To publish under currently approved policy requires existing human-authenticated main workflow_dispatch exactly once per repository with 4 inputs (candidate PR number, candidate Windows run, decision run, unused signed Release tag). Connected normal GitHub Chat connector does not expose workflow_dispatch. Do not invent a successful dispatch; no additional GUI/new auth scheme required, and no automatic PUBLISH allowed. Current explicit user directive: reduce GUI operations; not to zero, don't add any. 3) After real signer/publisher success, reuse existing signed Catalog approval flow and dynamic CLI/Website, verify public assets.

    No previous successful Sigstore 30/30 or Windows candidate CI rerun.

  5. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — FINAL 17/17 one-confirmation main/postmerge Windows SUCCESS

    Fresh GitHub GET confirmed last outstanding pgextwin/plpgsql_check exactly merged main commit 2487964bf570100f2b14c382bf6782ba69552193, postmerge Run 39706616483 now COMPLETED/SUCCESS; the mandatory Windows PG14–18 matrix and immutable Release preflight pass. Previous Issue #75 comment 6330608180 documented all other 16 exact-main SUCCESS; total now 17/17 protected promotion wrapper PRs MERGED + 17/17 exact-main Windows postmerge SUCCESS. No re-runs of prior successful jobs.

    GUI policy: Existing human main workflow_dispatch remains the deliberate Release confirmation; duplicate typed PUBLISH box removed on all 17 wrappers; pinned common signer/Publisher gates unchanged, confirm_release: PUBLISH is only a compatibility input, not a claim of separately verified human authorization. All Release identity, signed ZIP/SPDX/SLSA checks, original SHA256 and create-only tag safeguards preserved. No additional GUI, token, App, witness or test gate.

    Catalog protected #150/#151/#152 protected-MERGED and exact-main checks SUCCESS. Latest catalog index 14, central manual allowlist 17. Wave3 GitHub Releases 0/3 and signed Catalog/CLI/Website entry still pending actual per-repository authenticated human GitHub Run workflow, which this chat's existing GitHub connector cannot invoke. Exact already successful input identities and release tags in Issue #141 comment 6330609235.

  6. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — COMPLETE: 3/3 formal Releases, 17-extension Catalog, public CLI 85/85 and bilingual Website

    The user-authorized authenticated ChatGPT Work Cloud Browser session (GitHub actor ShutenOishi) used the existing main promote.yml / Run workflow controls and only the four specified inputs. The obsolete typed PUBLISH field was not used. No new GUI approval, App, Secret, independent witness audit or permanent journal was added.

    Extension Public formal Release Release ID Original successful main promotion
    pgTAP v1.3.4-windows.1 420252108 39711324076 — attempt 1 SUCCESS
    pg_variables v1.2.1-windows.1 420249264 39710775567 — attempt 1 SUCCESS
    pg_store_plans v1.10-windows.1 420252497 39711326025 — attempt 1 SUCCESS

    Exact inputs (candidate_pr / candidate_run_id / decision_run_id): pgTAP 7 / 39501699629 / 39501584646; pg_variables 6 / 39501793286 / 39501692833; pg_store_plans 7 / 39501929875 / 39501818103. Tags are the table values. Fresh final GET confirms all three are public, non-draft, non-prerelease, with 16 uploaded assets each: 5 PG14–18 ZIPs, 5 SPDX files, 5 Grype reports and SHA256SUMS. Their asset IDs, sizes and digests are unchanged from the actual successful Publisher verification. All 45 Catalog ZIP/SPDX/Grype digest fields match the current public assets. Existing signature/SLSA/SPDX, original SHA256, exact candidate/source/run matching and create-only Release gates passed; no acceptance was waived.

    Existing signed Catalog intake succeeded and the App-owned four-file proposals were normally protection-merged:

    Final Catalog main bffa6ca1884f9a6ef95b1a87ff7631bd0aef068a has 17 distribution records / 23 Landscape records. All six new extension/Landscape blobs still exactly equal their verified proposal blobs. Exact-main Validate 39717513336, Website acceptance 39717513807 and signed-feed publication 39717587322 are SUCCESS. Public metadata feed, Release ID 420280403, selects 17 extensions / 85 original ZIPs. JSON SHA256 ddd7362535d510fed2c52f90fbe70a525bb4fcaa028bd3047d6da6d9ffeaac26; genuine pinned-workflow Sigstore verification passed before publication.

    Public CLI v0.3.4, Release ID 420259388, has the original five assets. EXE: 12,830,477 bytes; SHA256 dd6d8fa928da6134efd598677196b896f7f968fdae61f3d72cc40c19dec74fd8; signed source a6c894c53f5c42333abae7875f1fb5569578c765. The actual downloaded public EXE ran download-all --pg all --verbose anonymously on Windows and rehashed all 85 saved ZIPs. Runtime 39713885339, attempt 3, job 119625028793 is SUCCESS:

    PUBLIC_CLI_REAL_ZIPS=PASS VERSION=0.3.4 SHA256=85/85 EXTENSIONS=17 CATALOG_AUTH=SIGSTORE_VERIFIED_FEED
    

    Only the existing public-runtime job was selected for the changed 17-extension dataset; signing/publication was not rerun, and fresh GET confirms the same CLI Release publication time and all asset IDs/digests. Attempt 2 is retained as FAILURE at the current-roster comparison; its log did not capture the differing sets, so its exact cause is not established. After final main/latest-feed GET, the same unmodified runtime passed. No check was loosened. Individual ZIP receipts remain INTEGRITY_ONLY, signatureVerified=false, installAuthorized=false; CLI/feed verification is not an installation authorization.

    Website #39, #40, #41 are protection-merged. Final Website main 88a642dc2d035514c686e2e44d232a6383ac49ec: deployment 39717435373, native checks 39717435744, public smoke 39717435644 all SUCCESS. Actual Japanese and English pages show 17 extensions and 23 Landscape entries; the three new cards resolve to their real PG14–18 ZIP/SPDX/Grype/Release links, localized descriptions and functional scenarios. Both CLI pages show public v0.3.4, its exact EXE digest and registration-aware latest labels.

    Failure and repair history remains explicit. Initial pgTAP 39708246303 failed before any Release write. build #213/#214/#215 fixed exact source-version/ref triplets and the one exact shared-job namespace, deploying protected main 858de0e6796a366ff3c165a8608d5a47a59d675f; the attested signer stays 5756b3c5136a8bf4db710016cfe97555f0a71c6d. Caller PRs pgtap #29 / pg_variables #27 / pg_store_plans #28 passed protected merge plus exact-main Windows PG14–18 15/15. Catalog #153/#154/#155/#157/#158 repaired first-intake Landscape projection, public CLI roster support, draft-ID publication, shallow-history duplicate runtime testing and obsolete live-count test assumptions. Required CI, normal protected merge and postmerge validation passed. The original failed CLI v0.3.3 39712280267 and occupied tag/unpublished draft ID 420251136 were preserved; v0.3.3 was never published or overwritten. Original failed Catalog sync 39712420112 and failed pre-fix PR checks are not relabelled as success.

    Prior 17/17 Promotion simplification/main-postmerge success, independent Sigstore 30/30 and Catalog #150/#151/#152 evidence were reused without rerunning them. Existing branch protections and required CI remain in force. Historical fixed-snapshot P1 evidence remains 65/70 with its existing five DENY cases; it was not expanded into unsupported installation claims. This requested Wave 3 Release → signed Catalog → public CLI → bilingual Website work is complete.

  7. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — ChatGPT hourly task + shared nonpublishing 17-extension queue accepted

    Operator direction: explore replacing repeated Work GUI handling with a once-hourly ChatGPT Scheduled Task. A task now exists (enabled, hourly in Asia/Tokyo) with a GitHub-connected, 17-extension nonpublishing instruction. Supported-app permissions or human approval pauses still apply; the task has not yet executed its first hourly tick, so unattended GitHub writes are NOT claimed.

    Protected implementation: build PR #216 was created with the connected GitHub Chat actor ShutenOishi. Its native pull_request CI triggered as a real workflow without action_required. Initial Run 39754637576 failed due to an erroneous test assertion matching NONPUBLISHING as PUBLISH; retained as failure. Fixed exact-head 80ab9a2cc75dafdf441f3d9e0bc781628c78f9f1 Run 39754753851 completed SUCCESS, GitHub Actions App15368 resolver SUCCESS. Branch main had active protection, mergeable_state clean. Normally protected squash MERGED to build/main f4e359b4812d435dd72b8e22f9b522cd8bc5b981. Exact-head postmerge Validate 39754876121 SUCCESS and postmerge fleet-status 39754876387 SUCCESS.

    The shared scripts/chat-task-queue.py reads the existing exact 17-entry manual-only fleet and produces a fail-closed, observational hourlyChatQueue in fleet-status.json. tests/test-chat-task-queue.py is run by the existing required resolver workflow. Real postmerge fleet-status produced: orafce/pg_hint_plan/pg_ivm = INVESTIGATE_CI, plpgsql_check = PREPARE_CANDIDATE. Those are triage suggestions, not fresh independent authorization or successful candidate proof. Hourly Task will independently GET exact live PR/CI evidence before nonpublishing changes.

    Scope: no new GitHub App/Secret/Workflow, branch rule change, Signer/Publisher modification, Release, PUBLISH, tag, Catalog or Website mutation; 17 existing formal Releases and historical CI preserved. The current normal-Chat GitHub tool still cannot call new workflow_dispatch. Existing strict chat-pr-authorization.py remains an inert offline verifier, and no Chat PR-to-publication runtime has been wired. A schedule does not replace the per-version explicit human PUBLISH authorization. Next acceptance step is one genuine scheduled tick with the connected GitHub actor and permitted nonpublishing PR action (or documented approval pause), then a separate safeguarded, explicitly authorized PR-triggered Publisher architecture. No security gate is bypassed.

  8. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — Chat-first hourly groundwork and verified native protected push (no publication)

    Current GitHub evidence shows build PR #216 has been protected squash-MERGED to build/main=f4e359b4812d435dd72b8e22f9b522cd8bc5b981. It deployed one shared, nonpublishing 17-extension hourly Chat queue in scripts/chat-task-queue.py, fleet-status.py, adversarial unit tests and docs/issue-75-hourly-chat-task.md.

    Independent live GET verified:

    Non-negotiable state: The 17 production promote.yml callers, existing human main workflow_dispatch fallback, central/local manual policy, signer, Publisher, SHA256/SBOM/SLSA/Attestation, create-only tags and required CI remain unchanged. No new App, Secret, protection bypass, release, Catalog, CLI or Website mutation in this step.

    Next narrow engineering step for Work-free per-version Release: reuse existing scripts/chat-pr-authorization.py parser and denial tests; attach real protected-main PR/push provenance and exact-head CI verification to the existing single shared promotion path as explicit opt-in dry-run; reject missing/stale/bot/ambiguous actors and insufficient evidence; preserve current manual-only release until a genuine new user-authorized candidate passes protected pilot and live signed-publication tests. Hourly task cannot authorize Release merely by schedule. Keep Issue #75 OPEN until 17/17 production acceptance and Catalog/Website E2E, without duplicating the existing hourly queue.

  9. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — Owner decision: opt in to unattended publication AFTER verified gates

    Owner explicitly requests three sequential goals: (1) shared 17-extension Chat-originated/automated Promotion, (2) version-resilient candidate builds, (3) Catalog→CLI→JA/EN Website reconciliation. Owner withdraws the extra per-version human approval step and grants standing authorization for new eligible stable versions, with prior Releases retained. This is authorization to develop and, only after positive protected implementation and all established technical gates, enable the unattended policy through normal protected PR/required CI/postmerge. It is not authorization to waive failed/queued Windows CI, signature/SLSA/SPDX, source/license controls, exact upstream SHA and candidate audit, branch protection or create-only release/tag checks. Any ineligible candidate remains DENY. Existing historical failure records stay failures.

    Preferred mechanism: retain signed shared Signer/Publisher and manual fallback; use a narrowly scoped, authenticated Chat/merged-PR or main-push event and exact machine-readable candidate evidence to produce an independently verified new automatic-policy receipt. No broad issue/comment command endpoint, unrelated privileged App/Secret, or extra GUI. The hourly ChatGPT task is a work coordinator, not in itself trusted as proof of signed candidate. Migrate 17/17 only after a nonpublishing end-to-end event and negative tests, single-extension live eligibility, and postmerge verification. Catalog should reconcile only genuine published/signed Release assets through existing Catalog-only proposer App; no automatic Catalog merge or bypass. This decision supersedes prior per-version approval preference prospectively; do not pretend historical manual-only source gates are already changed.

  10. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — owner-approved 17-extension unattended strategy, protected implementation and candidate repair

    Owner standing intent to eliminate per-version human PUBLISH is recorded in decision. Policy change does NOT waive failed Windows CI, signed provenance, SPDX/SLSA, original SHA256, license/source pins, branch protection or create-only tag/Release.

    1. Shared Phase-1 automatic-Promotion preflight (NONPUBLISHING): build PR #218 protected squash-MERGED main=a6d422f905a8fa7800949b172cd9456f164f35ed. New scripts/automatic-release-preflight.py, denial fixtures and same existing resolver test job; PR required Run 39758402413 SUCCESS, postmerge Run 39758555479 SUCCESS. The helper ALWAYS returns publicationAuthorized=false, publishableReceipt=false, signedArtifactsVerified=false, automaticReleaseEnabled=false; it is not a trusted Publisher receipt. Existing 17 manual Promotion/pinned signer, controls, protection remain unchanged. No automatic formal Release deployed yet. Remaining: authenticated live push/PR and App15368 protection proof, signed candidate audit/attestation joining, new typed authorization mode tied to standing owner policy, single live accepted new signed Release, then 17/17 rollout. Do not fake workflow_dispatch or substitute the preflight output for a receipt.

    2. Version-resilient candidate fixes: pg_ivm PR #29 protected-MERGED 188b336fe544cb35cdab1fcdadac50bc1d209150 after exact-head PG14–18 5/5 + App15368 required summary SUCCESS; obsolete 1.16 check replaced by strict upstream control version vs manifest. The initial PR CI PowerShell parser error was corrected on a new head, and is NOT counted SUCCESS. orafce PR #18 protected-MERGED 3b253c95657a9e54fc579af6e8839cde2dc64ced after required five-PG SUCCESS; pin-aware major.minor control and SQL presence; postmerge 39760028691 SUCCESS. pg_hint_plan PR #29 protected-MERGED 13c53f2dd5d9530250e12497b7ec685b3657b906 after 5-PG summary SUCCESS; original 2025 licenses retained and exact upstream 2026 originals staged in versioned paths. Updated bot candidate manifest-only #19 to reference correct 2026 paths. Candidate PR #28 pg_ivm, #8 orafce, #19 pg_hint_plan each refreshed to current protected main with a non-force, two-parent merge commit while preserving original bot ownership and only config/extension.json PR diff: current heads pg_ivm fd4de86a8aab689702d91e69b4e31131994f2877, orafce 8033a8e4c3a55e4dc655346d5e897c73c9b4a58f, pg_hint_plan 917127d973d113ea38704b6b3793e2e103a214c9. Native new pull_request CI was triggered via authenticated Chat actor, not action_required; they remain DRAFT and NEED full exact-head CI plus new candidate-decision and candidate-audit (old artifacts are stale). Do not merge as Release candidate or publish before these actually pass. pg_ivm/pg_hint_plan postmerge CI may still be running/queued; verify actual current run success.

    3. Catalog 17-extension scheduled signed intake: catalog PR #161 protected-MERGED main=e0eb2e0bbe18f09032455565eb6e080906b269ef, required native validate SUCCESS (same App15368) after fixing an adversarial fixture roster alias; original failure retained. Same existing sync-verified-release.yml now checks stable Release-vs-Catalog drift every 6 hours and, when needed, calls the unchanged independent remote original-asset/SLSA/SPDX/SHA256 verifier before using the existing scoped Catalog proposer App to open a PR; native protected Catalog merge is still required. No new App/Secret or automatic Catalog merge. Main push checks SUCCESS: 39760384900/39760384083; further authenticated postmerge 39760500738 SUCCESS. This does not grant unsigned candidate publication. Verifier currently expects manual-Promotion provenance; future auto-signed provenance requires separate reviewed verifier support.

    Hourly ChatGPT task is enabled and now recognizes this standing owner policy but is forbidden to publish until the actual production automatic signed Publisher and eligible-version gate are demonstrably integrated. 17 historical public Releases, public CLI/feed and bilingual Website were not altered; no Tag/Release was issued by this work. Keep Issue #75 open until genuine automatic Release, Catalog/CLI/JA/EN and 17/17 route accepted.

  11. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — native PR CI audit without repeated Windows dispatch (Issue #75, in progress)

    Confirmed GitHub current-state GET: bot-owned candidate PRs pg_ivm #28, orafce #8, pg_hint_plan #19 remain OPEN Draft with original exact 2026 upgrade pins and 5/5 per-PG Windows native PR jobs SUCCESS:

    Existing normal PR workflows skip candidate_report on purpose because its dispatch-only gate is not met. Therefore these successes do not include an original candidate-audit artifact and cannot satisfy the production manual release gate.

    Independent real-artifact, nonpublishing byte audit: downloaded exact 15/15 existing GitHub Actions artifacts (3 extensions × PG14–18) through authenticated GitHub access with no Windows rebuild. Rehashed all 15 actual ZIPs, SPDX 2.3 and Grype JSONs; validated package name/PG major, exact candidate per-major upstream full SHA/ref/version, actual GitHub PR merge SHA as PACKAGE-INFO.source.packagingCommit, workflowRun.event=pull_request, workflowRun.ref=refs/pull/N/merge and exact successful Run IDs. 15/15 PASS; inspection JSON SHA256 9763fe7a9cd9fa97ed2d7f5515ddaca39a0a305ff07966fd57c4688756225a04. This is only independent byte/metadata integrity, NOT cryptographic Sigstore release provenance, not the original in-Actions candidate-audit receipt and not publication authorization.

    Shared code progress: build PR #219 protected squash MERGED main=88b14ba1ec6fbe2bf63ae81301779926ce585a81, exact-head App15368 resolver SUCCESS, postmerge 39767152553 SUCCESS. Its shared automatic-candidate-merge-observer.py checks genuine main/push/merged bot PR/native CI and always remains nonpublishing. build PR #220 introduces a separate strict pull_request ZIP/SPDX candidate verifier and reusable read-only workflow_run audit of prior successful native PR CI, designed to avoid redundant Windows dispatch while retaining the historical workflow_dispatch mode unchanged. PR #220 is pending its own required CI at this point; do not count it completed until protected merge+postmerge success.

    Remaining technical gates: protection-approved local listener pilot, actual GitHub Actions candidate-audit-native-pr from already built bytes and secure provenance, separately defined automatic signed Publisher receipt and release workflow, 17/17 rollout and Catalog signature/provenance compatibility. Owner standing authorization replaces each-version manual confirmation only after trustworthy signed automated path is completed; no old Release overwrites, no CI/signature bypass.

  12. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — Protected shared native PR audit pilot, precise gate status

    • build PR #219 protected squash MERGED 88b14ba1ec6fbe2bf63ae81301779926ce585a81; postmerge 39767152553 SUCCESS.
    • build PR #220 protected squash MERGED cb06156e897a0b8f0609d4320ab619ac6c5c29a8; postmerge 39768529902 SUCCESS. Shared read-only verify-native-pr-candidate.yml, strict native pull_request vs legacy workflow_dispatch ZIP/SPDX metadata auditor, real associated PR/merge SHA/required App15368 GET validator and hostile CI tests are in protected main.
    • Pilot pg_ivm #30 protected squash MERGED 4d916a1f22d98234999739dcd2b9d8614306cee7; 5/5 Windows and App15368 required summary SUCCESS; genuine main/push postmerge 39769454037 SUCCESS. Existing daily update-watch now also listens for a completed candidate Windows CI/CD pull_request run and only invokes read-only shared auditor; no new GitHub App, Secret, Release workflow, or bypass.
    • A historical-old candidate HEAD Run 39769591565 SUCCESS triggered native read-only listener 39770341740 which correctly FAILED CLOSED with real GitHub log NATIVE_CANDIDATE_CI_DENIED: candidate not owned or exact head/target moved. This failure is preserved, NOT waived or credited toward current candidate acceptance.
    • The current pilot candidate pg_ivm #28 was safely updated by non-force Git ref fast-forward to HEAD 5d593d2e642788743b4b521820286ac8871cb43f, source manifest semantic pins unchanged, PR diff remains EXACTLY config/extension.json on current protected main; latest native Windows CI 39769754052 is IN_PROGRESS at time of comment. Its later workflow_run-triggered candidate-audit-native-pr is NOT YET ACCEPTED and must independently succeed at that exact run/head/merge SHA with all five actual artifact ZIPs. Existing signed Release authorization remains manual-only, automatic Publisher not enabled, no new Release/tag/Catalog published.

    Next independent step: confirm latest candidate Run 39769754052 5/5 + required SUCCESS then authentic workflow_run auditor artifact; repair any mismatch via protected PR, only then roll 16 remaining repos. User standing automatic authorization does not supersede signed provenance/Publisher/branch protection.

  13. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — genuine pilot PASS and 16 identical protected PRs created

    Prior pg_ivm automated read-only audit is genuinely accepted: native Windows PR 39769754052 SUCCESS at exact candidate HEAD 5d593d2e642788743b4b521820286ac8871cb43f. Real event=workflow_run 39771145795 SUCCESS (job 119798706639), candidate-audit-native-pr artifact 12422372611 VERIFIED PG14–18 immutable ZIP SHA/upstream source refs/SPDX/Grype from original Windows artifacts. Earlier stale-head 39770341740 FAILURE remains a failure. No Windows rebuild for audit, no Work approval, no release authorization.

    16 additional narrow update-watch.yml-only PRs are now OPEN; each adds 22 lines, existing schedule untouched, immutable build audit caller cb06156, nonpublishing/GET-only:

    These 16 PRs are still in CI at comment creation. Protected merge requires exact HEAD, PG14–18 native Windows 5/5 SUCCESS, App15368 required summary and any other required checks. Verify real postmerge main/push, not PR CI alone. 17th extension pg_ivm pilot protected PR #30 merged main 4d916a1f22d98234999739dcd2b9d8614306cee7, postmerge 39769454037 SUCCESS. No new App/Secret, policy bypass, Release/tag/PUBLISH or Catalog mutation. Current production is STILL manual-only; owner standing automatic release authorization becomes operative only after completely verified new signed Publisher path, which is a subsequent task.

  14. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 — 15/17 read-only native artifact audit listener protected-MERGED; 2 required-CI pending

    NOT final postmerge acceptance yet. Real pg_ivm 5/5 pilot Run 39771145795 succeeded with native audit artifact 12422372611. Subsequently 16 near-identical single-file update-watch.yml PRs created. As of current GET checkpoint these 15/17 passed actual exact-head PG14-18 Windows 5/5, App15368 Windows required summary and all other required jobs, followed by normal SHA-pinned protected squash merge (candidate-only reporter may be SKIPPED by design):

    Two OPEN not merged: hypopg #14 has PG17 Windows install running, pgtap #30 required summary queued. No required CI waivers.

    Postmerge: pg_ivm real main/push Run 39769454037 SUCCESS and pg_hint_plan real main/push Run 39774577117 SUCCESS. Other merged repositories have genuine new main/push runs queued/in_progress. Verify all 5 PG majors + required summary for each before 17/17 full postmerge accepted. Runs initially: pg_bigm 39774116548, pgaudit 39774587891, pg_partman 39775419769, pg_qualstats 39775432651, set_user 39775443139, pg_cron 39775911192, pg_repack 39775928651, plpgsql_check 39775940863, pg_stat_monitor 39775799323, orafce 39776117636. Newly merged pg_store_plans / wal2json / pg_variables push runs need GET.

    Additional central progress (NONPUBLISHING): build PR #221 protected-MERGED main b717736, exact-head resolver App15368 SUCCESS, postmerge 39775673999 SUCCESS. New scripts/bind-native-candidate-audit.py independently cross-binds real run, GitHub audit artifact, 5 per-PG ZIP SHA256, upstream SHA, source and branch, output ALWAYS BOUND_NATIVE_CANDIDATE_AUDIT_NONPUBLISHING with publishableReceipt=false; never a release permit.

    No new App, Secret, Work GUI or branch protection change. All 17 local production release-promotion.json configs independently GET-verified byte-identical, releasePolicy manual-dispatch. No new formal Release, Catalog/CLI/Website mutation or PUBLISH. Owner standing approval only activates with future independently proven signed automatic Signer/Publisher route.

  15. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 — COMPLETE 17/17 protected common native PR auditor rollout, postmerge 6/17 accepted

    All seventeen (17/17) caller repositories have now passed their exact-head protected PR Windows PG14–18 5/5, App15368 Windows required summary (plus existing supplemental required jobs) and normal SHA-locked squash merge. Remaining two have been completed: pgtap #30 merged to main c9f7da2cb55a5ec7e7a44e0a0a8c14b3b87c3439; hypopg #14 merged to main 0aa0b073f1a283a2b4b209046f10101ec4f294f2. Previously verified 15 other merge refs are in comment 6340534456. Direct GET of actual main .github/workflows/update-watch.yml in EACH 17 repository confirmed same 796-byte native audit listener body, identical immutable central verifier pin cb06156, original 03:30 UTC schedule, explicit schedule-only authorize and workflow_run native candidate filter. Not a source-code-only claim: protected merges recorded in GitHub.

    Postmerge acceptance is not 17/17 yet. Independently rechecked the real event=push Windows CI matching the merged main SHA and 5/5 PG14–18 + App15368 required summary: 6/17 fully SUCCESS: pg_ivm 39769454037, pg_bigm 39774116548, pg_hint_plan 39774577117, pgaudit 39774587891, pg_partman 39775419769, pg_stat_monitor 39775799323. Other 11 actual main/push Windows runs observed QUEUED or IN_PROGRESS without failure (not counted SUCCESS): pg_cron 39775911192, set_user 39775443139, pg_repack 39775928651, pg_qualstats 39775432651, plpgsql_check 39775940863, hypopg 39777470716, wal2json 39776903710, orafce 39776117636, pgtap 39777409229, pg_variables 39776916104, pg_store_plans 39776596207. Do NOT rerun already-successful CI or claim 17/17 postmerge before verifying the remaining 11.

    Central actual-proof bridge: build #221 MERGED main b717736, real postmerge 39775673999 SUCCESS; its joined candidate audit context remains explicitly NONPUBLISHING. The proven live pilot remains pg_ivm workflow_run 39771145795, verified genuine 5/5 source/ZIP metadata and unmodified artifact ID 12422372611. All 17 local Release promotion policies remain exact manual-dispatch and all existing signed Releases untouched. No Release/PUBLISH, Catalog, CLI, Website, App/Secret, protection or billing changes during rollout.

    Next: verify the 11 pending postmerge runs to completion; only then state fully accepted 17/17. Independently implement new signed automatic Promotion and Publisher path with true owner standing authorization (no version-by-version human prompt), robust PR/candidate/source/SLSA/SPDX/SHA256 and create-only gates. Do not pretend that audit-only is formal Release admission. Enabled hourly ChatGPT task has these exact outstanding run identifiers.

  16. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — Issue #75 native candidate audit 17/17 LIVE ACCEPTED

    Confirmed by 17 independent live GitHub API GETs of each exact postmerge main/push Windows Run job inventory: all 17/17 monitored extensions have protected PRs MERGED; native Windows PG14–18 85/85 SUCCESS, Windows required summary 17/17 SUCCESS and no failed postmerge jobs. Each PR changed only .github/workflows/update-watch.yml, retaining its original daily schedule, and added the same SHA-pinned central verify-native-pr-candidate.yml@cb06156e897a0b8f0609d4320ab619ac6c5c29a8 listener (nonpublishing, read-only). No human Work Approve-and-run, extra App/Secret, PUBLISH enablement or protection bypass.

    Actual end-to-end native-audit witness, not just YAML: pg_ivm candidate PR #28 Run 39769754052 successful, triggered main-only workflow_run 39771145795 successful, uploaded immutable candidate-audit-native-pr artifact 12422372611; five actual source-pinned ZIP/SPDX/Grype audits VERIFIED. Failed old-head 39770341740 retained as failure.

    Additional central nonpublishing provenance binding: build PR #222 protected merged main 1b45e71050cebb63efd65f07a5336ce2527fac1b, required CI 39778722513 SUCCESS after correction of original failed CI, and true main/push postmerge 39778879571 SUCCESS. New scripts/bind-native-candidate-audit-live.py can independently GET actual bot candidate PR, immutable head manifest, native Windows Run, real audit Run, unique artifact ID and two real JSONs, then apply #221 binder. Outputs deliberately publicationAuthorized=false, publishableReceipt=false, signedArtifactsVerified=false; this is not a new release authority, and no Release or Catalog has been modified.

    Next remaining gates: a true 17-common standing owner approval mode for the existing attested Signer and create-only signed Publisher, exact live candidate-decision/source/complete native audit, signed ZIP+SLSA+SPDX verification, full negative tests, protected PR+postmerge, one REAL eligible stable Release end-to-end with independent Catalog/CLI/JA+EN website proof; don't treat native audit or owner standing approval as bypassing deployed manual-only. Historical released assets remain untouched.

  17. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — 17/17 native candidate audit rollout and actual main/push postmerge SUCCESS

    No redundant successful CI and no Release reissued. The shared read-only native PR artifact audit installed via exactly one .github/workflows/update-watch.yml change per repository has now reached 17/17 protected merges. Existing required App15368 checks were respected for every PR. Postmerge real main/push Windows CI 17/17 SUCCESS (each required Windows summary and PG14–18, where required), confirmed from GitHub Actions:

    True native candidate audit acceptance is only proven on pg_ivm Run 39771145795: prior native Windows PR Run39769754052 SUCCESS; candidate-audit-native-pr artifact 12422372611, 5/5 ZIP/SPDX/Grype SHA and pinned source VERIFIED. This is not a Sigstore signed formal Release. Other repositories are installed/configured but not claimed to have undergone their own new native candidate runs.

    Central read-only chain:

    Next unblocker: authenticated protected-main push event caller, complete effective branch/bypass and candidate-decision authentication, then a genuinely new explicitly opted-in automatic signed Publisher mode. Maintain original existing manual-only code until one real signed Release and post-public Catalog+CLI+JA/EN website acceptance. Owner grants standing per-version permission only for fully eligible stable builds; this is not permission to bypass missing cryptographic evidence or reuse a failed Run.

  18. ShutenOishi commented on Oct 22, 2026

    @ShutenOishi
    ContributorAuthor

    2026-10-22 JST — 17/17 postmerge success, exact live main-push observer protected, next 2 candidate renewals

    17/17 native audit listener rollout COMPLETE at actual Windows postmerge (all existing App15368 required Windows summaries and PG14–18 SUCCESS; no CI replay). Last outstanding: hypopg Run 39777470716 SUCCESS. Full 17-repo PR + Run ledger in previous issuecomment633? and issuecomment6340953554. Manual-only signed release and old assets untouched.

    Central build protected changes:

    • PR #222: real GitHub REST + audit Run/Artifact exact byte binder main 1b45e71050cebb63efd65f07a5336ce2527fac1b, postmerge 39778879571 SUCCESS.
    • PR #223: nonpublishing bot candidate PR / one-parent main squash / exact App15368 and audit source/ZIP hash bridge, main 238fc3afe4c22a7142c59339eea4e1021c9cb71f, postmerge 39780190255 SUCCESS.
    • PR #224: authenticated GET-only genuine push event → single bot candidate PR → premerge historical workflow_run → unique native audit Artifact original JSON bytes → complete upstream + ZIP SHA bound witness. Normal protected merge main 2c859c83d699a0da841d97d536452249696fd91e, postmerge 39781709014 SUCCESS. Strict negative fixtures included; NO Release/tag/PUBLISH/Signer/Publisher nor new App/Secret, and witness explicitly says publicationAuthorized=false.

    Actual new source candidate progress:

    Next: verify PR #31 exact-head required CI, safely protected merge and postmerge; verify orafce/hint new exact-head 5/5 Windows + genuine triggered candidate-audit-native-pr per run, then undraft and protected merge only after all source/license/GitHub required gates. Do NOT claim new formal Release without genuine signed build+Sigstore/SLSA/SPDX SHA256 and independent typed automatic Publisher receipt; current manual-only release gating remains protected. The owner explicitly authorizes all eligible new stable versions without per-version human PUBLISH confirmation once the secure unattended mode is implemented.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions