docs(P00): ideate — ratify REQ-040..REQ-045 (Nomad Web UI)

IDEATE stage ratified 6 ideas (IDEATE-09..IDEATE-14) at full autonomy.
User pre-validated 5 screens + stack via interactive questions at CLARIFY.
REQ-040 Reach signup, REQ-041 Stash dashboard, REQ-042 Window auth,
REQ-043 Standing+Freeholder signals, REQ-044 Bloom accrual, REQ-045
lexicon firewall extension to web/. D-001 filter does NOT apply (feature).

---ci---
project: oy
phase: 0
milestone: v0.6
status: ideate
---/ci---
This commit is contained in:
2026-08-18 11:58:09 +00:00
parent e62f783fa1
commit d066885b60
3 changed files with 106 additions and 27 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{
"phase": 0,
"stage": "research",
"stage": "ideate",
"milestone": "v0.6",
"milestone_type": "feature",
"tag_base": "v0.5.x",
"phase_role": "pre_execution",
"project": "oy",
"attempts": 0,
"updated_at": "2026-08-18T11:57:00Z",
"updated_at": "2026-08-18T12:00:00Z",
"milestone_complete": false
}
+49 -25
View File
@@ -112,38 +112,62 @@ deferred items (D-050, PROJECT.md v0.4 out-of-scope, ROADMAP Phase 3 runtime).
- Tag-line note: v0.5 (feature) ships on the v0.4.x patch line (config tag_base). The v0.4.8 milestone release IS the deliverable (D-008 — final phase patch IS the milestone release; no separate minor tag).
- 5 P1+ issues flagged for v0.6+ mainnet-readiness (governance spam deposit, CLOB front-running/batch auction, real IBC light-client simtest, CLOB prefix-key perf, emitMatchEventHook testability)
## IDEATE Traceability (Phase 0 — IDEATE stage, autonomy=full)
## v0.6 Milestone Requirements (Nomad Web UI — Feature)
v0.6 is the project's first UI milestone. It delivers a working prototype Web
UI where a person can sign up to be a Nomad (create a Reach + open a Stash)
and exercise basic functionality around the (Reach, Stash) components, plus
Window authorization, Standing progress, and Bloom accrual views. All data is
generated as test fixtures — no real blockchain interaction (D-020 continues).
The UI is a greenfield Go `html/template` + HTMX layer served by a Go mock HTTP
server (`web/`) that instantiates the real `x/*/types` structs from in-memory
fixtures. No keeper, no Cosmos runtime, no `app.go`.
| ID | Requirement | Source | Class | Priority | Status | Phase |
|----|-------------|--------|-------|----------|--------|-------|
| REQ-040 | Nomad Reach signup Web UI — Go HTTP mock server (`web/main.go`, Go 1.22 `net/http.ServeMux`, mock store) + "Create a Reach" form (POST) + Reach list/detail views; grounds the UI in `x/identity/types.Reach`. "Sign up" maps to "Create a Reach" (the word "account" is banned per REQ-012). Signup atomically creates a Reach (`IsNomad=true`) + a Stash (per D-071, Nomad starts with both). | user `--ideate` request + D-066/D-067/D-068/D-071 | feat | High | Pending | v0.6/P1 |
| REQ-041 | Stash dashboard Web UI — balance in Grain + Bread-scale conversion (using `x/bread/types.BreadScaleAll()` + `GrainsPerBread=10000`, per D-073 code constants are the source of truth) + 90-day maturity progress bar (`x/stash/types.StashActivity.IsMature`, `MaturityThresholdDays=90`). | user `--ideate` request + D-073 | feat | High | Pending | v0.6/P2 |
| REQ-042 | Window authorization Web UI — form to open a Window (scope + duration + rate-limit) delegating to a service, lifecycle view (Open→Active→Revoked/Expired via `x/window/types.Window.Activate/Revoke/Expire`), audit log (`AuditEntry`). | user `--ideate` request | feat | Medium | Pending | v0.6/P3 |
| REQ-043 | Standing + Freeholder signals progress Web UI — computed from mock `Rating`/`Vouch`/`Slash` records using the locked constants + `GetStandingBucket`/`ComputeDiversityBonus`/`GetVoucherWeight`; 4-signal progress (`FreeholderSignals.IsFreeholderEligible` — StashMaturity, MultiDomainStanding, CommittedCapital, CommunityEndorsement). | user `--ideate` request | feat | Medium | Pending | v0.6/P4 |
| REQ-044 | Bloom accrual Web UI — per-Stash `BloomRecord` view (`AccruedGrain`, `RateBasisPoints`, `LastAccrualBlock`), computed from mock data; shows the 4.5% target rate (`TargetBloomRateBasisPoints=450`). | user `--ideate` request | feat | Low | Pending | v0.6/P5 |
| REQ-045 | Extend REQ-012 lexicon firewall to scan `web/templates/**` + `web/static/**` + `web/**/*.go` (new `lexicon_meta_web_test.go`, package `lexicon_meta_web`, subdir `lexicon_meta_web/`). Mirrors the `lexicon_meta_docs` pattern with G-013 walk-coverage + G-009 self-test + G-014 shared `SyntheticBannedStrings()`. Firewall-first: lands in P1 before content (P2..P5). | D-069 + RESEARCH D-075 | test/quality | High | Pending | v0.6/P1 |
> REQ-040..REQ-045 are NEW in v0.6. REQ-040..REQ-044 are `feat`-class (UI
> screens); REQ-045 is `test` (lexicon firewall extension). No breaking schema
> changes; G-003 production firewall intact (`web/` is app-layer, not an `x/`
> module); G-006 go.mod unchanged (HTMX is a vendored static asset, not a Go
> dep). The final-phase audit enforces the feature purity gate.
## IDEATE Traceability (Phase 0 v0.6 — IDEATE stage, autonomy=full)
The IDEATE stage ran the three ideation tiers (mechanical, backend-enriched,
cross-project) on the v0.3 milestone scope and ratified 8 ideas (IDEATE-01..
IDEATE-08) at full autonomy. Each IDEATE-NN maps to a REQ-ID in the v0.3
requirements table above. Mechanical tier: no `lessons:`/`compound:` tags in
v0.1/v0.2 history (convention unused); one historical escalation (milestone
release pending — no remote) resolved in v0.2; v0.2 closed clean (9/9 REQs,
303 tests, ≥95.9% coverage). Backend-enriched + cross-project tiers confirmed
the docs deliverable + Bearers skeleton bundle (D-034) and the firewall-first
ordering (D-044). Defaults accepted per full autonomy.
cross-project) on the v0.6 milestone scope and ratified 6 ideas (IDEATE-09..
IDEATE-14) at full autonomy. Each IDEATE-NN maps to a REQ-ID in the v0.6
requirements table above. The user pre-validated the 5 screens + stack via
interactive questions during CLARIFY (Go html/template + HTMX, Go mock API
server, new `web/` dir, all 5 screens); IDEATE ratifies that validation.
Mechanical tier: v0.5 closed clean (7/7 REQs, 8 keeper packages ≥80% coverage,
G-003/locked-const firewalls intact, 5 P1+ flagged for v0.7+ mainnet-readiness);
no `lessons:`/`compound:` tags in v0.1..v0.5 history (convention unused).
Backend-enriched tier: confirmed the mock-server-over-real-Go-types approach
grounds the UI in the locked constants (D-067/D-073). Cross-project tier: no
applicable cross-project patterns (this is the project's first UI; no prior UI
conventions to inherit). Defaults accepted per full autonomy.
| IDEATE ID | REQ-ID | Category | Source | Confidence | Phase |
|-----------|--------|----------|--------|------------|-------|
| IDEATE-01 | REQ-027 | improvement/docs | user `--ideate` request + D-042/D-045 | 0.90 | v0.3/P1-P3 |
| IDEATE-02 | REQ-028 | quality/security | D-043 + RESEARCH firewall-extension design | 0.88 | v0.3/P1 |
| IDEATE-03 | REQ-010 | coverage/architecture | ROADMAP Phase 3 + D-036 | 0.80 | v0.3/P4 |
| IDEATE-04 | REQ-022 | coverage | ROADMAP Phase 3 + D-037 | 0.82 | v0.3/P4 |
| IDEATE-05 | REQ-023 | coverage | ROADMAP Phase 3 + D-038 | 0.78 | v0.3/P4 |
| IDEATE-06 | REQ-024 | architecture | ROADMAP Phase 3 + D-039 | 0.80 | v0.3/P5 |
| IDEATE-07 | REQ-025 | coverage | ROADMAP Phase 3 + D-040 | 0.78 | v0.3/P5 |
| IDEATE-08 | REQ-026 | coverage | ROADMAP Phase 3 + D-041 | 0.80 | v0.3/P5 |
| IDEATE-09 | REQ-040 | feature/ui | user `--ideate` request + D-066/D-067/D-068/D-071 | 0.92 | v0.6/P1 |
| IDEATE-10 | REQ-041 | feature/ui | user `--ideate` request + D-073 | 0.90 | v0.6/P2 |
| IDEATE-11 | REQ-042 | feature/ui | user `--ideate` request | 0.85 | v0.6/P3 |
| IDEATE-12 | REQ-043 | feature/ui | user `--ideate` request | 0.85 | v0.6/P4 |
| IDEATE-13 | REQ-044 | feature/ui | user `--ideate` request | 0.80 | v0.6/P5 |
| IDEATE-14 | REQ-045 | quality/security | D-069 + RESEARCH D-075 | 0.88 | v0.6/P1 |
Notes:
- IDEATE-01/02 (docs deliverable + firewall) are the user's `--ideate` request
ratified via D-042/D-043/D-045.
- IDEATE-03..08 (Bearers skeleton) are the ROADMAP Phase 3 subset bundled into
v0.3 per D-034.
- IDEATE-02 lands in P1 (firewall-first) BEFORE IDEATE-01 content (P2/P3) per
D-044 — docs are lexicon-clean by construction.
- IDEATE-03..05 ship in P4 (Bearers skeleton I); IDEATE-06..08 ship in P5
(Bearers skeleton II) — vertical slices, each phase independently shippable.
- IDEATE-09/14 ship in P1 (web foundation + firewall-first, same `web/` territory — vertical slice).
- IDEATE-10..13 ship in P2..P5 (one screen per phase, ordered by the Nomad happy path: Reach → Stash → Window → Standing → Bloom).
- The D-001 refinement-only filter does NOT apply (v0.6 is a feature milestone, not NFR).
## Milestone v0.1 Summary
- 10 REQs complete (skeleton + tests)
+55
View File
@@ -169,6 +169,61 @@ runtime = simtest-grade message handlers, not mainnet deployment.
- Real institutional Anchors onboarding (credential lifecycle in simtest only)
- Yield Token, Travel + 11 service categories (ROADMAP Phase 4 — Maturity)
## Milestone v0.6 — Nomad Web UI (IN PROGRESS; feature type; tags v0.5.x)
Target: The project's first UI milestone. A working prototype Web UI where a
person can sign up to be a Nomad (create a Reach + open a Stash) and exercise
basic functionality around the (Reach, Stash) components, plus Window
authorization, Standing progress, and Bloom accrual views. All data is
generated as test fixtures — no real blockchain interaction (D-020 continues).
Greenfield Go `html/template` + HTMX layer served by a Go mock HTTP server
(`web/`) that instantiates the real `x/*/types` structs from in-memory
fixtures. No keeper, no Cosmos runtime, no `app.go` (none exists in the repo).
- [ ] P0: Pre-Execution (spec/clarify/research/ideate/plan/grill/mvp-ux) → v0.5.0
- [ ] P1: Web foundation + Reach signup + lexicon firewall extension (REQ-040, REQ-045) → v0.5.1
- [ ] P2: Stash dashboard (REQ-041) → v0.5.2
- [ ] P3: Window authorization (REQ-042) → v0.5.3
- [ ] P4: Standing + Freeholder signals (REQ-043) → v0.5.4
- [ ] P5: Bloom accrual view (REQ-044) → v0.5.5
- [ ] P6: Final Review + Audit + Ship → v0.5.6 (milestone release)
| Phase | Type | Scope | Patch |
|---|---|---|---|
| P0 | docs | Pre-Execution (spec/clarify/research/ideate/plan/grill/mvp-ux) | v0.5.0 |
| P1 | feat+test | Web foundation + Reach signup (REQ-040) + lexicon firewall extension to web/ (REQ-045) | v0.5.1 |
| P2 | feat | Stash dashboard: balance + Bread-scale conversion + 90-day maturity progress (REQ-041) | v0.5.2 |
| P3 | feat | Window authorization: open/lifecycle/audit-log view (REQ-042) | v0.5.3 |
| P4 | feat | Standing + Freeholder signals progress: computed from mock Ratings/Vouches/Slashes (REQ-043) | v0.5.4 |
| P5 | feat | Bloom accrual view: per-Stash BloomRecord (REQ-044) | v0.5.5 |
| P6 | final | REVIEW + AUDIT + milestone SHIP | v0.5.6 (milestone release) |
### v0.6 Component mapping
| Component | Deliverable | v0.6 Module | Phase |
|---|---|---|---|
| Web UI foundation | Go HTTP mock server + base templates + HTMX vendored | web/main.go, web/handlers/, web/store/, web/templates/, web/static/ | v0.6/P1 |
| Reach signup | "Create a Reach" form + Reach list/detail | web/handlers/reach.go, web/templates/reach.html | v0.6/P1 |
| Stash dashboard | Balance + Bread-scale + 90-day maturity | web/handlers/stash.go, web/templates/stash.html | v0.6/P2 |
| Window authorization | Open/lifecycle/audit-log view | web/handlers/window.go, web/templates/window.html | v0.6/P3 |
| Standing + Freeholder signals | Progress view from mock Ratings/Vouches/Slashes | web/handlers/standing.go, web/templates/standing.html | v0.6/P4 |
| Bloom accrual | Per-Stash BloomRecord view | web/handlers/bloom.go, web/templates/bloom.html | v0.6/P5 |
| Lexicon firewall | Extend REQ-012 to web/ | lexicon_meta_web/lexicon_meta_web_test.go | v0.6/P1 |
> **Tag-line note (G-010 continuation)**: v0.6 (feature) ships on the `v0.5.x`
> patch line (config.json `tag_base: v0.5.x`): P0 -> `v0.5.0`, P1..P5 ->
> `v0.5.1..v0.5.5`, P6 -> `v0.5.6` (= the v0.6 milestone release, per D-008 —
> final phase patch IS the milestone release; no separate minor tag).
### v0.6 deferred to v0.7+
- Real blockchain interaction / mainnet / IBC / real bearer transports (D-020 continues)
- A real `oyd` daemon / `app.go` / `cmd/oyd` (no chain runtime exists; wiring the UI to a real daemon is v0.7+)
- Authentication / sessions / real key management (mock; a Reach is created by form submission, stored in-memory)
- Persistence (mock store is in-memory; resets on restart)
- i18n / multi-language UI
- The 5 P1+ mainnet-readiness items deferred from v0.5 (governance spam deposit, CLOB front-running, real IBC simtest, CLOB perf, emitMatchEventHook testability) — those are v0.7+ mainnet-readiness, not UI work
- Bread-scale doc-fix (`docs/shared/bread-scale.md` is outdated vs code constants — P1+ follow-up, not v0.6 scope)
## Phase 3 — The Bearers (Year 3) — v0.3 PARTIAL SKELETON
**Target**: $10B annual volume → fee auto-declines to 0.07%