diff --git a/.gitignore b/.gitignore index e9b58d0cb..2070ed5d0 100644 --- a/.gitignore +++ b/.gitignore @@ -100,5 +100,8 @@ repowise.db .sf/mcp.json .sf.migrating/ .sf/evals/ +.sf/harness/ +.sf/milestones/ +.sf/scaffold-manifest.json .sf/interactive.lock .sf/interactive.lock.d/ diff --git a/.sf/ANTI-GOALS.md b/.sf/ANTI-GOALS.md index b61d55301..7a229d097 100644 --- a/.sf/ANTI-GOALS.md +++ b/.sf/ANTI-GOALS.md @@ -1,10 +1,6 @@ - # Anti-goals -What we explicitly DON'T want. Things that look attractive but we've decided against. - -This is gold — most wrong agent calls come from not knowing what to avoid. Each entry: 1-2 sentences with the rationale. - -## Examples - -- (replace with your own) +- SF must not ship or revive an MCP server package or runtime endpoint. SF may consume external MCP servers as a client, but its own tools remain native SF/pi tools. +- Runtime state files under `.sf/` must not become a peer source of truth when SQLite can hold the structured state. JSON, JSONL, and Markdown runtime artifacts are generated evidence, projections, or legacy import inputs. +- Do not add direct `sqlite3 .sf/sf.db` workflows to docs or agent guidance. Database access should go through runtime-owned SF commands, tools, or adapters so schema and validation rules stay centralized. +- Do not commit transient `.sf` runtime directories such as eval outputs, harness scaffolds, milestone workspaces, locks, journals, or migration worktrees. Promote durable decisions and reviewed plans into `docs/`. diff --git a/.sf/PRINCIPLES.md b/.sf/PRINCIPLES.md index fa43e1cbc..04e0f646e 100644 --- a/.sf/PRINCIPLES.md +++ b/.sf/PRINCIPLES.md @@ -1,10 +1,6 @@ - # Principles -Durable design philosophy. Things this codebase believes are true. - -Add entries as you make decisions. Each entry: 1-2 sentences. Cite the rationale (the why, not just the what). - -## Examples - -- (replace with your own) +- SQLite is the canonical structured store for SF runtime state when the data needs schema, ordering, priority, joins, or validation. File artifacts may be generated from the DB or imported once from legacy state, but they should not become competing authorities. +- Durable project knowledge belongs in reviewed, versioned artifacts. Promote plans, specs, and ADRs to `docs/`; keep `.sf` runtime output transient unless a file is explicitly human-authored project guidance. +- 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. diff --git a/.sf/TASTE.md b/.sf/TASTE.md index e2f7b166d..f97e85d2b 100644 --- a/.sf/TASTE.md +++ b/.sf/TASTE.md @@ -1,10 +1,6 @@ - # Taste -What good code looks like here. Idioms, conventions, "we prefer X over Y" calls. - -Add entries as you notice patterns worth preserving. Each entry: 1-2 sentences with a concrete example. - -## Examples - -- (replace with your own) +- Prefer runtime adapters over ad hoc file parsing when reading SF state. For example, query solver eval history through `sf-db.js` helpers rather than reading `.sf/evals/**/report.json`. +- Keep generated artifacts clearly named, ignored, and reproducible. A committed doc should read like reviewed source, not like a cached run output with host-local paths. +- Use precise boundary names in files and symbols. Avoid stale `mcp` names for native workflow tools; reserve MCP wording for client-side integration with external servers. +- Make migrations one-way and observable. Legacy JSON, JSONL, or Markdown should be imported into SQLite with schema/version checks, then left as ignored fallback or removed when the cutover is complete. diff --git a/.sf/harness/specs/bootstrap.md b/.sf/harness/specs/bootstrap.md deleted file mode 100644 index 999e7041b..000000000 --- a/.sf/harness/specs/bootstrap.md +++ /dev/null @@ -1,20 +0,0 @@ - -# Bootstrap Spec: Agent Legibility - -Verifies that this repo is minimally agent-legible. - -## Criteria - -- [ ] `AGENTS.md` exists at repo root and is non-empty. -- [ ] `ARCHITECTURE.md` exists at repo root and is non-empty. -- [ ] `docs/exec-plans/active/` exists. -- [ ] `docs/exec-plans/tech-debt-tracker.md` exists. -- [ ] `docs/design-docs/ADR-TEMPLATE.md` exists. - -## Verification command - -```bash -for f in AGENTS.md ARCHITECTURE.md docs/exec-plans/active/index.md docs/exec-plans/tech-debt-tracker.md docs/design-docs/ADR-TEMPLATE.md .sf/harness/specs/bootstrap.md; do [ -s "$f" ] && echo "OK: $f" || echo "MISSING: $f"; done -``` - -All lines should start with `OK:` for the bootstrap spec to pass. diff --git a/.sf/scaffold-manifest.json b/.sf/scaffold-manifest.json deleted file mode 100644 index f911e6416..000000000 --- a/.sf/scaffold-manifest.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "schemaVersion": 1, - "applied": [ - { - "path": ".sf/harness/AGENTS.md", - "template": ".sf/harness/AGENTS.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:685c41e601340086b8076263a71315c66554efdaeb074bc1b907eebf879174c6" - }, - { - "path": ".sf/harness/specs/AGENTS.md", - "template": ".sf/harness/specs/AGENTS.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:0f4fbf4111704d05744e4a4e13a9bf3eada262f0da9517c2010f0b46f4bd3c45" - }, - { - "path": ".sf/harness/specs/bootstrap.md", - "template": ".sf/harness/specs/bootstrap.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:b86ba7cf2cec39a7a9f9d94f885998cfe26eebfc5b76fdd8375ef125e927e0cf" - }, - { - "path": ".sf/harness/evals/AGENTS.md", - "template": ".sf/harness/evals/AGENTS.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:6f88bf8a2bad95d8db5985c9b3317b9edd65592c12e98bb0bff1a24ec152d768" - }, - { - "path": ".sf/harness/graders/AGENTS.md", - "template": ".sf/harness/graders/AGENTS.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:2db17feae1acfe62d85aafbe32d016873c3036d4d76e9dd0db478375fae0794e" - }, - { - "path": ".sf/PRINCIPLES.md", - "template": ".sf/PRINCIPLES.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:9d5c50cb3d602f66468a33a4324068fab8a022fab0fd6940c371a5986af2947e" - }, - { - "path": ".sf/TASTE.md", - "template": ".sf/TASTE.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:ee9ea8ade6f8434e9425a989bab9735d2068395978d61940e18679b93b1f11b0" - }, - { - "path": ".sf/ANTI-GOALS.md", - "template": ".sf/ANTI-GOALS.md", - "version": "2.75.3", - "appliedAt": "2026-05-06T21:03:18.882Z", - "stateAtApply": "pending", - "contentHash": "sha256:56b4f7d20d49e4558ac5aea5e967cf3475ef98d68dfa8985ba42b3e2b0d72e25" - } - ] -} diff --git a/.sf/milestones/M001-6377a4/M001-6377a4-CONTEXT.md b/docs/plans/memory-consolidation-db-plan.md similarity index 99% rename from .sf/milestones/M001-6377a4/M001-6377a4-CONTEXT.md rename to docs/plans/memory-consolidation-db-plan.md index 19c08c173..012a66d29 100644 --- a/.sf/milestones/M001-6377a4/M001-6377a4-CONTEXT.md +++ b/docs/plans/memory-consolidation-db-plan.md @@ -1,9 +1,8 @@ ---- - ## M001-6377a4: Consolidate Memory Systems into Unified node:sqlite Store **Gathered:** 2026-05-07 -**Status:** Ready for planning +**Status:** Promoted plan +**Source:** Promoted from `.sf/milestones/M001-6377a4/M001-6377a4-CONTEXT.md` ## Project Description