Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df1b25b680 |
@@ -289,19 +289,6 @@ rendered sidecar against its **own ServiceDefinition**, which is the only readin
|
||||
|
||||
So a too-broad regex is rejected **where a human types it**, on every gate run, by the real tool
|
||||
— and the shape invariant fires too.
|
||||
- **THE RENDERER'S REFUSAL REACHES `render-golden` AS A READABLE FAILURE, NOT A TRACEBACK.** With
|
||||
`^/signalr/` swapped for `^/` in a *copy* of the catalog (outside the repo), both invocation
|
||||
shapes exit **rc 1 with 0 tracebacks** — the single-SD form and `--all <dir> -o <dir>
|
||||
--wave-layout --no-image-automation`, which is the one `ci/render-golden.sh` drives:
|
||||
|
||||
render.py: radarr: auth.apiRoutes entry '^/' is not an anchored path regex. Each entry
|
||||
must start with '^/' and continue with literal path characters (e.g. '^/api/',
|
||||
'^/signalr/', '^/api/v3/.*'). ... A too-broad --api-route answers a PAGE LOAD with 401, so
|
||||
a logged-out operator sees a bare error page and is never offered a sign-in: the service
|
||||
looks permanently broken rather than merely unauthenticated.
|
||||
|
||||
So the breadth guard is gated by `render-golden` even on a run where the schema stage skipped,
|
||||
and the operator is told *why* rather than handed a stack trace.
|
||||
- **The schema's new shape invariant.** A non-empty `auth.apiRoutes` requires
|
||||
`auth.mode: forward-auth`, because the flag renders onto the per-app sidecar and no sidecar exists
|
||||
for `oidc`/`native`/`none` — declaring it elsewhere would be a **silent no-op**, which is the
|
||||
@@ -344,20 +331,14 @@ rendered sidecar against its **own ServiceDefinition**, which is the only readin
|
||||
rather than leaving "something is red" as the whole report. Fail-closed is correct here and
|
||||
deliberate: unlike `gitea-settings`, where a missing credential is a lock-out, a skip of this
|
||||
stage would be a bypass (CLAUDE.md §1).
|
||||
- **CI, read from the commit's `/statuses` rather than from a tick.** On the branch head
|
||||
`df1b25b6`, both contexts have reported and **only one of them ran**:
|
||||
- **CI on `99560c2d`, read from the commit's `/statuses` rather than from a tick:**
|
||||
|
||||
gate / gate (pull_request) state=failure desc='Failing after 1m45s'
|
||||
gate / conformance (pull_request) state=success desc='Has been skipped'
|
||||
gate / gate (pull_request) state=failure desc='Failing after 1m44s'
|
||||
gate / conformance (pull_request) state=pending desc='Blocked by required conditions'
|
||||
|
||||
**That second line is §2b's trap in the wild**: a *skipped* Gitea job reports
|
||||
`state=success`. The conformance job did not execute, so its green tick certifies nothing —
|
||||
read the description, not the colour. Worth recording the earlier reading too, because the
|
||||
**same context changed its answer**: on the first push (`99560c2d`) it was
|
||||
`state=pending desc='Blocked by required conditions'`, i.e. still waiting on the gate job it
|
||||
depends on; once that job settled, the skip resolved to `success`. Anyone sampling a status
|
||||
once can therefore see either a pending or a green tick for a job that never ran.
|
||||
**I could NOT read the CI job log to confirm the failing stage from CI's
|
||||
Note the second line is **pending**, not the `success` + `"Has been skipped"` trap §2b names —
|
||||
the conformance job is gated on the gate job, which failed, so it never ran at all. Either way
|
||||
it certifies nothing. **I could NOT read the CI job log to confirm the failing stage from CI's
|
||||
own output**: this Gitea's `/api/v1/repos/{owner}/{repo}/actions/runs` endpoint answers
|
||||
**404** (only `/actions/tasks` exists, which lists tasks without logs), and
|
||||
`/actions/jobs/{task_id}/logs` answers `404 Not found` for the task id. So my attribution of the
|
||||
|
||||
Reference in new issue
Block a user