Repository navigation
Eliminate Work-only Dispatch: Chat-authorized Release trigger and automatic Catalog proposal #75
Description
背景 / 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
- Scheduled upstream detection, SHA-pinned draft candidate creation, all maintained PostgreSQL Windows CI/audits run automatically; exceptional failures are reported, never silently waived.
- 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.
- 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. - A trusted
mainpush 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. - 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.
- 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-authorizationmode alongside existingmanual-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
mainbranches 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_TOKENevent-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
docs: propose Chat-authorized publication ADR for issue #75
ShutenOishi commentedon Oct 12, 2026
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; authorShutenOishiunder normal GitHub connector).Key findings:
promote.yml: allworkflow_dispatchonly, all call centralfleet-promotion-gate.pyand signed reusable builder; nopushpublishing trigger.releasePolicy=manual-only; central and local formal promotion currently requiremanual-dispatch. Existing candidate proposer itself performs GitHub-internalgh workflow run windows.yml.fleet-promotion-gate.pydemands dispatch and emitsVERIFIED_MANUAL_DISPATCH;fleet-publish-release.pyseparately demands both the receipt and dispatch event; ZIPPACKAGE-INFO.jsonalso recordsworkflowRun.event=workflow_dispatch. Must migrate gate, typed receipt, publisher, PACKAGE-INFO validation and signer provenance as a coherent tuple.GITHUB_TOKEN-created push event suppression; the connector-authored doc PR shows GitHub human PR author, NOT yet proves humanmerged_by/push-event origin. A safe nonpublishing merge probe and event/actor evidence remain required.pushpublication 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.mdin 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 +
pushevent 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.
docs: propose Chat-authorized publication ADR for issue #75 (#76)
ShutenOishi commentedon Oct 12, 2026
Phase A addendum — nonpublishing Chat merge/actor/push proof + 14/14 protection recheck (2026-10-12 JST)
Actual safe proof, no Release triggered:
ShutenOishi; exact PR head85d630be7c8694a81a5846744e670cd18fcc5494.docs/adr-0075-chat-authorized-publication.md. Existing exact-head PR CI38256053502SUCCESS. After marking ready, Chat performed a squash merge withexpected_head_sha; resulting main commit:9164360d8da7a3b8c560a0b6f82cdd63b73b260e.merged=true,merged_by.login=ShutenOishi,merge_commit_sha=9164360d.... Squash commit had one parent (8ff03ef55859f93d5d432b67b6420a5ea986902f) and one changed docs file.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 suppressedGITHUB_TOKENpushes.Protection dependency reconfirmed, direct GET
/branches/mainfor all 14 extensions: 13 haveprotected=false; onlyplpgsql_checkhasprotected=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.
feat: add inert Chat PR authorization context validator (#75)
feat: typed Release receipt and event validation contract (#75)
feat: parameterize shared promotion verification by explicit authoriz…
feat: require typed receipt-event match in signed fleet publisher (#75)
feat: preserve typed main-only attested PACKAGE-INFO event semantics (#…
test: reject forged Chat PR, event, CI and branch protection evidence (…
test: explicit double opt-in and inert PR mode on shared promotion ga…
test: prove typed manual and PR receipts cannot cross event trust bou…
test: signed ZIP PACKAGE-INFO rejects mismatched PR-push and manual e…
ci: run inert Chat PR authorization and typed receipt denial tests (#75)
security: reject bot-shaped receipt operators even when self-asserted (…
569 remaining items
ShutenOishi commentedon Oct 22, 2026
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:
bc0f551e409db944510a9f02dd53b56533ae5430, postmerge Run 39698679656 COMPLETED/SUCCESS.Type PUBLISHstring assertions. Normally protected squash-MERGED tomain=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.All 17 caller workflow edits are protected-MERGED and expose 4 user inputs rather than typed PUBLISH, with protected-main human
Run workflowas intentional authorization and fixedconfirm_release: PUBLISHsolely 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, MERGEDcatalog/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--fixedremains 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_dispatchexactly 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 exposeworkflow_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.
ShutenOishi commentedon Oct 22, 2026
2026-10-22 JST — FINAL 17/17 one-confirmation main/postmerge Windows SUCCESS
Fresh GitHub GET confirmed last outstanding
pgextwin/plpgsql_checkexactly merged main commit2487964bf570100f2b14c382bf6782ba69552193, 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_dispatchremains the deliberate Release confirmation; duplicate typedPUBLISHbox removed on all 17 wrappers; pinned common signer/Publisher gates unchanged,confirm_release: PUBLISHis 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.ShutenOishi commentedon Oct 22, 2026
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 mainpromote.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.Exact inputs (
candidate_pr / candidate_run_id / decision_run_id): pgTAP7 / 39501699629 / 39501584646; pg_variables6 / 39501793286 / 39501692833; pg_store_plans7 / 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
bffa6ca1884f9a6ef95b1a87ff7631bd0aef068ahas 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 ID420280403, selects 17 extensions / 85 original ZIPs. JSON SHA256ddd7362535d510fed2c52f90fbe70a525bb4fcaa028bd3047d6da6d9ffeaac26; genuine pinned-workflow Sigstore verification passed before publication.Public CLI v0.3.4, Release ID
420259388, has the original five assets. EXE:12,830,477bytes; SHA256dd6d8fa928da6134efd598677196b896f7f968fdae61f3d72cc40c19dec74fd8; signed sourcea6c894c53f5c42333abae7875f1fb5569578c765. The actual downloaded public EXE randownload-all --pg all --verboseanonymously on Windows and rehashed all 85 saved ZIPs. Runtime 39713885339, attempt 3, job 119625028793 is SUCCESS: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 stays5756b3c5136a8bf4db710016cfe97555f0a71c6d. 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 ID420251136were preserved; v0.3.3 was never published or overwritten. Original failed Catalog sync39712420112and 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.
ShutenOishi commentedon Oct 22, 2026
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 matchingNONPUBLISHINGasPUBLISH; retained as failure. Fixed exact-head80ab9a2cc75dafdf441f3d9e0bc781628c78f9f1Run 39754753851 completed SUCCESS, GitHub Actions App15368resolverSUCCESS. Branch main had active protection, mergeable_state clean. Normally protected squash MERGED to build/mainf4e359b4812d435dd72b8e22f9b522cd8bc5b981. Exact-head postmerge Validate 39754876121 SUCCESS and postmerge fleet-status 39754876387 SUCCESS.The shared
scripts/chat-task-queue.pyreads the existing exact 17-entry manual-only fleet and produces a fail-closed, observationalhourlyChatQueueinfleet-status.json.tests/test-chat-task-queue.pyis 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 strictchat-pr-authorization.pyremains 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.ShutenOishi commentedon Oct 22, 2026
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 inscripts/chat-task-queue.py,fleet-status.py, adversarial unit tests anddocs/issue-75-hourly-chat-task.md.Independent live GET verified:
80ab9a2cc75dafdf441f3d9e0bc781628c78f9f1had native App15368 resolver SUCCESS: https://github.com/pgextwin/build/actions/runs/39754753851 .ShutenOishi, mergerShutenOishi, protected merge SHAf4e359b4812d435dd72b8e22f9b522cd8bc5b981.event=push,head_branch=main,actor=ShutenOishi,triggering_actor=ShutenOishi,attempt=1: existing Validate Run https://github.com/pgextwin/build/actions/runs/39754876121 SUCCESS, fleet-status Run https://github.com/pgextwin/build/actions/runs/39754876387 SUCCESS. This confirms native Chat-authored protected-PR → main-push event delivery, with no Work-only Approve-and-run on this PR. It does not prove production Release authorization.Non-negotiable state: The 17 production
promote.ymlcallers, existing human mainworkflow_dispatchfallback, 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.pyparser 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.ShutenOishi commentedon Oct 22, 2026
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.
ShutenOishi commentedon Oct 22, 2026
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. Newscripts/automatic-release-preflight.py, denial fixtures and same existing resolver test job; PR required Run 39758402413 SUCCESS, postmerge Run 39758555479 SUCCESS. The helper ALWAYS returnspublicationAuthorized=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 fakeworkflow_dispatchor substitute the preflight output for a receipt.2. Version-resilient candidate fixes:
pg_ivmPR #29 protected-MERGED188b336fe544cb35cdab1fcdadac50bc1d209150after exact-head PG14–18 5/5 + App15368 required summary SUCCESS; obsolete1.16check 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.orafcePR #18 protected-MERGED3b253c95657a9e54fc579af6e8839cde2dc64cedafter required five-PG SUCCESS; pin-awaremajor.minorcontrol and SQL presence; postmerge 39760028691 SUCCESS.pg_hint_planPR #29 protected-MERGED13c53f2dd5d9530250e12497b7ec685b3657b906after 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 onlyconfig/extension.jsonPR diff: current heads pg_ivmfd4de86a8aab689702d91e69b4e31131994f2877, orafce8033a8e4c3a55e4dc655346d5e897c73c9b4a58f, pg_hint_plan917127d973d113ea38704b6b3793e2e103a214c9. Native newpull_requestCI was triggered via authenticated Chat actor, notaction_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 nativevalidateSUCCESS (same App15368) after fixing an adversarial fixture roster alias; original failure retained. Same existingsync-verified-release.ymlnow 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.
ShutenOishi commentedon Oct 22, 2026
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:
fd4de86a8aab689702d91e69b4e31131994f2877, PR test merge3f36ed051c2288ab5d6136eb5efaa3ac58291ebd, Windows Run 39760879597 SUCCESS.8033a8e4c3a55e4dc655346d5e897c73c9b4a58f, PR test merge6a9180bef695e9d6fbab75cc8e51a713a3a5504c, Windows Run 39760743482 SUCCESS.917127d973d113ea38704b6b3793e2e103a214c9, PR test merge13968c5308da6435a044296c38f0cb250f146102, Windows Run 39760872109 SUCCESS.Existing normal PR workflows skip
candidate_reporton purpose because its dispatch-only gate is not met. Therefore these successes do not include an originalcandidate-auditartifact 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/mergeand exact successful Run IDs. 15/15 PASS; inspection JSON SHA2569763fe7a9cd9fa97ed2d7f5515ddaca39a0a305ff07966fd57c4688756225a04. 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 sharedautomatic-candidate-merge-observer.pychecks genuine main/push/merged bot PR/native CI and always remains nonpublishing. build PR #220 introduces a separate strictpull_requestZIP/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-prfrom 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.ShutenOishi commentedon Oct 22, 2026
2026-10-22 JST — Protected shared native PR audit pilot, precise gate status
88b14ba1ec6fbe2bf63ae81301779926ce585a81; postmerge 39767152553 SUCCESS.cb06156e897a0b8f0609d4320ab619ac6c5c29a8; postmerge 39768529902 SUCCESS. Shared read-onlyverify-native-pr-candidate.yml, strict nativepull_requestvs legacyworkflow_dispatchZIP/SPDX metadata auditor, real associated PR/merge SHA/required App15368 GET validator and hostile CI tests are in protected main.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.NATIVE_CANDIDATE_CI_DENIED: candidate not owned or exact head/target moved. This failure is preserved, NOT waived or credited toward current candidate acceptance.5d593d2e642788743b4b521820286ac8871cb43f, source manifest semantic pins unchanged, PR diff remains EXACTLYconfig/extension.jsonon current protected main; latest native Windows CI 39769754052 is IN_PROGRESS at time of comment. Its later workflow_run-triggeredcandidate-audit-native-pris NOT YET ACCEPTED and must independently succeed at that exact run/head/merge SHA with all five actual artifact ZIPs. Existing signed Release authorization remainsmanual-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.
ShutenOishi commentedon Oct 22, 2026
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.
ShutenOishi commentedon Oct 22, 2026
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.
ShutenOishi commentedon Oct 22, 2026
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.
ShutenOishi commentedon Oct 22, 2026
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 summary17/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 centralverify-native-pr-candidate.yml@cb06156e897a0b8f0609d4320ab619ac6c5c29a8listener (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. Newscripts/bind-native-candidate-audit-live.pycan 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.ShutenOishi commentedon Oct 22, 2026
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.ymlchange 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-prartifact 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:
1b45e71050cebb63efd65f07a5336ce2527fac1b; actual main push 39778879571 SUCCESS. No signed publication privilege.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.
ShutenOishi commentedon Oct 22, 2026
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:
1b45e71050cebb63efd65f07a5336ce2527fac1b, postmerge 39778879571 SUCCESS.238fc3afe4c22a7142c59339eea4e1021c9cb71f, postmerge 39780190255 SUCCESS.2c859c83d699a0da841d97d536452249696fd91e, postmerge 39781709014 SUCCESS. Strict negative fixtures included; NO Release/tag/PUBLISH/Signer/Publisher nor new App/Secret, and witness explicitly sayspublicationAuthorized=false.Actual new source candidate progress:
40de60ee743a90b047f6a15b0917a139f4017a23from original native PR CI 39769754052 SUCCESS and artifact audit 39771145795 SUCCESS (artifact ID12422372611). Actual new-source main/push Windows 39780269426 SUCCESS. No v1.17 signed Release published.on: pushwith manifest-only path guard + read-only central feat(issue75): authenticated real main-push candidate audit witness, read only #224 caller pinned2c859c83..., native PG14–18 Windows 39782024909 still in progress. This listener was NOT installed at PR Step 15: evidence-based Second Wave decision, PG14 policy and pilot plan #28's historical main/push; do not retroactively claim genuine live event acceptance.6331bed1f4e367f6c6ad9944476e878c7eb6f448, only config/extension.json modified; new native Windows 39782466959 running.fc7522174df7a28b3cc4dc049b0433c45bc4d1e1; only config/extension.json modified; new native Windows 39782515798 running.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-prper 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.