CI (SIAX Cloud) / security (push) Successful in 19s
Security Scan (SIAX Cloud) / security (push) Successful in 19s
CI (SIAX Cloud) / quality (push) Successful in 44s
CI (SIAX Cloud) / security (pull_request) Successful in 21s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 20s
CI (SIAX Cloud) / quality (pull_request) Successful in 42s
BACKLOG P1-1: siax.repo.json/siax.config.json rewritten to be schema-valid against sax3l/siax-standard's actual v2.0 schemas (lifecycle, operationalState, gitHost, domains-as-objects, consumedBy, children, contracts -- validated with jsonschema, not just eyeballed). config.json restructured to the real deploy-descriptor shape (framework/build/start/ port/healthcheck/environments) instead of duplicating repo.json's identity fields, which the schema doesn't allow. BACKLOG P1-2: 3 ADRs for decisions already made and evidenced elsewhere in this repo (Coolify-not-Vercel, Zitadel-not-NextAuth, Iceberg-format pointer to n0d ADR-0030) -- retroactive documentation, not new decisions. The Stripe/Revolut and services/scrapers/* questions are explicitly NOT written as ADRs here; both are account-owner-gated or actively under review elsewhere (see docs/architecture/decisions/README.md). BACKLOG P1-3: CHANGELOG.md from real git log history (no tags/releases exist yet -- this doesn't invent version numbers that were never cut). BACKLOG P1-19: `pnpm siax:doctor` (scripts/siax-doctor.mjs, AGENT-04) -- zero-dependency, checks required files + manifest shape, prints control-IDs. .devcontainer/devcontainer.json (DX-03). compose.dev.yaml (DX-02 -- UNVERIFIED, no Docker available in this environment to smoke-test, flagged in the file itself). All 4 prompts + the index rewritten to AGENT-03 shape (goal/context/prerequisites/scope/contract/acceptance-criteria/ control-ID/forbidden-actions). BACKLOG P1-20: docs/architecture/ARCHITECTURE.md migrated to the v2.0 9-heading template -- new §5 "Ytor och paritet" (capability x API/CLI/MCP/console coverage table, grounded in the same registry facts docs/02-architecture.md already established), §6-9 renumbered from the old §5-8 (all internal cross-references fixed, CLAUDE.md's own §-numbers left untouched). docs/api/ added (points at contracts/openapi.yaml as the one SSOT instead of duplicating it as drift-prone prose). BACKLOG P1-21: packages/schemas now has a real package.json (was loose JSON files with no package -- pnpm-workspace.yaml's packages/* glob matched an empty package). Verified `pnpm install --frozen-lockfile` and the full typecheck/test/build suite still pass with 2 real workspace projects. apps/ restructuring explicitly NOT attempted (BACKLOG's own effort estimate is "L" / large -- moving the whole app tree is a bigger, riskier change than belongs in this pass). Import-boundary check added via dependency-cruiser (ARK-14) -- installed for real, config tested against this codebase (179 modules, 310 deps, 0 violations), wired as `pnpm run deps:check` (advisory, not yet a CI gate). BACKLOG P2-5: docs/02-architecture.md's "Hosting" section marked SUPERSEDED (the Vercel plan was superseded by the Coolify deploy.target flip, 2026-08-09 -- ADR-0001). README.md/.env.example were checked and are already accurately framed (live-on-Vercel vs. config-target-is-Coolify) -- not touched. BACKLOG P3-5: 2 stale github.com/sax3l/0pt/pull/3 links removed (the PR merged long ago, .env.example is real and current) -- docs/09-build-plan.md, docs/08-infrastructure.md. The "two diverged remotes, unresolved which is canonical" language elsewhere (CLAUDE.md, AGENTS.md, SECURITY.md, etc.) is deliberately NOT touched -- that's a live, correctly-flagged, account-owner- owned open question per the Gitea-exclusivity mandate, not a stale link. BACKLOG P6 (19 items): concrete artifacts for the ones that are actually a file (.editorconfig, dependency-cruiser, deprecation policy, K8s reference manifest, .actrc, Makefile, ONBOARDING.md); docs/guides/P6-GUIDES.md for the rest (CLI-13, DOC-18, UI-30, IAM-19, PAY-11, AI-18, OBS-21, TEST-20, NET-19, SCALE-13, OSS-10, AGENT-13) -- each grounded in this repo's actual code/gaps, not generic advice. NOT attempted (out of this task's scope, noted for the record): - P2-1 (cl0ud app-registry.ts mismatch) -- lives in a different repo (sax3l/cl0ud), not cloned/authorized for this task's single-repo PR flow. - The CI "doctor step" half of P1-15 -- deliberately left out of this PR's .gitea/workflows/ci.yml to avoid a 3-way merge conflict with ci/security-headers-and-scanning, which already restructured that file; add it as a follow-up once that PR merges. This branch was authored independently of, but shares docs/architecture/ ARCHITECTURE.md and docs/slo.md with, fix/honest-health-check and ci/security-headers-and-scanning -- expect a small, normal merge conflict if this is rebased after either of those merge first (both already rebased cleanly against each other and against main as of this commit).
151 lines
7.5 KiB
Markdown
151 lines
7.5 KiB
Markdown
# P6 guides — 0pt
|
|
|
|
BACKLOG P6: 19 GUIDE-level items, all marked S (small effort), all "NU"
|
|
(safe to write now). Several have their own concrete artifact instead of a
|
|
guide entry here — see the table. This file covers the rest: real,
|
|
actionable "how to build this when it's prioritized" guidance grounded in
|
|
0pt's actual code, not generic advice that could apply to any repo.
|
|
|
|
| Control | Item | Where |
|
|
|---|---|---|
|
|
| REPO-13 | `.editorconfig` | [`.editorconfig`](../../.editorconfig) |
|
|
| ARK-14 | dependency-cruiser | [`.dependency-cruiser.cjs`](../../.dependency-cruiser.cjs), `pnpm run deps:check` |
|
|
| API-24 | deprecation policy | [`docs/api/DEPRECATION_POLICY.md`](../api/DEPRECATION_POLICY.md) |
|
|
| CD-23 | K8s manifest | [`deploy/k8s/`](../../deploy/k8s/) (reference only, not the deploy path) |
|
|
| CI-16 | `act` | [`.actrc`](../../.actrc) |
|
|
| DX-11 | Makefile | [`Makefile`](../../Makefile) |
|
|
| DX-12 | onboarding | [`ONBOARDING.md`](../../ONBOARDING.md) |
|
|
| CLI-13 | `doctor` CLI subcommand | see §1 below |
|
|
| DOC-18 | documentation site | see §2 below |
|
|
| UI-30 | PWA | see §3 below |
|
|
| IAM-19 | impersonation | see §4 below |
|
|
| PAY-11 | Hyperswitch ADR | see §5 below |
|
|
| AI-18 | assistant | see §6 below |
|
|
| OBS-21 | status page | see §7 below |
|
|
| TEST-20 | chaos testing | see §8 below |
|
|
| NET-19 | IPv6 | see §9 below |
|
|
| SCALE-13 | read replicas | see §10 below |
|
|
| OSS-10 | upstream contribution | see §11 below |
|
|
| AGENT-13 | nightly agent | see §12 below |
|
|
|
|
---
|
|
|
|
## 1. CLI-13 — `doctor` CLI subcommand
|
|
|
|
There is no CLI surface at all yet (BACKLOG P1-5 — L effort, not attempted
|
|
this pass). `pnpm run siax:doctor` / `make doctor`
|
|
(`scripts/siax-doctor.mjs`) already covers the underlying check logic
|
|
(AGENT-04). When P1-5 builds `apps/cli`, wire a `siax 0pt doctor` subcommand
|
|
that shells out to (or re-imports) `scripts/siax-doctor.mjs` rather than
|
|
re-implementing the checks — one source of truth for "is this repo
|
|
compliant", not two that can drift.
|
|
|
|
## 2. DOC-18 — documentation site
|
|
|
|
Not built. When prioritized: `contracts/openapi.yaml` already exists as a
|
|
real OpenAPI 3.1 SSOT, so the lowest-effort path is a static OpenAPI
|
|
renderer (e.g. Redocly CLI or Scalar) pointed at that file, deployed as a
|
|
static site — not a hand-authored docs site that would drift from the
|
|
contract. `docs/*.md` could be published alongside via any static-site
|
|
generator that reads plain Markdown (Docusaurus, Starlight); pick whichever
|
|
matches what other SIAX Cloud repos already use, per BACKLOG's "one tool per
|
|
job" rule — check `cl0ud`/`n0d` first before introducing a new one here.
|
|
|
|
## 3. UI-30 — PWA
|
|
|
|
Not built. Would need: a `manifest.json` (icons already exist at
|
|
`public/icon*.png`/`icon.svg` — reuse them, don't regenerate), a service
|
|
worker (Next.js has no built-in PWA plugin as of this repo's Next 16; a
|
|
minimal hand-written SW covering `/api/health`-style offline detection would
|
|
be more honest than a cargo-culted `next-pwa` config, given this app's
|
|
`ignoreBuildErrors: true` posture already has enough unverified surface). Low
|
|
priority — 0pt's UI is transactional (order flow, portal), not the kind of
|
|
app users install to a home screen.
|
|
|
|
## 4. IAM-19 — impersonation
|
|
|
|
Not built. Needed pattern once an admin portal exists with real customer
|
|
data: a support/admin session that can view-as a specific tenant/user,
|
|
**always** logged to AUD0 (BACKLOG P0-18 — AUD0 client exists but is
|
|
currently no-op without `AUD0_URL`) with the impersonator's real identity
|
|
attached, never silently. Do not build a "become this user" auth shortcut
|
|
without that audit trail landing first — an impersonation feature with no
|
|
audit log is a privilege-escalation bug wearing a support-tool costume.
|
|
|
|
## 5. PAY-11 — Hyperswitch ADR
|
|
|
|
**Proposed, not accepted — payments provider is explicitly gated on the
|
|
account owner's decision (BACKLOG P1-23).** This entry exists so the option
|
|
is on record, not to decide it. Hyperswitch is an open-source payment
|
|
orchestration layer (self-hostable) that could sit in front of
|
|
Stripe/Revolut/others rather than 0pt integrating each provider directly
|
|
(`lib/stripe.ts` today). Trade-off to weigh when P1-23 is actually decided:
|
|
self-hosting Hyperswitch adds an operational dependency (another service to
|
|
run/monitor) in exchange for provider-agnosticism; direct integration
|
|
(current state) is simpler but couples this repo to Stripe's specific API
|
|
shape. Not evaluated further here — that's the ADR this guide is explicitly
|
|
not writing.
|
|
|
|
## 6. AI-18 — assistant
|
|
|
|
Not built. `app/api/ai/parse` exists today as a heuristic (no model call,
|
|
per `CLAUDE.md`/`docs/02-architecture.md`'s "honest heuristic" framing) — a
|
|
real assistant feature should route through INF0 (the fleet AI gateway,
|
|
`INF0_URL` — documented target, not yet read by any code in this repo) per
|
|
the platform mandate, never a raw provider key committed here.
|
|
|
|
## 7. OBS-21 — status page
|
|
|
|
Not built. Lowest-effort honest option once `/api/health` + `/api/ready`
|
|
are actually monitored (BACKLOG P1-11, not yet wired to Prometheus/GlitchTip
|
|
per that item): a self-hosted status page (e.g. Upptime, which is
|
|
just-a-GitHub/Gitea-Actions-cron + static site, no server to run) polling
|
|
those two endpoints. Do not stand up a status page before the endpoints it
|
|
would display are meaningfully monitored — an unmonitored status page that
|
|
says "operational" is worse than no status page.
|
|
|
|
## 8. TEST-20 — chaos testing
|
|
|
|
Not built, and low-value until BACKLOG P0-12 lands (real DB/persistence —
|
|
right now there's no durable state to chaos-test; killing the process loses
|
|
nothing that wasn't already going to be lost on the next cold start). Once
|
|
persistence exists: start with the cheapest chaos test that matches 0pt's
|
|
actual documented failure mode — kill the Postgres connection mid-request
|
|
and assert `/api/ready` flips to 503 within one health-check interval (this
|
|
is now directly testable thanks to BACKLOG P0-3's real dependency probes).
|
|
|
|
## 9. NET-19 — IPv6
|
|
|
|
Not evaluated. `docs/architecture/ARCHITECTURE.md` doesn't currently record
|
|
whether the Coolify target node(s) or `0pt.app`'s DNS have AAAA records —
|
|
check `z0ne` (SIAX's own DNS product) once a real Coolify app exists for
|
|
this repo; premature to configure before there's a fleet IP to point at.
|
|
|
|
## 10. SCALE-13 — read replicas
|
|
|
|
Not applicable yet — there is no primary database in production to
|
|
replicate (BACKLOG P0-12: state lives in in-memory `Map`s, zero DB
|
|
provisioned). Revisit once P0-12 lands and real read/write load is
|
|
measured; provisioning a replica against a database that doesn't exist yet
|
|
would be pure speculation.
|
|
|
|
## 11. OSS-10 — upstream contribution
|
|
|
|
No dependency in this repo has been identified as needing a patch upstream
|
|
rather than a workaround here (checked: no local patches in
|
|
`pnpm-lock.yaml`'s `patchedDependencies`, none found). Nothing to
|
|
contribute upstream today; revisit if/when a real workaround is added for
|
|
an upstream bug — file the issue/PR there instead of carrying the
|
|
workaround silently forever.
|
|
|
|
## 12. AGENT-13 — nightly agent
|
|
|
|
`nightly.yml` already re-runs the full quality + (now blocking) security
|
|
gate daily (BACKLOG P0-16). A step beyond that — an agent that reads the
|
|
nightly failure and opens a triage PR — is AGENT-06 territory (BACKLOG P1-19
|
|
already scopes AGENT-06 as not attempted this pass: it needs real
|
|
OpenHands/Aider/SWE-agent infrastructure via INF0, which doesn't exist yet
|
|
for this repo). Do not build a bespoke nightly-agent script here ahead of
|
|
that shared infrastructure landing — it would be exactly the kind of
|
|
one-off tool the "one tool per job" rule (`CLAUDE.md` §4) warns against.
|