Skip to content

Standards

Standards, projected from standard entities. Edit a standard entity and regenerate.

IdTitleSummary
Applications consume the substrate only through published surfacesApplications consume the substrate only through published surfaces- Application code under apps/ and shared libraries under packages/<ecosystem>/ reach SDLC capability only through a published surface — the sdlc CLI, a service’s HTTP/JSON API, or an API library (generated or explicitly authored) in packages/<ecosystem>/ — never by importing the substrate (solutions/ontological/lib/, later src/) directly. The dependency arrow points inward, never outward into a harness, and never down into a domain from a domain-blind component.
Capabilities are born in lib; co-locate only skill glueCapabilities are born in lib; co-locate only skill glue- A capability — entity CRUD, policy checks, audits, anything general by nature — is born in solutions/ontological/lib regardless of caller count; only skill-specific glue co-locates with its skill, promoted to a shared home when a second real caller appears.
Code review rubricCode review rubric- A diff to any source file in this repo is judged on eight dimensions — functions, modularity/boundaries, duplication, comments, structure, naming, dead code, tests — each scored with the violation / tension / drift severities sdlc verify changes already emits, never an invented scale.
Composition spectrum — one op registry, deterministic-to-LLM placement, path[] surfaceComposition spectrum — one op registry, deterministic-to-LLM placement, path[] surface- Build every capability on a spectrum from pure-deterministic to near-pure-skill: place it at the leftmost point that fits, and favor moving left as it matures ([[P-0001-prefer-deterministic-over-llm]]). The deterministic-tail / LLM-head split is one point on that spectrum, not the only shape. The sdlc CLI is one generated adapter over a single op registry. Deliberate, bounded child-LLM steps are legitimate (with guardrails); only redundant re-interpretation of the same input is discouraged.
Deterministic, general extension pointsDeterministic, general extension points- Upstream skills expose stable, general hook points but never know this repo’s SDLC shape; move stable prose into deterministic code and plug local behavior into the same extension system a downstream consumer would use.
General skills stay general — no SDLC-project carve-outs in upstream codeGeneral skills stay general — no SDLC-project carve-outs in upstream code- A change under solutions/ontological/ must help any consuming project, not just this dev repo; SDLC-only carve-outs live under .sdlc/.
Markdown formatting for docs and skill proseMarkdown formatting for docs and skill prose- Markdown in scope follows one settled formatting rule set — ATX headings, - bullets, explicit numbering, wikilinks for entities, language-tagged fences, hand-formatted tables, quoted-schema_version frontmatter, no raw HTML, prose wrapped at 100 — chosen for Obsidian-first authoring in [[D-0008-markdown-standard]].
Moon project ids — derive by default; the crate holds the bare nameMoon project ids — derive by default; the crate holds the bare name- Moon resolves a project by two names: an id (directory name, or explicit id:) and an alias taken from the manifest — Cargo.toml’s package name for Rust, package.json’s for JS/TS. Both work in moon run.
Research third-party products by observationResearch third-party products by observation- Research a third-party product by running it and recording what it does. Never unpack, decompile or read its shipped source, and never commit reproduced source into this repo.
Review response policyReview response policy- A responding session buckets every review comment into fix, decline, or verify-first, minimizes churn, and stops once a PR hits orchestrator.review.max_rounds.
The baseline task vocabulary — one set of verbs, owned in three layersThe baseline task vocabulary — one set of verbs, owned in three layers- Ten moon task names, the same in Rust and TypeScript: check, typecheck, lint, lint-fix, fmt, fmt-check, test, build, clean, dev.
The shape of a standalone CLI — one io seam, one parser, one exit-code ruleThe shape of a standalone CLI — one io seam, one parser, one exit-code rule- A standalone CLI exports main(argv, ctx) and never exits the process itself; the bin shim owns the exit.
UI surfaces consume the Determined design languageUI surfaces consume the Determined design language- Every live UI surface styles itself through the Determined design language: --d-* tokens, dSemantics intents, and D* components — never raw palette classes, dark: variants, or Nuxt UI color/variant literals.
Vite pre-bundling under bun’s isolated linker — one root cause, three failuresVite pre-bundling under bun’s isolated linker — one root cause, three failures- Bun’s isolated linker hoists nothing, so a file:-wired host resolves none of a linked package’s dependencies from its own node_modules. Vite resolves optimizeDeps entries from the host, so a layer cannot fix its consumers by asking — the host has to be able to resolve the name itself.

Emerging / retired:

IdTitleSummaryState
Application state lives in three planes, and each category has one homeApplication state lives in three planes, and each category has one home- Every persisted byte belongs to exactly one of three planes — the content plane (the user’s own data, wherever the user put it), the machine-local plane (what an application knows about this machine and about that data), and the ephemeral/runtime plane (what dies with a process) — and a category of state names its plane before it names a path.open/draft
Authoring SKILL.md: direct instruction, equipped for reliabilityAuthoring SKILL.md: direct instruction, equipped for reliability- A SKILL.md is the instruction an agent executes, not documentation about the skill — and its reliability comes from how it is phrased and how it is built. Phrase each line as direct, positive instruction with surgical rationale; equip the skill with a triggering description, freedom matched to fragility, decomposed steps with a verification step, progressive disclosure, tested formatting, examples where output matters, and an eval. Every rule carries the evidence tier it rests on.open/draft
Desktop apps are tested web-first in a scratch rootDesktop apps are tested web-first in a scratch root- A desktop app’s e2e suite runs the web build against the app’s real backend over HTTP, inside a scratch root that FLEET_ROOT sets up, launched by @sksizer/app-harness.open/draft
Every entity ships a complete definition surfaceEvery entity ships a complete definition surface- Every entity directory ships a fixed surface — schema.ts (the Zod frontmatter schema AND the markdown-contract body grammar, exported together), body-template.eta, definition.md, plus the optional obsidian-index.yaml — and is discoverable by its type: directory name, registration in the entity schema registry, and a [[D-ORMG-data-model]] entry.open/draft
UI changes ship a human-reviewable screenshot indexUI changes ship a human-reviewable screenshot index- A UI change ships screenshots of every surface it touches, organized for a human first: grouped by surface or category, captioned, with before and after where a surface changed.open/proposed
UI work reuses components, ships stories and screenshot baselinesUI work reuses components, ships stories and screenshot baselines- UI work in the determined suite ports an approved mock before it builds anything new, gives every new or changed component Storybook stories and a screenshot baseline, and shows reviewers before/after and mock/built screenshots.open/proposed