Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2983378496 |
@@ -289,6 +289,19 @@ 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
|
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.
|
— 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
|
- **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
|
`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
|
for `oidc`/`native`/`none` — declaring it elsewhere would be a **silent no-op**, which is the
|
||||||
@@ -331,14 +344,24 @@ 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
|
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
|
deliberate: unlike `gitea-settings`, where a missing credential is a lock-out, a skip of this
|
||||||
stage would be a bypass (CLAUDE.md §1).
|
stage would be a bypass (CLAUDE.md §1).
|
||||||
- **CI on `99560c2d`, read from the commit's `/statuses` rather than from a tick:**
|
- **CI, read from each commit's `/statuses` rather than from a tick.** Both contexts report, and
|
||||||
|
**only one of them runs**. Identical on `99560c2d`, `df1b25b6` and `f1d16f44`:
|
||||||
|
|
||||||
gate / gate (pull_request) state=failure desc='Failing after 1m44s'
|
gate / gate (pull_request) state=failure desc='Failing after ~1m43-1m45s'
|
||||||
gate / conformance (pull_request) state=pending desc='Blocked by required conditions'
|
gate / conformance (pull_request) state=success desc='Has been skipped'
|
||||||
|
|
||||||
Note the second line is **pending**, not the `success` + `"Has been skipped"` trap §2b names —
|
**That second line is §2b's trap in the wild**: a *skipped* Gitea job reports
|
||||||
the conformance job is gated on the gate job, which failed, so it never ran at all. Either way
|
`state=success`. The conformance job did not execute, so its green tick certifies nothing —
|
||||||
it certifies nothing. **I could NOT read the CI job log to confirm the failing stage from CI's
|
read the description, not the colour. The duration is given as a range on purpose: it differs
|
||||||
|
by a second or two per run, and pinning one number inside the file whose commit triggers the
|
||||||
|
next run is a self-reference, not a measurement. The load-bearing fields are the **state** and
|
||||||
|
the **description**, and those are stable across all three.
|
||||||
|
|
||||||
|
Worth recording that the **same context changed its answer over time**: on the first push it
|
||||||
|
briefly read `state=pending desc='Blocked by required conditions'` — still waiting on the gate
|
||||||
|
job it depends on — and resolved to `success` only once that job settled. So sampling a status
|
||||||
|
once can show either a pending **or** a green tick for a job that never executed.
|
||||||
|
**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
|
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
|
**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
|
`/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