Model-provider portability, the nav/dashboard/security fixes, and a readiness gate that can't pass by skipping #5564
ccantynzAI Reviewcommented 3d ago
AI Triage
(no summary)
Priority: medium Risk area: mixed
Suggested labels: (no label suggestions) Suggested reviewers: (no reviewer suggestions)
Suggestions only — nothing has been applied. The PR author stays in control.
gluecron[bot]🤖 botAI Reviewcommented 3d ago
AI review unavailable
The platform's AI balance is exhausted, so AI generation is temporarily unavailable. Nothing was lost. You can queue this as a repair for the internal agent from the repository's Health page, or try again once the balance is restored. The PR is otherwise unchanged.
Cross-repo impact
See what breaks downstream if this PR merges.
⮌ Merged
This pull request was merged into main.
c comment · e edit title · m merge · a approve · r request changes · ? shortcuts
Accumulated work on
feat/model-provider-portability. The newest commit is the one worth reviewing closely.Readiness + onboarding checks (181f2e6)
The readiness script reported two states, so the run that checked the least looked exactly like the run that checked the most.
privacyandauthz-matrix— the two gates that actually catch a private repo leaking — recordedok: truewhen their inputs were absent, and the summary then said "all hard gates passed".Three changes:
Gates are tri-state.
pass/fail/unverified. A gate that could not run is never scored as either of the other two, blocks READY on its own terms, and names the input that would settle it. Exit codes separate the two ways of not being ready, because they have different owners —1is a defect in the product,3is a missing input in whoever invoked the gate. Collapsing them is how "we ran the checks" came to mean "we ran whichever checks the environment permitted".New
onboardinghard gate. The getting-started page is a list of promises and nothing checked that any of them led anywhere. Its CTAs are read from source rather than listed literally, for the same reasonrepoScopedGetRoutesis — a literal list is a list nobody extends on the day they add step six. 404 and 5xx fail; a 302 to login passes, because the route exists and is doing its job. Currently 8 destinations, all resolving.Playwright is a lazy import, so
--no-browserstops requiring the dependency it exists to avoid. That is what kept this gate off the machine that should run it every deploy: the CI runner executes inside the app container, which ships no browser..gluecron/workflows/deploy.ymlnow runs it against the build it just confirmed live — until now that job proved the right bytes shipped and nothing more, which a deploy serving 500s on every page would also have passed. Exit 3 there prints the coverage gap and passes, deliberately:buildRunnerEnvstrips credentials from the runner by design, and failing a deploy over a gap we created on purpose trains everyone to ignore a red deploy.Against production right now: 4/8 hard gates verified passing, 4 unverified (2 need
--private-repo/--public-repo, 2 need Chromium). Previously that same run reported "all hard gates passed".New:
bun run readiness,bun run readiness:full,bun run first-run.12 new tests pin the verdict arithmetic and the source-derived extraction — both regexes over source files, which degrade quietly, and an empty match list is a gate that probes nothing while reporting a clean run.
Still open after this
PAGESandAUTH_ONLYlists in the gate are still hand-maintained literals — the exact drift the rest of the file is built to avoid.scripts/first-run-journey.mjs(the 10-step brand-new-human journey) still runs only when someone remembers. It is the best asset in the repo and nothing invokes it.🤖 Generated with Claude Code
https://claude.ai/code/session_01YByzT4xu2Sq6RRqQiGh5Nd