agent/docs/RFC.plan.md
Virgil 3c2575f45b fix(ax): remove proc.go wrapper layer
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-30 15:48:21 +00:00

3 KiB

RFC Plan — How to Start a core/agent Session

For future Claude sessions. Do this FIRST before touching code.

Step 1: Load the Domain

Read these files in order using ReadFile. Yes, all of them. The ~2000 tokens of boot cost pays for itself immediately — zero corrections, zero rediscovery.

1. ReadFile /Users/snider/Code/core/go/docs/RFC.md          (1278 lines — core/go contract, 21 sections)
2. ReadFile /Users/snider/Code/core/agent/docs/RFC.md        (~500 lines — core/agent contract, 22 sections)
3. ReadFile /Users/snider/Code/core/go-process/docs/RFC.md   (~224 lines — go-process contract, 8 sections)

After loading all three, you have the full domain model:

  • Every core/go primitive and how core/agent uses it
  • The current state of core/agent (what's migrated, what isn't)
  • The file layout with per-file migration actions
  • The quality gates (10 disallowed imports, test naming, string concat)
  • The completion pipeline architecture
  • The entitlement/permission model

Step 2: Verify Context

After loading, you should be able to answer without looking at code:

  • What does c.Action("agentic.dispatch").Run(ctx, opts) do?
  • How do direct s.Core().Process() calls replace the old process wrapper layer?
  • What replaces the ACTION cascade in handlers.go?
  • Which imports are disallowed and what replaces each one?
  • What does c.Entitled("agentic.concurrency", 1) check?

If you can't answer these, re-read the RFCs.

Step 3: Work the Migration

The core/agent RFC Section "Current State" has the annotated file layout. Each file is marked DELETE, REWRITE, or MIGRATE with the specific action.

Priority order:

  1. OnStartup/OnShutdown return Result (breaking, do first)
  2. Replace unsafe.PointerFs.NewUnrestricted() (paths.go)
  3. Replace os.WriteFileFs.WriteAtomic (status.go)
  4. Replace core.ValidateName / core.SanitisePath (prep.go, plan.go)
  5. Replace core.ID() (plan.go)
  6. Register capabilities as named Actions (OnStartup)
  7. Replace ACTION cascade with Task pipeline (handlers.go)
  8. Use s.Core().Process() directly in call sites. The old proc.go wrapper layer has been removed.
  9. AX-7 test rename + gap fill
  10. Example tests per source file

Step 4: Session Cadence

Follow the CLAUDE.md session cadence:

  • 0-50%: Build — implement the migration
  • 50%: Feature freeze — finish what's in progress
  • 60%+: Refine — review passes on RFC.md, docs, CLAUDE.md, llm.txt
  • 80%+: Save state — update RFCs with what shipped

What NOT to Do

  • Don't guess the architecture — it's in the RFCs
  • Don't use os, os/exec, fmt, errors, io, path/filepath, encoding/json, strings, log, unsafe — Core has primitives for all of these
  • Don't use string concat with + — use core.Concat() or core.Path()
  • Don't add fmt.Println — use core.Println()
  • Don't write anonymous closures in command registration — extract to named methods
  • Don't nest c.ACTION() calls — use c.Task() composition