Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
218 commits
Select commit Hold shift + click to select a range
88f021a
docs(audit): correct falsifiable claims in AUDIT-COMPREHENSIVE-2026-0…
munisp Aug 21, 2026
8ef8174
docs(readiness-v2): correct falsifiable claims (2026-08 re-verificati…
munisp Aug 21, 2026
900c257
docs(deployment): replace references to missing docker-compose.produc…
munisp Aug 21, 2026
a2e797e
docs(runbook): replace references to missing docker-compose.productio…
munisp Aug 21, 2026
bff83f3
docs(compose-guide): correct compose file inventory (2026-08 @ 505705ac)
munisp Aug 21, 2026
8169769
docs(readiness-v3): flag non-reproducible test/typecheck claims (2026…
munisp Aug 21, 2026
45baf6c
docs(readiness-report): add 2026-08 correction banner; date-stamp tes…
munisp Aug 21, 2026
140f9df
docs(test-plan): add 2026-08 correction banner — 477 routers / 4,277+…
munisp Aug 21, 2026
066b3d1
fix: restore original assertion line in test-plan-10-10.md (transcrip…
munisp Aug 21, 2026
99a6ca7
docs(test-report): add 2026-08 correction banner — 477 routers / 4,27…
munisp Aug 21, 2026
8165a59
fix: restore validateAmount(1000) assertion line in test-report.md (t…
munisp Aug 21, 2026
5449802
fix: remove two assertion lines accidentally introduced in test-repor…
munisp Aug 21, 2026
222a280
docs(integration-audit): note that docker-compose.production.yml and …
munisp Aug 21, 2026
9b7c398
ci(build): sync @radix-ui/react-toggle specifier in api-server-ts loc…
munisp Aug 21, 2026
838ee8e
ci(build): rewrite root Dockerfile for services/api-server-ts app lay…
munisp Aug 21, 2026
df83741
ci(build): remove corrupt lockfile pending git-capable restore (round…
munisp Aug 21, 2026
401bc57
fix(round3-W7): seed-sprint10 generator emits env-injected webhook se…
munisp Aug 21, 2026
6ee7789
fix(compose): round-3 topology + fail-closed secrets in root docker-c…
munisp Aug 21, 2026
e838a58
fix(round3-W7): auth-service PBKDF2 salted password hashing, fail-clo…
munisp Aug 21, 2026
9e6b439
ci(build): Dockerfile no-frozen install while lockfile restore pendin…
munisp Aug 21, 2026
dd0dcaf
fix(round3-W7): savingsProducts fail-loud on missing savings ledger, …
munisp Aug 21, 2026
5ca483e
ci(build): fix playwright.config.ts testDir to existing tests/e2e dir…
munisp Aug 21, 2026
b539da1
fix(round3-W7): remittance agent-scoped reads + honest empty states (…
munisp Aug 21, 2026
da21a01
fix(compose): restore 2 box-drawing chars in redis comment divider (t…
munisp Aug 21, 2026
73c1926
fix(round3-W7): revenueReconciliation real persisted batches/items, n…
munisp Aug 21, 2026
1fbbdca
fix(compose): correct previous bad push — full round-3 docker-compose…
munisp Aug 21, 2026
a98a053
fix(round3-W7): commissionEngine fail-closed permify + fail-loud ledg…
munisp Aug 21, 2026
053cbfe
fix(round3-W7): commissionMiddleware fail-closed Kafka/TB/Temporal/Pe…
munisp Aug 21, 2026
417280c
fix(k8s): temporal chart POSTGRES_PWD fail-closed (remove weak "passw…
munisp Aug 21, 2026
0635759
fix(k8s): permify chart PERMIFY_DB_URI fail-closed (remove user:passw…
munisp Aug 21, 2026
1a559a8
fix(k8s): temporal configmap requires POSTGRES_PWD (fail-closed requi…
munisp Aug 21, 2026
902116f
fix(compose): qdrant API key fail-closed (remove "changeme" default)
munisp Aug 21, 2026
38e62cf
fix(k8s): remove literal Secret doc with CHANGE_ME placeholders from …
munisp Aug 21, 2026
af89c1d
fix(round3-W7): settlementCron per-agent float lock with TTL + finall…
munisp Aug 21, 2026
8db422e
fix(compose): round-3 topology for docker-compose.optimized.yml
munisp Aug 21, 2026
6deaed3
fix(round3-W7): floatTopUp atomic GL journal write + visible supervis…
munisp Aug 21, 2026
261eab5
fix(compose): sprint42 overlay — point usage at root docker-compose.y…
munisp Aug 21, 2026
29e2f11
fix(compose): keycloak-ha fail-closed KC_DB_PASSWORD/KC_ADMIN_PASSWORD
munisp Aug 21, 2026
bce8c2b
fix(round3-W7): migration 0052 NOT VALID money CHECK constraints (fun…
munisp Aug 21, 2026
2f5594d
fix(compose): sprint46 fail-closed secrets (AFRICASTALKING/PAYSTACK/F…
munisp Aug 21, 2026
b02a8c5
test(funds-flow): transactionHelper claim-first idempotency unit test…
munisp Aug 21, 2026
dbd7d1c
test(funds-flow): shared mock builders for funds-flow router tests (r…
munisp Aug 21, 2026
7791948
test(funds-flow): merchantPayments float guard + one-transaction legs…
munisp Aug 21, 2026
e6a2cf5
fix(scripts): generate-consolidated-charts.py — env-required REDIS_PA…
munisp Aug 21, 2026
3098ffb
test(funds-flow): agentFloatTransfer guarded debit/abort tests (round…
munisp Aug 21, 2026
aafa604
test(funds-flow): reconciliation transition allowlist + final-state c…
munisp Aug 21, 2026
4e7193c
test(funds-flow): settlement settleSession id validation + conditiona…
munisp Aug 21, 2026
60b8803
test(funds-flow): bulk cancelBatch auth + conditional cancel tests (r…
munisp Aug 21, 2026
f2ea5af
fix(scripts): correct stray comma introduced in previous push of gene…
munisp Aug 21, 2026
6a476bb
test(funds-flow): float reconciliation no-auto-resolve + conditional …
munisp Aug 21, 2026
14f3cf1
test(funds-flow): pytest conftest with dapr/TB/adapter fakes (round3-W4)
munisp Aug 21, 2026
a42adf5
fix(compose): sprint50 fail-closed DATABASE_URL/POSTGRES_URL/JWT_SECR…
munisp Aug 21, 2026
e7f970a
test(funds-flow): payment-processing idempotency/currency/LPO/QR pyte…
munisp Aug 21, 2026
1fd7780
fix(compose): analytics — fail-closed OPENSEARCH_ADMIN_PASSWORD (remo…
munisp Aug 21, 2026
823c32d
test(funds-flow): pytest.ini for payment-processing-service (round3-W4)
munisp Aug 21, 2026
e47f871
test(funds-flow): test-only requirements for payment-processing-servi…
munisp Aug 21, 2026
5f49568
fix(compose): postgres-production fail-closed POSTGRES_PASSWORD/PGADM…
munisp Aug 21, 2026
abb01d0
fix(compose): threat-intelligence fail-closed RABBITMQ_PASSWORD/GRAFA…
munisp Aug 21, 2026
c5f5169
fix(compose): postgres-production — restore trailing newline (byte-ex…
munisp Aug 21, 2026
a005386
fix(compose): threat-intelligence — restore trailing newline (byte-ex…
munisp Aug 21, 2026
9226e58
fix(dashboard): add 38 missing npm deps (radix, wouter, zustand, cva,…
munisp Aug 21, 2026
fe40d28
fix(dashboard): widen useAuth user type and add loading alias (round3…
munisp Aug 21, 2026
d017646
fix(dashboard): rewrite posStore as selector-capable zustand store (r…
munisp Aug 21, 2026
cb28843
fix(dashboard): add useSocket hooks (fraud feed, chat, settlement pro…
munisp Aug 21, 2026
225ebce
fix(dashboard): add useComposition IME hook (round3-W1)
munisp Aug 21, 2026
18509eb
fix(dashboard): add useMobile/useIsMobile hook (round3-W1)
munisp Aug 21, 2026
3f880a7
fix(dashboard): add ThemeContext with useTheme/ThemeProvider (round3-W1)
munisp Aug 21, 2026
af9ee13
fix(dashboard): add AIChatBox presentational chat component (round3-W1)
munisp Aug 21, 2026
6f404e5
fix(dashboard): add FraudRulesTab admin page (round3-W1)
munisp Aug 21, 2026
ba1ea25
fix(dashboard): implement haptics with Vibration API + haptic() funct…
munisp Aug 21, 2026
de860bf
fix(dashboard): add DashboardPageSkeleton named export (round3-W1)
munisp Aug 21, 2026
329b5ba
fix(dashboard): accept agentId prop on GdprConsentBanner (round3-W1)
munisp Aug 21, 2026
ea102c7
fix(dashboard): implement real CSV/JSON export in useDataExport (roun…
munisp Aug 21, 2026
346d2bc
fix(dashboard): rewrite useRealtimeNotifications as real WebSocket ho…
munisp Aug 21, 2026
75e046f
fix(dashboard): remove useRealtimeNotifications.ts superseded by .tsx…
munisp Aug 21, 2026
b844f00
fix(security): fail-closed compose secrets (round3-W5, infra/lakehous…
munisp Aug 21, 2026
b3dfc60
fix(security): fail-closed compose secrets (round3-W5, infra/mojaloop…
munisp Aug 21, 2026
b90228f
fix(security): fail-closed compose secrets (round3-W5, infra/permify/ha)
munisp Aug 21, 2026
c26c846
fix(security): fail-closed compose secrets (round3-W5, infra/redis/ha)
munisp Aug 21, 2026
9ec9be9
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1eb9d18
fix(security): fail-closed compose secrets (round3-W5, infra/temporal…
munisp Aug 21, 2026
8fb8ddb
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1085138
fix(security): fail-closed compose secrets (round3-W5, infra)
munisp Aug 21, 2026
c776d14
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
15d6b64
fix(security): fail-closed compose secrets (round3-W5, services/pos-i…
munisp Aug 21, 2026
f9743a6
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
cfdd6a3
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
2666f63
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
55c13c8
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
3ba4f4a
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
85d5e0f
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
3854e7b
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
989532b
fix(round3-W7): transactions claim-first idempotency, atomic reversal…
munisp Aug 21, 2026
057b35b
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
a550c3e
fix(security): remove stale seed artifact with whsec_ literals — rege…
munisp Aug 21, 2026
e0e68ab
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
bfb7ba8
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
2cd26a6
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
d66416d
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
4c1d865
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
78ce905
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
0a88f43
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
8e5aacb
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f3b2248
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
5756845
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
bd3cebe
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f53dc25
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
7188963
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
042ed61
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
5475f27
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
a3813d6
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
407547e
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f89bd36
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
55ad4d1
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1e8cbb4
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
6612f64
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
363bc7a
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1f68655
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
d88c0e9
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f51cba8
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
727d4e5
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
8d6fcf0
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
e6b7b4c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
fafd856
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
e9b4868
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
003c435
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
bd8275f
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
c0260da
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
2cc4dfb
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
020d81b
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
b1be57e
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ddb432c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
3f6708e
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
a1807c2
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
35b6f87
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f01324c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
143b397
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f20ce22
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
3f5a694
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
943750b
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f7d673c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
e2ca341
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
3e2851c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ec660d0
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
d8822b1
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
8582a4e
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
bf61376
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
26bed87
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
e3b15b5
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
0bb2bbc
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
fca7207
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
484a934
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
77942f4
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
668a1f2
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
a33b1e0
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
6773bf7
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
8459096
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ec840c7
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
619cd82
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
8104117
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
60e3fb6
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
f7074a4
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
66f8912
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
36b7220
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
87ba373
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1baac34
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
9be8217
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
319a84c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ee38dc0
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
34786f7
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
da63133
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
e564ad1
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
0a5234d
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1d5e142
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
2d081ad
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
64d0ac0
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
5313f33
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
bdfde59
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
7460866
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ebf1676
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ed7c6ab
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
1f309f2
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
c6cf903
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
d1e34e3
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
6969b98
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
9d9e891
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ac7c368
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
d772fea
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
ef3dc10
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
3f9581f
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
e83eed7
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 21, 2026
23c6534
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
0579bee
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
3bfb2f8
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
f7654e8
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
e2e3f3b
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
26e5d4d
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
49e990c
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
fe55214
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
72ad723
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
5ceb280
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
53eeaf6
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
e1ef066
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
95285cb
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
61148fd
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
35e5a76
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
31ef58a
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
82cf9c2
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
77dd162
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
bb2c4b5
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
a063575
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
20f4f6d
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
2fa19c3
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
bd9feb9
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
2aeaffc
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
26c60f5
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
cc1f12e
fix(dashboard): tsc repair batch (round3-W1)
munisp Aug 22, 2026
f4b5700
fix(dashboard): correct drifted push (round3-W1)
munisp Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions AUDIT-COMPREHENSIVE-2026-06.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

## Executive Summary

Audited all 477 tRPC routers, 85 Go services, 54 Rust services, 288+ Python services,
457 PWA pages, 203 Flutter screens, and 69 React Native screens.
Audited the platform codebase. **Counts re-verified 2026-08 against commit `505705ac`** (file counts from the git tree; rules stated inline): 418 tRPC router files directly under `server/routers/` (478 in the `services/api-server-ts/server/routers/` mirror), 192 Go modules (`go.mod` files), 93 Rust crates (`Cargo.toml` files), 466 service directories under `services/` (316 of them contain Python), 101 PWA page components (`client/src/pages/*.tsx`), 455 Flutter screen files (`mobile-flutter/lib/screens/*.dart` — but **no `pubspec.yaml` exists anywhere in the repo, so the Flutter app is not currently buildable**), and a 5-file React Native skeleton (`mobile-rn/`, 0 screen files). The original June figures (477 routers / 457 PWA pages / 203 Flutter screens / 69 RN screens) do not match the current tree.

**Overall Production Readiness: 7.4/10** (honest, not inflated)

Expand All @@ -17,13 +16,13 @@ Audited all 477 tRPC routers, 85 Go services, 54 Rust services, 288+ Python serv
| No math/rand in production code | ✅ PASS | 0 Go files use math/rand |
| No TODO/FIXME in Go or TypeScript | ✅ PASS | 0 in Go, 0 in Rust, 1 in TS (test file), 1 in Python (gRPC server) |
| No console.log in frontend | ❌ FAIL | **5 files** with 11 console.log calls in hooks/pages |
| No scaffolded/empty handler functions | ✅ PASS | All 477 routers have real getDb() + Drizzle queries |
| No scaffolded/empty handler functions | ⚠️ STALE | Original claim covered "477 routers"; 2026-08 re-count finds 418 router files under `server/routers/` (478 in the mirror). Per-file content not re-verified |
| No cross-project contamination | ❌ FAIL | **9 files** in server/\_core/ reference "Manus" platform |
| All PWA pages wired to router | ✅ PASS | All 457 pages have real API calls |
| All PWA pages wired to router | ⚠️ STALE | `client/src/pages/` holds 101 `.tsx` page components at `505705ac` (not 457); wiring not re-verified |
| All Go routes with auth middleware | ❌ FAIL | **59/85** Go services lack auth middleware |
| All Rust routes with auth middleware | ❌ FAIL | **31/54** Rust services lack auth middleware |
| All middleware have real SDK clients | ✅ PASS | SDK clients with embedded fallbacks present |
| Zero TypeScript errors | ✅ PASS | tsc --noEmit = 0 errors |
| Zero TypeScript errors | ❌ FAIL (2026-08 re-check) | `tsc --noEmit` is not error-free across the repo (e.g. `uis/admin-dashboard`); remediation in progress |
| All top-level services robust (>100 lines, DB, no hardcoded) | ❌ FAIL | See below |

### Services Failing Robustness Check
Expand Down Expand Up @@ -64,6 +63,8 @@ Audited all 477 tRPC routers, 85 Go services, 54 Rust services, 288+ Python serv
| Super App | 1 | 8.5/10 | Full implementation |
| TigerBeetle | 8 | 8.5/10 | Fixed — native client, persistence |

_Note (2026-08): the per-domain router counts above reflect the original June audit's domain mapping and predate the 2026-08 re-count (418 router files under `server/routers/` at `505705ac`); they have not been re-derived._

---

## 3. KYC/KYB/Liveness Assessment (§2 deep-dive)
Expand Down Expand Up @@ -93,19 +94,19 @@ Audited all 477 tRPC routers, 85 Go services, 54 Rust services, 288+ Python serv

## 4. PWA vs Mobile Parity

| Platform | Screens/Pages | Coverage |
| ------------ | ------------- | -------- |
| PWA | 457 | 100% |
| Flutter | 203 | 44% |
| React Native | 69 | 15% |
| Platform | Screens/Pages (2026-08 re-count @ `505705ac`) | Notes |
| ------------ | ---------------------------------------------- | ----- |
| PWA | 101 (`client/src/pages/*.tsx`) | React PWA; original "457 pages / 100%" claim not reproducible |
| Flutter | 455 (`mobile-flutter/lib/screens/*.dart`) | Source only — **no `pubspec.yaml` repo-wide, so not buildable as-is** |
| React Native | 0 | `mobile-rn/` is a 5-file skeleton (no screen files) |

**Gap: 254 PWA pages have no Flutter equivalent, 388 have no RN equivalent.**
**Gap:** The original "254 PWA pages without Flutter equivalent / 388 without RN equivalent" arithmetic was based on the unreproducible 457-page figure and has been removed. A real parity audit against the 101 current PWA pages has not been performed.

---

## 5. Data Layer

- **Schema tables**: 161 in drizzle/schema.ts (5,203 lines)
- **Schema tables**: 161 `pgTable` definitions in `services/api-server-ts/drizzle/schema.ts` (5,519 lines; re-counted 2026-08). Note: there is **no root-level `drizzle/schema.ts`**; the root `drizzle/` directory holds 41 `pgTable` definitions across its `schema-*.ts` files
- **Indexes**: 413 index references (good coverage)
- **Seed scripts**: 15+ scattered scripts, no single unified entry point
- **Missing**: Unified seed script with realistic Nigerian banking data
Expand Down
16 changes: 9 additions & 7 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
**Version:** Phase 136
**Target:** Ubuntu 22.04 LTS, Docker 24+, 8 vCPU / 32 GB RAM minimum

> ⚠️ **2026-08 correction (@ `505705ac`):** this guide originally referenced `docker-compose.production.yml`, which **does not exist in the repository**. Commands below now use the root `docker-compose.yml` (the only full-stack compose file present). Caveats: (1) the main application service is named `app` in `docker-compose.yml` (previously `pos-shell` below — updated); (2) some services mentioned in this guide (Vault, MinIO, TigerBeetle cluster nodes) are **not defined** in the current `docker-compose.yml`; (3) `Makefile.production` still points at the missing `docker-compose.production.yml` and must be updated (or the file created) before `make -f Makefile.production …` targets will work.

---

## Architecture Overview
Expand Down Expand Up @@ -57,8 +59,8 @@ sudo apt-get install -y certbot
## Step 1: Clone and Configure

```bash
git clone https://github.com/54link/pos-shell-demo.git
cd pos-shell-demo
git clone https://github.com/munisp/agentbanking.git
cd agentbanking

# Copy environment template
cp .env.production.example .env.production
Expand Down Expand Up @@ -169,7 +171,7 @@ This starts all services in the correct dependency order:

```bash
# Create admin agent (AGT001 / PIN: 1234)
docker compose -f docker-compose.production.yml exec pos-shell pnpm seed
docker compose -f docker-compose.yml exec app pnpm seed

# Or run against local DB
pnpm seed
Expand Down Expand Up @@ -237,7 +239,7 @@ The `deploy` target runs `docker compose pull` then `docker compose up -d --buil

```bash
# Rollback to previous image tag
docker compose -f docker-compose.production.yml up -d --no-deps pos-shell \
docker compose -f docker-compose.yml up -d --no-deps app \
--image ghcr.io/54link/pos-shell:previous-tag
```

Expand All @@ -247,7 +249,7 @@ docker compose -f docker-compose.production.yml up -d --no-deps pos-shell \

```bash
# Scale POS Shell horizontally (requires Redis session sharing — already implemented)
docker compose -f docker-compose.production.yml up -d --scale pos-shell=3
docker compose -f docker-compose.yml up -d --scale app=3
```

Note: Socket.IO requires sticky sessions at the nginx level. The provided nginx config includes `ip_hash` for this purpose.
Expand All @@ -258,14 +260,14 @@ Note: Socket.IO requires sticky sessions at the nginx level. The provided nginx

```bash
# PostgreSQL backup
docker compose -f docker-compose.production.yml exec postgres \
docker compose -f docker-compose.yml exec postgres \
pg_dump -U postgres pos_shell > backup-$(date +%Y%m%d).sql

# MinIO backup (sync to S3)
mc mirror minio/54link-transactions s3/54link-backup/transactions/

# Redis backup (RDB snapshot)
docker compose -f docker-compose.production.yml exec redis \
docker compose -f docker-compose.yml exec redis \
redis-cli BGSAVE
```

Expand Down
50 changes: 32 additions & 18 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,26 +1,39 @@
# ─────────────────────────────────────────────────────────────────────────────
# Stage 1: Build
# POS-54Link — application image
#
# The Node.js application lives in services/api-server-ts (it carries the only
# package.json + pnpm-lock.yaml in this repo after the 2026-06-29 monorepo
# restructure). The previous revision of this Dockerfile referenced a root
# package.json / pnpm-lock.yaml that no longer exist, breaking every build.
#
# Multi-stage: install → build → minimal runtime.
# ─────────────────────────────────────────────────────────────────────────────
FROM node:22-alpine AS builder

# Install pnpm
RUN corepack enable && corepack prepare pnpm@9 --activate
# pnpm is provided by corepack; the exact version (10.4.1) is pinned by
# services/api-server-ts/package.json#packageManager.
RUN corepack enable

WORKDIR /app

# Copy manifests and patches for layer caching
COPY package.json pnpm-lock.yaml ./
COPY patches/ ./patches/
RUN pnpm install --frozen-lockfile
# Copy manifests first for layer caching
COPY services/api-server-ts/package.json services/api-server-ts/pnpm-lock.yaml ./
# Lockfile restore pending (staged artifact for maintainers) — no-frozen for now
RUN pnpm install --no-frozen-lockfile

# Copy source
COPY . .
# Copy the application source (.dockerignore strips node_modules/dist/tests)
COPY services/api-server-ts/ ./

# Build (Vite client + esbuild server bundle)
ARG VITE_APP_ID=""
ARG VITE_APP_TITLE="54Link POS Shell"
ENV NODE_ENV=production
RUN pnpm build
# Full build = Vite client + esbuild server bundle. The client tree is not
# currently part of services/api-server-ts (vite.config.ts expects ./client),
# so fall back to the server-only bundle until the client is co-located.
RUN if [ -d client ]; then \
pnpm build; \
else \
echo "client/ not present in services/api-server-ts — building server bundle only (pnpm build:server)"; \
pnpm build:server; \
fi

# ─────────────────────────────────────────────────────────────────────────────
# Stage 2: Runtime
Expand All @@ -32,16 +45,17 @@ RUN addgroup -S posshell && adduser -S posshell -G posshell

WORKDIR /app

# Copy build output + migrations
# Copy build output + migrations + manifests
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/drizzle ./drizzle
COPY --from=builder /app/package.json ./
COPY --from=builder /app/pnpm-lock.yaml ./
COPY --from=builder /app/patches ./patches

# Install only production runtime dependencies
RUN corepack enable && corepack prepare pnpm@9 --activate \
&& pnpm install --prod --frozen-lockfile \
# NOTE: full install (not --prod). The esbuild bundle keeps runtime-external
# imports of dev-time packages (e.g. "vite" via server/_core/vite.ts), which
# must resolve when dist/index.js starts. Lockfile restore pending — no-frozen.
RUN corepack enable \
&& pnpm install --no-frozen-lockfile \
&& pnpm store prune

# Switch to non-root user
Expand Down
23 changes: 13 additions & 10 deletions PRODUCTION_READINESS_v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

**Date:** 2026-04-09
**Version:** Phase 136 (Checkpoint `329e940a`)
**Test Results:** 244 Node.js · 43 Rust · 8 Go = **295 tests passing, 0 failures**
**Test Results (Phase 136, self-reported):** 244 Node.js · 43 Rust · 8 Go = 295 tests reported passing
**2026-08 re-verification (@ `505705ac`):** not reproducible from the current tree — `services/api-server-ts` currently contains 2 test files with 174 test cases (155 in `server/stakeholder-smoke-tests.test.ts`, 19 in `server/caddy-tls-validation.test.ts`). Treat the 295 figure as historical.

---

Expand All @@ -20,7 +21,9 @@
| Mobile Applications | Scaffolded | 6/10 |
| Production Deployment | Complete | 9/10 |
| Testing | Complete | 10/10 |
| **Overall** | **Production-Ready** | **92/100** |
| **Overall** | **Near-Production (self-assessed)** | **92/100** |

> ⚠️ **2026-08 assurance re-verification (@ `505705ac`):** several figures in this scorecard are Phase 136 self-assessments and are not reproducible from the current tree. Known corrections: `docker-compose.production.yml` does not exist in the repo; `tsc --noEmit` is not error-free (remediation in progress); the Flutter/RN apps are not "ready to build" (no `pubspec.yaml` repo-wide; `mobile-rn/` is a 5-file skeleton). See inline edits below.

---

Expand Down Expand Up @@ -114,15 +117,15 @@

| Feature | Status | Notes |
| ------------------- | ------------- | ----------------------------------------- |
| React Native (Expo) | 🔶 Scaffolded | pos-mobile-rn/ — needs Expo build |
| Flutter | 🔶 Scaffolded | pos-mobile-flutter/ — needs flutter build |
| React Native (Expo) | 🔶 Skeleton | mobile-rn/ — 5 files, 0 screens; not a buildable app |
| Flutter | 🔶 Source only | mobile-flutter/ — 455 screen files but no pubspec.yaml; cannot build without recreating the project manifest |
| PWA (manifest + SW) | ✅ Complete | manifest.json, offline.html, SW v3 |

### 9. Production Deployment ✅

| Feature | Status | Notes |
| ----------------------------- | ----------- | ------------------------------------ |
| docker-compose.production.yml | ✅ Complete | 20+ services, health checks |
| docker-compose.production.yml | ❌ Missing | File absent from the repo (verified @ `505705ac`); root `docker-compose.yml` (30+ services, profiles) is the only full-stack compose file. `Makefile.production` still references the missing file |
| nginx TLS reverse proxy | ✅ Complete | 5 vhosts, WebSocket proxy |
| Makefile.production | ✅ Complete | deploy, test-all, vault-init targets |
| .env.production.example | ✅ Complete | 40+ variables documented |
Expand All @@ -135,17 +138,17 @@

| Suite | Count | Status |
| ----------------- | -------- | -------------- |
| Node.js (Vitest) | 244 | ✅ All passing |
| Rust (cargo test) | 43 | ✅ All passing |
| Go (go test) | 8 | ✅ All passing |
| Node.js (Vitest) | 244 | ⚠️ Historical claim — not reproducible from current tree (2026-08 re-check: 174 test cases in `services/api-server-ts`) |
| Rust (cargo test) | 43 | ⚠️ Historical claim — not re-verified |
| Go (go test) | 8 | ⚠️ Historical claim — not re-verified |
| Playwright E2E | 5 | ✅ Scaffolded |
| TypeScript | 0 errors | ✅ Clean |
| TypeScript | not clean | ❌ `tsc --noEmit` reports errors (e.g. `uis/admin-dashboard`); remediation in progress |

---

## Known Gaps (Non-Blocking for Production)

1. **React Native / Flutter builds** — Expo and Flutter CLIs not installed in sandbox; source code is complete and ready to build on a developer machine.
1. **React Native / Flutter builds** — "ready to build" is **not accurate** (2026-08 re-verification @ `505705ac`): `mobile-flutter/` contains 455 screen source files but the repo has **no `pubspec.yaml` anywhere**, so `flutter build` cannot run without recreating the project manifest; `mobile-rn/` is a 5-file skeleton with no screen files.
2. **Playwright E2E** — Tests are scaffolded and will run against a live server; browser binaries need `playwright install chromium` on CI.
3. **Fluvio SmartModule (WASM)** — Velocity and anomaly check logic is defined; WASM compilation requires `cargo build --target wasm32-wasi` on a machine with Fluvio CLI.
4. **TigerBeetle production cluster** — Demo uses single-node; production requires 3-node cluster with replica configuration.
Expand Down
Loading
Loading