Skip to content

Roadmap

This is a direction document, not a backlog. The milestone tables below are projected from the docs/planning/milestones/ corpus — edit a milestone entity (or run sdlc milestone create) and regenerate. The narrative threads under them are hand-authored direction, reviewed as code.

The milestones in flight now.

IdTitleVersionTarget dateSummary
Books consolidation and augmented dissolution into solutions/augmented_learningBooks consolidation and augmented dissolution into solutions/augmented_learning
Initial Product DefinitionInitial Product Definition0.1.0-alpha

Drafted or planned, not yet started.

IdTitleVersionTarget dateSummary
Agent personas + verification skill (static + judgement) as implementation-process steps with rework loopsAgent personas + verification skill (static + judgement) as implementation-process steps with rework loops
Documentation strategy: taxonomy, drift, audiences, siteDocumentation strategy: taxonomy, drift, audiences, site
graph-scheduler v0.1 — DAG core, push engine, rules, ordering, goal-direction, pull, tracker, docsgraph-scheduler v0.1 — DAG core, push engine, rules, ordering, goal-direction, pull, tracker, docs0.1.0
Initial entity shape and rosterInitial entity shape and roster2026-06-17
Lossless markdown CST coreLossless markdown CST core
markdown-contract typed-cell winsmarkdown-contract typed-cell wins
One contract layer across the fleetOne contract layer across the fleet
Polish schema validation live end-to-endPolish schema validation live end-to-end
Pumice desktop app integrationPumice desktop app integration
Query and index planeQuery and index plane
Self-hosting SDLC entities: scaffold and validate the planning modelSelf-hosting SDLC entities: scaffold and validate the planning model
Task execution consistencyTask execution consistency2026-06-30
Task: fully fleshed out and tightened end-to-endTask: fully fleshed out and tightened end-to-end
TypeScript frontmatter consumers on markdown-utilTypeScript frontmatter consumers on markdown-util
Vault kernel and structural transformsVault kernel and structural transforms
WASM/TS distribution surfaceWASM/TS distribution surface

Closed milestones, with what shipped.

IdTitleVersionShipped
Adopt augmented_books into the monorepoAdopt augmented_books into the monorepo0.6.0Complete, shipped as v0.6.0. The full augmented_books repo is folded into the monorepo. Phase 1 vendored 11 shared TS packages (T-LVLY #911) and 2 Rust crates (T-F0B2 #906) and adopted the apps — augmented-books desktop (T-JV2A #931), learn_web (T-6C0Z), augmented_web (T-KTGF), augmented_dot_com (T-LAKY), and the package demos + vimit_prototype (T-UPV1) — with obsidian-bases converged onto @sksizer/obsidian-bases (T-NLKF). Phase 2 reframed the up-front convergence audit as in-place staging (T-JCML superseded): added the solutions/ tier to D-0001 (T-1YSW), removed the three clear-duplicate packages (T-J5DI), and consolidated the family into solutions/augmented/ (T-C9RD #1010). vimit landed last as solutions/augmented/apps/vimit/ (T-B98V #1102); the upstream repo was archived (T-B1VB). vimit post-mortem follow-ups #1103/#1105/#1106/#1108 also merged.
Capability model adoptionCapability model adoption0.3.2Delivered by both member tasks. Capability schema v2 has no contains and every renderer — index, site projection, definition — derives children by inverting parent_key; kind is the optional 11-grain structural enum and audience (user | system, default system) carries the old feature / technical split and drives index sectioning; locations[] ships on the shared five-form Location grammar in lib/util/location.ts; and the combined v1→v2 migration runs clean across the corpus. Two footnotes, neither a gap: the criterion’s “20 instances (8 user / 12 system)” is arithmetic drift — the corpus grew to 27 and reads 8 user / 19 system, the user side unchanged; and the one remaining capability audit finding ([[C-409J-dag-core]] anchor rot) now points forward at packages/rust/graph-scheduler/src/graph.rs, which [[D-VSLI-distributed-work-runner-architecture]] implementation-ledger phase E3 builds — not this milestone’s work. version was assigned by the 2026-08-16 milestone audit from the delivery date (2026-07-18) to preserve roadmap order; no release tag was cut for it.
Claude Orchestrated Task Execution PrototypeClaude Orchestrated Task Execution Prototype0.2.0-alphaSuperseded by [[D-VSLI-distributed-work-runner-architecture]], whose implementation ledger records this disposition directly: the whole deliverable set is the prose orchestrator the engine replaces, and nothing distinct survives. The prototype was largely built and does run — the executable-task lifecycle operations ship on the TypeScript substrate, /sdlc:orchestrate selects ready tasks and classifies open PRs across ticks, git-ref leases coordinate parallel runs, and leaf-only kind: implementation dispatch landed with [[T-JOXA-task-kind-field-and-leaf-dispatch]] — so this is a goal reframed, not abandoned. What changed is the substrate: D-VSLI replaces ~3,750 lines of lifecycle SKILL.md with a Rust engine, and the four deliverables are re-specified as implementation-ledger phases E3 (scheduling and the filter chain), E4 (process registry), and E6 (engine v0). Track the work there rather than here.
Conflict-aware parallel dispatchConflict-aware parallel dispatch[[D-VSLI-distributed-work-runner-architecture]] splits this three ways, and all three members are closed. Write-set conflict detection becomes implementation-ledger phase E3’s scope-conflict filter over declared scope claims ([[T-U3NR-task-write-set-conflicts]]). PR-fact drift becomes a detector on phase E2’s level-triggered reconciler rather than a lint ([[T-9TYJ-audit-pr-fact-status-drift]]). The routing table becomes the runner context a phase E4 process registration declares ([[T-Z56F-orchestrate-routing-table]]).
D-0014 distribution migration — CLI-primary npm artifactD-0014 distribution migration — CLI-primary npm artifactClosed partial: six of eight deliverables shipped, the distribution half was superseded, and one integration question was neither delivered nor superseded. Shipped and live: runtime-agnostic shipped code, the skill corpus normalized onto the cli/sdlc launcher with the corpus-invocation gate enforcing it, code-root vs project-root fixes, the @sksizer/sdlc package reshape, sdlc harness install claude with doctor on the same install, and sdlc site build. Superseded: the git-pinned sksizer/sdlc-dist channel ([[T-75UD-release-ci-dist-repo]], closed obsoleted) was retired for [[D-2APS-sdlc-standalone-binary-app]]‘s compiled-binary public-npm channel, which [[M-XVOC]] delivered — that milestone also deliberately deleted this one’s gate runtime-agnostic, so criteria 1, 2 and half of 6 are answered elsewhere or negated on purpose. Not delivered and not superseded: the end-to-end consumer pilot ([[T-521G-pilot-consumer-polish]], closed obsoleted — polish stopped being a separate checkout and its tree is the frozen apps/legacy-polish per D-0011) and, with it, D-0014’s “Where the installed plugin lives” open question, which both install modes implement but no verdict ever settled. Those two want a fresh consumer-pilot task against the binary channel. [[D-0014-cli-primary-npm-distribution]] itself still describes the retired dist-repo channel as current and carries no link to D-2APS; amending it is separate follow-up.
Fully deterministic docs site: generated nav, supplemental mapping, corpus projectionsFully deterministic docs site: generated nav, supplemental mapping, corpus projections0.2.1Delivered by all ten member tasks (PRs #343-#360). The docs site is a pure build artifact: nothing generated is committed, the whole content root is swept for generator ownership and a foreign hand-written page exits NAMESPACE_CONFLICT, hand-written prose lives only under sites/df-docs/supplemental/ and maps in through sites/df-docs/site.yaml, the sidebar and site identity are generated modules astro.config.mjs merely imports, every registered entity type projects a roster plus child pages with a new type needing zero wiring, roadmap.md builds from milestone entities, and page bodies render through Eta templates. One criterion shipped amended rather than as written: the drift gate wired into quality_checks and lefthook is the real docs generate site build, not --check, because [[D-0010-deterministic-site-assembly]] made the site uncommitted and an uncommitted artifact has nothing to byte-diff against — byte-stability itself is test-pinned, and the build throws the same ownership errors. version was assigned by the 2026-08-16 milestone audit from the delivery date (2026-06-08) to preserve roadmap order; no release tag was cut for it.
Intersect v0.1 — pure core, path API, registry, fs layerIntersect v0.1 — pure core, path API, registry, fs layer0.1.0Completed 2026-07-04. All six member tasks shipped test-first across PRs #551-#556: the JSON fixture corpus, the segment-core engine (automaton product + reachability), the path API, the labeled-pattern-set registry, the opt-in intersect/fs layer, and the package exports + README + extraction guards. Corpus is green with zero pending cases; . and ./segments pull zero runtime deps, only ./fs pulls tinyglobby. Docs followed in #557/#561 (TypeDoc + Astro Starlight) and #580 (docs-config guardrails). Follow-up beyond this milestone: the library was extracted from plugin/lib/ into the workspace package packages/ts/intersect (@sksizer/intersect); npm publish still deferred.
markdown-contract adoption & cleanupmarkdown-contract adoption & cleanup0.7.0Complete, shipped as v0.7.0. SDLC’s bespoke entity-markdown validator is fully replaced by the markdown-contract engine: one declarative contract per entity type is the live validator, and the SKILL.md-family project-check harness runs on it. The eight adoption PRs landed (Zod v4 migration, the contract substrate + registry, schema/contract consolidation, rewiring validate/audit/authoring, retiring the bespoke validator + AJV renderer + body-schema.yaml manifests, the implementation-ready task contract, tree-based readiness consumption, and the unified project-check harness), and every cleanup follow-up closed: stale body-schema.yaml / validate_frontmatter.ts / schema.json doc claims fixed (T-N19Y, T-MDJC, T-OQDE), audit.ts frontmatter parsing converged onto the contract path (T-19PE), dead exports + the cosmetic validate label removed (T-J8US), D-0004 reconciled with S-0005 (T-RXUK), and the read-side reads rebased onto markdown-contract (T-W7D5, T-1W6P, T-GOY0). 17/17 members closed.
markdown-util tier-0 extractionmarkdown-util tier-0 extraction0.5.1Delivered. packages/rust/markdown-util/ exists at tier 0 with no non-dev dependencies, holding the byte-exact split/compose and the NoteShape/Split fidelity types; determined-vault re-exports them and its eight sibling crates stayed green; the D-4QGN framing corpus (tests/fixtures/conformance.json, 24 fixtures) runs against the crate and, because a peer TypeScript port reuses the same file, against both language arms. Every in-tree Rust splitter converged — apps/ontological-legacy, determined-polish (via the vault re-export), and the sdlc desktop reader ([[T-8K2M-converge-sdf-desktop-frontmatter-reader]], shipped 2026-07-31 and closed by this audit) — and the behaviour-sensitive ontological migration carries the named before/after fixture. Two documented exemptions, both deliberate and annotated in code: determined-authoring keeps its own BOM/CRLF-tolerant splitter pinned to a Node-regex golden, and apps/legacy-polish’s vaultpolish-core is declared a frozen reference tree rather than a migration source. version was assigned by the 2026-08-16 milestone audit from the delivery date (2026-07-31) to preserve roadmap order; no release tag was cut for it.
Milestone & orchestration: group, stack, and parallelize task executionMilestone & orchestration: group, stack, and parallelize task executionSuperseded by [[D-VSLI-distributed-work-runner-architecture]]. Of the four success criteria, one shipped and three describe a shape the architecture replaces. Guided milestone definition shipped as /sdlc:milestone-new. Extracting a milestone’s hand-maintained tasks: list as the execution queue contradicts implementation-ledger phase C2, where milestone rosters become derived views and hand-maintained checklists retire — there is no list left to extract. Stacked-PR sequencing and parallel-PR-by-file-overlap selection become the phase E3 scope-conflict filter: scope claims stamped into the lease at claim, adjudicated pairwise by intersect, run by the engine on every dispatch rather than chosen per-batch by an operator, with dependency satisfaction as its own filter rather than a hand-built PR stack. No member tasks were ever scheduled against this milestone, so nothing is stranded by closing it.
Monorepo restructure & dashboard migrationMonorepo restructure & dashboard migrationClosed partial: the monorepo half delivered in full, the dashboard’s packaging half stopped being wanted. Delivered — moon drives the workspace over Bun and Rust with justfile and lefthook intact and apps//packages/ts//packages/rust/ all live; the Astro site builds under Bun; the four-source active-work view (lease refs, task/milestone entities, local working state, GitHub PR status) ships in dashboard/server.ts; the generated typed client survives as packages/ts/dashboard-client and is what every read goes through; and [[S-0008-apps-consume-substrate-through-published-surfaces]] is open/active with its import-discipline validator wired into lefthook. Superseded — [[D-0018-sdf-control-plane-app]] excised apps/dashboard on 2026-07-16 and overrode D-0013’s Vite+Vue pick, so the SPA criterion is met in substance by SDF (Tauri 2 + Nuxt 4, [[M-5EEX]]) rather than by the app this milestone named; [[T-JDEV-dashboard-build-into-plugin]] and [[T-CKC1-tauri-desktop-wrapper]] closed superseded with it. The one genuinely unmet criterion is the committed drift-gated web-dist: it was declared moot rather than deferred — no web-dist exists, INDEX_HTML was kept as the legacy fallback instead of retired, and whether the plugin ships any consumer web UI at all is now an open question owned by D-0018, not by this milestone. Wave 4’s polyglot validation was promoted out exactly as the body anticipated, into [[M-0014]] and [[M-5EEX]]; the workspace is polyglot well past two ecosystems.
Multi-harness control plane — canonical model + four targetsMulti-harness control plane — canonical model + four targets0.3.4Delivered by all five member tasks. HarnessModelSchema (v2) is host-neutral and markdown-contract-validated; deriveHarnessModel / importClaude bootstrap it from the live Claude surface with an import→export→import identity test; harness export <target> emits the full native surface for claude, codex, cursor and gemini, with json as a fifth interchange target; and examples/export-all.ts builds one model and reaches every target, pinned by tests. The only Claude asymmetry left is harness install claude, which this milestone’s Out-of-scope section explicitly permits. The code moved twice since the tasks shipped — the model and exporters now live in packages/ts/agent-plugin/, the CLI verbs in solutions/ontological/lib/services/harness/ops/ — so touchpoint paths in the member tasks read as missing without having regressed. Two housekeeping items ride along rather than block: [[C-HRNS-multi-harness-control-plane]] is still open/planned and carries no locations[] anchors, and conventions/harness-model.md still cites the pre-extraction model path. Publishing @sksizer/agent-plugin to npm is tracked separately on [[B-APKG-publish-path-resolve-agent-plugin-dependency]]. version was assigned by the 2026-08-16 milestone audit from the delivery date (2026-07-19) to preserve roadmap order; no release tag was cut for it.
Op-substrate full sweep: capabilities born in libOp-substrate full sweep: capabilities born in lib0.2.0Completed 2026-06-06. 20/20 member tasks shipped across 24 PRs (#298-#327): the path[] op substrate (D-H7FS), every capability ported to lib ops on the 11-visible/4-hidden-noun surface, all callers codemodded to the sdlc CLI, plugin/scripts + plugin/validators + cli/lease_cli deleted behind the legacy-path guard, lefthook gates live, site reference + narrative docs regenerated against shipped reality. Exit criteria verified on main: 1322/0 tests, zero legacy refs, zero lib-to-skills imports, LEGACY_NOUNS=[backlog].
Principles: the bootstrap layerPrinciples: the bootstrap layerSuperseded by [[M-K7DP-initial-product-definition]], which reframed the construction-sequence milestones around product releases and took “Principles published” as one of its own success criteria. The content this milestone existed to produce did ship: all eleven principles it indexed exist as P-entities under docs/planning/principles/, ten are open/published (only [[P-0011-avoid-deferral-for-simple-tasks]] is still draft), and the corpus has since grown a twelfth ([[P-0012-rust-core-adapters-as-needed]]) and been reconciled against [[D-VSLI-distributed-work-runner-architecture]]. Its three open scope rows are done too — P-0006 and P-0007 were authored, and the related: cross-reference pass landed. Closed superseded rather than done because the milestone was never a product release and carries no version; the deliverable landed, the container did not survive.
Retire invariants.yaml: adopt markdown-contract text constraints for skill-proseRetire invariants.yaml: adopt markdown-contract text constraints for skill-prose0.3.0Completed 2026-07-04. Replaced the bespoke invariants.yaml SKILL.md prose linter with a markdown-contract contract, so skill-prose runs on the same engine as the entity corpus. All six member tasks shipped: T-3TAJ (the vendored mc 0.2.0 pin carries requires/forbids/textRule, #619), T-FQFJ (authored the per-skill SKILL_PROSE_REGISTRY contract, #629), T-6OS7 (rewired sdlc gate skill-prose onto it, #630), T-LNHL (deleted the 534-line _skill_prose_core.ts matcher, #635), T-UDY1 (retired the 14 invariants.yaml sidecars, #642), T-DNGZ (repointed standards/notes docs, #643). Verified on main: _skill_prose_core.ts gone, _skill_prose_contract.ts present, 0 invariants.yaml sidecars, sdlc gate skill-prose green on the real corpus (35 skills checked, 14 covered, no violations).
SDF control-plane app — scaffold to safe controlsSDF control-plane app — scaffold to safe controls0.3.3Delivered by all six member tasks (PRs #769, #770, #772, #773, #774). The app ships with check/build/dev/web moon tasks wired into .github/workflows/sdf-ci.yml; apps/dashboard is deleted and just dev drives SDF; the ontogen-generated HTTP, IPC, MCP and TS-client trees are committed and double-gated by sdf:codegen-drift and sdf:schema-parity; the read panels sit on refs/sdlc/tasks, the seven-value pr-check verdict enum, and a cursored tail of .sdlc/orchestrator-log.md; and mutating routes require x-platform-token while reads pass tokenless. Two notes for a reader: the body still says apps/sdf, but the app now lives at solutions/ontological/desktop/ (moon project id still sdf); and the [[D-VSLI-distributed-work-runner-architecture]] redirect this milestone needed — SDF as a day-one consumer of engine v0’s status API, landing as implementation-ledger phase E7 rather than inside this arc — is already applied to the Out-of-scope bullet, so nothing about D-VSLI blocked the close. version was assigned by the 2026-08-16 milestone audit from the delivery date (2026-07-19) to preserve roadmap order; no release tag was cut for it.
SDLC distribution revamp — apps/sdlc/ app + compiled binarySDLC distribution revamp — apps/sdlc/ app + compiled binary0.3.1Delivered. SDLC is self-contained and the compiled-binary channel exists end to end: scripts/build-binary.ts cross-compiles five targets with an embedded asset tar, scripts/build-npm-wrapper.ts assembles the main package plus five os/cpu-gated platform packages, and .github/workflows/release.yml runs a pack → clean-install → run smoke on every PR and tag. The plain-Node world is genuinely deleted — no build-artifact op, no runtime-agnostic gate. Three caveats a reader should have: the milestone’s apps/sdlc/ literal is stale, since the tool moved on to solutions/ontological/ (the D-0001 end state) — the goal landed, the address changed; the artifact has never actually been published (NPM_TOKEN is absent and the latest tags predate the channel), so “installs and runs” is proven by CI smoke rather than by a real consumer; and the npm channel’s entry point is a Node CJS shim, so only the binary itself is runtime-free. brew/curl stay deferred. version matches solutions/ontological/package.json and the v0.3.1 tag current when the channel landed. Not superseded: rewriting the sdlc CLI in Rust ([[D-VSLI-distributed-work-runner-architecture]] implementation-ledger phase C5) is anticipated, not decided, and closing here records what shipped rather than extending toward it.
Shared app-frame across determined and the SDLC dashboardShared app-frame across determined and the SDLC dashboard0.4.0Extracted the generic app-frame (@sksizer/app-frame) out of @determined/shell, re-homed @determined/shell as a thin adapter with the 21 products at parity, and migrated the SDLC dashboard onto the frame (nav modules via defineModule, a SettingsTransport adapter, the DAppShell layout, and dashboard —d-* token overrides). Both front ends now run one shared shell; all nine member tasks are closed.
Task plane split — execution state to the lease substrateTask plane split — execution state to the lease substrateImplementation-ledger phase E2 of [[D-VSLI-distributed-work-runner-architecture]] delivered the plane split in one change instead of the seven-stage expand/cutover/contract staging this milestone planned. in-progress[/blocked] is never written to frontmatter again, append_pr_url.ts is deleted, the readers went lease-aware, and the reconciler is a live level-triggered controller. All seven member tasks are closed. Schema v6 and the v5-to-v6 sweep did not ship ([[T-11QZ-task-schema-v6-contract-sweep]]): the controller has to keep healing files that still carry the in-progress* values, so the enum outlives the sweep that removes them from the corpus.
TypeScript conversion of current systemTypeScript conversion of current system0.1.0-alphaDelivered via the en-masse TypeScript migration (single long-lived branch, one cutover PR) per [[D-0006-typescript-substrate]]. The entire plugin substrate — lease library (incl. byte-identical canonical_json), validators, the task/backlog/lease CLI nouns + unified sdlc dispatcher, all scripts, model migrations, and skill helpers — was ported to TypeScript under a local parity gate, with the Python substrate deleted in the cutover commit. Runtime is Bun (Node fallback documented in install-check).
yaml-splice extraction and writer migrationsyaml-splice extraction and writer migrations0.5.0Complete. yaml-splice extracted (T-3MZD / #1063), adopted by the six Rust consumers (#1064) and — via a WASM/TypeScript binding that emerged as a prerequisite (D-W4SM / T-820W / #1074) — by the SDLC frontmatter writers (T-68IB / #1081). The four field-edit writers now edit frontmatter through span-preserving editYaml; the whole-document generators stay on the canonical discipline. All success criteria and deliverables met.

The registry was built so one op projects into many doors, and the projection rules are already fixed — CLI segments verbatim, MCP tool name by underscore-join, HTTP route by path with method by verb class (D-H7FS-op-substrate-surface §5). The CLI is the one shipped door; building the MCP and HTTP servers against the same generated tool/route set is the natural next step, and the truest test of the harness-agnostic claim. Until a non-Claude door actually drives the ops, the claim is structural, not proven.

task transition (T-902K) moves the lifecycle transition itself onto the registry, with the commit as a declared side effect — so the authoritative state change and the git write are one op, not a skill remembering to do both. It sits flat on the task noun beside create/update/sort, per the surface decision.

The four cross-entity ops (entities audit|validate|migrate|check-identifiers) register today via an explicit barrel import, because model/ops/ is not a discovery-walk root. T-U72C is the open question of whether to promote it to one — removing the hand-maintained barrel — without admitting non-op modules to the walk.

D-0007 left this as an open question: how deterministic multi-step workflows are declared and how they reference ops. It would be a composition layer over the registry — control flow, no LLM — not a parallel system. Several skills today are coarse deterministic sequences with a single human-judgment seam; those are the candidates a workflow engine would absorb.

A cluster of backlog items circles the same tension: task status: is a frontmatter cache of a fact the lease ref owns. Whether to make the event log primary with frontmatter as a derived cache (B-M9JX, B-HUT2), and what control plane backs it (B-622T), is unresolved direction, not committed work.

Standards and principles can drift from the code they describe. Edit-time standard enforcement (B-J2KF), a standards/principles drift-audit skill (B-M9QZ), and validating markdown body structure by applying a schema to its AST (B-8FL9) are the threads here.

Noted but not committed-to. Most live in the backlog and get triaged when they become relevant.

  • Deployment of this docs site (GitHub Pages, Vercel, Netlify, or a custom domain) — it builds locally today.
  • Evals for skills (B-5PY9) — a deterministic harness exercising each skill’s happy path plus one breakage.
  • Scheduled / recurring tasks (B-1NN4).
  • Custom Starlight theme / branding; multi-version docs; i18n.
  • CI workflow on push (lint / build / deploy); automating changelog generation from git history.
  • A web UI for editing planning artifacts. The plain-markdown floor is the point; editors are downstream.
  • A hosted SaaS version. This is personal software.
  • Proprietary issue trackers as a primary store. The filesystem is the primary store; bridges to other systems are read-only views.

This page is generated by sdlc docs generate site from the milestone corpus and the static narrative above. The milestone tables track the live entities; the narrative is hand-authored and reviewed as code. If something here doesn’t match what plugin/ actually does, that’s a bug — file it.