Skip to content

Daily Log: 2026-07-15 ​

A full day spanning early morning to late evening with substantial work across six ecosys projects. Two major architectural investigations (mycelium's distribution model + normalize's fact IR), infrastructure buildout (factory stage factory), and UI/layout fixes (legacy).

Sessions and Activity ​

mycelium ​

Three extended sessions continuing distribution architecture exploration. Earlier context: deciding between JVM modes (native-image 10ms startup/no JIT vs JDK 4-5s startup/full JIT).

Session 1 (handoff start 09:42:21) — Explored split language JAR architecture. Task agents completed:

  • "JVM mode with split language JARs": Moved language implementations (GraalJS, Ruby, Python, LLVM, Wasm) from implementation to compileOnly dependencies, created separate jsLang configuration alongside existing language packs. Core size dropped to 22MB (from 709MB with all languages). Default jvmRun still works unchanged; -Planguages=js,ruby,python syntax allows arbitrary combinations. All tests pass.

Session 2 (handoff start 09:42:21, same session) — Memory reclamation testing on GraalVM CE 25.0.2.

  • "JVM memory reclaim test": Built memory-load test allocating 250k objects with string/nested fields, running 20 churn cycles, then idling 65 seconds. Tested three GC configs: default G1 holds ~28% reclaim (2195→1576MB, then flat), G1 + tuned flags (G1PeriodicGCInterval=1000, MinHeapFreeRatio=10, MaxHeapFreeRatio=20) achieves 90% reclaim (2195→187MB in 30s), ZGC partial reclaim (slower, less complete than tuned G1).

Session 3 (same window) — Discovered and fixed critical setTimeout bug.

  • "Fix setTimeout event loop": Previous implementation spawned a background Thread per timer, which crashed on re-entry to GraalJS's single-threaded Context (IllegalStateException: Multi threaded access). New TimerManager (host-side, single-threaded) manages timers in a LinkedHashMap, runs callbacks on the calling thread via runEventLoop(), and properly exits when only unref'd timers remain. Tests rewrit to exercise deterministic timer behavior, ref()/unref(), nested setTimeout. Verified end-to-end with real CLI — no threading crashes, clean process exit in <1s when appropriate.

Highlight: setTimeout was "frankly unacceptable" when broken; fix enables any user script doing await sleep(ms) at top level.

fractal ​

Session (18:47:14) — Resuming architecture codegen work after handoff from previous session's type IR design.

Task: "Rewire codegen to TypeRef extraction" — extracted TypeRefs first, then projected to JSON Schema (TS types → TypeRef → JSON Schema). Modular refactor separating shape extraction from schema serialization. Work left uncommitted pending review.

factory (pterror/chub-stage-factory) ​

Session (07:07:33) — Building local stage execution for Chub stage factory, starting from Space-ship Simulator reference stage.

Three parallel task agents:

  1. "Set up package structure": Created packages/runner/ workspace package, installed @ai-sdk/openai, @ai-sdk/anthropic, hono as main deps. Ran bun install cleanly (29 resolved, 23 newly installed).

  2. "Implement message tree": Created packages/runner/src/tree.ts with MessageNode and MessageTree implementing branching conversation histories (spec: nodes can have multiple child branches, edges labeled by model choice points).

  3. "Build Hono LLM proxy server": Created packages/runner/src/providers.ts (provider guards, model resolution via AI SDK) and packages/runner/src/server.ts (Hono app with GET /api/config, POST /api/config, POST /api/chat streaming via streamText). Supports env-var seeding (RUNNER_LLM_PROVIDER, RUNNER_LLM_MODEL, RUNNER_LLM_API_KEY) + per-request override. Error handling: 400 on missing key, 502 on provider/LLM construction failure.

Design note: LLM proxy is ready for frontend mounting (either via Vite dev middleware or standalone Node); test coverage and frontend wiring deferred.

normalize ​

Session (18:36:26) — Prototyping semantic-facts crate for cross-language type/fact normalization.

Two task agents with iterative design exploration:

  1. "Prototype semantic-facts crate": Built fact IR (Fact, TypeShape enums) proving thesis: structurally equivalent declarations in different languages lower to identical fact nodes. Implemented FactExtractor trait + extractors for TypeScript (interfaces, type aliases, function signatures), SQL (CREATE TABLE, CHECK constraints), plus equivalence grouping by restatement count. Core design: lowercased names, sorted/deduped enum variants, per-extractor primitive canonicalization. Tests verify TS interface + SQL table produce identical Fact::EntityField IR for matching columns (e.g., status converged via TS alias resolution and SQL CHECK constraint). Confirmed no over-convergence: TS Array vs SQL column correctly tracked as distinct types.

  2. "Add subtyping and approximate mode": Extended IR with SubtypeRelation enum (Exact, `Subtype(Vec<String>)`, `Supertype(Vec<String>)`) to model type relationships (e.g., UUID ⊆ String). Added "approximate" mode toggling subtype/supertype grouping alongside exact equivalence.

Methodology note: Node kinds verified against live grammars (normalize syntax ast --compact --depth=-1 on fixtures), not guessed. Two bugs found and fixed during tests: alias-map key canonicalization on insert, EnumDef variant sorting/deduping consistency.

Work left in worktree pending review.

chats ​

Session (19:11:34) — Quick utility: counting unique user messages and model responses from accumulated JSONL session logs (including swipe variants).

Minimal session, completed in under 5 minutes.

legacy (para-garden/legacy) ​

Session (02:44:43 through 18:46:50) — Long day spanning early morning through late evening. Maintenance-heavy: dependency bumps, element naming refactoring, and extensive page-overflow fixes for 20+ document formats.

Early (02:44-08:53): Fixed TypeError on undefined property access (k5 is undefined), bumped dependencies (keybinds, etc.), updated codebase to use newly prefixed element names (keybinds-basic-context-menu, etc.) for command palette, context menu, keybind cheatsheet. Verified checker script functionality.

Mid (12:22-15:38): Page layout work — discussions on fixed 1920x1080 page sizing vs responsive design (opted for mobile consideration). Checker script detected 21 documents with format issues (timeouts on some, visual overflows on others).

Late (15:38-18:46): Four task agents for overflow fixes at escalating severity:

  • "Run checker find overflows": Initial checker run detected timeout failures on some documents, visual overflow detection on others.
  • "Fix moderate overflows": Agent hit session limit early (412 token usage).
  • "Fix severe overflows": Also hit session limit (80 tokens).
  • "Fix minor overflows visually" (16:34:53): Moved section boundaries on 3 documents (ascend-community-benefit-report-2032, rachel-odom-cover-letter-kessler-2031, stratum-series-b-pitch-memo-2029). All refined pages render 50-90% full, letterheads correctly repeated.
  • "Fix severe overflows visually" (16:52:21): Final comprehensive pass on 3 large documents: ascend-hospital-bill-appendectomy.md (7→15 pages), bluecross-eob-appendectomy.md (7→16 pages), ascend-chargemaster-governance-memo-2031.md (7→16 pages). Caught markdown parsing bug (missing blank line before continuation note). All 18 documents project-wide confirmed clean (zero overflows).

Final state: Content text unchanged; only div.page boundary placement and letterhead duplication adjusted.

Curiosity flagged: Storage key prefixing question (legacy:cw:cw:sexual-violence has double cw: — investigating why storage keys carry cw: prefix).

Ready to gitignore + push.

Token Usage ​

ProjectSessionsApprox. User MessagesSubagent Tokens (est.)
mycelium1~80~294k
fractal1~15~114k
factory1~30~91k
normalize1~40~220k
chats1~5<1k
legacy1~150~600k
Total6 visible~320 (user only)~1.3M

(Note: Full session count was 25 sessions across the interval; 20 shown in primary output; counts above are from 2026-07-15 specifically.)

Observations ​

  1. Distribution architecture converging. Mycelium's split-JAR model + tuned G1 GC flags offer a workable path: 22MB core is reasonable for distribution, memory reclamation is controllable, setTimeout is now safe. Remaining questions: subsets of languages, regression test coverage, polyglot interop pathology testing (6-layer deep recursion, etc.), and clarifying mycelium's ultimate purpose (user has "a bigger reason" in mind).

  2. Cross-language fact normalization maturing. The semantic-facts prototype demonstrates that TypeScript interfaces and SQL schemas do converge to identical type shapes when normalized (enum variant deduplication, alias resolution). Subtyping extension adds relational reasoning. Design is experimental/unvetted — treating as prototype; requirements may shift.

  3. Stage factory plumbing in place. Chub stage factory now has package structure, message tree IR, and LLM proxy server. Frontend wiring and comprehensive tests remain.

  4. Legacy layout work complete. 20+ document formats validated and corrected; project-wide zero-overflow state achieved. Storage key prefixing question flagged for follow-up.

  5. Day density: Balanced design/research (mycelium, normalize) with infrastructure/maintenance (factory, legacy) and quick utility work (chats). No deployment or major commits, but significant progress on three medium-term explorations.

Projects Touched ​

  • rhizone/mycelium — distribution, memory, timers
  • rhizone/fractal — codegen architecture
  • pterror/chub-stage-factory — runner package, message tree, LLM proxy
  • rhizone/normalize — semantic facts IR + subtyping
  • pterror/chats — message counting
  • para-garden/legacy — layout fixes, refactoring

Next Steps (inferred) ​

  1. mycelium: Commit split-JAR changes; add comprehensive tests (all-host × all-language matrix, polyglot recursion), consider evalModule, clarify ultimate purpose.
  2. fractal: Review codegen TypeRef refactor, proceed with concrete type hierarchy.
  3. factory: Wire frontend consumer (Vite middleware or Node entry), add tests, consider swipe support for message tree.
  4. normalize: Review semantic-facts prototype, refine requirements, consider equivalence-class/subtype grouping modes.
  5. legacy: Investigate storage cw: prefix logic, commit overflow fixes + push.