Files
Claude Opus 5 d7a1c4d5e1
CI (SIAX Cloud) / security (push) Successful in 31s
CI (SIAX Cloud) / integration (push) Successful in 42s
Security Scan (SIAX Cloud) / security (push) Successful in 44s
CI (SIAX Cloud) / quality (push) Successful in 1m6s
CI (SIAX Cloud) / security (pull_request) Successful in 30s
CI (SIAX Cloud) / integration (pull_request) Successful in 37s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 26s
CI (SIAX Cloud) / quality (pull_request) Successful in 1m2s
docs: the Coolify deploy hook is LIVE — six docs still say it is a placeholder
Six documents on main assert that no Coolify app has been provisioned for 0pt and
that cd.yml's COOLIFY_APP_ID is a literal placeholder whose guard fails the job on
purpose. That is no longer true, and the gap is not cosmetic: it means a merge to
main silently ships to production while the repo's own docs promise it cannot.

Measured, not assumed:

  * repo Actions secret  COOLIFY_TOKEN   exists, created 2026-08-31T11:34:34Z
    (GET /api/v1/repos/sax3l/0pt/actions/secrets)
  * repo Actions variable COOLIFY_APP_ID exists with a real 24-character value,
    not the "TODO-no-coolify-app-provisioned-yet" literal
    (GET /api/v1/repos/sax3l/0pt/actions/variables)
  * both guards in .gitea/workflows/cd.yml therefore pass; on the push to main at
    1ff34410 (2026-09-06) the job "Deploy to Coolify / deploy" (run 11695, job
    26295) finished SUCCESS with "coolify deploy HTTP 200" in its log

Deliberately NOT claimed: that the Coolify app builds, starts or serves, or that
0pt.app DNS points at it rather than Vercel. Nobody probed the running site, and
every corrected passage says so explicitly rather than replacing one unverified
claim with another.

Corrected: README.md "Deploy", docs/02-architecture.md hosting callout,
docs/architecture/decisions/0001 (consequence annotated, decision untouched --
an ADR is a historical record), docs/runbook/incident.md (the symptom row is now
inverted: the risk is an unintended deploy, not a red job),
docs/compliance/GOLDEN-STANDARD-REPORT.md D4 (❌ -> ⚠️, not ✅, because "webhook
accepted" is not "app serves"), docs/compliance/INVENTORY.md CI row.

Falsifiable check over all six files (stale claim present without a correction
marker = red):

  origin/main                                  -> FAIL (12 findings)
  this branch                                  -> PASS
  mutation: drop only the README bullet        -> FAIL
  mutation: drop only the runbook correction   -> FAIL

The check initially passed vacuously on docs/02-architecture.md because PR #32 had
already put the string "CORRECTED 2026-09-06" in that file for an unrelated reason;
the marker was made specific so the check could actually fail there too.

Docs only. No workflow files, no .gitignore, no source.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 09:56:53 +02:00
..

Architecture Decision Records — 0pt

BACKLOG P1-2. One file per decision, numbered sequentially, never renumbered or deleted (superseded decisions get a new ADR that says so, per the convention below).

ADR Title Status
0001 Deploy target is Coolify, not Vercel Accepted (migration not yet executed)
0002 /api/0pt/* auth is fleet Zitadel Bearer, not NextAuth Accepted and implemented
0003 Lakehouse format is Apache Iceberg (pointer to n0d ADR-0030) Accepted (owned by n0d)

Deliberately not yet written here

Two decisions the original BACKLOG (P1-2) named explicitly are not written as ADRs in this pass, on purpose:

  • Payments provider (Stripe vs. Revolut vs. Hyperswitch). Gated on the account owner's decision (BACKLOG P1-23) — writing an ADR that presents a choice as "accepted" before it's actually been decided would misrepresent the repo's own state, which is exactly what this whole documentation pass is trying to stop doing.
  • The services/scrapers/* keep-vs-remove question. Explicitly out of scope for this pass — see SECURITY.md and the dated, attributed provenance record already maintained for that decision elsewhere in this repo's compliance docs. Not duplicated here.

Convention

New ADR: NNNN-short-kebab-title.md, next sequential number, status one of Proposed / Accepted / Superseded by ADR-NNNN / Rejected. Record the date the decision was actually made (from git log/commit history where possible), not just the date the ADR file was written, when they differ — see 0001–0003 for the pattern.