Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Status: Active OpenSpec proposal; not implemented or deployed. The source under openspec/changes/ is authoritative.

Context

Each language maps syntax and conventions to the same CIR and analysis contracts.

Goals / Non-Goals

  • Goals: independently conformant full-CIR frontends, bounded provenance, registered law runners, lifecycle facts/unknowns, L4 snapshot integration, and faithful advisory semantics.
  • Non-goals: one shared parser abstraction beyond CIR contracts, or language-specific branches in core.

Decisions

  • Recommend tree-sitter grammars for an initial uniform implementation, but confirm each against native-parser options and representative fixtures during that language’s task.
  • Keep effect and visibility tables independently versioned per language.
  • Emit facts for Python package facades, Clojure private-var reach-through, and Julia foreign-function/foreign-type ownership; core emits shared findings where applicable.
  • Require each frontend to emit cluster/tags/serializable generator references, register a language runner for representable values, and emit lifecycle write/retry/resource/exit facts. Unsupported results apply to specific constructs, not an entire supported language, and remain explicit.
  • Stage extraction against stabilized CIR contracts, then run final core/law/lifecycle contract acceptance without whole-change predecessor serialization.

Risks / Trade-offs

  • Dynamic constructs create opaque/unknown facts; surface them rather than guessing.
  • Combining three languages risks a large delivery; use separate test-first milestones and conformance gates.

Decision Gates

  • Separate HITL decision tickets SHALL confirm parser choice, supported language versions, macro/module-loading boundaries, exclusions, approver, and immutable review reference for Python, Clojure, and Julia before each implementation.