documentation-engine 0.3.1__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/workflows/ci.yml +2 -1
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/CHANGELOG.md +43 -1
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/PKG-INFO +19 -1
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/README.md +18 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/README.md +4 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/agent-contract.md +17 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/architecture.md +26 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/client-integration.md +27 -10
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/mcp-adapter.md +6 -0
- documentation_engine-0.5.0/docs/provider-artifacts.md +133 -0
- documentation_engine-0.5.0/docs/provider-snapshots.md +180 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/setup-guide.md +8 -0
- documentation_engine-0.5.0/examples/provider-snapshots/.docsystem.toml +30 -0
- documentation_engine-0.5.0/examples/provider-snapshots/docs/README.md +8 -0
- documentation_engine-0.5.0/examples/provider-snapshots/docs/service-contract.md +17 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/scripts/installed_cli_smoke.sh +70 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/__init__.py +1 -1
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/cli.py +300 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/config.py +31 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/federated_projection.py +2 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/projection.py +261 -5
- documentation_engine-0.5.0/src/docsystem/provider.py +449 -0
- documentation_engine-0.5.0/src/docsystem/provider_artifact.py +752 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/sections.py +16 -5
- documentation_engine-0.5.0/tests/test_provider.py +614 -0
- documentation_engine-0.5.0/tests/test_provider_artifact.py +324 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/adoption-finding.yml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/core-bug.yml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/docs-pattern-request.yml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/runtime-report.yml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/copilot-instructions.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/workflows/release.yml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.gitignore +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/AGENTS.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/CLAUDE.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/CONTRIBUTING.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/LICENSE +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/SECURITY.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/adopter-reporting.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/adoption.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/assets/context-reduction.svg +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/context-delivery.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/context-efficiency.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/delivery-traceability.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/document-profiles.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/execution-admission.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/execution-handoff.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/federation.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/graph-health.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/idea-intake.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/knowledge-promotion.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/local-state-safety.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/metadata-inventory.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/program-plans.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/releasing.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workspace-sources.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workstream-branching.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workstream-evidence.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workstream-lifecycle.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/execution-admission-request.json +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/execution-result.json +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/.docsystem.toml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/README.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/README.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/design.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/review.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/templates/document-template.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/idea-intake-request.json +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/workstream-branch-template.md +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/workstream-record.json +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/pyproject.toml +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/__main__.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/admission.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/catalog.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/change_plan.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/delivery.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/execution.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/federation.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/graph.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/health.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/intake.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/inventory.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/journal.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/lifecycle.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/maintenance.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/mcp_server.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/metadata.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/migration.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/profiles.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/program_plan.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/promotion.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/readiness.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/shared_finish.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/workspace.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/workstream.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_admission.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_catalog.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_change_plan.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_change_plan_cli.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_cli.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_cli_platform.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_config.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_context_cli.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_delivery.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_execution_handoff.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_federated_projection.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_federated_write.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_federation.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_graph.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_health.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_intake.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_inventory.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_journal.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_lifecycle.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_maintenance.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_mcp_adapter.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_metadata.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_migration.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_profiles.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_program_plan.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_promotion.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_readiness.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_references_cli.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_release_workflows.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_sections.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_vertical.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_workspace.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_workstream.py +0 -0
- {documentation_engine-0.3.1 → documentation_engine-0.5.0}/uv.lock +0 -0
|
@@ -83,7 +83,8 @@ jobs:
|
|
|
83
83
|
$env:TMP = $env:RUNNER_TEMP
|
|
84
84
|
$env:TEMP = $env:RUNNER_TEMP
|
|
85
85
|
uv run pytest tests/test_cli.py tests/test_cli_platform.py `
|
|
86
|
-
tests/test_context_cli.py tests/test_mcp_adapter.py tests/test_readiness.py
|
|
86
|
+
tests/test_context_cli.py tests/test_mcp_adapter.py tests/test_readiness.py `
|
|
87
|
+
tests/test_provider_artifact.py
|
|
87
88
|
|
|
88
89
|
- name: Installed CLI UTF-8 PowerShell smoke
|
|
89
90
|
shell: pwsh
|
|
@@ -4,6 +4,46 @@ All notable changes to Documentation Engine are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.5.0] - 2026-08-09
|
|
8
|
+
|
|
9
|
+
### Highlights
|
|
10
|
+
|
|
11
|
+
- Adopters can consume one complete, immutable and body-free provider artifact
|
|
12
|
+
without implementing Documentation Engine pagination or importing package
|
|
13
|
+
internals.
|
|
14
|
+
- Standalone verification binds provider identity, exact retained generations,
|
|
15
|
+
scope, completeness, ordered entity evidence and a deterministic digest while
|
|
16
|
+
rejecting corrupt, partial or incompatible artifacts fail closed.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Complete `traceability-provider-v1` snapshot and comparison artifacts hide
|
|
21
|
+
provider pagination from adopters, bind deterministic digests and can be
|
|
22
|
+
verified without project state while preserving the retained-generation
|
|
23
|
+
boundary of the paged provider contract.
|
|
24
|
+
|
|
25
|
+
## [0.4.0] - 2026-08-09
|
|
26
|
+
|
|
27
|
+
### Highlights
|
|
28
|
+
|
|
29
|
+
- External consumers can reconcile exact retained documentation generations
|
|
30
|
+
through a provider-neutral, privacy-safe contract without importing package
|
|
31
|
+
internals or reading generated projection files directly.
|
|
32
|
+
- Pinned comparison distinguishes content changes, relocation and genuine
|
|
33
|
+
entity absence while failing closed for unavailable, corrupt, unsupported or
|
|
34
|
+
incomplete provider evidence.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Opt-in, provider-neutral `provider snapshot` and `provider compare` commands
|
|
39
|
+
export bounded body-free observations from explicitly pinned immutable
|
|
40
|
+
generations and classify exact stable entities as relocated, changed,
|
|
41
|
+
missing or added.
|
|
42
|
+
- Projection schema 5 binds provider identity, visibility, advertised
|
|
43
|
+
capabilities, catalog completeness, coverage, document line counts and
|
|
44
|
+
explicit/generated anchor kind into the generation hash. Older generations
|
|
45
|
+
fail provider export as unsupported instead of receiving retroactive claims.
|
|
46
|
+
|
|
7
47
|
## [0.3.1] - 2026-07-19
|
|
8
48
|
|
|
9
49
|
### Fixed
|
|
@@ -197,7 +237,9 @@ documentation-engine` starts working only after the first successful release.
|
|
|
197
237
|
- Measured context-reduction methodology and a reproducible consumer-install
|
|
198
238
|
smoke test.
|
|
199
239
|
|
|
200
|
-
[Unreleased]: https://github.com/Jafa7/DocumentationEngine/compare/v0.
|
|
240
|
+
[Unreleased]: https://github.com/Jafa7/DocumentationEngine/compare/v0.5.0...HEAD
|
|
241
|
+
[0.5.0]: https://github.com/Jafa7/DocumentationEngine/compare/v0.4.0...v0.5.0
|
|
242
|
+
[0.4.0]: https://github.com/Jafa7/DocumentationEngine/compare/v0.3.1...v0.4.0
|
|
201
243
|
[0.3.1]: https://github.com/Jafa7/DocumentationEngine/compare/v0.3.0...v0.3.1
|
|
202
244
|
[0.3.0]: https://github.com/Jafa7/DocumentationEngine/compare/v0.2.0...v0.3.0
|
|
203
245
|
[0.2.0]: https://github.com/Jafa7/DocumentationEngine/compare/v0.1.2...v0.2.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: documentation-engine
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Provider-neutral structured Markdown documentation engine.
|
|
5
5
|
Project-URL: Repository, https://github.com/Jafa7/DocumentationEngine
|
|
6
6
|
Project-URL: Documentation, https://github.com/Jafa7/DocumentationEngine/tree/main/docs
|
|
@@ -225,6 +225,7 @@ task rather than one mandatory process:
|
|
|
225
225
|
| --- | --- | --- |
|
|
226
226
|
| Core retrieval | Discover, read and inspect context/impact | Default for routine work |
|
|
227
227
|
| Adoption | Connect or migrate an existing Markdown corpus | Setup and compatibility work |
|
|
228
|
+
| Provider reconciliation | Export or compare explicitly pinned, body-free generations | External consumers that retain stable documentation evidence |
|
|
228
229
|
| Governed delivery | Roadmaps, admission, handoff and lifecycle evidence | Multi-stage, delegated or risk-bearing work |
|
|
229
230
|
| Bounded mutation | Journaled managed-block synchronization and recovery | Explicitly approved mechanical writes |
|
|
230
231
|
| Multi-source | Workspace selection and federation | Deliberate cross-project documentation queries |
|
|
@@ -342,6 +343,11 @@ docsystem migrate . --apply
|
|
|
342
343
|
docsystem index . --write
|
|
343
344
|
docsystem changes .
|
|
344
345
|
docsystem changes . --json
|
|
346
|
+
docsystem provider snapshot GENERATION . --json
|
|
347
|
+
docsystem provider compare BEFORE AFTER . --json
|
|
348
|
+
docsystem provider export snapshot GENERATION . --output snapshot.json
|
|
349
|
+
docsystem provider export compare BEFORE AFTER . --output comparison.json
|
|
350
|
+
docsystem provider artifact verify snapshot.json --json
|
|
345
351
|
docsystem agent-instructions .
|
|
346
352
|
docsystem agent-instructions . --json
|
|
347
353
|
docsystem workspace list . --workspace /path/to/workspace
|
|
@@ -792,6 +798,18 @@ relations.
|
|
|
792
798
|
hashed over both the derived content and a fingerprint of the projection-
|
|
793
799
|
relevant configuration, then atomically selects the current generation.
|
|
794
800
|
`index` checks freshness and `changes` reports changed documents and sections.
|
|
801
|
+
Projects that expose immutable documentation evidence to another consumer may
|
|
802
|
+
opt into `[provider]` identity and use `provider snapshot` or `provider compare`
|
|
803
|
+
with explicit retained generation hashes. These commands never select the
|
|
804
|
+
current pointer implicitly, never return Markdown bodies or absolute paths, and
|
|
805
|
+
distinguish unavailable/corrupt provider state from a genuinely missing
|
|
806
|
+
entity. See [pinned provider snapshots](docs/provider-snapshots.md) for the
|
|
807
|
+
versioned JSON, relocation and bounded-pagination contract.
|
|
808
|
+
For a durable process boundary, `provider export` assembles those pages into
|
|
809
|
+
one complete immutable artifact and `provider artifact verify` checks it
|
|
810
|
+
without project state. See
|
|
811
|
+
[complete provider artifacts](docs/provider-artifacts.md). Artifact verification
|
|
812
|
+
does not compare exported files or extend the configured retention window.
|
|
795
813
|
`read`, `context` and `impact` serve from the verified projection when it is
|
|
796
814
|
current: verification re-hashes every included source byte-for-byte, checks the
|
|
797
815
|
configuration fingerprint, and reconstructs the generation hash from the shards,
|
|
@@ -208,6 +208,7 @@ task rather than one mandatory process:
|
|
|
208
208
|
| --- | --- | --- |
|
|
209
209
|
| Core retrieval | Discover, read and inspect context/impact | Default for routine work |
|
|
210
210
|
| Adoption | Connect or migrate an existing Markdown corpus | Setup and compatibility work |
|
|
211
|
+
| Provider reconciliation | Export or compare explicitly pinned, body-free generations | External consumers that retain stable documentation evidence |
|
|
211
212
|
| Governed delivery | Roadmaps, admission, handoff and lifecycle evidence | Multi-stage, delegated or risk-bearing work |
|
|
212
213
|
| Bounded mutation | Journaled managed-block synchronization and recovery | Explicitly approved mechanical writes |
|
|
213
214
|
| Multi-source | Workspace selection and federation | Deliberate cross-project documentation queries |
|
|
@@ -325,6 +326,11 @@ docsystem migrate . --apply
|
|
|
325
326
|
docsystem index . --write
|
|
326
327
|
docsystem changes .
|
|
327
328
|
docsystem changes . --json
|
|
329
|
+
docsystem provider snapshot GENERATION . --json
|
|
330
|
+
docsystem provider compare BEFORE AFTER . --json
|
|
331
|
+
docsystem provider export snapshot GENERATION . --output snapshot.json
|
|
332
|
+
docsystem provider export compare BEFORE AFTER . --output comparison.json
|
|
333
|
+
docsystem provider artifact verify snapshot.json --json
|
|
328
334
|
docsystem agent-instructions .
|
|
329
335
|
docsystem agent-instructions . --json
|
|
330
336
|
docsystem workspace list . --workspace /path/to/workspace
|
|
@@ -775,6 +781,18 @@ relations.
|
|
|
775
781
|
hashed over both the derived content and a fingerprint of the projection-
|
|
776
782
|
relevant configuration, then atomically selects the current generation.
|
|
777
783
|
`index` checks freshness and `changes` reports changed documents and sections.
|
|
784
|
+
Projects that expose immutable documentation evidence to another consumer may
|
|
785
|
+
opt into `[provider]` identity and use `provider snapshot` or `provider compare`
|
|
786
|
+
with explicit retained generation hashes. These commands never select the
|
|
787
|
+
current pointer implicitly, never return Markdown bodies or absolute paths, and
|
|
788
|
+
distinguish unavailable/corrupt provider state from a genuinely missing
|
|
789
|
+
entity. See [pinned provider snapshots](docs/provider-snapshots.md) for the
|
|
790
|
+
versioned JSON, relocation and bounded-pagination contract.
|
|
791
|
+
For a durable process boundary, `provider export` assembles those pages into
|
|
792
|
+
one complete immutable artifact and `provider artifact verify` checks it
|
|
793
|
+
without project state. See
|
|
794
|
+
[complete provider artifacts](docs/provider-artifacts.md). Artifact verification
|
|
795
|
+
does not compare exported files or extend the configured retention window.
|
|
778
796
|
`read`, `context` and `impact` serve from the verified projection when it is
|
|
779
797
|
current: verification re-hashes every included source byte-for-byte, checks the
|
|
780
798
|
configuration fingerprint, and reconstructs the generation hash from the shards,
|
|
@@ -31,6 +31,10 @@ link to that owner rather than repeat commands or policy.
|
|
|
31
31
|
recommendation, prerequisites and exact source-contract scope.
|
|
32
32
|
- [Compact context delivery](context-delivery.md) — lossless range
|
|
33
33
|
deduplication, inclusion reasons and diagnostics drill-down.
|
|
34
|
+
- [Pinned provider snapshots](provider-snapshots.md) — privacy-safe,
|
|
35
|
+
body-free export and comparison of explicit immutable generations.
|
|
36
|
+
- [Complete provider artifacts](provider-artifacts.md) — transport-neutral,
|
|
37
|
+
self-verifying snapshot and comparison files for external consumers.
|
|
34
38
|
- [Bounded workstream evidence](workstream-evidence.md) — versioned completion
|
|
35
39
|
criteria, corrective lineage and fail-closed finish evidence.
|
|
36
40
|
- [Deterministic idea intake](idea-intake.md) — place an agent-interpreted idea
|
|
@@ -594,6 +594,23 @@ context the delta deliberately left out. `--since` and
|
|
|
594
594
|
every rejected combination fails closed with no packet, so an agent never acts
|
|
595
595
|
on a partially applied request.
|
|
596
596
|
|
|
597
|
+
When a separate consumer needs durable cross-process reconciliation rather
|
|
598
|
+
than a task packet, use `provider snapshot` or `provider compare` with explicit
|
|
599
|
+
retained generation hashes. Do not read `.docsystem/cache` directly and do not
|
|
600
|
+
interpret provider unavailability, corruption or incomplete coverage as a
|
|
601
|
+
missing document/section. Provider responses intentionally contain no Markdown
|
|
602
|
+
bodies; fetch authored content through `read` or `context` only when the task
|
|
603
|
+
requires it. The canonical contract is
|
|
604
|
+
[pinned provider snapshots](provider-snapshots.md).
|
|
605
|
+
|
|
606
|
+
When another process needs durable provider evidence, prefer
|
|
607
|
+
`provider export snapshot` or `provider export compare` over implementing a
|
|
608
|
+
cursor loop in the adopter. Run `provider artifact verify FILE --json` before
|
|
609
|
+
import and bind the consumer record to the returned provider, generations and
|
|
610
|
+
digest. Verification does not require project state and does not authorize
|
|
611
|
+
comparison of exported files. See
|
|
612
|
+
[complete provider artifacts](provider-artifacts.md).
|
|
613
|
+
|
|
597
614
|
## Report product issues without leaking adopter context
|
|
598
615
|
|
|
599
616
|
When an agent finds a DocumentationEngine problem while working inside another
|
|
@@ -11,6 +11,7 @@ The core owns deterministic documentation retrieval mechanics:
|
|
|
11
11
|
- inspectable context packets with explicit coverage and omissions;
|
|
12
12
|
- impact and changed-section analysis;
|
|
13
13
|
- versioned, sharded machine projections and diagnostics.
|
|
14
|
+
- body-free export and comparison of explicitly pinned provider generations.
|
|
14
15
|
|
|
15
16
|
The package also ships optional extensions over that same core:
|
|
16
17
|
|
|
@@ -58,6 +59,7 @@ The capability groups are progressive, not an execution checklist:
|
|
|
58
59
|
| --- | --- | --- |
|
|
59
60
|
| Core discovery and retrieval | `readiness`, `catalog`, `validate`, `read`, `context`, `dependencies`, `references`, `impact`, `change-plan` | Default path for understanding and changing documentation-backed work |
|
|
60
61
|
| Adoption and derived state | `migration-report`, `migrate`, `profile-check`, `index`, `changes`, `report` | Connecting an existing corpus, checking policy or refreshing disposable projections |
|
|
62
|
+
| Provider reconciliation | `provider snapshot`, `provider compare`, `provider export`, `provider artifact verify` | An external consumer needs exact body-free observations or one complete transport artifact from pinned generations |
|
|
61
63
|
| Governed delivery | `roadmap`, `intake`, `admission`, `execution-handoff`, `execution-result`, `workstream`, `lifecycle`, `finish`, `promotion` | Genuinely multi-stage, delegated or risk-bearing work that requires bounded evidence |
|
|
62
64
|
| Bounded mutation | `maintenance`, `maintenance-recover` | Explicitly approved mechanical synchronization with journal and recovery guarantees |
|
|
63
65
|
| Multi-source operation | `workspace`, `federation` | A task that deliberately spans independently owned documentation sources |
|
|
@@ -94,6 +96,7 @@ Project policy may configure:
|
|
|
94
96
|
- review policy;
|
|
95
97
|
- graph-health advisory thresholds and required metadata fields;
|
|
96
98
|
- projection retention;
|
|
99
|
+
- stable provider identity and exported visibility classification;
|
|
97
100
|
- legacy path-relation migration and historical snapshot document types;
|
|
98
101
|
- provider adapters.
|
|
99
102
|
|
|
@@ -179,6 +182,29 @@ direct Markdown with a visible diagnostic rather than serving mixed state.
|
|
|
179
182
|
Coordinating multiple writers is a caller/orchestrator responsibility, not
|
|
180
183
|
core engine behavior.
|
|
181
184
|
|
|
185
|
+
Provider reconciliation uses the same immutable generations but a different
|
|
186
|
+
verification mode from live reads. A provider generation binds stable provider
|
|
187
|
+
identity, visibility, supported capabilities, catalog completeness, coverage,
|
|
188
|
+
scope and body-free export boundaries into the manifest root. `provider
|
|
189
|
+
snapshot` and `provider compare` fully verify explicitly selected retained
|
|
190
|
+
generations without comparing them with live Markdown or using `current.json`;
|
|
191
|
+
historical drift is the evidence being requested. The provider model exposes
|
|
192
|
+
only IDs, canonical anchors, hashes, root-relative paths and line hints. Its
|
|
193
|
+
schema, deterministic cursor and byte/page bounds are independent from the
|
|
194
|
+
internal projection schema. See [pinned provider snapshots](provider-snapshots.md).
|
|
195
|
+
Portable comparison of complete exported snapshot artifacts is deliberately
|
|
196
|
+
deferred. Losing a retained operand requires an explicit full rebaseline; it
|
|
197
|
+
does not authorize heuristic reconstruction or an entity-absence conclusion.
|
|
198
|
+
|
|
199
|
+
The `traceability-provider-v1` boundary adds complete snapshot and comparison
|
|
200
|
+
artifacts without exposing pagination mechanics to adopters. Export walks and
|
|
201
|
+
validates bounded pages internally, seals the complete ordered result with a
|
|
202
|
+
deterministic digest and writes it atomically. Standalone artifact verification
|
|
203
|
+
needs no project configuration or cache. It validates transport evidence only;
|
|
204
|
+
consumer-owned semantic relations, reconciliation and impact remain outside
|
|
205
|
+
Documentation Engine. See
|
|
206
|
+
[complete provider artifacts](provider-artifacts.md).
|
|
207
|
+
|
|
182
208
|
Retained generation manifests also drive two token-economy `context` modes
|
|
183
209
|
that omit content only when omission is provably safe, never as a silent
|
|
184
210
|
budget cut. `--assume-known ID@REV` is a client-declared cache: an agent
|
|
@@ -35,14 +35,17 @@ adoption-oriented, read-only commands:
|
|
|
35
35
|
- `docsystem catalog PROJECT --explain --json`
|
|
36
36
|
- `docsystem changes PROJECT --json`
|
|
37
37
|
- `docsystem context DOCUMENT_ID PROJECT --json`
|
|
38
|
+
- `docsystem provider snapshot GENERATION PROJECT --json`
|
|
39
|
+
- `docsystem provider compare BEFORE AFTER PROJECT --json`
|
|
40
|
+
- `docsystem provider artifact verify FILE --json`
|
|
38
41
|
|
|
39
|
-
Each prints one deterministic JSON object to stdout (sorted
|
|
40
|
-
field names)
|
|
41
|
-
human `ERROR`/`WARNING` lines
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
Each successful command prints one deterministic JSON object to stdout (sorted
|
|
43
|
+
keys and stable field names). For the adoption/context commands, structured
|
|
44
|
+
diagnostics may replace duplicate human `ERROR`/`WARNING` lines. Provider
|
|
45
|
+
snapshot/compare instead fail closed with a stable error code on stderr and no
|
|
46
|
+
stdout, because an unavailable generation must never resemble an entity result.
|
|
47
|
+
Exit codes are unchanged by `--json`: `0` on success or a ready project, `1`
|
|
48
|
+
otherwise.
|
|
46
49
|
|
|
47
50
|
Every `--json` root is an object with a `"schema_version": 1` field; it is
|
|
48
51
|
bumped only on a breaking change to an existing field, while new fields may
|
|
@@ -101,9 +104,23 @@ hash before comparison. `--since` and
|
|
|
101
104
|
`--assume-known` are mutually exclusive, and neither combines with
|
|
102
105
|
`--outline`; a rejected combination exits `1` with no stdout.
|
|
103
106
|
|
|
104
|
-
A wrapper that speaks MCP can
|
|
105
|
-
|
|
106
|
-
|
|
107
|
+
A wrapper that speaks MCP can use [the MCP adapter](mcp-adapter.md) for its
|
|
108
|
+
document, context, graph and governance tools over the same core contracts.
|
|
109
|
+
|
|
110
|
+
Provider snapshot/compare responses use their own versioned, body-free schema
|
|
111
|
+
and bounded cursor contract. They require explicit retained generations and
|
|
112
|
+
never infer either operand from current Markdown or `current.json`. These two
|
|
113
|
+
commands are currently CLI-only. A wrapper must distinguish
|
|
114
|
+
provider/generation failures on stderr from `missing` inside a successful
|
|
115
|
+
comparison; see [pinned provider snapshots](provider-snapshots.md).
|
|
116
|
+
|
|
117
|
+
Do not reproduce provider pagination in an adopter when the integration needs
|
|
118
|
+
one durable import unit. Use `provider export snapshot` or
|
|
119
|
+
`provider export compare`; Documentation Engine assembles all pages and writes
|
|
120
|
+
a complete digest-bound artifact. The standalone verifier is the compatibility
|
|
121
|
+
gate, so a consumer checks protocol/schema/capability rather than tracking
|
|
122
|
+
package minor versions. See
|
|
123
|
+
[complete provider artifacts](provider-artifacts.md).
|
|
107
124
|
|
|
108
125
|
`docsystem readiness PROJECT --json` is the entry point for an adoption
|
|
109
126
|
sequence: its `next_command` field names the single safe next command for
|
|
@@ -60,6 +60,12 @@ The adapter is deliberately a wrapper, not a second implementation:
|
|
|
60
60
|
`maintenance-recover`) intentionally have no tools and stay
|
|
61
61
|
with the human or calling system, matching
|
|
62
62
|
[the agent contract](agent-contract.md);
|
|
63
|
+
- pinned `provider snapshot` and `provider compare` are currently CLI-only.
|
|
64
|
+
An MCP wrapper may be added later only as a thin transport over the same
|
|
65
|
+
bounded, body-free contract; clients must not inspect projection files;
|
|
66
|
+
- complete `provider export` and standalone `provider artifact verify` are also
|
|
67
|
+
CLI-only. They form the transport-neutral file boundary for consumers that
|
|
68
|
+
should not own provider pagination mechanics;
|
|
63
69
|
- a non-zero CLI exit becomes a tool error carrying the CLI's stderr
|
|
64
70
|
diagnostics, so a client never mistakes a failure for data. The one
|
|
65
71
|
exception is `readiness`, whose "not ready" state is a legitimate answer:
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Complete provider artifacts
|
|
2
|
+
|
|
3
|
+
Complete provider artifacts are the transport-neutral boundary between
|
|
4
|
+
Documentation Engine and an external traceability consumer. They remove the
|
|
5
|
+
need for an adopter to invoke paged commands repeatedly, validate cursors or
|
|
6
|
+
understand projection files. Documentation Engine owns that mechanical work;
|
|
7
|
+
the consumer receives one complete, body-free JSON artifact.
|
|
8
|
+
|
|
9
|
+
The capability name is `traceability-provider-v1`. It is generic: the
|
|
10
|
+
artifact describes documentation entities and changes only. Product logic,
|
|
11
|
+
code/test relations, reconciliation policy, attention queues and impact
|
|
12
|
+
semantics remain consumer responsibilities.
|
|
13
|
+
|
|
14
|
+
## Export complete evidence
|
|
15
|
+
|
|
16
|
+
Build and retain the required projection generations first, then export them
|
|
17
|
+
explicitly:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
docsystem provider export snapshot GENERATION PROJECT \
|
|
21
|
+
--output snapshot.json
|
|
22
|
+
|
|
23
|
+
docsystem provider export compare BEFORE AFTER PROJECT \
|
|
24
|
+
--output comparison.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Both commands fully verify the selected retained generation or generations,
|
|
28
|
+
walk the existing bounded provider pages internally and require the pages to
|
|
29
|
+
reconstruct one complete ordered result. The output is written through a
|
|
30
|
+
temporary file and atomically selected only after assembly and self-
|
|
31
|
+
verification. An existing output path is never replaced.
|
|
32
|
+
|
|
33
|
+
Export remains subject to provider retention. An evicted generation fails as
|
|
34
|
+
unknown or unavailable and requires an explicit rebaseline. The command never
|
|
35
|
+
reconstructs an operand from current Markdown and never interprets provider
|
|
36
|
+
unavailability as entity absence.
|
|
37
|
+
|
|
38
|
+
## Verify without project state
|
|
39
|
+
|
|
40
|
+
Any process with the artifact file can validate its integrity and supported
|
|
41
|
+
contract without a Documentation Engine project, provider cache or Python API:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
docsystem provider artifact verify snapshot.json --json
|
|
45
|
+
docsystem provider artifact verify comparison.json --json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
A valid artifact returns deterministic JSON with `valid: true`, its kind,
|
|
49
|
+
provider ID, pinned generation IDs, digest and item counts. Failure exits `1`,
|
|
50
|
+
writes no stdout and emits a stable code on stderr.
|
|
51
|
+
|
|
52
|
+
Important failure classes include:
|
|
53
|
+
|
|
54
|
+
- `artifact-corrupt`: malformed content, invalid entity evidence or digest
|
|
55
|
+
mismatch;
|
|
56
|
+
- `artifact-incomplete`: missing observations, changes, coverage or count
|
|
57
|
+
evidence;
|
|
58
|
+
- `artifact-mixed-provider`: inconsistent provider identities;
|
|
59
|
+
- `artifact-mixed-query`: incompatible scopes inside one comparison;
|
|
60
|
+
- `artifact-schema-unsupported`: unsupported artifact schema;
|
|
61
|
+
- `artifact-incompatible`: unsupported protocol, capability, kind or assembly
|
|
62
|
+
policy;
|
|
63
|
+
- `artifact-output-exists`: export refused to replace existing evidence;
|
|
64
|
+
- `artifact-write-failed`: the destination filesystem could not provide the
|
|
65
|
+
required atomic create operation.
|
|
66
|
+
|
|
67
|
+
The SHA-256 digest detects accidental or unauthorized content changes when the
|
|
68
|
+
expected digest is retained separately. It is not a digital signature and
|
|
69
|
+
does not establish who created the artifact. Transport authentication and
|
|
70
|
+
artifact provenance remain deployment responsibilities.
|
|
71
|
+
|
|
72
|
+
## Artifact contract
|
|
73
|
+
|
|
74
|
+
Every artifact contains:
|
|
75
|
+
|
|
76
|
+
- `schema_version`: version of the JSON artifact layout;
|
|
77
|
+
- `artifact_kind`: snapshot or comparison artifact;
|
|
78
|
+
- `protocol`: `traceability-provider`, version `1`, with capability
|
|
79
|
+
`traceability-provider-v1`;
|
|
80
|
+
- `provider`: stable provider ID, provider contract version, visibility and
|
|
81
|
+
generation-advertised capabilities;
|
|
82
|
+
- `query`: exact pinned generation and scope identity;
|
|
83
|
+
- `completeness`: `complete: true`, coverage, boundaries and exact counts;
|
|
84
|
+
- `policy`: bounded-page assembly, complete-or-fail behavior, ordering and
|
|
85
|
+
body-omission policy;
|
|
86
|
+
- complete ordered `observations` or `changes`;
|
|
87
|
+
- `content_digest`: SHA-256 over canonical content excluding the digest field.
|
|
88
|
+
|
|
89
|
+
Snapshot observations contain stable kind/document/anchor identity, content
|
|
90
|
+
hash, provider-relative POSIX path, inclusive line hints, anchor kind and
|
|
91
|
+
visibility. Comparison changes contain `relocated`, `changed`, `missing` or
|
|
92
|
+
`added` plus exact before/after observations. Markdown bodies, headings,
|
|
93
|
+
metadata values, relations, absolute paths and projection locations are never
|
|
94
|
+
included.
|
|
95
|
+
|
|
96
|
+
The entity identity and change semantics are identical to the paged
|
|
97
|
+
[pinned provider contract](provider-snapshots.md). A consumer should store the
|
|
98
|
+
complete artifact as immutable evidence and import only fields it understands.
|
|
99
|
+
|
|
100
|
+
## Compatibility policy
|
|
101
|
+
|
|
102
|
+
Consumers must negotiate the artifact, not the installed package release:
|
|
103
|
+
|
|
104
|
+
1. Require protocol name `traceability-provider` and version `1`.
|
|
105
|
+
2. Require capability `traceability-provider-v1`.
|
|
106
|
+
3. Require a supported artifact `schema_version` and `artifact_kind`.
|
|
107
|
+
4. Run `provider artifact verify` before import.
|
|
108
|
+
5. Bind imported state to `provider.id`, exact generation IDs, query scope and
|
|
109
|
+
`content_digest`.
|
|
110
|
+
|
|
111
|
+
Within protocol version 1, Documentation Engine may add optional fields or
|
|
112
|
+
additional capabilities. Consumers must ignore unknown optional fields while
|
|
113
|
+
continuing to validate the required v1 fields. Existing field meanings,
|
|
114
|
+
identity rules, classifications and completeness semantics do not change
|
|
115
|
+
within v1. A breaking change requires a new protocol/schema version or a new
|
|
116
|
+
capability, so an adopter does not need to track Documentation Engine patch or
|
|
117
|
+
minor releases merely to decide whether an artifact is importable.
|
|
118
|
+
|
|
119
|
+
The paged `provider snapshot` and `provider compare` commands remain supported
|
|
120
|
+
for streaming clients. New adopters that need a durable process boundary
|
|
121
|
+
should prefer complete artifacts and should not read `.docsystem/cache`, shard
|
|
122
|
+
files or internal Python modules.
|
|
123
|
+
|
|
124
|
+
## Deliberate boundary
|
|
125
|
+
|
|
126
|
+
Artifact verification does not enable Documentation Engine to compare two
|
|
127
|
+
previously exported files. `provider export compare` still selects two retained
|
|
128
|
+
provider generations and exports their verified comparison. Portable
|
|
129
|
+
comparison after provider retention expiry remains a separate future
|
|
130
|
+
capability; consumers must not infer it from `traceability-provider-v1`.
|
|
131
|
+
|
|
132
|
+
See [`examples/provider-snapshots/`](../examples/provider-snapshots/) for a
|
|
133
|
+
public synthetic provider fixture suitable for black-box integration tests.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Pinned provider snapshots
|
|
2
|
+
|
|
3
|
+
Pinned provider snapshots let an external consumer reconcile two exact states
|
|
4
|
+
of a Documentation Engine catalog without importing package internals or
|
|
5
|
+
reading `.docsystem/cache` directly. The surface is read-only, body-free and
|
|
6
|
+
provider-neutral.
|
|
7
|
+
|
|
8
|
+
This contract answers a different question from `docsystem changes`:
|
|
9
|
+
|
|
10
|
+
- `changes` compares live Markdown with the generation selected by
|
|
11
|
+
`current.json`;
|
|
12
|
+
- `provider snapshot` exports observations from one explicitly named immutable
|
|
13
|
+
generation;
|
|
14
|
+
- `provider compare` compares two explicitly named immutable generations and
|
|
15
|
+
does not substitute the current pointer for either operand.
|
|
16
|
+
|
|
17
|
+
## Opt-in provider identity
|
|
18
|
+
|
|
19
|
+
Configure a stable identity before building generations intended for external
|
|
20
|
+
reconciliation:
|
|
21
|
+
|
|
22
|
+
```toml
|
|
23
|
+
[provider]
|
|
24
|
+
id = "example-docs"
|
|
25
|
+
visibility = "private"
|
|
26
|
+
|
|
27
|
+
[projection]
|
|
28
|
+
format = "sharded-json"
|
|
29
|
+
keep_generations = 4
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`provider.id` accepts 1–128 lowercase letters, digits, `.`, `_` and `-`.
|
|
33
|
+
`visibility` is `private` by default and may be set to `public`; it is an
|
|
34
|
+
exported classification, not an access-control mechanism. Filesystem,
|
|
35
|
+
sandbox, service and transport policy still control who can invoke the CLI.
|
|
36
|
+
|
|
37
|
+
Provider configuration is optional for all existing commands. The provider
|
|
38
|
+
commands fail closed with `provider-not-configured` when the ID is absent.
|
|
39
|
+
Never derive the ID from an absolute path, host name or repository remote.
|
|
40
|
+
|
|
41
|
+
Run `docsystem index PROJECT --write` after configuring the provider. Each new
|
|
42
|
+
projection generation binds the provider ID, visibility, capabilities,
|
|
43
|
+
catalog-completeness evidence, coverage and fixed export boundaries into its
|
|
44
|
+
content hash. Generations created by older projection schemas do not acquire
|
|
45
|
+
those claims retroactively and are reported as `generation-unsupported`.
|
|
46
|
+
|
|
47
|
+
## Export one pinned generation
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
docsystem provider snapshot GENERATION PROJECT --json
|
|
51
|
+
docsystem provider snapshot GENERATION PROJECT --json \
|
|
52
|
+
--page-size 100 --cursor CURSOR
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`GENERATION` is a full retained generation hash or an unambiguous prefix of at
|
|
56
|
+
least twelve characters. It is required; the command never selects
|
|
57
|
+
`current.json` implicitly.
|
|
58
|
+
|
|
59
|
+
The versioned response identifies the provider and generation, advertises
|
|
60
|
+
capabilities, states coverage/scope/boundaries, and returns a page of stable
|
|
61
|
+
document and section observations. Each observation contains only:
|
|
62
|
+
|
|
63
|
+
- `document_id` and canonical `anchor` (`null` for a document);
|
|
64
|
+
- `anchor_kind` (`explicit` or `generated`) for a section;
|
|
65
|
+
- exact content hash;
|
|
66
|
+
- documentation-root-relative POSIX path;
|
|
67
|
+
- one-based inclusive line hints;
|
|
68
|
+
- configured visibility.
|
|
69
|
+
|
|
70
|
+
Markdown bodies, titles, metadata values, relations, excluded paths, absolute
|
|
71
|
+
paths and projection locations are not exported. Explicit anchors provide the
|
|
72
|
+
strongest stable section identity. A generated anchor remains canonical for
|
|
73
|
+
that generation, but changing its heading may produce a missing/added pair
|
|
74
|
+
rather than an inferred match; the engine does not use title similarity.
|
|
75
|
+
|
|
76
|
+
## Compare two pinned generations
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
docsystem provider compare BEFORE AFTER PROJECT --json
|
|
80
|
+
docsystem provider compare BEFORE AFTER PROJECT --json \
|
|
81
|
+
--page-size 100 --cursor CURSOR
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Both operands are verified independently and may be retained historical
|
|
85
|
+
generations. They do not need to match live Markdown or the current pointer.
|
|
86
|
+
They must belong to the configured provider and advertise the same supported
|
|
87
|
+
capability.
|
|
88
|
+
|
|
89
|
+
The comparison uses the exact key `(kind, document_id, canonical_anchor)`:
|
|
90
|
+
|
|
91
|
+
| Classification | Meaning |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| `relocated` | Identity and content hash are unchanged, but path or line hints changed |
|
|
94
|
+
| `changed` | Identity exists on both sides and its content hash changed |
|
|
95
|
+
| `missing` | Identity exists only in `BEFORE` |
|
|
96
|
+
| `added` | Identity exists only in `AFTER` |
|
|
97
|
+
|
|
98
|
+
Every change carries the exact body-free `before` and `after` observation when
|
|
99
|
+
that side exists. A content change takes precedence over relocation, while the
|
|
100
|
+
two observations still expose any simultaneous location change. The summary
|
|
101
|
+
also counts unchanged entities. Valid Documentation Engine catalogs prevent
|
|
102
|
+
duplicate stable keys; ambiguity is never used to disguise corruption or an
|
|
103
|
+
incomplete catalog.
|
|
104
|
+
|
|
105
|
+
## Integrity and availability
|
|
106
|
+
|
|
107
|
+
Pinned export verifies the selector, projection schema, manifest-to-generation
|
|
108
|
+
hash, provider capability descriptor, completeness evidence, document coverage
|
|
109
|
+
and every stored document/reverse/reference shard hash. It deliberately does
|
|
110
|
+
not compare historical source hashes with live Markdown: a retained generation
|
|
111
|
+
is immutable historical evidence and is expected to differ from current files.
|
|
112
|
+
|
|
113
|
+
Failures return exit code `1`, write no stdout, and use a stable code in stderr,
|
|
114
|
+
for example `ERROR [generation-corrupt]: ...`. Important distinctions include:
|
|
115
|
+
|
|
116
|
+
- `provider-unavailable`: generation storage cannot be read;
|
|
117
|
+
- `generation-unknown`: the requested retained generation does not exist;
|
|
118
|
+
- `generation-selector-ambiguous`: a prefix selects more than one generation;
|
|
119
|
+
- `generation-corrupt`: bound manifest or shard evidence is invalid;
|
|
120
|
+
- `generation-unsupported`: the generation lacks this versioned capability;
|
|
121
|
+
- `generation-incomplete`: catalog or coverage completeness cannot be proved;
|
|
122
|
+
- `provider-mismatch`: generation identity differs from configured identity;
|
|
123
|
+
- `page-invalid` / `page-too-large`: pagination evidence is invalid or cannot
|
|
124
|
+
fit the bounded response.
|
|
125
|
+
|
|
126
|
+
Provider unavailability and corrupt/incomplete snapshots are never represented
|
|
127
|
+
as missing entities.
|
|
128
|
+
|
|
129
|
+
## Pagination and deterministic bytes
|
|
130
|
+
|
|
131
|
+
Pages default to 100 entities, accept 1–500, and never exceed 262,144 UTF-8
|
|
132
|
+
bytes. The response may return fewer than the requested count to respect the
|
|
133
|
+
byte limit. If one observation cannot fit, the command fails instead of
|
|
134
|
+
truncating a field. `next_cursor` is bound to the response kind and exact
|
|
135
|
+
generation operand(s); using it for another query fails closed.
|
|
136
|
+
|
|
137
|
+
Following `next_cursor` until `null` reconstructs the complete ordered result
|
|
138
|
+
without loss or duplication. Repeating the same pinned request produces the
|
|
139
|
+
same sorted JSON bytes with one trailing newline.
|
|
140
|
+
|
|
141
|
+
Retention controls availability. Set `projection.keep_generations` high enough
|
|
142
|
+
for the consumer's reconciliation window, or archive the body-free exported
|
|
143
|
+
responses in the consumer. If either comparison generation has been evicted,
|
|
144
|
+
the provider fails with `generation-unknown`/unavailable. The consumer must
|
|
145
|
+
perform an explicit full rebaseline from a newly selected complete generation
|
|
146
|
+
and record that the earlier delta chain ended. Retention loss is never evidence
|
|
147
|
+
that an entity was removed, and the engine does not reconstruct the missing
|
|
148
|
+
operand heuristically.
|
|
149
|
+
|
|
150
|
+
## Deferred follow-up: portable snapshot artifacts
|
|
151
|
+
|
|
152
|
+
Portable comparison after provider retention expiry is a named follow-up, not
|
|
153
|
+
part of the first contract. A future command may accept complete exported
|
|
154
|
+
snapshot artifacts as operands, but must bind and verify their schema, provider
|
|
155
|
+
and generation identity, query/scope, coverage/completeness, complete ordered
|
|
156
|
+
observations and canonical artifact digest before applying the same comparison
|
|
157
|
+
semantics. It must reject partial page sets, mixed-query pages, tampering,
|
|
158
|
+
unsupported schemas and incompatible providers. Persisted pages from this
|
|
159
|
+
version are evidence for a consumer; they are not yet accepted back as
|
|
160
|
+
Documentation Engine comparison operands.
|
|
161
|
+
|
|
162
|
+
For v1, entity identity is exactly `(kind, document_id, canonical_anchor)`.
|
|
163
|
+
Moving the same document ID to another provider-relative path can be
|
|
164
|
+
`relocated`. Moving a section across document IDs is `missing` plus `added`,
|
|
165
|
+
even when its anchor and content match; cross-document similarity is not safe
|
|
166
|
+
structural identity and is not inferred.
|
|
167
|
+
|
|
168
|
+
The first contract is CLI-only. A service or MCP adapter may wrap these exact
|
|
169
|
+
read-only commands later, but it must preserve their integrity, privacy,
|
|
170
|
+
pagination and failure semantics rather than inspect projection files itself.
|
|
171
|
+
|
|
172
|
+
Adopters that need one durable process-boundary file instead of paged wire
|
|
173
|
+
responses should use [complete provider artifacts](provider-artifacts.md).
|
|
174
|
+
Documentation Engine assembles and verifies all pages internally while keeping
|
|
175
|
+
these paged commands backward compatible.
|
|
176
|
+
|
|
177
|
+
[`examples/provider-snapshots/`](../examples/provider-snapshots/) is a public
|
|
178
|
+
synthetic corpus with explicit anchors and an opt-in provider profile. Copy it
|
|
179
|
+
to a temporary directory, run `index --write`, make one source change and write
|
|
180
|
+
a second generation to exercise the commands without exposing adopter data.
|
|
@@ -177,6 +177,14 @@ format = "sharded-json"
|
|
|
177
177
|
keep_generations = 2
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
+
Projects that expose immutable body-free observations to another consumer may
|
|
181
|
+
also configure an explicit `[provider]` identity. This is optional for ordinary
|
|
182
|
+
local use; see [pinned provider snapshots](provider-snapshots.md). Do not infer
|
|
183
|
+
the identity from a private filesystem path.
|
|
184
|
+
External processes that need one durable import unit should use
|
|
185
|
+
[complete provider artifacts](provider-artifacts.md) instead of reproducing the
|
|
186
|
+
paged provider protocol.
|
|
187
|
+
|
|
180
188
|
Whole-graph smell policy is optional and should reflect the adopting project,
|
|
181
189
|
not copied thresholds. With no thresholds, `graph-health` still reports the
|
|
182
190
|
complete deterministic inventory and emits only intrinsic dead-link evidence:
|