Repository navigation
P0: Restore application validation for production dependency pull requests #49
Description
Goal
Enforce a trustworthy application-validation contract for production-affecting pull requests and prevent unreviewed/unvalidated changes from reaching main.
Current state — 2026-09-05
Current main:
b45170409543684a75579a13d7bdd6d8f8ffe8e8
PR #95 is separately ready for review on f8de3ee3180a455634a3261f82020675795e85fe; if explicitly merged, refetch the resulting main SHA before recording any exact-candidate governance evidence.
Implemented code-side validation contract:
- canonical
CI Build / Buildperforms frozen install, Prisma generation, disposable PostgreSQL 16,prisma migrate deploy, typecheck, lint, tests and production build; - relevant PR image validation remains non-publishing/path-scoped;
- CI housekeeping changes no longer cause unnecessary image publication work;
- Ashbi Local CI can provide isolated exact-PR-head validation without deployment/production access.
Current evidence:
- PR fix: reconcile restored upload target during recovery drill #95 exact head passed Ashbi Local CI and GitGuardian and received a clean final Codex review;
- GitHub-hosted
CI Build / Buildcontinues to fail before checkout withsteps:nullon current/recent exact heads; - that is neither passing validation nor an observed application/test failure.
Remaining blocker
main is still unprotected and the connected GitHub integration does not expose repository-administration write capability. The validation contract exists but is not enforced.
Recommended staged governance configuration — requires explicit owner/admin approval
Stage A — safe governance that can be enabled even while hosted Build is unavailable
Protect main with a branch protection rule or repository ruleset requiring:
- pull request before merge;
- at least 1 qualified approving review;
- dismiss stale approvals when new review-relevant commits are pushed;
- require conversation/review-thread resolution before merge where supported;
- block force pushes;
- block branch deletion;
- do not allow normal direct pushes/bypass except a deliberately documented emergency-admin path;
- do not require the currently non-executable hosted
CI Build / Buildyet, because doing so could lock all merges without adding executable evidence.
This stage materially improves governance without weakening the intended validation contract.
Stage B — add executable required-check enforcement after runner recovery
Only after one clean exact-SHA hosted execution exists:
- add required status check
CI Build / Build; - require branch to be up to date before merge unless a documented merge-queue policy replaces it;
- keep one qualified approval and stale-approval dismissal active;
- do not make image publication a universal required PR check; keep image validation path-scoped.
Stage C — prove enforcement
Create one harmless test PR after protection is active and demonstrate:
- it cannot merge without the required review;
- after Stage B, it cannot merge without
CI Build / Buildsuccess; - a new commit invalidates/dismisses stale approval as configured;
- force-push/direct-main paths are blocked for normal use;
- the test PR is closed or merged only according to the approved test plan.
Exact admin handoff
Repository: camster91/synapse
Branch: main
Recommended settings:
- Require a pull request before merging: ON
- Required approving reviews: 1
- Dismiss stale pull-request approvals when new commits are pushed: ON
- Require conversation resolution before merging: ON if available
- Allow force pushes: OFF
- Allow deletions: OFF
- Bypass/direct push: OFF for normal actors; emergency path only if explicitly documented
- Required status check initially: none while hosted Build is non-executable
- After first clean hosted exact-SHA execution: add
CI Build / Buildand require up-to-date branch
Acceptance criteria
- Canonical PR workflow covers frozen install, migration compatibility, typecheck, lint, tests and production build.
- Current test/typecheck compatibility defects identified by local validation are fixed.
- CI housekeeping no longer self-triggers unnecessary image builds.
- Exact reviewed PR fix: reconcile restored upload target during recovery drill #95 has clean local/security/Codex evidence independent of the hosted-runner incident.
- Stage A
maingovernance is active. - A clean exact-SHA hosted
CI Build / Buildexecution exists after runner recovery, or owner explicitly approves an equivalent exact-SHA gate for the beta. - Stage B requires
CI Build / Buildand up-to-date branch. - Stage C proves an unreviewed/unverified change cannot merge.
Capability boundary
The connected GitHub integration can inspect repository state but cannot apply branch protection/ruleset administration writes. The configuration above must be applied through an owner/admin-capable GitHub session or suitable admin automation after explicit approval.
Approval boundary
Creating/changing branch protection or rulesets is a repository-administration mutation requiring explicit owner approval. Do not disable validation, rename checks simply to bypass requirements, or weaken the canonical workflow to work around the hosted-runner incident.
Source of truth
.github/workflows/ci.yml; .github/workflows/build-and-push.yml; current main b45170409543684a75579a13d7bdd6d8f8ffe8e8; PR #95 reviewed head f8de3ee3180a455634a3261f82020675795e85fe; roadmap #71.
Activity
camster91 commentedon Aug 28, 2026
PR #55 reproduced the account-level validation blocker on commit
c6978a0: Build, Lint, and image jobs all failed before checkout with zero steps and no assigned runner. Local validation is green (40 tests, typecheck, zero-warning lint, and production build). Failed runs: https://github.com/camster91/synapse/actions/runs/33197310074, https://github.com/camster91/synapse/actions/runs/33197310077, and https://github.com/camster91/synapse/actions/runs/33197309993.camster91 commentedon Sep 1, 2026
Exact-SHA superseding validation evidence is now available on PR #55 at
ac9c90d2c34a5d052b1e3959fd5ee6f1b75f255e: CI Build passed, Lint passed, Ashbi Local CI passed, GitGuardian passed, and the read-only dual-architecture (linux/amd64,linux/arm64) image validation passed in 26m58s without publication. Image run: https://github.com/camster91/synapse/actions/runs/33498965202. PR #48 is closed and superseded by the integrated candidate. This issue remains open pending the remaining governance criteria: required-check/branch-protection confirmation and qualified review of the selected candidate.camster91 commentedon Sep 1, 2026
Governance check on 2026-09-01:
GET /repos/camster91/synapse/branches/main/protectionreturns HTTP 404Branch not protected. The technical validation contract now passes, but it is not enforced as a merge requirement onmain. Closing #49 therefore still requires owner-approved branch protection/ruleset configuration with the selected required checks, plus qualified review evidence.camster91 commentedon Sep 4, 2026
2026-09-03 RC1 preparation update:
PR #85 (
fix: require PostgreSQL migration proof in canonical CI) is open and mergeable at head308d6ca246bdbd611e597a479bb3b97dde10dcc2.Code-side gap corrected:
CI Build / Buildnow starts disposable PostgreSQL 16;prisma migrate deployruns before typecheck/lint/tests/build;Latest hosted CI run
33833062177still failed before execution: the Build job has zero recorded steps. This is runner-allocation/infrastructure evidence, not an application or migration failure.Recommended future main protection once explicitly approved and runner execution is healthy:
CI Build / Buildand require branch to be up to date before merge;No branch protection/ruleset was changed and PR #85 was not merged.
camster91 commentedon Sep 4, 2026
Post-merge RC1 status on 2026-09-04:
PR #85 is now merged. The canonical
CI Build / Buildworkflow onmainincludes disposable PostgreSQL 16, health gating,prisma generate,prisma migrate deploy, typecheck, zero-warning lint, unit tests, and production build. Currentmainisb16ca80a28e96ad22a6d2cae3acb4f920466712d.Governance remains the only unresolved part of #49:
mainis still unprotected;[];Recommended protection remains:
CI Build / Buildand require the branch to be up to date;No repository protection/ruleset settings were changed in this update.
camster91 commentedon Sep 4, 2026
Post-merge RC1 status (2026-09-04): PR #85 is merged and the canonical
CI Build / Buildcontract on currentmainincludes disposable PostgreSQL 16 plusprisma migrate deploybefore typecheck/lint/tests/build. Currentmainisa09a91ac1ff90da23f3c12c397858ec0a460cd03.Fresh push run
33865453195and its explicit retry both failed before checkout with a Build job containing zero executed steps. This remains runner-allocation/infrastructure evidence, not application or migration failure.Governance is still unresolved:
mainreportsprotected: false, required status-check enforcement is off, and no repository ruleset is present. The connected GitHub app does not expose administration write capability, so this session cannot safely apply branch protection. #49 therefore remains open for admin-side enforcement of PR-only merges, one qualified approval, stale-approval dismissal, and requiredCI Build / Buildonce runner execution is healthy.camster91 commentedon Sep 4, 2026
Post-merge CI governance review — 2026-09-04
Current
main:0c05e7037b5d07029401aad2d6515ef6c243a08c.The canonical CI contract remains migration-aware and unchanged by the latest maintenance merges. PR #89 reduced unnecessary image-workflow noise for GitHub/docs/Markdown-only changes without weakening the canonical
CI Build / Buildgate or runtime/tag image publication.Observed behavior on the #89 merge:
CI Buildtriggered;Build and Push Imagecorrectly did not trigger for the workflow-only push;Therefore #49 remains blocked on hosted runner execution plus governance, not on a known application/test failure.
mainis still unprotected and no repository ruleset enforcesCI Build / Buildor qualified review.camster91 commentedon Sep 4, 2026
Connector capability check on 2026-09-04: this GitHub connection exposes ruleset/branch-protection read access only; no ruleset/branch-protection write action is available through the connected GitHub tool. Therefore #49's governance mutation cannot be completed from this chat even after approval. The exact admin handoff remains the recommended configuration in the issue body: protect
main, require PRs, one qualified approval,CI Build / Build, stale-approval dismissal, and block force-push/delete. After an authorized admin applies it, this chat can re-read the branch/ruleset state and verify the gate.camster91 commentedon Sep 4, 2026
Latest hosted-runner retry — 2026-09-04
Re-ran canonical
CI Build / Buildfor exact current candidate0c05e7037b5d07029401aad2d6515ef6c243a08c.Observed sequence:
queued;failure;steps: null/ no executed workflow steps.Conclusion: hosted-runner allocation is still unavailable. This remains infrastructure evidence only, not an application failure and not a pass.
Additional review evidence:
378f145;mainafter fix(test): restore TypeScript compatibility in runtime/operations tests #90 differs in application/test content only by chore(ci): skip housekeeping image builds #89's.github/workflows/build-and-push.ymlhousekeeping change.That equivalence is useful context but does not satisfy the exact-SHA execution requirement. Keep #49 open until governance is active and either hosted CI executes successfully on the exact candidate or an explicitly approved equivalent exact-SHA gate is produced.
camster91 commentedon Sep 5, 2026
Repository-governance admin handoff — exact current state
Current exact repository candidate:
b45170409543684a75579a13d7bdd6d8f8ffe8e8.Read-only verification on 2026-09-04:
mainprotection: off;[];CI Build, run 33924508272;Build(GitHub Actions app);steps:null), so it is not application pass/fail evidence.Exact admin configuration to apply when explicitly approved
Target:
mainonly.Buildfrom workflowCI Build. In the GitHub UI, select the check associated with theCI Buildworkflow; do not add image publication as a universal required check.Important sequencing
Do not enforce the currently failing hosted
Buildcheck until either:Otherwise
mainwould become permanently unmergeable because the required check cannot currently start.Recommended safe sequence:
BuildunderCI Build;Buildand verify GitHub blocks merge;Buildcomplete successfully on the test PR and verify merge becomes eligible only after the required approving review;Capability boundary
The current connected GitHub integration can read branch/ruleset state but cannot perform repository-administration writes, so this is an execution-ready GitHub-admin/Codex handoff rather than an in-chat mutation.
No protection settings were changed by this comment.