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.
Files changed (131) hide show
  1. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/workflows/ci.yml +2 -1
  2. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/CHANGELOG.md +43 -1
  3. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/PKG-INFO +19 -1
  4. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/README.md +18 -0
  5. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/README.md +4 -0
  6. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/agent-contract.md +17 -0
  7. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/architecture.md +26 -0
  8. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/client-integration.md +27 -10
  9. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/mcp-adapter.md +6 -0
  10. documentation_engine-0.5.0/docs/provider-artifacts.md +133 -0
  11. documentation_engine-0.5.0/docs/provider-snapshots.md +180 -0
  12. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/setup-guide.md +8 -0
  13. documentation_engine-0.5.0/examples/provider-snapshots/.docsystem.toml +30 -0
  14. documentation_engine-0.5.0/examples/provider-snapshots/docs/README.md +8 -0
  15. documentation_engine-0.5.0/examples/provider-snapshots/docs/service-contract.md +17 -0
  16. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/scripts/installed_cli_smoke.sh +70 -0
  17. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/__init__.py +1 -1
  18. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/cli.py +300 -0
  19. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/config.py +31 -0
  20. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/federated_projection.py +2 -0
  21. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/projection.py +261 -5
  22. documentation_engine-0.5.0/src/docsystem/provider.py +449 -0
  23. documentation_engine-0.5.0/src/docsystem/provider_artifact.py +752 -0
  24. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/sections.py +16 -5
  25. documentation_engine-0.5.0/tests/test_provider.py +614 -0
  26. documentation_engine-0.5.0/tests/test_provider_artifact.py +324 -0
  27. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/adoption-finding.yml +0 -0
  28. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  29. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/core-bug.yml +0 -0
  30. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/docs-pattern-request.yml +0 -0
  31. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/ISSUE_TEMPLATE/runtime-report.yml +0 -0
  32. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  33. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/copilot-instructions.md +0 -0
  34. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.github/workflows/release.yml +0 -0
  35. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/.gitignore +0 -0
  36. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/AGENTS.md +0 -0
  37. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/CLAUDE.md +0 -0
  38. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/CONTRIBUTING.md +0 -0
  39. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/LICENSE +0 -0
  40. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/SECURITY.md +0 -0
  41. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/adopter-reporting.md +0 -0
  42. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/adoption.md +0 -0
  43. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/assets/context-reduction.svg +0 -0
  44. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/context-delivery.md +0 -0
  45. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/context-efficiency.md +0 -0
  46. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/delivery-traceability.md +0 -0
  47. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/document-profiles.md +0 -0
  48. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/execution-admission.md +0 -0
  49. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/execution-handoff.md +0 -0
  50. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/federation.md +0 -0
  51. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/graph-health.md +0 -0
  52. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/idea-intake.md +0 -0
  53. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/knowledge-promotion.md +0 -0
  54. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/local-state-safety.md +0 -0
  55. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/metadata-inventory.md +0 -0
  56. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/program-plans.md +0 -0
  57. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/releasing.md +0 -0
  58. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workspace-sources.md +0 -0
  59. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workstream-branching.md +0 -0
  60. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workstream-evidence.md +0 -0
  61. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/docs/workstream-lifecycle.md +0 -0
  62. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/execution-admission-request.json +0 -0
  63. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/execution-result.json +0 -0
  64. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/.docsystem.toml +0 -0
  65. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/README.md +0 -0
  66. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/README.md +0 -0
  67. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/design.md +0 -0
  68. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/review.md +0 -0
  69. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/generic-adopter/plan/templates/document-template.md +0 -0
  70. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/idea-intake-request.json +0 -0
  71. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/workstream-branch-template.md +0 -0
  72. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/examples/workstream-record.json +0 -0
  73. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/pyproject.toml +0 -0
  74. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/__main__.py +0 -0
  75. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/admission.py +0 -0
  76. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/catalog.py +0 -0
  77. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/change_plan.py +0 -0
  78. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/delivery.py +0 -0
  79. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/execution.py +0 -0
  80. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/federation.py +0 -0
  81. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/graph.py +0 -0
  82. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/health.py +0 -0
  83. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/intake.py +0 -0
  84. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/inventory.py +0 -0
  85. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/journal.py +0 -0
  86. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/lifecycle.py +0 -0
  87. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/maintenance.py +0 -0
  88. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/mcp_server.py +0 -0
  89. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/metadata.py +0 -0
  90. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/migration.py +0 -0
  91. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/profiles.py +0 -0
  92. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/program_plan.py +0 -0
  93. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/promotion.py +0 -0
  94. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/readiness.py +0 -0
  95. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/shared_finish.py +0 -0
  96. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/workspace.py +0 -0
  97. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/src/docsystem/workstream.py +0 -0
  98. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_admission.py +0 -0
  99. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_catalog.py +0 -0
  100. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_change_plan.py +0 -0
  101. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_change_plan_cli.py +0 -0
  102. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_cli.py +0 -0
  103. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_cli_platform.py +0 -0
  104. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_config.py +0 -0
  105. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_context_cli.py +0 -0
  106. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_delivery.py +0 -0
  107. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_execution_handoff.py +0 -0
  108. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_federated_projection.py +0 -0
  109. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_federated_write.py +0 -0
  110. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_federation.py +0 -0
  111. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_graph.py +0 -0
  112. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_health.py +0 -0
  113. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_intake.py +0 -0
  114. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_inventory.py +0 -0
  115. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_journal.py +0 -0
  116. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_lifecycle.py +0 -0
  117. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_maintenance.py +0 -0
  118. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_mcp_adapter.py +0 -0
  119. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_metadata.py +0 -0
  120. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_migration.py +0 -0
  121. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_profiles.py +0 -0
  122. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_program_plan.py +0 -0
  123. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_promotion.py +0 -0
  124. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_readiness.py +0 -0
  125. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_references_cli.py +0 -0
  126. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_release_workflows.py +0 -0
  127. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_sections.py +0 -0
  128. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_vertical.py +0 -0
  129. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_workspace.py +0 -0
  130. {documentation_engine-0.3.1 → documentation_engine-0.5.0}/tests/test_workstream.py +0 -0
  131. {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.3.1...HEAD
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.1
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 keys, stable
40
- field names) carrying the same diagnostics that the text form prints as
41
- human `ERROR`/`WARNING` lines on stderr. In `--json` mode those human
42
- stderr diagnostics may be suppressed since the JSON payload already carries
43
- the same information in structured form, so a wrapper does not need to read
44
- stderr to make a decision. Exit codes are unchanged by `--json`: `0` on
45
- success or a ready project, `1` otherwise.
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 skip the CLI entirely and use
105
- [the MCP adapter](mcp-adapter.md), which exposes these same read-only
106
- commands as typed tools over the identical JSON contract.
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: