1.8 KiB
1.8 KiB
Principles
- SQLite is the canonical structured store for initialized SF repos. Treat
.sf/sf.dbas the first place for planning hierarchy, ordering, priority, gates, ledgers, schedules, and validation-sensitive state; a missing DB is bootstrap/recovery, not a parallel normal mode. .sfis the working model boundary. Keep operational state, project knowledge, preferences, decisions, requirements, roadmap state, and generated projections there first; promote only reviewed plans, specs, and ADRs todocs/.- Generated docs are human-facing exports and reports. They may change because Git keeps their review history; SF-owned operational history belongs in
.sf/SQLite when SF needs it for future behavior. - File artifacts may be generated from the DB or imported once from legacy state, but they should not become competing authorities.
- Native SF/pi tools are the product boundary. Integrations may call external MCP servers as clients, but SF-owned capabilities should not be exposed by an SF MCP server.
- Prioritization should be represented as structured state, not filename order or prose position. Prefer explicit priority/order fields in DB-backed roadmap and task records.
- Forge has one flow engine across surfaces. Source placement should name the axis it implements:
src/resources/extensions/sf/for the SF flow extension,src/headless*.tsfor thesf headlessmachine surface command path,src/cli.tsandsrc/help-text.tsfor CLI/session I/O,web/for the web surface,vscode-extension/for the editor surface,packages/rpc-client/for protocol adapters, andpackages/*for reusable workspace packages. - Keep run control and permission profile separate in planning state. Run control is manual, assisted, or autonomous. Permission profile is restricted, normal, trusted, or unrestricted.