9.8 KiB
status, doc_type, last_reviewed, source_of_truth
| status | doc_type | last_reviewed | source_of_truth | ||||||
|---|---|---|---|---|---|---|---|---|---|
| active | feature | 2026-05-10 |
|
Contracts
Scope
This document defines the current machine-facing contracts exposed by Truthmark: the config file shape and the CLI result envelope.
Config Contract
Truthmark loads .truthmark/config.yml and validates it against the current schema.
Current fields:
version: must be1platforms: optional list of agent harnesses to initialize; defaults to all supported platformsdocs.layout: currentlyhierarchicaldocs.roots: named canonical doc rootsdocs.routing.root_index: root area index pathdocs.routing.area_files_root: child area route directorydocs.routing.default_area: default child route file basename used by scaffolddocs.routing.max_delegation_depth: currently must be1authority: ordered list of canonical doc paths or globsinstruction_targets: files that receive installed instructions; defaults toAGENTS.mdfrontmatter.required: frontmatter fields that produceerrordiagnostics when missingfrontmatter.recommended: frontmatter fields that producereviewdiagnostics when missingignore: glob patterns excluded from relevant checks and routing logicrealization.enabled: whether doc-first realization is enabled
The default scaffolded authority list includes:
docs/truthmark/areas.mddocs/truthmark/areas/**/*.mddocs/ai/**/*.mddocs/standards/**/*.mddocs/architecture/**/*.mddocs/features/**/*.md
Supported platforms values are:
codexopencodeclaude-codegithub-copilotgemini-cli
There is no .truthmark/local.yml contract in the current implementation. User preferences that affect generated repository behavior must be expressed through committed config or the generated surfaces cannot be reproduced by another checkout.
Command Result Envelope
truthmark config, truthmark init, and truthmark check return the same JSON envelope when run with --json.
Current shape:
command: string command namesummary: human-readable summary stringdiagnostics: array of diagnostic objectsdata: optional command-specific object
Diagnostic fields:
category: one ofconfig,authority,frontmatter,links,area-index,coverage,truth-sync,realization,doc-structure, orgenerated-surfaceseverity: one ofinfo,action,review, orerrormessage: human-readable detailfile: optional repository-relative file patharea: optional area name fromdocs/truthmark/areas.mddata: optional machine-readable extras
Human-rendered output is intended for people. JSON output is the machine-facing contract.
Config Result Data
truthmark config --json writes only .truthmark/config.yml unless --stdout is used.
Current config result data fields include:
repositoryRootworktreePathbranchNameisDetachedisUnborn
When --stdout is used, data also includes:
pathcontent
Init Result Data
truthmark init --json currently returns these data fields:
repositoryRootworktreePathbranchNameisDetachedisUnborn
The command emits action diagnostics describing whether each scaffolded file was created, updated, or unchanged. Generated realization skill files use the realization diagnostic category.
truthmark init requires an existing valid .truthmark/config.yml. It does not create config; truthmark config is the required first step in a new repository.
Configured instruction_targets are generated or refreshed independently of platform-specific surfaces, so AGENTS.md remains managed even when claude-code is not in platforms.
Generated Truth Structure, Truth Document, Truth Sync, and Truth Check surfaces and the managed AGENTS.md block use the truth-sync diagnostic category.
Current agent-native scaffold targets include:
.codex/skills/truthmark-structure/SKILL.md.codex/skills/truthmark-structure/agents/openai.yaml.codex/skills/truthmark-document/SKILL.md.codex/skills/truthmark-document/agents/openai.yaml.codex/skills/truthmark-sync/SKILL.md.codex/skills/truthmark-sync/agents/openai.yaml.codex/skills/truthmark-realize/SKILL.md.codex/skills/truthmark-realize/agents/openai.yaml.codex/skills/truthmark-check/SKILL.md.codex/skills/truthmark-check/agents/openai.yaml.claude/skills/truthmark-structure/SKILL.md.claude/skills/truthmark-document/SKILL.md.claude/skills/truthmark-sync/SKILL.md.claude/skills/truthmark-realize/SKILL.md.claude/skills/truthmark-check/SKILL.md.opencode/skills/truthmark-structure/SKILL.md.opencode/skills/truthmark-document/SKILL.md.opencode/skills/truthmark-sync/SKILL.md.opencode/skills/truthmark-realize/SKILL.md.opencode/skills/truthmark-check/SKILL.mdAGENTS.mdCLAUDE.md.github/copilot-instructions.md.github/prompts/truthmark-structure.prompt.md.github/prompts/truthmark-document.prompt.md.github/prompts/truthmark-sync.prompt.md.github/prompts/truthmark-realize.prompt.md.github/prompts/truthmark-check.prompt.mdGEMINI.md.gemini/commands/truthmark/structure.toml.gemini/commands/truthmark/document.toml.gemini/commands/truthmark/sync.toml.gemini/commands/truthmark/realize.toml.gemini/commands/truthmark/check.toml
Generated SKILL.md files use closed YAML frontmatter with name, description, argument-hint, user-invocable, and truthmark-version fields so Codex-style, Claude Code, and OpenCode-style skill indexers can parse every generated workflow surface. Generated Copilot prompt files use .github/prompts/*.prompt.md files with agent and description frontmatter so supported Copilot IDEs can expose /truthmark-* prompts. Generated Codex metadata includes a truthmark.version marker plus truthmark.refresh_command: "truthmark init". Managed instruction blocks also render the Truthmark package version, and package.json is the single maintained version source for those markers. Generated Gemini command files use project-scoped TOML custom commands so truthmark init can install /truthmark:structure, /truthmark:document, /truthmark:sync, /truthmark:realize, and /truthmark:check alongside GEMINI.md. Re-running truthmark init after a package upgrade refreshes configured committed surfaces and exposes staleness through ordinary Git diffs. Removing a platform from config stops future refreshes for that platform; it does not delete previously generated files.
Check Result Data
truthmark check --json returns:
branchScopetruthVisibility
branchScope contains:
repositoryRootworktreePathbranchNameheadShaidentityrelevantFileHashes
For normal branches, identity is branch name plus HEAD SHA. For detached checkouts, identity is the commit SHA. worktreePath remains separate so callers can distinguish parallel worktrees for the same repository.
relevantFileHashes currently tracks hashes for:
.truthmark/config.yml- the configured root route index
- configured child route files under the configured area-files root
truthVisibility contains:
routePrecision.leafAreaCountroutePrecision.broadAreaCountunmappedSurfaceCountstaleGeneratedSurfaceCountsyncCompletenessIssueCounttopologyPressureCount
Current Diagnostic Emission Notes
- ordinary
truthmark checkemitsconfig,authority,frontmatter,links,area-index,coverage,doc-structure, andgenerated-surfacediagnostics. truth-syncandrealizationcategories exist for init and generated workflow reporting, but ordinarycheckdoes not emit workflow payloads.truthmark checkdoes not support--workflow truth-syncin the current contract.- Missing authority files are
errordiagnostics. - Authority globs and code-surface globs that match nothing are
reviewdiagnostics. - Coverage diagnostics discover unmapped functional code across common code roots with the same path classifier used by Truth Sync. V1 coverage must include Go, Python, C#, Java, JavaScript, TypeScript, frontend roots, monorepo app or package roots, Terraform, Kubernetes manifests, CI workflows, OpenAPI or Swagger, GraphQL, and protobuf surfaces within those roots.
doc-structureemitsreviewdiagnostics when configured architecture or current feature docs are missing activeProduct DecisionsorRationalesections.
Product Decisions
- The committed config file owns the documentation hierarchy contract, while route files own domain-to-doc mappings.
truthmark configandtruthmark initare separate contracts so repositories can review hierarchy before workflow installation.- Active decisions stay in the canonical doc they govern instead of in separate timestamped decision logs. Date active decisions inline when added or changed.
- The V1 user-facing CLI surface is limited to
config,init, andcheck; workflow verbs such assync,realize,structure,audit,packet,review,scan,doctor,build, andcontextare not top-level commands. gemini-cliinstalls both hierarchicalGEMINI.mdcontext and project-scoped.gemini/commands/truthmark/*.tomlcustom commands so Gemini users get the same explicit workflow entrypoints without adding top-level CLI verbs.
Rationale
Separating config from init keeps repository layout reviewable and predictable. Keeping decisions with the owning feature, contract, or architecture doc prevents agents from having to infer which historical note is still active.
Keeping workflow verbs out of the CLI preserves the agent-native model: installed skills and instruction blocks run the workflows, while the CLI installs and validates repository artifacts.