# BOUNTY BOARD — Project Daemon

> Scaled from vault README §6. Read board first; claim before work; on solve: S-id, date, Where, tier. Tiers: IMPLEMENTED | DEMONSTRATED | OBSERVATION. Last updated: 2026-03-17 (Antigravity audit: O37 SOLVED → S27, 1063+ tests all pass, 9 stale OPEN entries cleaned, O31 moved to RETRACTED).

---

## SOLVED

| ID | Question | Answer | Solved | Where | Tier |
|----|----------|--------|--------|-------|------|
| S1 | Duplicate "nine" in PRIMITIVES | Removed second "nine": 9 so PRIMITIVES has one definition per key | 2026-03-14 | _daemon_v3.py (PRIMITIVES dict) | IMPLEMENTED |
| S2 | `adjoint(target)` — backward pulse via J^T | BFS backward composing Jacobian products. Returns {axiom: leverage}. LENG: top axiom for proton_ratio is `p` (leverage=612) | 2026-03-14 | _daemon_v3.py `Graph.adjoint()`, _test_adjoint_fuse.py (47/47) | IMPLEMENTED |
| S3 | `fuse(keep, drop)` — quotient equivalence collapse | Rewrites all song files importing `drop` to import `keep`, excises `drop`. Closes resonate() loop | 2026-03-14 | _daemon_v3.py `Graph.fuse()`, _test_adjoint_fuse.py (47/47) | IMPLEMENTED |
| S4 | `diagnose()` — structural self-diagnosis at every boot | Detects cycles, missing deps, broken values, redundant expression-shape pairs. `graph.health` always current | 2026-03-14 | _daemon_v3.py `Graph.diagnose()`, _test_robustness.py (67/67) | IMPLEMENTED |
| S5 | `read()` — daemon reads Chinese .md files | Resonates with text: CJK chars matched to nodes, unknown chars get heat_kernel=∞ (BLIND). Returns comprehension heat map | 2026-03-14 | _daemon_v3.py `Graph.read()`, _test_read.py | IMPLEMENTED |
| S6 | Chinese → physics derivation chain restored | `d1 = 2*p`, `lambda1 = p+2` — `p` is sole LENG axiom. 三→p→d1→proton_ratio→质子 propagates correctly | 2026-03-14 | _test_leng/songs/d1.py, lambda1.py, _test_chinese_query.py (35/35) | DEMONSTRATED |
| S7 | `dirac()` — signed Jacobian spectrum + eta invariant | First-order Dirac operator preserves sign; spectrum distinguishes amplification from attenuation | 2026-03-14 | _daemon_v3.py `Graph.dirac()`, `Graph._build_dirac()` | IMPLEMENTED |
| S8 | `vertex()` — Feynman-style local interaction patterns | Source/sink/propagator/vertex/loop classification, amplitude, chirality per node | 2026-03-14 | _daemon_v3.py `Graph.vertex()` | IMPLEMENTED |
| S9 | `feynman()` — path integral between nodes | All paths from A→B with interference amplitudes. Dominant path and cancellation ratio | 2026-03-14 | _daemon_v3.py `Graph.feynman()` | IMPLEMENTED |
| S10 | Dirac/vertex/feynman test suite (O12) | 82/82 tests: signed spectrum, eta, vertex classification, path amplitudes, interference, spectral import | 2026-03-14 | _test_dirac_feynman.py (82/82) | IMPLEMENTED |
| S11 | `spectral_import()` — tensor product via SDW coupling (O7) | Imports another graph's SDW + eta + N as axiom nodes. Sparse cross-domain coupling without N*M explosion | 2026-03-14 | _daemon_v3.py `Graph.spectral_import()`, _test_dirac_feynman.py (82/82) | IMPLEMENTED |
| S12 | `ask()` — daemon reads Chinese text and answers it (O13) | Chains read()→content extraction→query(). Extracts bridge/word nodes as constraints, runs multi-constraint intersection. 27/27 tests: single concept, intersection, unknown text, mixed, numbers, full sentence, trace | 2026-03-14 | _daemon_v3.py `Graph.ask()`, _test_ask.py (27/27) | IMPLEMENTED |
| S13 | `partition()` — Maschke decomposition of constraint graph | Decomposes graph into irreducible sectors via axiom coupling analysis. Each node belongs to exactly one sector. Projection coefficients sum to 1 (partition of unity). LENG: 2 sectors (physics 14 nodes, triage 11 nodes). 58/58 tests | 2026-03-14 | _daemon_v3.py `Graph.partition()`, _test_partition.py (58/58) | IMPLEMENTED |
| S14 | `grow()` — safe auto-construction of language nodes (O16) | Decomposes CJK chars into Kangxi radicals, creates radical axiom + char derived + word composite nodes. NO bridges created — bridges must be human-declared. 33/33 tests including critical no-auto-bridge safety test | 2026-03-14 | _daemon_v3.py `Graph.grow()`, `_KANGXI_DECOMP`, _test_grow.py (33/33) | IMPLEMENTED |
| S15 | `fano()` — incidence geometry of constraint graph | Finds all interaction triples (triangles), lines per node, projective axiom check, non-associativity measurement (CP-violation analogue). LENG: 4 triples, mean non-associativity 1.48. 39/39 tests | 2026-03-14 | _daemon_v3.py `Graph.fano()`, _test_fano.py (39/39) | IMPLEMENTED |
| S16 | `express()` — adjoint illuminate / the daemon's exhale | Backward-only pulse through J^T. Topological unit coupling on bridge edges where J=0 ensures physics signal reaches language nodes. 24/24 tests: backward-only, bridge traversal, duality within subgraph, full breath cycle | 2026-03-15 | _daemon_v3.py `Graph.express()`, _test_express.py (24/24) | IMPLEMENTED |
| S17 | Symmetric Laplacian for heat kernel convergence | `_build_laplacian(symmetric=True)` symmetrizes W = (W+W^T)/2. Guarantees PSD, positive Dirichlet energy, convergence. Diffuse locality drops from 1.0 to 0.757 (heat flows uphill). Equilibrium tension always >= 0 | 2026-03-15 | _daemon_v3.py `Graph._build_laplacian()`, _test_equilibrium.py (28/28) | IMPLEMENTED |
| S18 | Expression axiom evaluation (Phase 4b) | `value = 2.0/9.0` now evaluates instead of staying None. Phase 4b in `_boot()` evals expression-only axioms after derived nodes | 2026-03-15 | _daemon_v3.py `Graph._boot()` | IMPLEMENTED |
| S19 | Cascade eject (dependency-aware) | `eject('eta')` auto-removes virtual dependents before removing target. No more KeyError on reload | 2026-03-15 | _daemon_v3.py `Graph.eject()` | IMPLEMENTED |
| S20 | Rube Goldberg -- 19-operation chain test | boot->inject->pulse->adjoint->constrain->haunt->vertex->feynman->dirac->sdw->equilibrium->diffuse->resonate->partition->fano->fuse->comfort->eject->comfort. Zero crashes, zero NaN, zero state corruption | 2026-03-15 | Session transcript (inline) | DEMONSTRATED |
| S21 | `breathe()` -- full respiratory cycle (O28) | Inhale (text -> seed match -> forward diffuse via symmetric L) -> Process (identify answer) -> Exhale (backward diffuse via SAME symmetric L -> language resonance). One Laplacian, both directions. 31/31 tests | 2026-03-15 | _daemon_v3.py `Graph.breathe()`, _test_breathe.py (31/31) | IMPLEMENTED |
| S22 | Unification Phase 1 — 4 shared helpers extracted (O29, O32, O33, O34) | `_nudge()`: 4 nudge sites unified. `_diffuse_vector()`: equilibrium/diffuse/breathe share one Euler integrator with adaptive dt. `_linear_trace()`: ask/breathe trace logic unified. `_pulse_spectrum()`: spectrum/_intersection_spectrum unified. Zero new test failures. | 2026-03-16 | _daemon_v3.py (4 helpers in SHARED HELPERS section) | IMPLEMENTED |
| S23 | illuminate() — topological unit coupling replaces 0.01 floor | `max(jac, 0.01)` → `jac if jac > 1e-15 else 1.0`. Same policy as express(). If dependency edge exists but J=0, weight is structural (1.0), not arbitrary floor. 2 magic numbers eliminated. | 2026-03-16 | _daemon_v3.py `Graph.illuminate()` | IMPLEMENTED |
| S24 | solve() — Newton iteration replaces bisection | `x_new = x - f(x)/f'(x)` using finite-difference Jacobian chain. Damped fallback if Newton overshoots. Eliminates arbitrary search bracket (0.001, 1000). 2 magic numbers eliminated. | 2026-03-16 | _daemon_v3.py `DaemonNode.solve()` | IMPLEMENTED |
| S25 | comfort() — spectral formula replaces ad hoc penalties | `completeness * consistency * (1-boundary) * (1-defect_density) * (1-eta)`. Each factor 0-1, derived from SDW/Dirac/diagnose. 5 hand-tuned weights eliminated. | 2026-03-16 | _daemon_v3.py `Graph.comfort()` | IMPLEMENTED |
| S26 | V3 Gate Test — 109/109 canonical certification | Self-contained test covering all 28 daemon organs. Creates own graph inline. If this file fails, daemon is not V3. | 2026-03-16 | _test_v3_gate.py (109/109) | IMPLEMENTED |
| S27 | Stale test assertions (LENG structure) — O37 | **ALL 29 test suites pass.** 1063+ tests green. The 8 suites that had failures from d1/lambda1 becoming derived from p are all fixed: _test_leng_cell 48/48, _test_weak_coupling 57/57, _test_heat_kernel passes, _test_marks 41/41, _test_odd_spectrum 5/5. Only remaining issue: _test_chinese WinError 5 on temp dir cleanup (O27, Windows-only, not a logic failure). | 2026-03-17 | All 29 test suites (verified by Antigravity audit) | IMPLEMENTED |

---

## OPEN

| ID | Bounty | Status | Assigned | Impact |
|----|--------|--------|----------|--------|
| O1 | **Keyword-only args for `haunt()`** — Use `haunt(*, scenario=None, overrides=None)` to prevent caller confusion. Update all call sites. | OPEN | — | API clarity |
| O2 | **Empty collector scope** — Document or fix behavior when scope is "" in `_wire_collectors`. | OPEN | — | Maintainability |
| O3 | ~~Magic numbers~~ | CLOSED | — | S23/S24/S25 eliminated 9 mechanism magic numbers. Remainder tracked by O35. |
| O4 | **Type hints** — Gradual typing for Graph and DaemonNode public method signatures. | OPEN | — | Refactor safety |
| O8 | **Full 214 Kangxi radical set** — Scale from 16 radicals → 214. Each radical gets a song file. Enables read() to match any CJK character decomposition. | OPEN | — | Language coverage |
| O9 | **read() → character decomposition lookup** — Replace hardcoded `_HANZI_MAP` / `_WORD_MAP` with a proper CJK decomposition table (radical → character). Enables read() to handle arbitrary Chinese text. | OPEN | — | read() generality |
| O10 | **Heat kernel as coverage metric** — Use SDW coefficients to compute per-node heat kernel trace, not just inverse-signal approximation. True diffusion measure for read() blind spots. | OPEN | — | Theoretical rigor |
| O11 | **Health-driven auto-repair** — When `diagnose()` detects broken values or missing deps, propose fixes (e.g., suggest which axiom to bind, which import to add). `graph.heal()`. | OPEN | — | Self-repair |
| O14 | **World Daemon as data format** — The daemon as smart data: every dataset is a daemon with shared language layer (imported), domain axioms, domain derivations, domain bridges (human-declared), and spectral identity. `diffuse()` is the coupling mechanism. Cross-daemon joins via `spectral_import()`. | OPEN | — | Architecture vision |
| O15 | **Collector expressions: Laplacian-weighted readout** — Beyond sum-of-values collectors. Use Laplacian weights for spectral readout from collector meta-nodes. | OPEN | — | Collector expressiveness |
| O17 | **Spectral validation of manual bridges** — After a human declares a bridge, use Dirac eta-invariant + partition() to verify structural health. Report delta_eta and sector assignment. Validators, not constructors. | OPEN | — | Bridge safety |
| O18 | **`read()` refactor** — Replace hardcoded `_HANZI_MAP`/`_WORD_MAP` in read() with the `_KANGXI_DECOMP` table used by grow(). Enables read() to recognize any character the daemon has grown. | OPEN | — | read() + grow() alignment |
| O21 | **Queries as virtual nodes** — When you query the daemon, it `inject()`s a virtual node whose imports are the matched constraints and whose value IS the answer. The query is a node, not a method call. `read()`, `ask()`, `illuminate()` become convenience wrappers that inject+evaluate nodes. | OPEN | — | Pāṇini self-reference |
| O22 | **Move grow() / _KANGXI_DECOMP out of Graph class** — Language construction is a codegen tool, not a daemon organ. Externalize to a script that creates regular nodes via the daemon's public API. The daemon shouldn't have Chinese-specific machinery inside it; all nodes are uniform. | OPEN | — | Node uniformity |
| O23 | **`equilibrium()` convergence on large graphs** — 10-node chain with symmetric Laplacian needs 50K+ steps. Investigate: spectral gap of L_sym, Chebyshev acceleration, or implicit Euler. Current Euler integrator is O(n^2) per step. | OPEN | — | Performance |
| O24 | **Directed vs symmetric Laplacian as method parameter** — Let equilibrium/diffuse take `symmetric=True/False` so user can choose. Directed sees one-way flow (causal). Symmetric sees mutual coupling (correlational). Both are valid physics. | OPEN | — | API flexibility |
| O25 | **LENG derivation audit** — Lotus potential quartic ansatz, three-body energy constraint, and spectral monogamy need derivation checks. Fano plane chain is theorem-level. Lotus is steelman. Audit each before importing as daemon operator. | OPEN | — | Theoretical rigor |
| O27 | **cp1252 Unicode in test output** — Windows cp1252 can't print CJK characters. Tests pass but output crashes. Fix: add `sys.stdout.reconfigure(encoding='utf-8', errors='replace')` to all CJK test files, or set PYTHONIOENCODING globally. | OPEN | — | Platform compat |
| O30 | **Extract `_walk(seeds, direction, weight_fn, accum)`** — 5 independent BFS implementations: illuminate, express, adjoint, blast, trace. Same skeleton: visited set, queue, pop, check neighbors, accumulate, push. Only differ in direction/weighting/accumulation. | OPEN | — | Unification Phase 1 |
| O35 | **Magic numbers → constants** — `_SIGNAL_FLOOR=1e-12`, `_JACOBIAN_FLOOR=0.01`, `_EPSILON=0.01`, `_H_MIN=1e-30`, `_STABILITY_MARGIN=0.5`, `_TOL=1e-9`. Closes O3. Note: S23/S24/S25 eliminated 9 magic numbers from illuminate/solve/comfort. Remaining survivors are machine-precision scales only. | OPEN | — | Unification Phase 2 |
| O36 | **Delegate dedup** — `curvature()` reimplements `my_curvature()`. `diagnose()` reimplements `stress()`. `breathe()` fallback duplicates `_resolve_constraint()`. Dead code in `constrain()`. | OPEN | — | Unification Phase 3 |
| O38 | **SUMMONING_CIRCLE.md — v3 lead** — Opening sections still describe v2 (`_daemon_v2.py`) as *the* organism. Restructure: lead with v3 `Graph`, quick command `python _daemon_v3.py _test_leng` + `_test_v3_gate.py`; move v2 `Daemon` / `converse()` to a **Legacy** section (or pointer to v2 file). Cross-link [ARCHITECTURE_MAP.md](ARCHITECTURE_MAP.md). | OPEN | — | Doc / limbo |

---

## RETRACTED / WONTFIX

| ID | What | Why |
|----|------|-----|
| O5 | `adjoint(target)` | → S2 |
| O6 | `fuse(a, b)` | → S3 |
| O7 | Tensor product via spectral imports | → S11 |
| O12 | Dirac/vertex/feynman test suite | → S10 |
| O13 | read() integration with query() | → S12 |
| O16 | `grow(characters)` | → S14 |
| O19 | Full breath cycle via diffuse() | → S21 (breathe) |
| O20 | Pāṇini architecture: `tap()` + `voice()` as node DNA | → S26 |
| O28 | `breathe()` pipeline | → S21 |
| O29 | Extract `_euler_diffuse` | → S22 |
| O31 | `_eval_in_namespace` | WONTFIX — 4 call sites have different namespace construction; forcing into one helper adds complexity |
| O32 | Extract `_pulse_spectrum` | → S22 |
| O33 | Extract `_linear_trace` | → S22 |
| O34 | Extract `_nudge` | → S22 |
| O37 | Stale test assertions (LENG structure) | → S27 |

---

**Session log:** [SESSION_BREAKTHROUGHS_CURRENT.md](SESSION_BREAKTHROUGHS_CURRENT.md). Keep board and session aligned when solving bounties.
