cloudinit-bot
|
0bcb96c442
|
feat(P1): Reach signup handler + templates + tests (REQ-040, G-026)
web/handlers/reach.go: GET /reach (list), GET /reach/new (form),
GET /reach/{id} (detail), POST /reach (atomic Reach+Stash create
per D-071, redirect 302). Labels "Create a Reach" (not the banned
legacy word). G-027 validation (non-empty, <=128, no path separators,
no template syntax). 3 Reach templates extend base.html.
reach_test.go: httptest for all 4 routes + atomic create + 400/409
error paths + rendered-HTML lexicon check on BOTH 200 and error bodies
(G-026). handlers/server.go: clone-per-page template pattern (avoids
content-block collision across pages). Coverage 81.2% on web/handlers.
---ci---
project: oy
phase: 1
milestone: v0.6
status: execute
---/ci---
|
2026-08-18 17:08:32 +00:00 |
|
cloudinit-bot
|
5a12ab0e76
|
feat(P1): mock store + fixtures + import-invariant test (REQ-040, G-025, G-027)
web/store instantiates real x/identity/types.Reach + x/stash/types.Stash
(app-layer consumption per D-070, NOT a cross-x/ import). CreateReach
atomically creates Reach (IsNomad=true) + Stash (D-071). G-027 validates
HolderID/PublicKey (non-empty, <=128, no path separators, no template
syntax). import_test.go enforces G-025: web/ imports only x/*/types,
never x/*/keeper or x/<module> (module.go). Coverage 100%.
---ci---
project: oy
phase: 1
milestone: v0.6
status: execute
---/ci---
|
2026-08-18 13:45:05 +00:00 |
|