Commit Graph

126 Commits

Author SHA1 Message Date
cloudinit-bot 4eec2ff502 Merge phase/02 into milestone/v0.7 (P2 complete → v0.6.2)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
2026-08-19 02:08:43 +00:00
cloudinit-bot 72cc922b3b test(cover): P2 verify — GREEN (vet+race+coverage+lexicon+G-003+G-028)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 2
milestone: v0.7
status: verify
---/ci---
v0.6.2
2026-08-19 02:08:43 +00:00
cloudinit-bot 907dc66d12 feat(cover): P2 Cover-Charter + Pool Council + staging + Bill of Rights (D-090(1))
P2 of v0.7 extends x/cover with Cover-Charter + Pool governance hybrid +
category staging + the Anti-Capture Bill of Rights types (D-090(1)
temporal-gap fix — Bill of Rights types land HERE, not P5, so the dual
firewall is in place before any Charter can be signed).

New (x/cover/types/rights.go): RightID type + 13 Right* consts +
AntiCaptureBillOfRightsCount=13 locked const + 13 Waivable* bool consts
(all false) + RightIsWaivable() always false + AllRights()/AllWaivableFlags().

New structs: CoverCharter (REQ-052) + CharterAmendment (7-day cooling) +
PoolCouncil (REQ-062 — 3 Masons + Watcher observer; NO Anchor/MAB seat) +
CoverCallVote (majority requires Watcher observer present). CoverPool
extended with CharterRef + CouncilRef. D-086 DefaultParams [Phase2] ->
[Phase2, Phase3, Phase4].

New Msg*: MsgSignCoverCharter (D-090(1) WaivedRights gate at
ValidateBasic — mirrors MissionLockAmendmentRejected D-064),
MsgAmendCoverCharter, MsgElectPoolMason, MsgVoteCoverCall,
MsgAmendPoolStandingGate (D-090(3) dual check: floor at ValidateBasic +
handler), MsgEscalateReserveCeiling (12-month age check).

New handlers: SignCoverCharter, AmendCoverCharter (Proposed + ProposedAt),
ElectPoolMason (max 3), VoteCoverCall (Yes requires observer),
AmendPoolStandingGate (D-090(3) re-check), EscalateReserveCeiling,
CoolCharterAmendment + RatifyCharterAmendment lifecycle helpers.

New stores: charter/ council/ vote/ amendment/ + SetParamsOverride/Params().

Simtest cases (a)-(h): Charter signing + D-090(1) WaivedRights reject +
7-day cooling + election + vote observer + D-086 out-of-phase + ceiling
escalation + D-090(3) below-floor reject.

Lexicon: rights.go + msg_charter.go lexicon-clean (initial 'policy' hit
fixed -> 'invariant'). .lexicon_fixture SkipDir guard added to 3 lexicon
walks (fixes pre-existing cross-package test-isolation race).

G-003/G-006/G-028/G-024 intact. go.mod/go.sum diff EMPTY.
Coverage: types 98.9%, keeper 95.1%, firewall 100.0%.

REQs: REQ-048, REQ-052, REQ-062, REQ-065 (D-090(1) Bill of Rights types
for REQ-056 land here; P5 adds the ceremony)

---ci---
project: oy
phase: 2
milestone: v0.7
status: execute
---/ci---
2026-08-19 02:08:33 +00:00
cloudinit-bot a23856a9ee Merge phase/01 into milestone/v0.7-fraternal-groups (P1 complete → v0.6.1)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
2026-08-19 01:53:57 +00:00
cloudinit-bot 7a00131cf0 test(cover): P1 verify — structural+behavioral+security+quality GREEN
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
VERIFY stage for P1 v0.7. Four verification layers:

1. STRUCTURAL: go vet ./x/cover/... ./lexicon_meta_cover/... — CLEAN
2. BEHAVIORAL: go test -race ./x/cover/... — GREEN (no race conditions)
3. SECURITY: 4 lexicon meta-tests green (x/, docs/, web/, cover/); G-003
   production firewall intact (no cross-module struct imports in
   x/cover/types — only expected_keepers.go interface references); G-028
   go.mod/go.sum diff EMPTY
4. QUALITY: coverage x/cover/types 97.8%, x/cover/keeper 94.1%,
   x/cover/firewall 100.0% — all ≥80% target

All existing v0.1-v0.6 tests still pass (no regressions).

---ci---
project: oy
phase: 1
milestone: v0.7
status: verify
---/ci---
v0.6.1
2026-08-19 01:53:52 +00:00
cloudinit-bot 6d63482c48 feat(cover): P1 v0.7 Cover Pool foundation + Anti-Crowding-Out firewall
Add the new x/cover module (Cover Pool runtime) implementing P1 of the
v0.7 milestone: CoverPool/CoverFeeTag/CoverCall types with the 4 GRILL-
ratified locked consts (CoverReserveFloorAnnualContribX=1.5,
CoverReserveCeilingAnnualContribX=2.5, CoverStandingGateTrusted=4.0,
CoverStandingGatePreferred=4.5), the 8-category/3-phase CoverCategory
enum with D-086 FactoryAllowedPhases=[Phase2]-only default, three Msg*
types (LaunchCoverPool/RouteCoverFee/FileCoverCall) with full sdk.Msg
impls, store-backed Keeper with 4 G-003 expected-keeper shims
(StandingKeeper/WatcherKeeper/BondKeeper/StillKeeper), and three
handlers enforcing the D-077 Standing gate, D-086 category phase check,
REQ-047 reserve floor + below-floor auto-pause (D-089(1) Still
invocation), and REQ-050 category-tag match.

Add the x/cover/firewall subpackage (Anti-Crowding-Out firewall, D-079/
D-088): a stdlib-only leaf checker enforcing RightNoTaxOnPersonalStash
by rejecting Cover-Fee routing to the Root-Pool operating-expenses
destination (defense in depth with the lexicon meta-test).

Add the lexicon_meta_cover meta-test (4th lexicon firewall, D-088):
scans x/cover/**/*.go for both lexicon.FindBannedTerm (10 project-wide
terms) AND lexicon.FindCoverBannedTerm (4 Cover-specific terms), with
G-013 walk-coverage + G-009 self-test tables.

Add lexicon.CoverBannedTerms()/FindCoverBannedTerm()/
SyntheticCoverBannedStrings() helpers (additive to the existing
project-wide BannedTerms — no changes to existing helpers).

Apply D-088(3) optional doc-fix: replace 'insurance-like' with
'Cover-like' in x/pact/types docstrings.

Coverage: x/cover/types 97.8%, x/cover/keeper 94.1%, x/cover/firewall
100.0%. go.mod/go.sum unchanged (G-006/G-028). All existing tests pass.

REQs: REQ-046, REQ-047, REQ-049, REQ-050

---ci---
project: oy
phase: 1
milestone: v0.7
status: execute
---/ci---
2026-08-19 01:52:58 +00:00
cloudinit-bot 463e11e8d2 Merge phase/00 into milestone/v0.7-fraternal-groups (P0 complete → v0.6.0)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
2026-08-19 01:42:30 +00:00
cloudinit-bot 315ccb3fdc decision(P00): mvp/ux gate — auto-generated (3 sections verified)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
MVP/UX CHECK gate (REQ-MVP-UX-001) verified at full autonomy. PLANS.md
v0.7 section contains all 3 required sections:

1. ## User-Facing Surface (PLANS.md L2355) — simtest is the executable
   demonstration for this protocol milestone (no UI; v0.6 web complete);
   simtest run via go test ./x/cover/keeper/...; .feature scenarios named
   as Test* functions
2. ## Happy Path (PLANS.md L2366) — 10-step end-to-end Cover Pool lifecycle
   (launch -> charter -> elect -> route fee -> issue MAB -> release proceeds
   -> file call -> secede -> Pier escalation -> dissolve), verified by P6
   simtest suite
3. ## UX Acceptance Criteria (PLANS.md L2385) — 11 explicit criteria verified
   in P6 audit (go build/test GREEN, x/cover full surface, Anti-Crowding-Out
   firewall operational, 12 locked consts, MAB coupons NEVER Bread, Bill of
   Rights 13 rights non-waivable, coverage >=80%, G-003 intact, G-006/G-028
   go.mod EMPTY, pen-test self-administered, §7 acceptance met)

Gate PASSES (all 3 sections present). Auto-generated per run.md full
autonomy.

---ci---
project: oy
phase: 0
milestone: v0.7
status: mvp_ux_check
---/ci---
v0.6.0
2026-08-19 01:42:16 +00:00
cloudinit-bot 977d2a1d24 docs(P00): grill — D-086..D-090 binding decisions (CONDITIONAL PASS)
GRILL stage for v0.7. ci-griller red-teamed the plan across 9 axes + 7
specific probes. Overall verdict: CONDITIONAL PASS (confidence 0.72).
5 binding decisions applied to PLANS.md + ARCHITECTURE.md + oy-state + PROJECT.md:

- D-086: P1 Factory functional for Phase-2 categories ONLY (FactoryAllowedPhases
  = [Phase2] in P1; P2 extends to [Phase2,Phase3,Phase4]); P1 simtest adds
  out-of-phase rejection negative case
- D-087: PierCarriesVoice=false added as 12th locked const (was 11; now 12)
  in x/guild/types (FR-VOICE-6 mission-locked invariant)
- D-088: lexicon_meta_cover uses new lexicon.CoverBannedTerms() helper
  (insurance/premium/claim/policy scoped to Cover surface, NOT project-wide);
  x/cover/firewall pinned to allow-list of routing destinations (string-
  equality check); optional x/pact insurance-like -> Cover-like doc-fix
- D-089: StillKeeper satisfied by simtest-local stub (x/still NOT extended
  this milestone; x/still/keeper/ verified empty); x/bond -> x/cover
  CoverKeeper reverse edge added to dependency map (MsgDebitMABProceeds
  queries CoverKeeper.GetPoolReserveAccount; no import cycle, interface only)
- D-090: Bill of Rights temporal-gap fix (RightID + 13 Waivable* consts +
  RightIsWaivable() + ValidateBasic gate land in P2, NOT P5 — closes the
  P2->P5 window where rights were waivable); Voucher cold-start fix
  (bond = max(10x avg, MinimumVoucherBond) — no zero-bond bypass); Standing-
  gate dual check (floor enforced at BOTH launch handler AND Params-amendment
  ValidateBasic); D-085 escalation window tightened to before P2

3 escalations to PO: D-085 (13th right identity, confidence 0.55),
lexicon banned-term scope (griller recommends Cover-scoped helper),
pen-test third party (this grill IS the self-administered review per
oy-state §7 item 4).

This grill IS the self-administered adversarial review (pen-test) per
oy-state §7 remaining-open item 4. High/critical findings (D-090(1)
temporal gap, D-088 lexicon paper tiger, D-090(2) Voucher cold-start)
are remediated in P0 via binding decisions D-086..D-090.

---ci---
project: oy
phase: 0
milestone: v0.7
status: grill
---/ci---
2026-08-19 01:42:08 +00:00
cloudinit-bot 08dc139b5c docs(P00): plan — v0.7 vertical-slice phase plans (P1..P6)
PLAN stage for v0.7. Vertical-slice plans for 5 execution phases + 1 final:

- P1 Cover Pool Factory + firewall + floors + gates + tagging (v0.6.1)
  REQ-046/047/049/050 — firewall-first, NEW x/cover module (D-039/D-084)
- P2 Cover-Charter + Pool governance + category staging (v0.6.2)
  REQ-048/052/062/065 — extends x/cover + x/council
- P3 Guild Charter + Chapter Federation + Household/Confederation (v0.6.3)
  REQ-051/053/057/058/061 — extends x/guild + x/stand
- P4 MAB + Cover Claims Voucher + Shadow vouch + MAB seniority (v0.6.4)
  REQ-054/055/060/063 — extends x/bond + x/cover + x/standing
- P5 Anti-Capture Bill + secession cooling + Stand->Pier + Pier selection (v0.6.5)
  REQ-056/059/064/066 — cross-cutting, lands last (constrains all prior)
- P6 final review/audit/ship (v0.6.6 = v0.7 milestone release)

MVP/UX CHECK sections embedded in PLANS.md:
- User-Facing Surface: simtest is the executable demonstration (no UI)
- Happy Path: 10-step end-to-end Cover Pool lifecycle (launch -> charter ->
  elect -> route fee -> issue MAB -> release proceeds -> file call ->
  secede -> Pier escalation -> dissolve)
- UX Acceptance Criteria: 11 criteria verified in P6 audit

Cross-phase dependency map + 11 locked-const additions table included.
D-085 escalation (13th right) flagged for lead-developer before P5.

---ci---
project: oy
phase: 0
milestone: v0.7
status: plan
---/ci---
2026-08-19 01:36:04 +00:00
cloudinit-bot 398609dabb docs(P00): research — v0.7 fraternal groups + persona assessment
RESEARCH stage for v0.7. Delegated to ci-researcher subagent for 7-area
domain + codebase research. Key findings:

- x/cover module layout mirrors x/hub (D-039 precedent, D-084) — types/
  keeper/module.go/expected_keepers.go/msg_server.go/simtest
- Cover-Fee category tagging in x/cover (CoverFeeTag struct), NOT x/bread
  (no Grain struct today; avoids GrainsPerBread locked-const risk)
- Standing gate via expected-keeper shim (G-003; StandingKeeper interface)
- MAB as x/bond extension (anonymous embed, GrowthBond precedent);
  CouponDenom enum with CouponDenomBread rejected at ValidateBasic
  (MissionLockAmendmentRejected pattern)
- D-080 tagged streaming + Watcher-witnessed release; auto-Still on misuse
- Anti-Capture Bill = 13 RightID consts + 13 Waivable* bool consts (all
  false) + RightIsWaivable always false (dual firewall)
- Anti-Crowding-Out firewall = x/cover/firewall + lexicon_meta_cover
  meta-test (defense in depth; D-079)
- Guild extension: ParentGuildID + IsChapter + SecessionTermsHash +
  GoodStandingLiens (no GuildKind enum; schema-additive)
- Shadow vouch 50% = ShadowVouchWeightMultiplier const + IsShadow field +
  post-multiplier branch (const makes it locked-const firewall visible)
- Cover Claims Voucher in x/cover/types (NOT x/standing); slash via
  x/standing.Slash cross-Pool

D-085 escalation candidate (13th Anti-Capture right): spec enumerates 12 of
13 rights. Best candidate (confidence 0.55): NonParticipationNoDenial
(REQ-085/FR-NORM-4). NOT auto-decided; lead-developer surfaces to PO
before P5.

Persona assessment: backend-engineer + lead-developer + security-engineer
+ cosmos-engineer active (highest security density since v0.5).
frontend-engineer + docs-writer + mesh-engineer + data-engineer
deactivated. ci-security-auditor off until P6.

ARCHITECTURE.md extended with v0.7 component index + cross-component
dependencies + 11 new locked-const additions (pending GRILL ratification).
RESEARCH.md extended with v0.7 section (10 design recommendations +
pitfalls). PERSONAS.md rewritten for v0.7.

---ci---
project: oy
phase: 0
milestone: v0.7
status: research
---/ci---
2026-08-19 01:33:22 +00:00
cloudinit-bot f57c49f7ad docs(P00): clarify — log D-074..D-084 (v0.7 scope + 8 PO recommendations)
CLARIFY stage for v0.7. All 8 oy-spec §8 open questions resolved by
accepting PO recommendations as binding (D-074..D-080) plus the 3
interactive scope-shaping rulings (D-081 scope, plus D-082 phase order,
D-083 no IDEATE, D-084 new x/cover module).

Key decisions:
- D-074: TBD-X = $100k annual Pass volume (REQ-059)
- D-075: TBD-Z density formula locked for v0.8 USZ (REQ-095)
- D-076: Sovereign Anchors = separate SPEC (experimental v0.7)
- D-077: Standing gate binds at Factory runtime (REQ-049)
- D-078: Watcher/Voucher cap = 5% Bloom annual (v0.8 REQ-096)
- D-079: Anti-Crowding-Out = x/cover/firewall + meta-test (defense in depth)
- D-080: MAB lock = tagged streaming + Watcher-witnessed release
- D-081: §7 authoritative — v0.7 = REQ-046..066 only; Cluster A-C = v0.8
- D-082: P1 firewall-first → P2 charter+council → P3 guild/chapter →
  P4 MAB/voucher → P5 anti-capture/secession/pier → P6 final
- D-083: no IDEATE (no --ideate flag; scope pre-seeded from §7)
- D-084: new x/cover module (D-039 precedent; x/pact PactCover stays as
  cross-reference)

REQUIREMENTS.md extended with v0.7 REQ-046..REQ-066 table + v0.8 deferred
REQ-067..REQ-097 traceability. PROJECT.md extended with v0.7 scope +
D-074..D-084 clarification decisions.

---ci---
project: oy
phase: 0
milestone: v0.7
status: clarify
---/ci---
2026-08-19 01:28:27 +00:00
cloudinit-bot ea11991ec7 docs(P00): specify — regenerate oy-state v2 (v0.7 queued, REQ-046..097)
Regenerate oy-state per the regeneration rule (oy-spec changed since
state-v1). state-v2 reflects:
- v0.6 COMPLETE (tag v0.5.6, release_id 776) as last shipped
- v0.7 Fraternal Groups Foundation queued (REQ-046..REQ-066, 21 REQs)
- v0.8+ Risk Mitigations deferred (REQ-067..REQ-097, 31 REQs, D-081)
- §3 const firewall: v0.7 planned additions pending GRILL ratification
  (CoverReserveFloorAnnualContribX=1.5, CoverStandingGateTrusted=4.0,
   CoverStandingGatePreferred=4.5, MABIssuanceCeilingAnnualSurplusMultiple=3,
   CoolingSecessionCoverActiveDays=21, CoolingSecessionNonCoverDays=14,
   StandPierEscalationAnnualPassVolumeCents=10M, AntiCaptureBillOfRightsCount=13)
- §4 deferred: Sovereign Anchor SPEC, USZ runtime, Cluster A-E, Pier-Routed
  Legal Wrapper (OPTIONAL), -W absolute cap
- §6 constraints: no-subsidies + Anchor no-Voice GREEN by construction
- §7: D-074..D-081 logged (all 8 PO recommendations accepted as binding)

---ci---
project: oy
phase: 0
milestone: v0.7
status: specify
---/ci---
2026-08-19 01:26:54 +00:00
cloudinit-bot d10bf5eb24 docs(spec): v3 net-new-only — v0.7 fraternal groups + v0.8 risk mitigations
Ingest oy-spec v3 (net-new-only diff against spec-v2):
- 52 new REQs REQ-046..REQ-097 (v0.7 REQ-046..066, v0.8+ REQ-067..097)
- §5: 4 new constraints (no subsidies, Anchor no-Voice, Sovereign Anchors
  separate SPEC, Pier-Routed Legal Wrapper OPTIONAL)
- §7: v0.7 Fraternal Groups Foundation + v0.8 Risk Mitigations plan
- §8: 8 open questions with PO recommendations
- Trimmed restated baseline/Principles/Lexicon/invariants (locked, in force)

Per PO ruling 2026-08-18. ciagent acknowledges; P0 will regenerate oy-state v2.
2026-08-19 01:25:19 +00:00
cloudinit-bot 2c0e953881 docs(P00): add oy-spec-template.md — blank skeleton for fresh milestone cycles
OY-specific template the PO copies to .ciagent/oy/oy-spec (no .md) when
starting a fresh milestone cycle. Pre-fills the locked baseline that does not
change between milestones (Six Principles §3, Constraints §5, Lexicon §6,
REQ-001..REQ-021 locked-vision rows in §4, Rules + Commit convention blocks).
Clears the per-milestone content the PO must fill (§1 Objective, §2 Vision
source locked-sections, §4 acceptance criteria, §4 new REQ-022+ rows, §7
Milestone intent, §8 Open questions, §9 Changelog).

Each placeholder is a <!-- TODO --> comment so the PO can grep for unfilled
slots. The header comment block explains what is pre-filled vs what the PO
fills, and points to oy-state §2 for the current max REQ-ID before adding new
rows.

Lives at .ciagent/oy/oy-spec-template.md (.md extension because it is a
reference file the PO reads in an editor, not ingested by the ciagent — the
working oy-spec / oy-state keep the bare-stem convention for ingestion).

---ci---
phase: 0
milestone: v0.6
status: execute
project: oy
---/ci---
2026-08-18 23:23:09 +00:00
cloudinit-bot 9e5e98f22e docs(P00): introduce oy-spec + oy-state boundary docs (PO <-> ciagent)
Establishes the two-doc contract between the product owner and the ciagent:
- oy-spec (PO-authored, ciagent ingests): authoritative product input
- oy-state (ciagent-authored, PO ingests): current shipped state

Both live in .ciagent/oy/ with no .md extension (PO ingestion keys on the
bare stem oy-spec / oy-state). The 10 existing .ciagent/oy/*.md files remain
ciagent-internal working memory. PROJECT/REQUIREMENTS/ARCHITECTURE gain a
one-line header note pointing to oy-spec as the source and oy-state as the
shipped-state mirror.

oy-spec holds the schema the PO fills (Objective, Vision source, Principles
[locked], Requirements table with acceptance criteria, Constraints, Lexicon
[locked], Milestone intent, Open questions, Changelog) + the mandatory
docs(spec): Conventional Commit convention for spec edits.

oy-state is backfilled from shipped v0.6 state: 45-REQ coverage table, 24
locked constants, 18 deferred items, firewall status (G-003 GREEN, G-006
controlled exception cosmos-sdk v0.50.8, REQ-012 GREEN x3, Mission Lock
GREEN, coverage >=80% GREEN), and 5 open PO decisions for v0.7 scoping.

Closes the loop: PO reads oy-state -> edits oy-spec (docs(spec): commit) ->
ciagent regenerates PROJECT/REQUIREMENTS/ARCHITECTURE at next P0 -> flags
drift in oy-state §5. Prevents re-proposing shipped or explicitly-deferred
REQs.

---ci---
phase: 0
milestone: v0.6
status: execute
project: oy
---/ci---
2026-08-18 23:16:15 +00:00
cloudinit-bot aa66e58f95 checkpoint(milestone): v0.6 complete — clear for next milestone
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
2026-08-18 19:08:40 +00:00
cloudinit-bot 715403a4e3 Merge milestone/v0.6-nomad-web-ui into main (v0.6 Nomad Web UI feature milestone release)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 6
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-043, REQ-044, REQ-045]
  partial: []
---/ci---
v0.5.6
2026-08-18 19:07:58 +00:00
cloudinit-bot f3d38b8a05 Merge phase/06 (final) into milestone/v0.6-nomad-web-ui (P6 complete → v0.5.6 milestone release) 2026-08-18 19:07:58 +00:00
cloudinit-bot 52e438d1b1 checkpoint(milestone): v0.6 complete → v0.5.6 (milestone release)
---ci---
project: oy
phase: 6
milestone: v0.6
status: complete
---/ci---
2026-08-18 19:07:58 +00:00
cloudinit-bot d752215a5c docs(P6): v0.6 final review + audit — PASS, feature purity gate GREEN
REVIEW: 8 probes GREEN (go run dep-free, 5 screens reachable, lexicon
firewall scans web/, Bread-scale matches code constants D-073, Standing
uses locked constants, Freeholder badge reflects IsFreeholderEligible,
Window lifecycle calls real methods, no banned terms in rendered pages).
AUDIT: reconstruction test passes; feature purity gate GREEN (no x/
module modified, locked-const firewall intact, G-003 app-layer, G-006
go.mod unchanged — G-028 diff against v0.5.0 EMPTY); coverage store
98.1% handlers 89.2%; all 3 lexicon firewalls green. REQUIREMENTS:
REQ-040..045 marked Complete. ROADMAP: v0.6 marked COMPLETE.

---ci---
project: oy
phase: 6
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-043, REQ-044, REQ-045]
  partial: []
---/ci---
2026-08-18 19:07:48 +00:00
cloudinit-bot 30e35ea1c9 Merge phase/05 into milestone/v0.6-nomad-web-ui (P5 complete → v0.5.5)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 5
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-043, REQ-044, REQ-045]
---/ci---
v0.5.5
2026-08-18 19:06:22 +00:00
cloudinit-bot ef80a8e1c2 checkpoint(p5): v0.6 phase 5 complete → v0.5.5
---ci---
project: oy
phase: 5
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-043, REQ-044, REQ-045]
---/ci---
2026-08-18 19:06:22 +00:00
cloudinit-bot 56db37a463 feat(P5): Bloom accrual view — per-Stash BloomRecord (REQ-044)
web/handlers/bloom.go: GET /bloom/{stashID} renders BloomRecord
(AccruedGrain, RateBasisPoints as %, LastAccrualBlock) + the 4.5%
target rate read from x/bloom/types.TargetBloomRateBasisPoints (D-073
code-constant source-of-truth, NOT hardcoded) + the 4.0%-5.0% band
(Min/MaxBloomRateBasisPoints) + Mission Lock note. Store extensions:
GetBloomRecord/ListBloomRecords. Seed: holder-alia at target rate (450
bps), holder-bryn at 420 bps (within band). bloom_test.go: D-073
target-rate source-of-truth regression guard (asserts TargetBloomRate-
BasisPoints=450, Min=400, Max=500 from code constants; would fail if
hardcoded), G-026 error lexicon check, highest-risk screen for banned-
term drift (uses "Bloom"/"real production"/"accrual" labels only).
Coverage: store 98.1%, handlers 89.2%.

---ci---
project: oy
phase: 5
milestone: v0.6
status: execute
---/ci---
2026-08-18 19:06:16 +00:00
cloudinit-bot ff068f63bc Merge phase/04 into milestone/v0.6-nomad-web-ui (P4 complete → v0.5.4)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 4
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-043, REQ-045]
---/ci---
v0.5.4
2026-08-18 19:02:52 +00:00
cloudinit-bot 89ec9a76db checkpoint(p4): v0.6 phase 4 complete → v0.5.4
---ci---
project: oy
phase: 4
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-043, REQ-045]
---/ci---
2026-08-18 19:02:52 +00:00
cloudinit-bot 451ea08414 feat(P4): Standing + Freeholder signals progress (REQ-043)
web/handlers/standing.go: GET /standing/{reachID} renders standing score
+ bucket + 4-signal progress + Freeholder-eligible badge. Store extensions:
ListRatings/ListVouches/ListSlashes/ComputeStandingScore (simplified, from
locked x/standing/types constants PriorMean/PriorWeight/ComputeDiversityBonus/
GetVoucherWeight/GetStandingBucket — NOT hardcoded)/ComputeFreeholderSignals
(real FreeholderSignals struct + IsFreeholderEligible). Seed: holder-alia
(12 ratings, 4 cats, 1 Vouch, mature Stash -> eligible) vs holder-bryn
(3 ratings, 1 cat, no Vouch, immature -> not eligible). standing_test.go:
computed-from-locked-constants regression guard (PriorMean=4.0, PriorWeight=
10, DiversityBonus4Cats=0.10), Freeholder-eligible badge reflects
IsFreeholderEligible() (the real method), G-026 error lexicon check.
Coverage: store 98.0%, handlers 88.7%.

---ci---
project: oy
phase: 4
milestone: v0.6
status: execute
---/ci---
2026-08-18 19:02:44 +00:00
cloudinit-bot 50c84d0351 Merge phase/03 into milestone/v0.6-nomad-web-ui (P3 complete → v0.5.3)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 3
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-045]
---/ci---
v0.5.3
2026-08-18 18:58:32 +00:00
cloudinit-bot 5008f85da1 checkpoint(p3): v0.6 phase 3 complete → v0.5.3
---ci---
project: oy
phase: 3
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-042, REQ-045]
---/ci---
2026-08-18 18:58:32 +00:00
cloudinit-bot 79a3358810 feat(P3): Window authorization — open/lifecycle/audit log (REQ-042)
web/handlers/window.go: GET /window (list), GET /window/new (form),
POST /window (open), GET /window/{id} (detail+lifecycle+audit), POST
/window/{id}/activate|revoke|expire (lifecycle transitions). Store
extensions: OpenWindow/ActivateWindow/RevokeWindow/ExpireWindow/
ListWindows/GetWindow/GetAuditLog — all call the REAL x/window/types
Window.Activate/Revoke/Expire methods (not reimplementation). Revoke on
Expired is a no-op (v0.2 terminal-state contract). AuditEntry appended on
each transition. 3 Window templates. window_test.go: lifecycle
correctness (asserts real methods invoked), idempotent revoke, revoke-on-
expired no-op, G-026 error lexicon checks. Coverage: store 99.2%,
handlers 87.7%.

---ci---
project: oy
phase: 3
milestone: v0.6
status: execute
---/ci---
2026-08-18 18:58:25 +00:00
cloudinit-bot edd285e5c0 Merge phase/02 into milestone/v0.6-nomad-web-ui (P2 complete → v0.5.2)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 2
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-045]
---/ci---
v0.5.2
2026-08-18 18:55:11 +00:00
cloudinit-bot 07053cc13a checkpoint(p2): v0.6 phase 2 complete → v0.5.2
---ci---
project: oy
phase: 2
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-041, REQ-045]
  partial: []
---/ci---
2026-08-18 18:55:07 +00:00
cloudinit-bot 973e25a7c9 feat(P2): Stash dashboard — Bread scale + maturity progress (REQ-041)
web/handlers/stash.go: GET /stash/{holderID} renders balance in Grain +
Bread-scale conversion (x/bread/types.BreadScaleAll() + GrainsPerBread=10000,
D-073 code constants NOT docs) + 90-day maturity progress bar (ActiveDays/90
capped at 100%) + IsMature badge. stash_test.go: D-073 regression guard
(GrainsPerBread=10000, Crumb=100 Grain; would fail if docs 1000x values used),
mature vs immature fixture, 404 + G-026 error lexicon check. Coverage 83.5%
cumulative. Template FuncMap divGrain for the scale table.

---ci---
project: oy
phase: 2
milestone: v0.6
status: execute
---/ci---
2026-08-18 18:55:03 +00:00
cloudinit-bot 741d6e0a96 Merge phase/01 into milestone/v0.6-nomad-web-ui (P1 complete → v0.5.1)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 1
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-045]
  partial: []
---/ci---
v0.5.1
2026-08-18 18:52:59 +00:00
cloudinit-bot eba12998b7 checkpoint(p1): v0.6 phase 1 complete → v0.5.1
---ci---
project: oy
phase: 1
milestone: v0.6
status: complete
requirements:
  covered: [REQ-040, REQ-045]
  partial: []
---/ci---
2026-08-18 18:52:53 +00:00
cloudinit-bot 27b565c965 docs(P1): README web UI quickstart + lexicon firewall v0.6 section
---ci---
project: oy
phase: 1
milestone: v0.6
status: execute
---/ci---
2026-08-18 18:52:39 +00:00
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
cloudinit-bot 4166de5a4b feat(P1): web foundation — main.go, server.go, HTMX vendored, base+home templates (REQ-040)
Go 1.22 net/http.ServeMux + html/template + http.FileServer for static.
HTMX 2.0.10 vendored as web/static/htmx.min.js (NOT go get; G-006).
base.html layout with nav to all 5 screens. home.html overview.

---ci---
project: oy
phase: 1
milestone: v0.6
status: execute
---/ci---
2026-08-18 13:43:53 +00:00
cloudinit-bot 9811aaabbb feat(P1): lexicon firewall for web surface (REQ-045)
Add lexicon_meta_web/ sibling meta-test mirroring lexicon_meta_docs/. Scans
web/templates/**/*.html + web/static/**/*.js + web/**/*.go using the shared
lexicon.FindBannedTerm (no detection reimplementation). Includes G-009
self-test table (lexicon.SyntheticBannedStrings), banned-terms count (10),
openyield/european false-positive guard, and G-013 walk-coverage (injects a
synthetic banned-term fixture into web/templates/.lexicon_fixture/ and
asserts the walk finds it). Firewall passes green with zero web content
(closed by the walk-coverage test).

---ci---
project: oy
phase: 1
milestone: v0.6
status: execute
---/ci---
2026-08-18 12:07:14 +00:00
cloudinit-bot 5be8c51c60 checkpoint(p0): v0.6 phase 0 complete → v0.5.0
---ci---
project: oy
phase: 0
milestone: v0.6
status: complete
---/ci---
2026-08-18 12:05:43 +00:00
cloudinit-bot d3537249fb Merge phase/00 into milestone/v0.6-nomad-web-ui (P0 complete → v0.5.0)
docs-build / go test ./... (lexicon firewall + all x/* tests) (push) Has been cancelled
docs-build / mkdocs build (docs site artifact) (push) Has been cancelled
---ci---
project: oy
phase: 0
milestone: v0.6
status: complete
---/ci---
v0.5.0
2026-08-18 12:05:23 +00:00
cloudinit-bot 74bf4d6aaf decision(P00): mvp/ux gate — verified 3 sections present
PLAN.md has User-Facing Surface (L2111), Happy Path (L2125),
UX Acceptance Criteria (L2141). Gate PASSES at full autonomy.

---ci---
project: oy
phase: 0
milestone: v0.6
status: mvp_ux_check
---/ci---
2026-08-18 12:05:15 +00:00
cloudinit-bot b9fac60a47 docs(P00): grill — v0.6 adversarial review (D-078+, G-025+)
---ci---
project: oy
phase: 0
milestone: v0.6
status: grill
---/ci---
2026-08-18 12:05:00 +00:00
cloudinit-bot 66e27f7bb8 checkpoint(p0): plan complete → grill next
---ci---
project: oy
phase: 0
milestone: v0.6
status: plan
---/ci---
2026-08-18 12:02:43 +00:00
cloudinit-bot 949b1acf50 docs(P00): create phase plans — v0.6 Nomad Web UI
---ci---
project: oy
phase: 0
milestone: v0.6
status: plan
---/ci---
2026-08-18 12:02:28 +00:00
cloudinit-bot d066885b60 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---
2026-08-18 11:58:09 +00:00
cloudinit-bot e62f783fa1 checkpoint(p0): research complete → ideate next
---ci---
project: oy
phase: 0
milestone: v0.6
status: research
---/ci---
2026-08-18 11:57:38 +00:00
cloudinit-bot 6597cbebd8 docs(P00): research — v0.6 Nomad Web UI MVP findings
---ci---
phase: 0
milestone: v0.6
status: research
decisions:
  - id: D-074
    decision: HTMX 2.0.10 vendored as web/static/htmx.min.js (single JS file, no build step, no go get — G-006 preserved)
    rationale: htmx.org docs confirm dependency-free single-file install; 2.0.10 is current stable (v4 in beta, Summer 26 target)
    confidence: 0.95
    alternatives: [htmx 1.x (IE support, unnecessary), pin a newer beta (instability risk)]
  - id: D-075
    decision: lexicon_meta_web_test.go scans web/**/*.{html,js,go} as a new sibling firewall (package lexicon_meta_web, subdir lexicon_meta_web/)
    rationale: web/ is a new top-level dir NOT under x/ — the existing lexicon_meta_test.go (x/**/*.go) does not cover it; mirror the lexicon_meta_docs/ subdir pattern with G-013 walk-coverage + G-009 self-test + G-014 shared SyntheticBannedStrings()
    confidence: 0.85
    alternatives: [extend lexicon_meta_test.go to also walk web/ (mixes x/ and web/ concerns), separate .go and .html/.js tests (more files)]
  - id: D-076
    decision: Go 1.22 net/http.ServeMux is the sole router for web/ (method+path patterns, r.PathValue); gorilla/mux NOT used by web/ despite being a transitive cosmos-sdk dep
    rationale: go.mod:3 confirms go 1.22; enhanced ServeMux covers GET/POST + path params for all 5 screens; G-006 zero-dep preserved (no third-party router)
    confidence: 0.95
    alternatives: [gorilla/mux (breaks G-006 for web/, unnecessary), chi/router (new dep)]
  - id: D-077
    decision: frontend-engineer activated for v0.6 with territory web/** (templates, static, handlers, store, main.go, lexicon_meta_web_test.go); backend-engineer co-owns the mock store x/*/types integration
    rationale: first UI milestone — frontend-engineer was deactivated since v0.3 (no UI work); Go html/template + HTMX stack (no node/React) aligns with frameworks; constraints bind G-006 (vendored HTMX), G-003 (app-layer type import), REQ-012 (lexicon), D-073 (bread-scale code constants)
    confidence: 0.90
    alternatives: [keep frontend-engineer deactivated and have backend-engineer own templates (wrong skill fit), activate docs-writer instead (no docs-content work in v0.6)]
---ci---

v0.6 §1: Go html/template + HTMX architecture — server layout (web/main.go,
handlers/, store/, templates/, static/), base template pattern, HTMX 2.0.10
vendoring (single JS file, no build step, G-006 preserved), progressive
enhancement via HX-Request header (fragment vs full-page dispatch), html/template
contextual auto-escaping (XSS prevention).

v0.6 §2: Mock server data model — exact struct shapes verified from source for
all 6 modules (identity Reach, stash Stash+StashActivity+IsMature, window
Window+Scope+RateLimit+Activate/Revoke/Expire, standing Rating/Vouch/Slash/
FreeholderSignals+helpers, bread GrainsPerBread=10000+BreadScaleAll 11 tiers,
bloom BloomRecord+TargetBloomRateBasisPoints=450). Import paths use module
github.com/oy/openyield. Bread-scale code constants are the source of truth
(D-073) — docs/shared/bread-scale.md is outdated (claims 1000x ratios; code
uses 100x).

v0.6 §3: Lexicon firewall extension — pattern to mirror from
lexicon_meta_test.go (x/**/*.go) and lexicon_meta_docs/ (docs/**/*.md); new
lexicon_meta_web/ subdir + package lexicon_meta_web scanning
web/**/*.{html,js,go}; 10 banned terms verified from lexicon.go:30-41 (bank,
deposit, interest, yield, currency, dollar, euro, account, savings, depositor);
G-013 walk-coverage + G-009 self-test + G-014 shared helper.

v0.6 §4: HTTP routing — Go 1.22 net/http.ServeMux method+path patterns
confirmed (go.mod:3); r.PathValue() for path params; gorilla/mux (go.mod:75
transitive) NOT used by web/ per G-006.

v0.6 §5: PERSONAS.md update — frontend-engineer activation (YAML frontmatter
format documented); territory web/**, frameworks Go 1.22+html/template+HTMX+
ServeMux (NO node/React), constraints G-006/G-003/REQ-012/D-073; backend-engineer
co-owns mock store type integration; security/cosmos/mesh/data-engineers
deactivate for v0.6 (UI-only, no runtime).

v0.6 §6: ARCHITECTURE.md update — proposed section outline appended after
line 514 (v0.5 section end); 7 subsections mirroring v0.5 density.
2026-08-18 11:57:23 +00:00
cloudinit-bot 4876c49aa0 docs(P00): clarify — v0.6 decisions D-066..D-073
User-validated stack: Go html/template + HTMX, Go mock API server,
new web/ dir, all 5 screens. Lexicon firewall extended to web/.
Bread-scale source of truth = x/bread/types code constants.

---ci---
project: oy
phase: 0
milestone: v0.6
status: clarify
---/ci---
2026-08-18 11:54:59 +00:00