Verifiable Decomposition Spine (VDS)
Last Verified: 2026-08-31
Status: Binding when POL-WORKFLOW-VDS is active
Glossary (durable titles): Verifiable Decomposition Spine (VDS) Β· acronym VDS Β· CLI CLI Command: workflow vds
Glossary ids: project-local GLS-* β pin in verifiable_decomposition_customization.yaml glossary: or resolve at runtime by title (do not hardcode CAS ids in Go).
Policy: POL-WORKFLOW-VDS (durable)
Spine profile: docs/quality/verifiable_decomposition_spine_profile.yaml
Customization (per project): docs/quality/verifiable_decomposition_customization.yaml
Purpose
Agents can claim βdoneβ with no consequences. VDS makes every collaborative activity advance only through independently, objectively verifiable chunks. Chat is never evidence.
This contract is project-agnostic: the spine (stages, chunk contract, hard gates, forbidden theater) is rigid. Customization (lint commands, scheduler vs terminal tests, style, CI names) lives in a separate file and may not remove gates.
Relationship to CAP and convergence sessions
| Mechanism | Role |
|---|---|
| VDS | Universal work hygiene for intent β design β implement β integrate β operate |
| CAP | Priority / whats-next progression; must consume VDS evidence to advance stages |
convergence_session |
Hypothesis / desired-end-state loops; chunks still need VDS gates |
verification_matrix |
Preferred accountability surface (see POL-AGENT-003 / matrix accountability) |
CAP and CVS are consumers of VDS, not substitutes for it.
Rigid stages
intent_captureβ vision, mission, goals, constraintsdesignβ requirements, criteria, tests, backlog, agent tasks/instructionsimplementβ code/docs with quality and unit evidenceintegrate_verifyβ integration/smoke, environment, CIoperate_releaseβ DevOps, security, performance, publish/ops
Do not add, remove, or rename stages without a policy version bump and human approval.
Chunk contract (minimum)
Every unit of work that may be called βdoneβ MUST record:
| Field | Meaning |
|---|---|
chunk_id |
Stable id for the chunk |
stage |
One of the five stage ids |
claim |
One verifiable claim (short) |
rubric_ref |
Criteria / matrix row / rubric anchor |
dsl_checks |
Machine predicates (see catalog) |
evidence_refs |
Re-runnable footprints (job id, log path, object id, commit SHA) |
independent_verify |
yes only after re-run of dsl_checks by automation or a second party |
Rules:
- VDS-R1: One chunk = one claim; later phases may not βproveβ earlier ones.
- VDS-R2: Narrative β evidence.
- VDS-R3: Stage advance only when all chunks in that stage have
independent_verify=yesor a humanwaiver_ref. - VDS-R4: Customization changes how checks run, never whether gates exist.
Customization (allowed)
Projects MAY set in verifiable_decomposition_customization.yaml:
- Code style / lint / formatter commands
- Test execution mode (
scheduler|foreground|ci|hybrid) and timeouts - Process-data mutation mode (
cli_onlyvsallow_direct) - CI check names, security scanners, performance budget docs
- Auto-merge conditions and waiver authority
Projects MUST NOT:
- Delete spine stages or hard gates
- Treat empty
dsl_checksas green - Use customization to redefine βdoneβ as agent self-report
DSL catalog (portable predicates)
Evaluators (human script, CI, future engine) resolve these predicates. Implementations may map names to local commands via customization.
| Predicate | Pass criterion |
|---|---|
object_exists:{id} |
Object load succeeds |
path_exists:{relpath} |
Path exists under project root (file or directory) |
field_nonempty:{id}:{field} |
Field present and non-empty |
criteria_linked_or_acceptance_present:{id} |
Linked CRIT or structured acceptance present |
git_diff_nonempty_or_waiver |
Diff or waiver for no-op claims |
lint_ok_per_customization |
All code_style.lint_commands exit 0 |
tests_ok_per_customization |
Per test_execution.mode: job+log green, or CI green, or allowed foreground probe green |
smoke_or_integration_evidence_present |
Named smoke/integration evidence in evidence_refs |
ci_required_checks_green_or_na |
Listed CI checks green, or list empty (na) |
security_gate_ok_or_na |
Security commands green, or none configured |
performance_gate_ok_or_na |
Perf evidence present, or none configured |
publish_ack_present_if_public |
Fail-closed ACK when publishing public surfaces |
Projects may add predicates; they may not skip the chunk contract.
Forbidden theater
- Claiming done with only chat text
- Empty receipts / matrices with no re-runnable
evidence_refs - Advancing CAP / marking BLI complete / closing CVS without VDS gates for in-scope chunks
- Ghost health / fabricated metrics to force green
- Waivers without a human-authored
waiver_refobject
Enforcement (teeth)
- Policy type:
standardβ mandatory for agent and human collaborators. - Default deny: Unverified βdoneβ is a policy violation.
- Stage gates: Orchestrators (CAP, priority plans, release checklists) MUST refuse advance without VDS completion for the stage.
- PR / merge: Prefer blocking checks that require matrix/chunk evidence when automation exists; until then, reviewers reject narrative-only completion.
- Waivers: Human-only; recorded; time-bounded when possible.
- Portability: New projects copy spine + empty customization; fill customization before first implement-stage work.
- Automation:
zqk workflow vds evaluateis the DSL evaluator. Prefer exit code + JSON/agent-promptover chat claims.enforcement.automatedonPOL-WORKFLOW-VDSis true when this binary is the project gate. After a green evaluate,zqk workflow vds evaluate --apply-verifypersistsindependent_verify=yeson PASS/WAIVED chunks in the chunks YAML.
Agent operating rule
Before reporting progress as complete for any stage:
- Name the stage and chunk_id(s).
- Show rubric_ref + dsl_checks.
- Show evidence_refs (paths/ids that another agent can re-check).
- Confirm independent_verify (or
waiver_ref).
If any item is missing, the work is not done.
CLI (fluent evaluator)
zqk workflow vds checklist --format json # stages + culture
zqk workflow vds checklist --format agent-prompt # markdown brief
zqk workflow vds init # scaffold chunks file
zqk workflow vds evaluate --format json # exit 0 only when PASS/WAIVED
zqk workflow vds evaluate --format agent-prompt # pasteable gate report
zqk workflow vds evaluate --run-commands # also run lint/scan from customization
zqk workflow vds evaluate --persist # write .zqk/state/vds/last_evaluate.json
zqk workflow vds project --provider cursor --write # regenerate export (id from vendor_providers)
zqk workflow vds project --check # drift gate (default provider)
zqk workflow vds project --list # configured providers
Vendor projection contract: KERNEL_VENDOR_INSTRUCTION_PROJECTION.md ([REDACTED-ID]).
Default chunks file: docs/quality/vds_chunks.yaml
Schemas: zqk_vds_evaluate_v1, zqk_vds_checklist_v1
Vendor instruction projection (tracked debt)
Hand-editing Cursor .mdc (or peer IDE rule files) when kernel intent changes inverts
POL-ARCH-AGENT-STATE-EXPORT: the Knowledge Kernel is SSOT; vendor files are export
targets. Today AGENT_CONTEXT_REFRESH.md is partially generated, but .mdc content is
still often authored by agents.
Tracked: [REDACTED-ID] β kernelβvendor instruction projection
(Cursor .mdc and peers). Until that lands, treat .mdc updates as temporary mirrors of
POL-WORKFLOW-VDS / VDS glossary / this contract, not as the authoring plane.
Init checklist (any project)
- Ensure
POL-WORKFLOW-VDS(or equivalent) is active in the project kernel. - Copy spine profile + customization template into the project.
- Fill customization (
lint_commands,test_execution.mode, etc.). - Bind CAP/CVS/matrices as consumers if those tools exist.
- Refuse agent βdoneβ claims that omit VDS evidence.