@agentskit/doc-bridge 1.7.44 → 1.9.0
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.
- package/CHANGELOG.md +471 -0
- package/CONTRIBUTING.md +29 -4
- package/README.md +87 -40
- package/SECURITY.md +7 -0
- package/action.yml +1 -1
- package/bin/ak-docs.js +2 -2
- package/bin/ak-verify.js +13 -7
- package/dist/cli/program.d.ts +3 -1
- package/dist/cli/program.js +15888 -6061
- package/dist/cli/program.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +91 -9
- package/dist/config/index.js.map +1 -1
- package/dist/index-Beor6Yhi.d.ts +792 -0
- package/dist/index.d.ts +9979 -3257
- package/dist/index.js +15954 -5774
- package/dist/index.js.map +1 -1
- package/docs/MARKETPLACE.md +1 -1
- package/docs/PRD-documentation-efficiency-study.md +406 -0
- package/docs/PRD-knowledge-retrieval-and-enrichment.md +466 -0
- package/docs/RELEASE.md +22 -8
- package/docs/adr/0002-documentation-audit-boundary.md +22 -0
- package/docs/adr/0003-study-protocol-and-historical-evidence.md +40 -0
- package/docs/adr/0004-controlled-study-runner.md +25 -0
- package/docs/adr/0005-documentation-quality-and-criticality.md +20 -0
- package/docs/adr/0006-registry-semantic-grounding.md +20 -0
- package/docs/adr/0007-longitudinal-study-metrics.md +21 -0
- package/docs/adr/0008-study-verification-boundary.md +21 -0
- package/docs/adr/0009-study-provider-cli-adapter.md +25 -0
- package/docs/agent-corpus/INDEX.md +14 -3
- package/docs/agent-corpus/OVERVIEW.md +25 -0
- package/docs/agent-corpus/chat.md +7 -3
- package/docs/agent-corpus/cli.md +18 -2
- package/docs/agent-corpus/conformance.md +14 -2
- package/docs/agent-corpus/doc-bridge.md +48 -1
- package/docs/agent-corpus/doctor.md +10 -2
- package/docs/agent-corpus/gates.md +6 -2
- package/docs/agent-corpus/mcp.md +15 -2
- package/docs/agent-corpus/memory.md +6 -2
- package/docs/agent-corpus/query.md +35 -2
- package/docs/bench/README.md +122 -0
- package/docs/bench/retrieval-baseline-v1.json +28 -0
- package/docs/bench/retrieval-suite-v1.json +1033 -0
- package/docs/chat-and-rag.md +3 -2
- package/docs/for-agents.md +9 -1
- package/docs/getting-started.md +4 -11
- package/docs/guides/gate-ci.md +11 -1
- package/docs/guides/install-and-run.md +9 -65
- package/docs/index.md +22 -1
- package/docs/knowledge-engine-runbook.md +51 -4
- package/docs/landing/assets/context-payload-reduction.svg +21 -0
- package/docs/landing/assets/controlled-ab-comparison.svg +30 -0
- package/docs/landing/index.html +119 -5
- package/docs/loop-workflow.md +117 -0
- package/docs/mcp.md +6 -1
- package/docs/parity/public-claims-v1.json +145 -0
- package/docs/playbook/doc-bridge-pattern.md +1 -1
- package/docs/query.md +90 -2
- package/docs/recipes/index-pipeline.md +1 -1
- package/docs/schemas/agent-handoff-v1.md +15 -0
- package/docs/schemas/doc-bridge-index-v1.md +65 -0
- package/docs/spec/benchmark-v1.md +39 -1
- package/docs/spec/cli.md +30 -10
- package/docs/spec/config-v1.md +192 -8
- package/docs/spec/documentation-audit-v1.md +61 -0
- package/docs/spec/enrichment-overlay-v1.md +241 -0
- package/docs/spec/graph-signals-v1.md +92 -0
- package/docs/spec/incremental-scan-v1.md +102 -0
- package/docs/spec/markdown-analyzer-v1.md +73 -0
- package/docs/spec/mcp-knowledge-tools-v1.md +147 -0
- package/docs/spec/measured-enrichment-v1.md +229 -0
- package/docs/spec/public-parity-v1.md +119 -0
- package/docs/spec/registry-agents.md +6 -0
- package/docs/spec/render-v1.md +122 -0
- package/docs/spec/retrieval-index-v1.md +164 -0
- package/docs/spec/study-metrics-v1.md +58 -0
- package/docs/spec/study-protocol-v1.md +46 -0
- package/docs/spec/study-provider-cli-v1.md +116 -0
- package/docs/spec/study-runner-v1.md +35 -0
- package/docs/spec/study-task-suite-v1.md +41 -0
- package/docs/spec/study-verification-v1.md +40 -0
- package/docs/study/README.md +84 -0
- package/docs/study/ab-adjudicated-cost-analysis-v1.md +29 -0
- package/docs/study/ab-adjudicated-cost-plan-v1.json +33 -0
- package/docs/study/ab-adjudicated-cost-plan-v2-v1.json +33 -0
- package/docs/study/ab-adjudicated-cost-result-v1.json +80 -0
- package/docs/study/ab-baseline-analysis-v1.md +21 -0
- package/docs/study/ab-baseline-plan-v1.json +33 -0
- package/docs/study/ab-baseline-recovery-plan-v1.json +33 -0
- package/docs/study/ab-baseline-result-v1.json +79 -0
- package/docs/study/documentation-audit-round-2026-08-31.json +183 -0
- package/docs/study/historical-evidence-v1.json +252 -0
- package/docs/study/observation-ledger-v1.json +30632 -0
- package/docs/study/phase3-task-coverage-v1.json +34 -0
- package/docs/study/phase4-public-pilot-ledger-v1.json +1344 -0
- package/docs/study/phase4-public-pilot-result-v1.json +52 -0
- package/docs/study/phase4-public-pilot-run-plan-v1.json +26 -0
- package/docs/study/phase4-public-pilot-task-suite-v1.json +71 -0
- package/docs/study/pilot-round-2026-08-31.json +46 -0
- package/docs/study/protocol-v1.json +90 -0
- package/docs/study/publication-gate-v1.md +45 -0
- package/docs/study/quality-scorecard-cycle-plan.md +545 -0
- package/docs/study/quality-scorecard-v1.json +38 -0
- package/docs/study/round-1-adjudicated-smoke-v1.json +30642 -0
- package/docs/study/round-1-instrumentation-plan-v1.md +39 -0
- package/docs/study/round-2-expanded-adjudication-v1.json +91 -0
- package/docs/study/round-2-expanded-validation-v1.md +58 -0
- package/docs/study/round-3-evidence-contract-v1.json +75 -0
- package/docs/study/round-3-evidence-contract-v1.md +57 -0
- package/docs/study/round-4-confirmation-v1.json +75 -0
- package/docs/study/round-4-confirmation-v1.md +55 -0
- package/docs/study/run-plan-v1.json +33 -0
- package/docs/study/semantic-adjudication-cycle-8.md +20 -0
- package/docs/study/task-suite-v1.json +96 -0
- package/docs/study/token-efficiency-plan-v1.md +337 -0
- package/docs/study/token-efficiency-protocol-v2.json +62 -0
- package/docs/study/verification-binding-v1.json +27 -0
- package/docs/validation-cycle-plan.md +33 -0
- package/docs/verification-harness.md +15 -6
- package/ecosystem-claims.json +2 -2
- package/ecosystem-upstream.json +2 -2
- package/ecosystem.json +4 -4
- package/mcpb/manifest.json +9 -1
- package/package.json +89 -72
- package/scripts/check-ecosystem-upstream.mjs +36 -7
- package/scripts/report-visual-check.mjs +20 -3
- package/skills/doc-bridge-handoff/fixtures/synthetic-repo/docs/for-agents/packages/payments.md +7 -0
- package/skills/doc-bridge-handoff/scripts/resolve-handoff.mjs +1 -1
- package/src/agents/registry-adapter.ts +192 -24
- package/src/audit/documentation.ts +513 -0
- package/src/bench/baseline.ts +198 -0
- package/src/bench/overlay-delta.ts +139 -0
- package/src/bench/retrieval.ts +319 -0
- package/src/budget/compile.ts +91 -0
- package/src/budget/sections.ts +70 -0
- package/src/cli/demo.ts +2 -2
- package/src/cli/program.ts +699 -79
- package/src/cli/usage.ts +71 -0
- package/src/config/defaults.ts +1 -0
- package/src/config/index.ts +4 -0
- package/src/config/load-config.ts +7 -1
- package/src/config/schema.ts +121 -4
- package/src/conformance/documentation-standard-v1.ts +22 -14
- package/src/discovery/areas.ts +182 -0
- package/src/discovery/documentation.ts +255 -23
- package/src/discovery/identity.ts +24 -0
- package/src/discovery/incremental.ts +314 -0
- package/src/discovery/inputs.ts +110 -0
- package/src/discovery/markdown.ts +481 -0
- package/src/discovery/repository.ts +557 -125
- package/src/doctor/run-doctor.ts +246 -27
- package/src/enrich/approvals.ts +190 -0
- package/src/enrich/cache.ts +93 -0
- package/src/enrich/context-pack.ts +272 -0
- package/src/enrich/overlay.ts +255 -0
- package/src/enrich/review.ts +106 -0
- package/src/enrich/stage.ts +374 -0
- package/src/enrich/stats.ts +100 -0
- package/src/enrich/validate.ts +410 -0
- package/src/federation/llms.ts +74 -24
- package/src/findings/report.ts +103 -0
- package/src/fixes/proposals.ts +4 -3
- package/src/graph/build.ts +356 -0
- package/src/graph/memory.ts +208 -0
- package/src/index-builder/build-handoffs.ts +22 -11
- package/src/index-builder/build-index.ts +132 -3
- package/src/index-builder/human-adapters/fumadocs.ts +1 -1
- package/src/index-builder/llms-txt.ts +48 -8
- package/src/index-builder/project-corpus.ts +111 -0
- package/src/index-builder/watch-index.ts +1 -1
- package/src/index.ts +630 -2
- package/src/lib/bounded-text.ts +15 -10
- package/src/lib/fuzzy-match.ts +235 -0
- package/src/mcp/knowledge.ts +554 -0
- package/src/mcp/server.ts +113 -18
- package/src/metrics/benchmark.ts +21 -0
- package/src/parity/check.ts +309 -0
- package/src/parity/claims.ts +259 -0
- package/src/parity/resolve.ts +160 -0
- package/src/query/handoff.ts +326 -0
- package/src/query/load-index.ts +53 -1
- package/src/query/query.ts +92 -59
- package/src/query/search.ts +289 -92
- package/src/query/text.ts +155 -0
- package/src/reconciliation/reconcile.ts +148 -15
- package/src/render/data.ts +356 -0
- package/src/render/engine.ts +398 -0
- package/src/render/generated.ts +77 -0
- package/src/render/render.ts +209 -0
- package/src/render/template-source.ts +52 -0
- package/src/render/templates.ts +289 -0
- package/src/report/html.ts +23 -17
- package/src/retrieval/bm25.ts +161 -0
- package/src/retrieval/project.ts +495 -0
- package/src/retrieval/rank.ts +383 -0
- package/src/retrieval/weights.ts +39 -0
- package/src/retriever/doc-bridge-retriever.ts +100 -15
- package/src/rules/engine.ts +45 -12
- package/src/safety/repository.ts +1 -1
- package/src/schemas/agent-handoff.ts +56 -0
- package/src/schemas/budget.ts +37 -0
- package/src/schemas/doc-bridge-index.ts +53 -2
- package/src/schemas/enrichment.ts +369 -0
- package/src/schemas/json-schemas.ts +39 -2
- package/src/schemas/knowledge.ts +19 -3
- package/src/schemas/retrieval-index.ts +152 -0
- package/src/shims/graphology.d.ts +91 -0
- package/src/study/adjudication.ts +196 -0
- package/src/study/execution.ts +350 -0
- package/src/study/expectations.ts +219 -0
- package/src/study/metrics.ts +467 -0
- package/src/study/protocol.ts +271 -0
- package/src/study/provider-cli.ts +115 -0
- package/src/study/provider-telemetry.ts +47 -0
- package/src/study/quality-scorecard.ts +164 -0
- package/src/study/runner.ts +461 -0
- package/src/study/task-suite.ts +321 -0
- package/src/study/verification.ts +134 -0
- package/src/validate.ts +8 -5
- package/src/version.ts +1 -1
- package/src/workflow/engine.ts +36 -11
- package/dist/index-C2PCQSrB.d.ts +0 -2251
- package/scripts/verification-harness.mjs +0 -483
package/docs/spec/cli.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Complete command reference for indexing, querying, gates, doctor, m
|
|
|
5
5
|
|
|
6
6
|
# ak-docs CLI
|
|
7
7
|
|
|
8
|
-
Command-line interface for **`@agentskit/doc-bridge`**. The
|
|
8
|
+
Command-line interface for **`@agentskit/doc-bridge`**. The package publishes two executables: `ak-docs` is the product CLI and `ak-verify` is the verification-harness wrapper.
|
|
9
9
|
|
|
10
10
|
## Naming
|
|
11
11
|
|
|
@@ -13,11 +13,17 @@ Command-line interface for **`@agentskit/doc-bridge`**. The npm package is scope
|
|
|
13
13
|
|------|------|
|
|
14
14
|
| npm package | `@agentskit/doc-bridge` |
|
|
15
15
|
| CLI binary | `ak-docs` |
|
|
16
|
-
|
|
|
16
|
+
| Verification binary | `ak-verify` |
|
|
17
|
+
| Primary config filename | `doc-bridge.config.ts` |
|
|
17
18
|
| GitHub repo | `AgentsKit-io/doc-bridge` |
|
|
18
19
|
|
|
19
20
|
Install the package, run `ak-docs` — not `doc-bridge` on the shell.
|
|
20
21
|
|
|
22
|
+
The primary filename is shown for readability. Discovery also accepts
|
|
23
|
+
`doc-bridge.config.mts`, `.js`, `.mjs`, `.json`, and the `docBridge` field in
|
|
24
|
+
`package.json`; see the [configuration contract](./config-v1.md#discovery-order)
|
|
25
|
+
for the authoritative order.
|
|
26
|
+
|
|
21
27
|
## Why a separate binary
|
|
22
28
|
|
|
23
29
|
| Choice | Rationale |
|
|
@@ -39,7 +45,8 @@ pnpm add -D @agentskit/doc-bridge
|
|
|
39
45
|
{
|
|
40
46
|
"name": "@agentskit/doc-bridge",
|
|
41
47
|
"bin": {
|
|
42
|
-
"ak-docs": "./bin/ak-docs.js"
|
|
48
|
+
"ak-docs": "./bin/ak-docs.js",
|
|
49
|
+
"ak-verify": "./bin/ak-verify.js"
|
|
43
50
|
}
|
|
44
51
|
}
|
|
45
52
|
```
|
|
@@ -58,8 +65,8 @@ pnpm add -D @agentskit/doc-bridge
|
|
|
58
65
|
| `ak-docs doctor [--text] [--badge] [--write-badge]` | Coverage score, gaps, gates, shields.io badge |
|
|
59
66
|
| `ak-docs index` | Build `DocBridgeIndex` + optional `llms.txt` |
|
|
60
67
|
| `ak-docs index --watch` | Debounced rebuild on agent/human doc changes |
|
|
61
|
-
| `ak-docs query <target> [--agent] [--text]` | Resolve package/module/intent/change → handoff JSON or text |
|
|
62
|
-
| `ak-docs search <term> [--agent] [--text]` |
|
|
68
|
+
| `ak-docs query <target> [--agent] [--text]` | Resolve package/area/module/document/intent/change → handoff JSON or text |
|
|
69
|
+
| `ak-docs search <term> [--agent] [--explain] [--mode=<mode>] [--context-budget=<tokens>] [--text]` | Ranked search over the retrieval projection; `--explain` names every scoring component and the matched terms, and agent mode bounds the context it returns to a task-specific budget |
|
|
63
70
|
| `ak-docs ask <question>` | Human-readable local consult mode: search + best match + next handoff commands; no LLM |
|
|
64
71
|
| `ak-docs ask` | Interactive local REPL in a TTY; commands: `search <term>`, `read <id-or-path>`, `open <id-or-path>`, `resolve <id>`, `gate [id]`, `exit` |
|
|
65
72
|
| `ak-docs retrieve <query>` | Hybrid local/federated retriever chunks; deterministic local first |
|
|
@@ -68,13 +75,26 @@ pnpm add -D @agentskit/doc-bridge
|
|
|
68
75
|
| `ak-docs memory ingest` | Normalize local memory files (`.agent-memory/**/*.md`, `.cursor/rules/*.mdc`) into `MemoryCandidate[]` |
|
|
69
76
|
| `ak-docs memory classify` | Deterministically route candidates to agent/human/playbook/discard |
|
|
70
77
|
| `ak-docs memory promote` | Build draft-only promotion body with safety scan; never auto-merges |
|
|
71
|
-
| `ak-docs memory promote --pr
|
|
78
|
+
| `ak-docs memory promote --pr --dry-run [--force]` | Write a local draft and print the `git`/`gh` commands; does not execute them |
|
|
79
|
+
| `ak-docs memory promote --pr [--force]` | Write the draft, commit/push it, and open a GitHub draft PR via `gh` |
|
|
72
80
|
| `ak-docs registry topology` | Print the `doc-curator` topology for AgentsKit/Registry composition |
|
|
81
|
+
| `ak-docs suggest [--documentation] --json` | Run the configured Registry agent module or CLI and persist its typed proposal; optionally include the bounded documentation-audit context |
|
|
82
|
+
| `ak-docs enrich [--json\|--text]` | Run the enrichment stage: context packs to the configured Registry roles, deterministic validators, the overlay at `.doc-bridge/enrich/overlay.json`. Zero agent calls over an unchanged repository |
|
|
83
|
+
| `ak-docs enrich list \| approve <proposalId> --by <name> \| reject <proposalId> --by <name> [--reason <text>]` | Review pending enrichment proposals; a decision is recorded through the ecosystem approval gate under `.doc-bridge/approvals/`, bound to the proposal id and the target content hash |
|
|
84
|
+
| `ak-docs check --enrich` | `check` with the `enrich` stage between `reconcile` and `evaluate`; a failed enrichment is reported in `enrichment` and never changes the check result |
|
|
85
|
+
| `ak-docs enrich --retrieval-delta [--json\|--text]` | `enrich`, then the golden suite with and without the accepted overlay on the same snapshot. Exits 1 when the overlay lowers hit@3 |
|
|
86
|
+
| `ak-docs bench retrieval <suite.json> --overlay [--json\|--text]` | The overlay on disk measured against a suite: both indexes projected from one snapshot, no index on disk required. Exits 1 on a hit@3 regression |
|
|
87
|
+
| `ak-docs study expectations <task-suite.json> --expectations <local.json> [--index <index.json>] [--repository <id>]` | Check a study round's mechanical retrieval expectations through the benchmark. Exits 1 when a reference does not resolve or a case misses |
|
|
73
88
|
| `ak-docs playbook draft` | Build a draft Playbook feedback payload from local memory candidates |
|
|
74
89
|
| `ak-docs playbook pattern [--text]` | Export published Doc Bridge Playbook pattern (OKF markdown / JSON) |
|
|
75
90
|
| `ak-docs list <kind> [--text]` | List packages, apps, intents, … |
|
|
76
|
-
| `ak-docs gate run [
|
|
91
|
+
| `ak-docs gate run [gate-id]` | Run resolved configured documentation gates; an optional id narrows the run to one gate |
|
|
77
92
|
| `ak-docs conformance run documentation-standard-v1 [--text\|--json]` | Run the stable ecosystem documentation profile with evidence and remediation |
|
|
93
|
+
| `ak-docs audit documentation [--text\|--json]` | Measure documentation quality and compare documentation claims with the observed project graph |
|
|
94
|
+
| `ak-docs parity [--claims <file>] [--json\|--text]` | Check the public claim registry against what the repository can prove: stale, missing, contradictory and not-analyzed claims, each with an owner, an exact source and a remediation. Exits 1 on a blocking finding |
|
|
95
|
+
| `ak-docs render <llms.txt\|area\|ownership\|change-digest\|overlay-review> [--data <artifact>] [--output <path>] [--print-template] [--json]` | Render the canonical artifacts as Markdown from bundled or project templates (`render.templates`); deterministic, no agent. See [Render v1](./render-v1.md) |
|
|
96
|
+
| `ak-docs bench retrieval <suite.json> [--index <file>] [--baseline <file>] [--limit <n>] [--text\|--json]` | Measure retrieval quality against a golden query suite: hit@1, hit@3, mean reciprocal rank, context bytes and approximate tokens. Exits non-zero on a hit@3 regression against the baseline. No model, no network |
|
|
97
|
+
| `ak-docs bench retrieval <suite.json> --baseline <file> --update-baseline --by <name> [--reason <text>]` | Record the measured figures as the approved baseline. A normal run never writes one |
|
|
78
98
|
| `ak-docs mcp` | Start MCP server (stdio default) |
|
|
79
99
|
| `ak-docs mcp install --cursor \| --claude` | Write MCP server config for Cursor or Claude Desktop |
|
|
80
100
|
|
|
@@ -94,7 +114,7 @@ Peers: `@agentskit/rag`, `@agentskit/ink`, `@agentskit/adapters`, `@agentskit/me
|
|
|
94
114
|
| Flag | Description |
|
|
95
115
|
|------|-------------|
|
|
96
116
|
| `--config <path>` | Config file (default: auto-discover) |
|
|
97
|
-
| `--json` / `--text` | Output format for non-agent commands (default: json); `--agent`
|
|
117
|
+
| `--json` / `--text` | Output format for non-agent commands (default: formatted json); `--agent` emits compact machine-readable JSON, while `--text` remains human-readable |
|
|
98
118
|
| `--chat` | Request planned intelligence-backed ask mode; errors clearly until `intelligence.adapter` and RAG/chat support are configured |
|
|
99
119
|
| `--help` | Command help |
|
|
100
120
|
|
|
@@ -104,7 +124,7 @@ Peers: `@agentskit/rag`, `@agentskit/ink`, `@agentskit/adapters`, `@agentskit/me
|
|
|
104
124
|
ak-docs index
|
|
105
125
|
ak-docs query ownership auth --agent
|
|
106
126
|
ak-docs query ownership auth --text
|
|
107
|
-
ak-docs search "sidecar transport" --agent
|
|
127
|
+
ak-docs search "sidecar transport" --agent --mode=discovery --context-budget=256
|
|
108
128
|
ak-docs list packages --text
|
|
109
129
|
ak-docs gate run
|
|
110
130
|
ak-docs mcp
|
|
@@ -141,7 +161,7 @@ CLI is a thin wrapper over the same exports.
|
|
|
141
161
|
pnpm docs:internal:query … # private dogfood wrapper → ak-docs query …
|
|
142
162
|
```
|
|
143
163
|
|
|
144
|
-
|
|
164
|
+
`ak-docs` is the primary product CLI. `ak-verify` is the portable verification-harness entry point used to prove repository work against a declared contract.
|
|
145
165
|
|
|
146
166
|
## See also
|
|
147
167
|
|
package/docs/spec/config-v1.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Configure documentation corpora, ownership routing, conformance, an
|
|
|
5
5
|
|
|
6
6
|
# doc-bridge config contract v1
|
|
7
7
|
|
|
8
|
-
`doc-bridge.config.ts` (or `.js`, `.mjs`, `.json`, or `package.json` → `docBridge`) is the
|
|
8
|
+
`doc-bridge.config.ts` (or `.js`, `.mjs`, `.json`, or `package.json` → `docBridge`) is the v1 integration point for any project. Layer 0 fields are sufficient to run `index`, `query`, and MCP without an LLM.
|
|
9
9
|
|
|
10
10
|
Reconciliation summaries also expose deterministic `diagnosticsByCode` and
|
|
11
11
|
`diagnosticsByStatus` maps. They are additive rollups for agents and dashboards;
|
|
@@ -36,7 +36,13 @@ doc-bridge.config.json
|
|
|
36
36
|
package.json → "docBridge" field (subset, JSON only)
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
TypeScript/JavaScript configs are static in
|
|
39
|
+
TypeScript/JavaScript configs are static in v1: `defineConfig` imports are supported, but arbitrary imports are not. YAML config files are planned.
|
|
40
|
+
|
|
41
|
+
Dynamic-loading coverage is evidence-backed. Literal strings, constant aliases,
|
|
42
|
+
parenthesized strings, and string concatenations are resolved without executing
|
|
43
|
+
repository code. Runtime-dependent `import()` and `require()` expressions remain
|
|
44
|
+
`partial`/`not-analyzed`, and the coverage entry records representative
|
|
45
|
+
file-and-line evidence for each observed loading site (up to the schema limit).
|
|
40
46
|
|
|
41
47
|
## TypeScript shape (authoritative)
|
|
42
48
|
|
|
@@ -82,9 +88,15 @@ export default {
|
|
|
82
88
|
/** Optional reconciliation scope and orphan-document policy */
|
|
83
89
|
reconciliation?: ReconciliationConfig
|
|
84
90
|
|
|
91
|
+
/** Optional retrieval tuning: corpus projection, field weights, BM25 parameters */
|
|
92
|
+
retrieval?: RetrievalConfig
|
|
93
|
+
|
|
85
94
|
/** Optional resumable workflow state */
|
|
86
95
|
workflow?: WorkflowConfig
|
|
87
96
|
|
|
97
|
+
/** Optional project templates for `ak-docs render`, by template name */
|
|
98
|
+
render?: RenderConfig
|
|
99
|
+
|
|
88
100
|
/** Optional report publication privacy; private is the default */
|
|
89
101
|
report?: { privacy?: 'private' | 'anonymized' }
|
|
90
102
|
} satisfies DocBridgeConfigV1
|
|
@@ -295,7 +307,9 @@ by Nx plugins are intentionally not inferred by this read-only adapter.
|
|
|
295
307
|
| Screen / feature | `id` in `screens/` or `features/` | MDX slug |
|
|
296
308
|
| Flow / recipe | `id` in `flows/` | docs slug |
|
|
297
309
|
|
|
298
|
-
Plugins document their join convention
|
|
310
|
+
Plugins document their join convention. The orphan-link gate only runs when the
|
|
311
|
+
corresponding gate is enabled (for example, `human-guide-links`); the `minimal`
|
|
312
|
+
preset does not enable that gate.
|
|
299
313
|
|
|
300
314
|
---
|
|
301
315
|
|
|
@@ -341,14 +355,14 @@ type GateId =
|
|
|
341
355
|
| Preset | Gates |
|
|
342
356
|
|--------|-------|
|
|
343
357
|
| `minimal` | `index-freshness` |
|
|
344
|
-
| `standard` | + `human-guide-links` in
|
|
345
|
-
| `strict` | + `okf-type` in
|
|
358
|
+
| `standard` | + `human-guide-links` in v1 |
|
|
359
|
+
| `strict` | + `okf-type` in v1 |
|
|
346
360
|
|
|
347
361
|
Implemented gates include `index-freshness`, `human-guide-links`, `okf-type`, `docs-style`, and the opt-in `documentation-standard-v1`. For v1 compatibility, `link-rot`, `routing-currency`, and `bootstrap-size` remain accepted as reserved IDs; including one emits `AK_DOCS_RESERVED_GATE` and does not claim that the gate ran. Unknown IDs are rejected.
|
|
348
362
|
|
|
349
363
|
### Structural vs style validation
|
|
350
364
|
|
|
351
|
-
|
|
365
|
+
These gates are deterministic lint checks, not editorial grading:
|
|
352
366
|
|
|
353
367
|
| Gate | Kind | What it proves |
|
|
354
368
|
|------|------|----------------|
|
|
@@ -357,7 +371,7 @@ Alpha gates are deterministic lint checks, not editorial grading:
|
|
|
357
371
|
| `okf-type` | OKF lint | Agent docs have required `type:` frontmatter when strict/required |
|
|
358
372
|
| `docs-style` | style lint | Opt-in deterministic profile checks for title, purpose, audience, examples, owner/source, task orientation, and stale wording |
|
|
359
373
|
|
|
360
|
-
`docs-style` supports `google-dev-docs`, `playbook-okf`, and `custom` profiles. It is not part of the default
|
|
374
|
+
`docs-style` supports `google-dev-docs`, `playbook-okf`, and `custom` profiles. It is not part of the default path and does not grade prose quality; it checks for explicit structural signals. LLM critique remains planned optional behavior.
|
|
361
375
|
|
|
362
376
|
---
|
|
363
377
|
|
|
@@ -407,9 +421,11 @@ report status, commands, and the recorded stable-publication HITL decision.
|
|
|
407
421
|
```ts
|
|
408
422
|
type ReconciliationConfig = {
|
|
409
423
|
/** Semantic comparison level; discovery still preserves raw file relations. */
|
|
410
|
-
scope?: 'file' | 'module' | 'package'
|
|
424
|
+
scope?: 'file' | 'module' | 'area' | 'package'
|
|
411
425
|
/** Observed relation kinds that require documentation declarations. */
|
|
412
426
|
requiredRelationKinds?: string[]
|
|
427
|
+
/** Limit missing-declaration findings to relations between internal project entities. */
|
|
428
|
+
requiredRelationTargets?: 'all' | 'internal'
|
|
413
429
|
/** Emit info findings for documentation with no observed package/module join. */
|
|
414
430
|
includeOrphanedDocuments?: boolean
|
|
415
431
|
}
|
|
@@ -417,6 +433,14 @@ type ReconciliationConfig = {
|
|
|
417
433
|
|
|
418
434
|
Use `scope: 'package'` for monorepos where file imports should be compared as package-level architecture evidence. Omit `requiredRelationKinds` to require all observed kinds; an empty array intentionally disables undocumented-relation findings and must be treated as an explicit exemption.
|
|
419
435
|
|
|
436
|
+
Use `scope: 'area'` for a single-package repository. At package scope such a repository aggregates
|
|
437
|
+
every internal relation into one self-loop, which the comparison skips — a thousand observed
|
|
438
|
+
relations and nothing to report. At area scope the same relations become edges between
|
|
439
|
+
directories, which a declaration can confirm or fail to. On this repository that is the difference
|
|
440
|
+
between zero diagnostics and 177.
|
|
441
|
+
|
|
442
|
+
Use `requiredRelationTargets: 'internal'` when the repository wants package or module architecture declarations without requiring Markdown to enumerate every external library import. External relations remain in the raw snapshot and report as evidence; they simply do not generate missing-declaration findings.
|
|
443
|
+
|
|
420
444
|
The reconciliation documentation summary reports package health separately from
|
|
421
445
|
relation findings: `fresh` means the package has coverage documentation and no
|
|
422
446
|
known discrepancy; `stale` means a declared relation conflicts with observed
|
|
@@ -426,6 +450,15 @@ could not be verified. Package-level aggregation preserves the relation
|
|
|
426
450
|
endpoints used for this classification, so an undocumented relation cannot be
|
|
427
451
|
reported alongside a falsely `fresh` package.
|
|
428
452
|
|
|
453
|
+
The same summary keeps document inventory separate from coverage claims:
|
|
454
|
+
`documentCount` and `documentClassificationCounts` describe every discovered
|
|
455
|
+
Markdown document, while `documentedDocumentCount` and
|
|
456
|
+
`documentedDocumentClassificationCounts` describe documents that declare a
|
|
457
|
+
knowledge relation. The classification keys are analyzer output (for example
|
|
458
|
+
`agent`, `human`, `project`, `archive`, and `unclassified`); consumers must not
|
|
459
|
+
interpret total repository Markdown coverage as agent-corpus coverage. Use the
|
|
460
|
+
`agent` pair when measuring the configured agent documentation surface.
|
|
461
|
+
|
|
429
462
|
## `report` (optional)
|
|
430
463
|
|
|
431
464
|
```ts
|
|
@@ -437,6 +470,128 @@ report?: {
|
|
|
437
470
|
|
|
438
471
|
`private` is the default and keeps local evidence useful for debugging. `anonymized` is intended for reports shared outside the repository: it preserves counts, relation kinds, topology, and coverage status while removing project-specific identity and evidence content. The generated HTML and every lazy chunk use the same mode.
|
|
439
472
|
|
|
473
|
+
## `analysis.areas` (optional)
|
|
474
|
+
|
|
475
|
+
```ts
|
|
476
|
+
areas?: {
|
|
477
|
+
/** Directory levels below a source root that form an area. Default 1. */
|
|
478
|
+
depth?: number
|
|
479
|
+
/** Directories that contain areas rather than being one. */
|
|
480
|
+
roots?: string[]
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
An **area** is the unit of architecture between a package and a file: a directory that groups
|
|
485
|
+
modules. `src` is not an area in any useful sense; `src/query` is. So `roots` names the
|
|
486
|
+
directories that hold areas — by default `src`, `lib`, `app`, `source`, `server`, `client`,
|
|
487
|
+
`packages`, `apps` — and `depth` says how many levels below such a root an area sits.
|
|
488
|
+
|
|
489
|
+
Areas are derived, never declared, with one exception that matters: **any path an ownership record
|
|
490
|
+
names becomes an area**, whatever the convention says. A configuration that reads
|
|
491
|
+
`path: "src/mcp"` is a human stating that the directory is a unit, and the graph should have an
|
|
492
|
+
entity for it. Such an area carries `metadata.ownershipId`, which is what lets an agent document
|
|
493
|
+
declaring `id` plus `editRoot` resolve to the thing it owns.
|
|
494
|
+
|
|
495
|
+
Each module belongs to exactly one area — the most specific one containing it — so containment
|
|
496
|
+
stays a tree and an aggregation at area scope has one answer per module. Nested areas keep their
|
|
497
|
+
shape: `area:src` holds what sits directly in `src`, with `area:src/query` recorded as its child.
|
|
498
|
+
|
|
499
|
+
An ownership path that no observed module or document lives under is reported as
|
|
500
|
+
`OWNERSHIP_PATH_UNOBSERVED` with status `stale-or-unverified`. A renamed directory is otherwise
|
|
501
|
+
invisible: the handoff still resolves, it just points an agent somewhere that no longer holds what
|
|
502
|
+
it claims.
|
|
503
|
+
|
|
504
|
+
## `retrieval` (optional)
|
|
505
|
+
|
|
506
|
+
```ts
|
|
507
|
+
type RetrievalConfig = {
|
|
508
|
+
corpus?: {
|
|
509
|
+
/** Project repository documents and modules into `index.knowledge`. Default: true. */
|
|
510
|
+
enabled?: boolean
|
|
511
|
+
}
|
|
512
|
+
/** Per-field BM25 multipliers. Unknown field names are ignored. */
|
|
513
|
+
weights?: {
|
|
514
|
+
id?: number
|
|
515
|
+
symbols?: number
|
|
516
|
+
title?: number
|
|
517
|
+
path?: number
|
|
518
|
+
tags?: number
|
|
519
|
+
description?: number
|
|
520
|
+
body?: number
|
|
521
|
+
}
|
|
522
|
+
/** BM25 parameters: `k1` term-frequency saturation, `b` length-normalization strength (0–1). */
|
|
523
|
+
params?: { k1?: number; b?: number }
|
|
524
|
+
}
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
Search ranks records with field-weighted BM25 plus boosts for exact identity, so an agent that
|
|
528
|
+
types an exported symbol, a file path or a package name lands on that thing rather than on
|
|
529
|
+
whatever mentions it most. The defaults are:
|
|
530
|
+
|
|
531
|
+
| Field | Weight | Why |
|
|
532
|
+
| --- | --- | --- |
|
|
533
|
+
| `id` | 8 | The query names the record |
|
|
534
|
+
| `symbols` | 7 | An agent that types an exported name wants the module that defines it |
|
|
535
|
+
| `title` | 6 | A heading is what a document is about |
|
|
536
|
+
| `path` | 4 | Location is identity for a module |
|
|
537
|
+
| `tags` | 3 | Audience and kind |
|
|
538
|
+
| `description` | 2 | A summary a human wrote |
|
|
539
|
+
| `body` | 1 | A passing mention is the weakest evidence |
|
|
540
|
+
|
|
541
|
+
Tuning is configuration, not code: the resolved weights, parameters and stopword-lexicon version
|
|
542
|
+
are recorded in `index.retrieval`, so a retuned ranking is a different artifact with a different
|
|
543
|
+
content hash rather than a silent behaviour change. Re-run `ak-docs index` after changing them,
|
|
544
|
+
and re-approve the [retrieval benchmark](../bench/README.md) baseline if you gate on it.
|
|
545
|
+
|
|
546
|
+
`corpus.enabled: false` keeps the index to the curated agent corpus only. The index is then
|
|
547
|
+
smaller and builds faster, at the cost of the retrieval it exists for: an exported-symbol or
|
|
548
|
+
file-path query has nothing to resolve against. Turn it off only for a repository whose source is
|
|
549
|
+
not the thing agents ask about.
|
|
550
|
+
|
|
551
|
+
## `render` (optional)
|
|
552
|
+
|
|
553
|
+
```ts
|
|
554
|
+
type RenderConfig = {
|
|
555
|
+
/** Project templates that replace the bundled ones, by name, as paths relative to the project root. */
|
|
556
|
+
templates?: Partial<Record<'llms.txt' | 'area' | 'ownership' | 'change-digest' | 'overlay-review', string>>
|
|
557
|
+
}
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
`ak-docs render <name>` renders the canonical artifacts as Markdown from a bundled template; a
|
|
561
|
+
path under `templates` replaces that template entirely, without a code change. Templates use
|
|
562
|
+
knap syntax and see only the variables Doc Bridge computes — see [Render v1](./render-v1.md) for
|
|
563
|
+
each template's variables and `ak-docs render <name> --print-template` for the bundled source.
|
|
564
|
+
The `llms.txt` override is also what `ak-docs index` writes.
|
|
565
|
+
|
|
566
|
+
```json
|
|
567
|
+
{
|
|
568
|
+
"render": {
|
|
569
|
+
"templates": { "area": "templates/area.md" }
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
## `safety` (optional)
|
|
575
|
+
|
|
576
|
+
```ts
|
|
577
|
+
type RepositorySafetyConfig = {
|
|
578
|
+
/** Additional project-relative glob patterns excluded from repository discovery. */
|
|
579
|
+
exclude?: string[]
|
|
580
|
+
maxFiles?: number
|
|
581
|
+
maxBytes?: number
|
|
582
|
+
maxTimeMs?: number
|
|
583
|
+
maxMemoryMb?: number
|
|
584
|
+
redactSecrets?: boolean
|
|
585
|
+
}
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
Discovery always excludes unsafe or generated trees by default, including
|
|
589
|
+
`.git`, `node_modules`, `dist`, `build`, `coverage`, `.doc-bridge`, `.next`,
|
|
590
|
+
`out`, `.turbo`, `.svelte-kit`, `.mcpb-build`, and `.mcpb-output`, plus common
|
|
591
|
+
secret files. `safety.exclude` adds project-specific patterns; it does not
|
|
592
|
+
replace the built-in safety boundary. Excluded files remain outside the
|
|
593
|
+
snapshot and are represented by analyzer coverage when relevant.
|
|
594
|
+
|
|
440
595
|
## `analysis` (optional)
|
|
441
596
|
|
|
442
597
|
```ts
|
|
@@ -467,6 +622,11 @@ When a configured method receives an identifier bound to a
|
|
|
467
622
|
static import, Doc Bridge records a `runtime-wiring` relation with
|
|
468
623
|
`metadata.detection: 'runtime-wiring-static'`. Reflective, computed, or
|
|
469
624
|
otherwise unbound targets remain explicit `not-analyzed` coverage entries.
|
|
625
|
+
Dynamic `import()` and `require()` targets are resolved when their specifier is
|
|
626
|
+
a literal, a `const` string binding, a parenthesized static expression, or a
|
|
627
|
+
concatenation of other statically known strings. Expressions that depend on
|
|
628
|
+
runtime values remain explicit `not-analyzed` coverage entries; Doc Bridge does
|
|
629
|
+
not execute repository code to guess their targets.
|
|
470
630
|
Test/spec modules are excluded from this signal by default because their
|
|
471
631
|
registrations usually construct fixtures rather than production architecture;
|
|
472
632
|
set `includeTestRuntimeWiring: true` when test wiring is part of the contract.
|
|
@@ -565,14 +725,38 @@ type IntelligenceConfig = {
|
|
|
565
725
|
agentId?: string
|
|
566
726
|
agentRoot?: string
|
|
567
727
|
runnerModule?: string
|
|
728
|
+
cli?: {
|
|
729
|
+
/** Executable name or absolute path; arguments are passed without a shell. */
|
|
730
|
+
command: string
|
|
731
|
+
args?: string[]
|
|
732
|
+
}
|
|
568
733
|
deterministic?: boolean
|
|
734
|
+
maxInputBytes?: number
|
|
569
735
|
timeoutMs?: number
|
|
570
736
|
maxTokens?: number
|
|
571
737
|
maxResponseBytes?: number
|
|
572
738
|
maxConcurrency?: number
|
|
739
|
+
/** Byte budget of one enrichment context pack. Default 65536 (4096..4000000). */
|
|
740
|
+
maxPackBytes?: number
|
|
741
|
+
/**
|
|
742
|
+
* Which installed agent plays which enrichment role (see Enrichment overlay v1).
|
|
743
|
+
* Default: the configured agent as curator only. The adjudicator must be a
|
|
744
|
+
* different identity from the curator and the reviewer.
|
|
745
|
+
*/
|
|
746
|
+
roles?: {
|
|
747
|
+
curator?: EnrichmentRole
|
|
748
|
+
reviewer?: EnrichmentRole
|
|
749
|
+
adjudicator?: EnrichmentRole
|
|
750
|
+
}
|
|
573
751
|
}
|
|
574
752
|
}
|
|
575
753
|
|
|
754
|
+
type EnrichmentRole = {
|
|
755
|
+
enabled?: boolean // default: true when the role is declared; curator on by default
|
|
756
|
+
agentId?: string // default: intelligence.registry.agentId
|
|
757
|
+
promptVersion?: string // default: '1'; part of every proposal id and cache key
|
|
758
|
+
}
|
|
759
|
+
|
|
576
760
|
type MemoryAdapterId =
|
|
577
761
|
| 'playbook-memory' // .agent-memory/MEMORY.md layout
|
|
578
762
|
| 'cursor-rules' // .cursor/rules/*.mdc
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Documentation audit v1
|
|
3
|
+
description: Configurable deterministic checks for documentation quality and agreement with repository structure.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Documentation audit v1
|
|
7
|
+
|
|
8
|
+
Run the repository audit after discovery and reconciliation:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
ak-docs audit documentation --json
|
|
12
|
+
ak-docs audit documentation --text
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The JSON report is versioned and content-hashed. It includes criterion-level evidence, metrics, blocking findings, generated-document freshness boundaries, and limitations.
|
|
16
|
+
|
|
17
|
+
## Configuration
|
|
18
|
+
|
|
19
|
+
Configure the optional `audit.documentation` block in `doc-bridge.config.json`:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"audit": {
|
|
24
|
+
"documentation": {
|
|
25
|
+
"criticalPaths": ["src/cli/**", "src/mcp/**"],
|
|
26
|
+
"generatedPaths": ["docs/generated/**"],
|
|
27
|
+
"minWords": 20,
|
|
28
|
+
"requiredSections": ["Usage", "Examples"],
|
|
29
|
+
"requireExamples": true,
|
|
30
|
+
"exactDuplicates": true,
|
|
31
|
+
"defaultTier": "tier-2",
|
|
32
|
+
"tierRules": [
|
|
33
|
+
{ "pattern": "docs/agent-corpus/**", "tier": "tier-0", "critical": true },
|
|
34
|
+
{ "pattern": "docs/adr/**", "tier": "tier-1" }
|
|
35
|
+
],
|
|
36
|
+
"requiredCriticalMetadata": ["owner", "lifecycle", "sourceOfTruth", "validationPath"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `criticalPaths` makes high-confidence contradictions and missing structure documentation blocking.
|
|
43
|
+
- `generatedPaths` excludes generated documents from manual quality checks and reports freshness as `not-analyzed`; configure the generator's real check separately.
|
|
44
|
+
- `requiredSections`, `minWords`, and `requireExamples` are opt-in to avoid false positives for indexes and short reference files.
|
|
45
|
+
- `exactDuplicates` detects identical normalized bodies. It does not claim that similar prose is redundant.
|
|
46
|
+
- `defaultTier` and ordered `tierRules` classify every included document as `tier-0`, `tier-1`, or `tier-2`. A document may override the configured tier with `tier` frontmatter; `critical: true` frontmatter or a rule marks it critical.
|
|
47
|
+
- Critical documents are checked for `owner`, `lifecycle`, `sourceOfTruth`, and `validationPath` metadata. `requiredCriticalMetadata` can reduce this list for a declared project profile.
|
|
48
|
+
|
|
49
|
+
The audit reuses the canonical discovery snapshot and reconciliation report. A finding is not proof that prose is wrong unless its evidence and confidence say so. `not-analyzed` is intentional and includes semantic contradiction, unnecessary content, and agent-review boundaries. A document title is satisfied by a Markdown level-one heading, a `title` frontmatter field, or a visible HTML `<h1>` used by README-style documents.
|
|
50
|
+
|
|
51
|
+
## Independent quality dimensions
|
|
52
|
+
|
|
53
|
+
Each document receives an assessment instead of one opaque quality score. The machine-readable report exposes `documentAssessments` and independent status counts for:
|
|
54
|
+
|
|
55
|
+
- correctness: deterministic reconciliation can expose evidence, but semantic correctness remains `not-analyzed` until code, configuration, tests, and applicable runtime behavior are reviewed;
|
|
56
|
+
- completeness: structural signals such as title and configured required sections are reported as `partial`, never as semantic completeness;
|
|
57
|
+
- clarity: title and basic structure are measurable, while human readability remains `not-analyzed`;
|
|
58
|
+
- agent efficiency: title and example presence are signals only; retrieval usefulness and task success require the controlled study;
|
|
59
|
+
- maintainability: owner, lifecycle, source-of-truth, and validation-path metadata are directly measurable.
|
|
60
|
+
|
|
61
|
+
Example presence and example correctness are separate. The audit reports `example.present`; `example.validation` remains `not-analyzed` unless a real validation flow supplies evidence. Similar prose, unnecessary content, and document/document semantic contradictions are intentionally deferred to the Registry-agent and human-adjudication path.
|