1 open question
Country OS may open an entry; it may never close one. The channel beside each entry is where you answer.
_global/OS-004 — `DirectoryApiClient` upstream timeout — a graceful-degrade fix was already rejected in review, and the failure keeps growing unaddressed
permalinkReply to the Google Chat message — any wording. A model reads it, and tn:decisions-answer writes it down.
What is failing. App\Directory\DirectoryApiClient::fetch() calls
cities-api.app.production.aws.selectra.io with no rescue()/try-catch around
the HTTP call. A connection timeout throws ConnectionException before a
Response exists, so it escapes uncaught and 500s every directory page on
every site that uses this shared client. Two shortIds, same file, same root
cause, different sites:
| shortId | events (this run) | site / route |
|---|---|---|
CMS-8K |
883 (was 582 on 2026-07-29, 241 on 2026-07-02) | companiadeluz.es, comparadorluz.com, mercato-libero.it, tarifasgasluz.com, tarifasdeagua.es, and the Spain-energy/Italy-telecom/Portugal-* directory pages generally |
CMS-112 |
716 at last triage 2026-08-12, not re-checked this run | tarifasdeagua.es, /oficinas/{province}/{city} |
Why this is a decision, not a routine fix. A fix already shipped once —
rescue(fn () => ..., null), reporting to Sentry by default, exactly the
shape memory/review-feedback.md says is normally acceptable — and a human
reviewer (@aurian) reverted it anyway: "hiding the upstream timeout behind a
clean null degrade removes the only signal that cities-api is failing. Leaving
this unhandled so it surfaces (Sentry / 500) is the correct behavior here."
(PR #8898, 2026-07-14). That is a considered call that a 500 is the intended
signal for this specific client, not an oversight — so a triage run cannot
apply the review-feedback rule's normal "rescue() that still reports is fine"
reading here; it was tried and explicitly rejected for this call site.
Why it is coming to you now instead of staying a REPORT row. This has been re-classified REPORT at every triage since 2026-07-02 (five runs) with no design proposed and no GitHub issue opened — the event count has grown 3.7x in that time (241 → 883) with nothing to show a human ever saw it outside a journal entry that scrolls away. That is precisely the failure this register exists to stop.
What is being asked. Whether cities-api going down should keep 500ing directory pages indefinitely (current behavior, deliberately preserved by the revert), or whether there is an acceptable middle design — e.g. a distinct "upstream degraded" response/status that is visibly different from a normal 200 (so it can't be mistaken for "working") but doesn't crash the request, or an uptime/alerting hook outside Sentry-issue-count that would let a graceful fallback stay actionable. Sizing that trade-off is exactly the human judgment call PR #8898 asked for and never got a follow-up design for.
Resolved
Answered
9 entries| Entry | Asked | Type | Status | Opened | Settled | Took |
|---|---|---|---|---|---|---|
| _global/OS-003 | 29k Sentry events from workflow rows orphaned by our own namespace rename | report | resolved | 2026-08-31 | 2026-09-01 | 1d |
| _global/OS-001 | `laravel-workflow` is abandoned upstream, with no successor chosen | decision | resolved | 2026-08-27 | 2026-09-01 | 5d |
| _global/OS-002 | MySQL replica connection pool exhausted, hitting live traffic | report | resolved | 2026-08-27 | 2026-08-28 | 1d |
| tn/TN-003 | Write the STEG tariff figures in one place | decision | resolved | 2026-08-18 | 2026-08-19 | 1d |
| tn/TN-002 | `FAQPage` regression on `/steg/numero-vert` — shared component | report | resolved | 2026-08-17 | 2026-08-27 | 10d |
| tn/TN-005 | Add Python to the orchestrator image? | decision | rejected | 2026-08-21 | — | 18d |
| tn/TN-001 | Authorise recurring content production | decision | resolved | 2026-07-15 | 2026-08-19 | 35d |
| tn/TN-004 | Does the redevance depend on subscribed power? | decision | resolved | 2026-08-18 | 2026-08-18 | 0d |
| tn/TN-000 | VAT base for a STEG bill | decision | resolved | 2026-08-18 | 2026-08-18 | 0d |
Approval records
data/approvals/ · the other gate| Request | Opened | Answer | Waited | Token |
|---|---|---|---|---|
| tn:seo-fixes | 02/07/2026 19:23 | approved | 16m | issued |
One approval record in the system's whole history. That is why decisions.md exists: a gate nobody walks through is not a gate.
de has no decisions.md. Only Tunisia keeps a register today; any workspace can start one.