Parent RFC
ojfbot/core#15 — RFC: Frame × Gas Town
Purefoy's scope
Purefoy is a Python repo (knowledge base about Roger Deakins cinematography). Its Gas Town adoption is distinct because it's Python, not TypeScript. The priorities are: (1) adopt the FrameBead shape in Python/Pydantic so it's structurally aligned, (2) implement a Python BeadStore, (3) expose beads over the MCP server so other Frame agents can consume Purefoy's knowledge as beads.
Dependency: ADR-0009 (FrameBead) must land in core first — Purefoy implements the same shape in Python.
Sprint 1 — FrameBead in Python (pure- prefix)
Acceptance criteria
GET /api/beads?type=task returns Purefoy knowledge items as FrameBeads. Beads written to .beads/pure/ as JSON files. Python BeadStore is structurally compatible with the TypeScript BeadStore interface.
Sprint 2 — AgentBead (Python)
Sprint 3 — MCP bead exposure
Acceptance criteria
cv-builder agent can call the Purefoy MCP server and receive pure- FrameBeads about cinematography techniques. The bead shape is identical to what cv-builder uses for its own beads.
Sprint 4 — kb-expansion molecule
Documents required before Sprint 1
Open question: Python BeadStore compatibility
The TypeScript BeadStore interface and the Python FilesystemBeadStore should write to the same directory format (.beads/<prefix>/YYYY-MM/bead-id.json). Verify the JSON schema is identical before Sprint 1 ships. If format diverges, cross-app search breaks.
Run /gastown audit to check current state
Parent RFC
ojfbot/core#15 — RFC: Frame × Gas Town
Purefoy's scope
Purefoy is a Python repo (knowledge base about Roger Deakins cinematography). Its Gas Town adoption is distinct because it's Python, not TypeScript. The priorities are: (1) adopt the FrameBead shape in Python/Pydantic so it's structurally aligned, (2) implement a Python BeadStore, (3) expose beads over the MCP server so other Frame agents can consume Purefoy's knowledge as beads.
Dependency: ADR-0009 (FrameBead) must land in core first — Purefoy implements the same shape in Python.
Sprint 1 — FrameBead in Python (pure- prefix)
FrameBeadPydantic model — same shape as the TypeScript type, implemented insrc/models/bead.pypure-prefix — Purefoy beads use this prefix.beads/pure/(same directory convention as TypeScript implementation)Acceptance criteria
GET /api/beads?type=taskreturns Purefoy knowledge items as FrameBeads. Beads written to.beads/pure/as JSON files. Python BeadStore is structurally compatible with the TypeScriptBeadStoreinterface.Sprint 2 — AgentBead (Python)
AgentBeadPydantic model — extends FrameBead with role/app/status/hook labelspure/witness-001created on first agent initprimeNode: check hook on startup, route to work if foundSprint 3 — MCP bead exposure
list_beads(filter: BeadFilter)andget_bead(id: str)toolsbead_idfor cross-referencingpure-beads in its search/activity feed once A1 is adopted cluster-wideAcceptance criteria
cv-builder agent can call the Purefoy MCP server and receive
pure-FrameBeads about cinematography techniques. The bead shape is identical to what cv-builder uses for its own beads.Sprint 4 — kb-expansion molecule
kb-expansion.tomlformula — steps for expanding the knowledge base:identify_gaps → research → validate → ingest → indexmolecule-compiler.ts; translates formula steps into a sequential Python agent workflow.beads/pure/to persist step completionDocuments required before Sprint 1
domain-knowledge/gastown-context.md(core)Open question: Python BeadStore compatibility
The TypeScript
BeadStoreinterface and the PythonFilesystemBeadStoreshould write to the same directory format (.beads/<prefix>/YYYY-MM/bead-id.json). Verify the JSON schema is identical before Sprint 1 ships. If format diverges, cross-app search breaks.Run
/gastown auditto check current state