coding-agent-harness 1.0.4 → 1.0.6
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 +7 -0
- package/CONTRIBUTING.md +2 -2
- package/LICENSE +661 -21
- package/LICENSE-EXCEPTION.md +37 -0
- package/README.md +96 -4
- package/README.zh-CN.md +75 -4
- package/SKILL.md +52 -51
- package/dist/build-dist.mjs +189 -0
- package/dist/check-dist-observation.mjs +428 -0
- package/dist/check-harness.mjs +489 -0
- package/dist/check-import-graph.mjs +511 -0
- package/dist/check-runtime-emit.mjs +304 -0
- package/dist/check-type-boundaries.mjs +139 -0
- package/dist/commands/dashboard-command.mjs +80 -0
- package/dist/commands/migration-command.mjs +152 -0
- package/dist/commands/preset-command.mjs +91 -0
- package/dist/commands/task-command.mjs +324 -0
- package/dist/harness.mjs +304 -0
- package/dist/lib/capability-registry.mjs +643 -0
- package/dist/lib/check-module-parallel.mjs +227 -0
- package/dist/lib/check-profiles.mjs +414 -0
- package/dist/lib/check-task-contracts.mjs +54 -0
- package/dist/lib/core-shared.mjs +254 -0
- package/dist/lib/dashboard-data.mjs +608 -0
- package/dist/lib/dashboard-workbench.mjs +334 -0
- package/dist/lib/dashboard-writer.mjs +200 -0
- package/dist/lib/git-status-summary.mjs +45 -0
- package/dist/lib/governance-index-generator.mjs +236 -0
- package/dist/lib/governance-sync.mjs +617 -0
- package/dist/lib/governance-table-boundary.mjs +161 -0
- package/{scripts → dist}/lib/harness-core.mjs +3 -0
- package/dist/lib/harness-paths.mjs +338 -0
- package/dist/lib/lesson-maintenance.mjs +139 -0
- package/dist/lib/markdown-utils.mjs +193 -0
- package/dist/lib/migration-planner.mjs +439 -0
- package/dist/lib/migration-support.mjs +317 -0
- package/dist/lib/phase-kind.mjs +46 -0
- package/dist/lib/preset-audit-contracts.mjs +40 -0
- package/dist/lib/preset-engine.mjs +516 -0
- package/dist/lib/preset-registry.mjs +831 -0
- package/dist/lib/preset-resource-contracts.mjs +83 -0
- package/dist/lib/review-confirm-git-gate.mjs +244 -0
- package/dist/lib/status-builder.mjs +87 -0
- package/{scripts → dist}/lib/status-dashboard-renderer.mjs +48 -47
- package/dist/lib/structure-migration.mjs +404 -0
- package/dist/lib/subagent-authorization-audit.mjs +198 -0
- package/dist/lib/task-audit-metadata.mjs +376 -0
- package/dist/lib/task-audit-migration.mjs +355 -0
- package/dist/lib/task-completion-consistency.mjs +29 -0
- package/dist/lib/task-index.mjs +133 -0
- package/dist/lib/task-lesson-candidates.mjs +239 -0
- package/dist/lib/task-lesson-sedimentation.mjs +300 -0
- package/dist/lib/task-lifecycle/create-task-helpers.mjs +84 -0
- package/dist/lib/task-lifecycle/phase-sync.mjs +82 -0
- package/dist/lib/task-lifecycle/review-confirm.mjs +93 -0
- package/dist/lib/task-lifecycle/review-gates.mjs +62 -0
- package/dist/lib/task-lifecycle/review-submission.mjs +52 -0
- package/dist/lib/task-lifecycle/scaffold-provenance.mjs +54 -0
- package/dist/lib/task-lifecycle/template-files.mjs +52 -0
- package/dist/lib/task-lifecycle/text-utils.mjs +26 -0
- package/dist/lib/task-lifecycle.mjs +611 -0
- package/dist/lib/task-metadata.mjs +116 -0
- package/dist/lib/task-review-model.mjs +474 -0
- package/dist/lib/task-scanner.mjs +439 -0
- package/dist/lib/task-tombstone-commands.mjs +125 -0
- package/dist/postinstall.mjs +14 -0
- package/dist/run-built-tests.mjs +84 -0
- package/docs-release/README.md +1 -0
- package/docs-release/architecture/overview.md +13 -13
- package/docs-release/architecture/overview.zh-CN.md +13 -13
- package/docs-release/architecture/system-explainer/01-system-overview.md +218 -0
- package/docs-release/architecture/system-explainer/02-module-dependency.md +257 -0
- package/docs-release/architecture/system-explainer/03-task-lifecycle.md +304 -0
- package/docs-release/architecture/system-explainer/04-check-and-governance.md +241 -0
- package/docs-release/architecture/system-explainer/05-data-flow.md +276 -0
- package/docs-release/architecture/system-explainer/06-preset-and-migration.md +300 -0
- package/docs-release/architecture/system-explainer/README.md +67 -0
- package/docs-release/architecture/system-explainer/en-US/01-system-overview.md +227 -0
- package/docs-release/architecture/system-explainer/en-US/02-module-dependency.md +263 -0
- package/docs-release/architecture/system-explainer/en-US/03-task-lifecycle.md +319 -0
- package/docs-release/architecture/system-explainer/en-US/04-check-and-governance.md +252 -0
- package/docs-release/architecture/system-explainer/en-US/05-data-flow.md +290 -0
- package/docs-release/architecture/system-explainer/en-US/06-preset-and-migration.md +320 -0
- package/docs-release/architecture/system-explainer/en-US/README.md +70 -0
- package/docs-release/guides/agent-installation.en-US.md +22 -15
- package/docs-release/guides/agent-installation.md +23 -15
- package/docs-release/guides/contributing.md +3 -3
- package/docs-release/guides/contributing.zh-CN.md +3 -3
- package/docs-release/guides/document-audience-and-surfaces.en-US.md +10 -10
- package/docs-release/guides/document-audience-and-surfaces.md +10 -10
- package/docs-release/guides/legacy-migration-agent-prompt.md +25 -2
- package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +25 -2
- package/docs-release/guides/migration-playbook.en-US.md +63 -1
- package/docs-release/guides/migration-playbook.md +59 -1
- package/docs-release/guides/parent-control-repository-pattern.en-US.md +25 -25
- package/docs-release/guides/parent-control-repository-pattern.md +25 -25
- package/docs-release/guides/preset-development.md +28 -4
- package/docs-release/guides/repository-operating-models.en-US.md +21 -21
- package/docs-release/guides/repository-operating-models.md +21 -21
- package/docs-release/guides/task-state-machine.en-US.md +35 -18
- package/docs-release/guides/task-state-machine.md +35 -18
- package/docs-release/guides/typescript-runtime-migration-closeout.md +96 -0
- package/examples/minimal-project/AGENTS.md +2 -2
- package/examples/minimal-project/coding-agent-harness/harness.yaml +14 -0
- package/examples/minimal-project/coding-agent-harness/planning/tasks/demo-task/INDEX.md +60 -0
- package/examples/minimal-project/coding-agent-harness/planning/tasks/demo-task/progress.md +11 -0
- package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/review.md +1 -1
- package/package.json +22 -13
- package/presets/legacy-migration/preset.yaml +5 -5
- package/presets/legacy-migration/templates/execution_strategy.append.md +1 -1
- package/presets/lesson-sedimentation/preset.yaml +3 -3
- package/presets/module/preset.yaml +2 -2
- package/presets/module/templates/execution_strategy.append.md +1 -1
- package/presets/module/templates/task_plan.append.md +3 -3
- package/presets/standard-task/preset.yaml +2 -2
- package/references/adversarial-review-standard.md +2 -2
- package/references/agents-md-pattern.md +14 -14
- package/references/cadence-ledger.md +1 -1
- package/references/ci-cd-standard.md +1 -1
- package/references/delivery-operating-model-standard.md +4 -4
- package/references/docs-directory-standard.md +65 -159
- package/references/external-source-intake-standard.md +10 -10
- package/references/harness-ledger.md +6 -6
- package/references/legacy-12-phase-bootstrap.md +2 -2
- package/references/lessons-governance.md +15 -15
- package/references/long-running-task-standard.md +6 -6
- package/references/module-parallel-standard.md +34 -34
- package/references/planning-loop.md +6 -6
- package/references/project-onboarding-audit.md +4 -4
- package/references/regression-system.md +2 -2
- package/references/repo-governance-standard.md +4 -4
- package/references/review-routing-standard.md +1 -1
- package/references/ssot-governance.md +19 -19
- package/references/taskr-gap-analysis.md +5 -5
- package/references/walkthrough-closeout.md +14 -14
- package/references/worktree-parallel.md +3 -3
- package/skills/preset-creator/references/complex-task-skeleton/brief.md +11 -0
- package/skills/preset-creator/references/complex-task-skeleton/task_plan.md +1 -1
- package/skills/preset-creator/references/preset-package-skeleton.md +5 -5
- package/templates/AGENTS.md.template +31 -29
- package/templates/architecture/README.md +4 -4
- package/templates/architecture/service-catalog.md +2 -2
- package/templates/architecture/services/service-template.md +1 -1
- package/templates/dashboard/assets/app-src/00-state.js +12 -0
- package/templates/dashboard/assets/app-src/10-router.js +3 -0
- package/templates/dashboard/assets/app-src/20-overview.js +13 -3
- package/templates/dashboard/assets/app-src/35-task-detail.js +46 -6
- package/templates/dashboard/assets/app-src/40-modules.js +1 -1
- package/templates/dashboard/assets/app-src/55-presets.js +375 -0
- package/templates/dashboard/assets/app-src/60-shared.js +3 -1
- package/templates/dashboard/assets/app-src/90-bindings.js +131 -0
- package/templates/dashboard/assets/app.css +583 -0
- package/templates/dashboard/assets/app.css.manifest.json +1 -0
- package/templates/dashboard/assets/app.js +585 -11
- package/templates/dashboard/assets/app.manifest.json +1 -0
- package/templates/dashboard/assets/css-src/00-foundation.css +4 -0
- package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +62 -0
- package/templates/dashboard/assets/css-src/45-presets.css +516 -0
- package/templates/dashboard/assets/i18n.js +144 -4
- package/templates/development/README.md +10 -10
- package/templates/development/cross-repo-debugging.md +3 -3
- package/templates/development/external-context/service-template.md +2 -2
- package/templates/development/external-source-packs/README.md +4 -4
- package/templates/integrations/README.md +4 -4
- package/templates/integrations/api-contract.md +2 -2
- package/templates/integrations/event-contract.md +2 -2
- package/templates/integrations/third-party/vendor-template.md +2 -2
- package/templates/integrations/webhook-contract.md +2 -2
- package/templates/ledger/Harness-Ledger.md +1 -1
- package/templates/planning/INDEX.md +88 -0
- package/templates/planning/brief.md +1 -1
- package/templates/planning/module_session_prompt.md +2 -1
- package/templates/planning/review.md +0 -18
- package/templates/planning/task_plan.md +5 -44
- package/templates/planning/visual_map.md +13 -9
- package/templates/planning/visual_map.simple.md +52 -0
- package/templates/planning/walkthrough.md +47 -0
- package/templates/reference/docs-library-standard.md +8 -8
- package/templates/reference/execution-workflow-standard.md +29 -2
- package/templates/reference/external-source-intake-standard.md +15 -15
- package/templates/reference/repo-governance-standard.md +1 -1
- package/templates/ssot/Module-Registry.md +1 -1
- package/templates/walkthrough/walkthrough-template.md +2 -2
- package/templates-zh-CN/AGENTS.md.template +31 -29
- package/templates-zh-CN/CLAUDE.md.template +1 -1
- package/templates-zh-CN/architecture/README.md +4 -4
- package/templates-zh-CN/architecture/service-catalog.md +2 -2
- package/templates-zh-CN/architecture/services/service-template.md +1 -1
- package/templates-zh-CN/development/README.md +10 -10
- package/templates-zh-CN/development/cross-repo-debugging.md +3 -3
- package/templates-zh-CN/development/external-context/service-template.md +2 -2
- package/templates-zh-CN/development/external-source-packs/README.md +4 -4
- package/templates-zh-CN/integrations/README.md +4 -4
- package/templates-zh-CN/integrations/api-contract.md +2 -2
- package/templates-zh-CN/integrations/event-contract.md +2 -2
- package/templates-zh-CN/integrations/third-party/vendor-template.md +2 -2
- package/templates-zh-CN/integrations/webhook-contract.md +2 -2
- package/templates-zh-CN/ledger/Harness-Ledger.md +1 -1
- package/templates-zh-CN/lessons/lesson-arch-process-change.md +1 -1
- package/templates-zh-CN/lessons/lesson-new-doc.md +3 -3
- package/templates-zh-CN/lessons/lesson-ref-change.md +4 -4
- package/templates-zh-CN/planning/INDEX.md +87 -0
- package/templates-zh-CN/planning/brief.md +1 -1
- package/templates-zh-CN/planning/module_session_prompt.md +12 -11
- package/templates-zh-CN/planning/review.md +0 -18
- package/templates-zh-CN/planning/task_plan.md +3 -63
- package/templates-zh-CN/planning/visual_map.md +14 -7
- package/templates-zh-CN/planning/visual_map.simple.md +48 -0
- package/templates-zh-CN/planning/walkthrough.md +47 -0
- package/templates-zh-CN/reference/adversarial-review-standard.md +2 -2
- package/templates-zh-CN/reference/delivery-operating-model-standard.md +3 -3
- package/templates-zh-CN/reference/docs-library-standard.md +28 -28
- package/templates-zh-CN/reference/execution-workflow-standard.md +32 -7
- package/templates-zh-CN/reference/external-source-intake-standard.md +16 -16
- package/templates-zh-CN/reference/harness-ledger-standard.md +6 -6
- package/templates-zh-CN/reference/regression-ssot-governance.md +2 -2
- package/templates-zh-CN/reference/repo-governance-standard.md +1 -1
- package/templates-zh-CN/reference/review-routing-standard.md +1 -1
- package/templates-zh-CN/reference/walkthrough-standard.md +7 -7
- package/templates-zh-CN/reference/worktree-standard.md +1 -1
- package/templates-zh-CN/regression/Cadence-Ledger.md +2 -2
- package/templates-zh-CN/ssot/Delivery-SSoT.md +3 -3
- package/templates-zh-CN/ssot/Module-Registry.md +3 -3
- package/templates-zh-CN/ssot/Regression-SSoT.md +2 -2
- package/templates-zh-CN/walkthrough/walkthrough-template.md +5 -5
- package/tsconfig.dist.json +16 -0
- package/tsconfig.json +25 -0
- package/tsconfig.runtime.json +24 -0
- package/examples/minimal-project/.harness-capabilities.json +0 -8
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/progress.md +0 -11
- package/scripts/check-harness.mjs +0 -508
- package/scripts/commands/dashboard-command.mjs +0 -67
- package/scripts/commands/migration-command.mjs +0 -96
- package/scripts/commands/preset-command.mjs +0 -73
- package/scripts/commands/task-command.mjs +0 -327
- package/scripts/harness.mjs +0 -287
- package/scripts/lib/capability-registry.mjs +0 -591
- package/scripts/lib/check-module-parallel.mjs +0 -237
- package/scripts/lib/check-profiles.mjs +0 -418
- package/scripts/lib/check-task-contracts.mjs +0 -47
- package/scripts/lib/core-shared.mjs +0 -196
- package/scripts/lib/dashboard-data.mjs +0 -412
- package/scripts/lib/dashboard-workbench.mjs +0 -257
- package/scripts/lib/dashboard-writer.mjs +0 -198
- package/scripts/lib/git-status-summary.mjs +0 -46
- package/scripts/lib/governance-index-generator.mjs +0 -174
- package/scripts/lib/governance-sync.mjs +0 -514
- package/scripts/lib/governance-table-boundary.mjs +0 -175
- package/scripts/lib/lesson-maintenance.mjs +0 -152
- package/scripts/lib/markdown-utils.mjs +0 -158
- package/scripts/lib/migration-planner.mjs +0 -478
- package/scripts/lib/migration-support.mjs +0 -312
- package/scripts/lib/preset-audit-contracts.mjs +0 -37
- package/scripts/lib/preset-engine.mjs +0 -497
- package/scripts/lib/preset-registry.mjs +0 -627
- package/scripts/lib/preset-resource-contracts.mjs +0 -83
- package/scripts/lib/review-confirm-git-gate.mjs +0 -248
- package/scripts/lib/subagent-authorization-audit.mjs +0 -196
- package/scripts/lib/task-completion-consistency.mjs +0 -16
- package/scripts/lib/task-index.mjs +0 -93
- package/scripts/lib/task-lesson-candidates.mjs +0 -242
- package/scripts/lib/task-lesson-sedimentation.mjs +0 -326
- package/scripts/lib/task-lifecycle/review-confirm.mjs +0 -101
- package/scripts/lib/task-lifecycle/review-gates.mjs +0 -70
- package/scripts/lib/task-lifecycle/text-utils.mjs +0 -24
- package/scripts/lib/task-lifecycle.mjs +0 -649
- package/scripts/lib/task-review-model.mjs +0 -469
- package/scripts/lib/task-scanner.mjs +0 -576
- package/scripts/lib/task-tombstone-commands.mjs +0 -140
- package/scripts/postinstall.mjs +0 -14
- package/templates/walkthrough/Closeout-SSoT.md +0 -43
- package/templates-zh-CN/walkthrough/Closeout-SSoT.md +0 -42
- /package/examples/minimal-project/{docs → coding-agent-harness/governance/generated}/Harness-Ledger.md +0 -0
- /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/brief.md +0 -0
- /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/execution_strategy.md +0 -0
- /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/findings.md +0 -0
- /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/lesson_candidates.md +0 -0
- /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/task_plan.md +0 -0
- /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/visual_map.md +0 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# 01 — System Overview
|
|
2
|
+
|
|
3
|
+
## What this is and what problem it solves
|
|
4
|
+
|
|
5
|
+
Before AI coding tools (Codex, Claude Code, Gemini CLI) became widespread,
|
|
6
|
+
"task management" for developers meant Jira tickets or GitHub issues —
|
|
7
|
+
tools designed for humans that Agents can't read and can't derive verifiable state from.
|
|
8
|
+
|
|
9
|
+
**Coding Agent Harness** solves a core problem:
|
|
10
|
+
|
|
11
|
+
> When an Agent is working in your repository, how do you ensure its work is traceable,
|
|
12
|
+
> gated, and reviewable?
|
|
13
|
+
|
|
14
|
+
It's not an Agent itself, and it's not a task management tool for humans.
|
|
15
|
+
It's a **repository-native operating layer** — it gives Agents executable structured context
|
|
16
|
+
so they can resume execution from files without relying on previous chat memory.
|
|
17
|
+
|
|
18
|
+
The core design philosophy in one sentence:
|
|
19
|
+
|
|
20
|
+
> **Store important state in Markdown files that Agents can read, then use the CLI to derive
|
|
21
|
+
> status, checks, migration plans, and Dashboard views from those files.**
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Why it's called a "Harness"
|
|
26
|
+
|
|
27
|
+
"Harness" in an engineering context means a constraining device — something used to constrain,
|
|
28
|
+
guide, and measure a system's behavior without replacing it. Just like a "test harness" in
|
|
29
|
+
testing isn't the tests themselves, but the infrastructure that lets tests be organized,
|
|
30
|
+
executed, and verified.
|
|
31
|
+
|
|
32
|
+
Coding Agent Harness isn't a replacement for Agents — it's a harness for them:
|
|
33
|
+
- Tasks have a lifecycle (create → execute → review → closeout)
|
|
34
|
+
- Reviews have gates (Agents can't approve their own work)
|
|
35
|
+
- State is recorded (every change is written to Markdown, git-blammable)
|
|
36
|
+
- Humans have a review entry point (local Dashboard + Workbench review confirmation)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## The essential difference from Jira / Linear / GitHub Issues
|
|
41
|
+
|
|
42
|
+
| | Jira / Linear / GitHub Issues | Coding Agent Harness |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| Designed for | Human collaboration | Agent execution + human review |
|
|
45
|
+
| State lives in | External SaaS database | Markdown files in the repository |
|
|
46
|
+
| Can Agents read it? | Requires API integration | Read files directly |
|
|
47
|
+
| Can you git diff it? | No | Yes |
|
|
48
|
+
| Works offline? | No | Yes |
|
|
49
|
+
| Can resume execution from files? | No | Yes |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Level 0 — Four main blocks
|
|
54
|
+
|
|
55
|
+
Start at the highest level. The whole system is made up of four blocks:
|
|
56
|
+
|
|
57
|
+
```mermaid
|
|
58
|
+
flowchart LR
|
|
59
|
+
A["📦 Package\nPublished npm package\n(CLI + templates + standards + Presets)"]
|
|
60
|
+
B["📁 Target Repo\nUser's project repository\n(doc tree + state files)"]
|
|
61
|
+
C["⚙️ Runtime\nRuntime engine\n(scan + check + generate)"]
|
|
62
|
+
D["👤 Human\nHuman review entry point\n(Dashboard + review confirmation)"]
|
|
63
|
+
|
|
64
|
+
A -->|"scaffold + validate"| B
|
|
65
|
+
B -->|"read"| C
|
|
66
|
+
C -->|"generate"| D
|
|
67
|
+
D -->|"review-confirm"| B
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- **Package**: What you `npm install` — contains the CLI, templates, standards docs, and Preset packages
|
|
71
|
+
- **Target Repo**: Your project, where harness creates a `coding-agent-harness/` tree to record task state
|
|
72
|
+
- **Runtime**: The CLI runtime that scans the doc tree, validates compliance, and generates the Dashboard
|
|
73
|
+
- **Human**: Views the Dashboard in a browser, performs review confirmation in the Workbench
|
|
74
|
+
|
|
75
|
+
Note the direction of this loop: **Package writes to Target Repo, Runtime reads from Target Repo,
|
|
76
|
+
Human writes back to Target Repo via review-confirm**.
|
|
77
|
+
The whole system is a read-write loop centered on Markdown files, with no hidden state.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Level 1 — What's inside each block
|
|
82
|
+
|
|
83
|
+
### What's in the Package
|
|
84
|
+
|
|
85
|
+
```mermaid
|
|
86
|
+
flowchart TD
|
|
87
|
+
PKG["📦 Package\ncoding-agent-harness@npm"]
|
|
88
|
+
|
|
89
|
+
PKG --> CLI["harness CLI\ndist/harness.mjs\nSingle command entry point"]
|
|
90
|
+
PKG --> Lib["Core library\nscripts/lib/\n~30 modules, 6 functional layers"]
|
|
91
|
+
PKG --> Templates["Task templates\ntemplates/\nTask scaffold files (task_plan / visual_map etc.)"]
|
|
92
|
+
PKG --> References["Operating standards\nreferences/\nSpec docs that can be copied to target repos"]
|
|
93
|
+
PKG --> Presets["Preset packages\npresets/\nReusable task methods (legacy-migration / module etc.)"]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The Package is **read-only** — it provides tools and templates but stores no state.
|
|
97
|
+
All state lives in the Target Repo.
|
|
98
|
+
|
|
99
|
+
### What's in the Target Repo
|
|
100
|
+
|
|
101
|
+
```mermaid
|
|
102
|
+
flowchart TD
|
|
103
|
+
REPO["📁 Target Repo\nYour project repository"]
|
|
104
|
+
|
|
105
|
+
REPO --> Entry["AGENTS.md\nAgent entry point and routing\n(tells Agents where to find context)"]
|
|
106
|
+
REPO --> Manifest["coding-agent-harness/harness.yaml\nEnabled capabilities and structure"]
|
|
107
|
+
REPO --> Harness["coding-agent-harness/\nHarness workspace"]
|
|
108
|
+
REPO --> Docs["docs/\nReference docs and project standards"]
|
|
109
|
+
|
|
110
|
+
Harness --> Planning["planning/\nTask directory + module directory"]
|
|
111
|
+
Harness --> Ledger["governance/generated/Harness-Ledger.md\nGlobal ledger (all tasks summarized)"]
|
|
112
|
+
Harness --> Walkthrough["task-local walkthrough.md\nCloseout evidence"]
|
|
113
|
+
Docs --> Reference["coding-agent-harness/governance/standards/\nLocal operating standards (copied from Package)"]
|
|
114
|
+
Docs --> Governance["01-GOVERNANCE/\nLesson library"]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Each task corresponds to a directory under `coding-agent-harness/planning/tasks/<task-id>/`,
|
|
118
|
+
containing files like `task_plan.md`, `progress.md`, `visual_map.md`, `review.md`, etc.
|
|
119
|
+
|
|
120
|
+
### What the Runtime does
|
|
121
|
+
|
|
122
|
+
```mermaid
|
|
123
|
+
flowchart TD
|
|
124
|
+
RT["⚙️ Runtime\nharness CLI runtime"]
|
|
125
|
+
|
|
126
|
+
RT --> Scan["Scan\nRead all task files\nParse state / phases / review / Lessons"]
|
|
127
|
+
RT --> Check["Check\n9 validators verify compliance\nOutput failures / warnings"]
|
|
128
|
+
RT --> Generate["Generate\nOutput Dashboard HTML + JSON index\nOutput governance index tables"]
|
|
129
|
+
RT --> Migrate["Migrate\nAnalyze legacy project gaps\nGenerate migration action queue"]
|
|
130
|
+
RT --> Lifecycle["Lifecycle\nExecute state transition commands\nWrite Governance Sync"]
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The Runtime is **stateless** — every run re-reads from Markdown files from scratch,
|
|
134
|
+
caching no intermediate state (except file watching in `harness dev`).
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Level 2 — Core concept glossary
|
|
139
|
+
|
|
140
|
+
| Concept | One-line explanation | Where |
|
|
141
|
+
| --- | --- | --- |
|
|
142
|
+
| **Task** | A unit of work with a lifecycle | `coding-agent-harness/planning/tasks/<id>/` |
|
|
143
|
+
| **Budget** | Task complexity: `simple` / `standard` / `complex`, determines gate strictness | `task_plan.md` |
|
|
144
|
+
| **Phase** | An execution phase in the Visual Map, with state and completion | `visual_map.md` |
|
|
145
|
+
| **Capability** | Optional feature module, e.g. `dashboard`, `module-parallel` | `coding-agent-harness/harness.yaml` |
|
|
146
|
+
| **Review Gate** | A review gate that blocks task completion, requires human confirmation to pass | `review.md` |
|
|
147
|
+
| **Governance Sync** | Atomic operation that auto-updates the global ledger on task state changes | `coding-agent-harness/governance/generated/Harness-Ledger.md` |
|
|
148
|
+
| **Preset** | A reusable task method package, e.g. `legacy-migration`, `module` | `presets/<id>/` |
|
|
149
|
+
| **Lesson** | Reusable knowledge distilled from a task | `coding-agent-harness/governance/lessons/` |
|
|
150
|
+
| **Tombstone** | Marker for soft-deleted / merged / superseded tasks | Special block in `task_plan.md` |
|
|
151
|
+
| **lifecycleState** | Queue classification derived from task state + review state combined | Derived at runtime, not stored in files |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Level 2 — Design decisions
|
|
156
|
+
|
|
157
|
+
### Why Markdown instead of a database
|
|
158
|
+
|
|
159
|
+
This is the most frequently asked question.
|
|
160
|
+
|
|
161
|
+
**Reasons for choosing Markdown**:
|
|
162
|
+
|
|
163
|
+
1. **Agent-readable**: All major AI coding tools can read and write Markdown without special APIs
|
|
164
|
+
2. **Git-native**: State changes can be diffed, blamed, and rolled back — audit trail is built in
|
|
165
|
+
3. **Human-readable**: State can be viewed directly without tools, reducing tool dependency
|
|
166
|
+
4. **Works offline**: No external service dependency, works without network
|
|
167
|
+
5. **Portable**: Switching Agent tools doesn't require data migration
|
|
168
|
+
6. **Single source of truth**: Avoids drift between Markdown, JSON, and SQLite as three separate facts
|
|
169
|
+
|
|
170
|
+
**Trade-offs**:
|
|
171
|
+
|
|
172
|
+
- Parsing Markdown is slower than querying a database (but not a bottleneck at task management scale)
|
|
173
|
+
- Format constraints must be maintained by validators rather than enforced by database schema
|
|
174
|
+
- Concurrent writes need file locking (`governance-sync` lock mechanism)
|
|
175
|
+
|
|
176
|
+
**Alternatives considered and rejected**:
|
|
177
|
+
- **SQLite**: Not git-diff-friendly, introduces binary files, and current scale (hundreds of tasks) doesn't need it
|
|
178
|
+
- **JSON**: Good for machine parsing but not for Agents understanding narrative context
|
|
179
|
+
- **YAML/TOML**: Not suited for carrying long-form content like briefs and execution strategies
|
|
180
|
+
|
|
181
|
+
### Why an npm package instead of SaaS
|
|
182
|
+
|
|
183
|
+
Agents need to read and write state on the local filesystem. SaaS would introduce network
|
|
184
|
+
dependency, authentication, and latency, breaking Agents' autonomous execution capability.
|
|
185
|
+
An npm package lets any environment that can run Node.js use it directly, with no account
|
|
186
|
+
or network required. `package.json` `dependencies` is empty — zero runtime dependencies.
|
|
187
|
+
|
|
188
|
+
### Why review-confirm must be a manual operation
|
|
189
|
+
|
|
190
|
+
`review-confirm` is the **only operation in the entire system that cannot be automatically
|
|
191
|
+
executed by an Agent**.
|
|
192
|
+
|
|
193
|
+
The reason:
|
|
194
|
+
|
|
195
|
+
> Agents cannot approve their own work.
|
|
196
|
+
|
|
197
|
+
This boundary wasn't there from the start. Initially the Dashboard workbench review action
|
|
198
|
+
had no Agent/Human distinction. Later, through competitive analysis (Taskr competitive intake),
|
|
199
|
+
"Agent auto-confirming review" was identified as a P0 risk, which led to introducing the
|
|
200
|
+
Git commit gate: `review-confirm` writes human confirmation audit fields with Git
|
|
201
|
+
`user.name` / `user.email` to the task `INDEX.md`, and makes two atomic Git commits:
|
|
202
|
+
the first commits the confirmation fields, and the second commits the final audit
|
|
203
|
+
record containing the first commit's SHA.
|
|
204
|
+
This Git commit is an **auditable human signature** proving a real human reviewed the task.
|
|
205
|
+
|
|
206
|
+
### Why derived state isn't stored in files
|
|
207
|
+
|
|
208
|
+
`lifecycleState`, `taskQueues`, and `reviewQueueState` are derived state that gets
|
|
209
|
+
recalculated on every run and never written back to Markdown files. Three reasons:
|
|
210
|
+
|
|
211
|
+
1. **Avoid fact drift**: If derived state were also written to files, there would be two sources
|
|
212
|
+
of truth, and either one going stale would cause false reports
|
|
213
|
+
2. **Prevent gate bypass**: If Agents could directly modify derived fields, they could bypass
|
|
214
|
+
the review-confirm gate
|
|
215
|
+
3. **Governance rules as code**: The scanner's derivation rules are themselves a machine-readable
|
|
216
|
+
expression of governance rules — recalculating on every run is equivalent to re-executing
|
|
217
|
+
the governance check every time
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Next steps
|
|
222
|
+
|
|
223
|
+
- Want to understand how the code is organized → [02-module-dependency.md](02-module-dependency.md)
|
|
224
|
+
- Want to understand how a task flows from start to finish → [03-task-lifecycle.md](03-task-lifecycle.md)
|
|
225
|
+
- Want to understand what the validators check → [04-check-and-governance.md](04-check-and-governance.md)
|
|
226
|
+
- Want to understand where Dashboard data comes from → [05-data-flow.md](05-data-flow.md)
|
|
227
|
+
- Want to understand how Presets and migration work → [06-preset-and-migration.md](06-preset-and-migration.md)
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# 02 — Code Module Dependencies
|
|
2
|
+
|
|
3
|
+
## Level 0 — Where's the entry point
|
|
4
|
+
|
|
5
|
+
All commands come through a single file:
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart LR
|
|
9
|
+
User["User / Agent\n$ harness <command> [target]"] -->|"parse args + dispatch"| Entry["dist/harness.mjs\nSingle CLI entry point"]
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`harness.mjs` does two things: parses command-line arguments, then dispatches to the
|
|
13
|
+
corresponding command module or calls the core library directly.
|
|
14
|
+
It contains no business logic itself.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Level 1 — How commands are dispatched
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart TD
|
|
22
|
+
Entry["dist/harness.mjs"]
|
|
23
|
+
|
|
24
|
+
Entry -->|"dashboard\ndev"| DashCmd["dist/commands/dashboard-command.mjs\nDashboard generation + dynamic serving"]
|
|
25
|
+
Entry -->|"migrate-plan\nmigrate-run\nmigrate-verify"| MigCmd["dist/commands/migration-command.mjs\nMigration three-phase commands"]
|
|
26
|
+
Entry -->|"new-task / task-start\ntask-phase / task-review\ntask-complete / review-confirm\ntask-tombstone"| TaskCmd["dist/commands/task-command.mjs\nTask lifecycle commands"]
|
|
27
|
+
Entry -->|"preset catalog\npreset install\npreset uninstall"| PresetCmd["dist/commands/preset-command.mjs\nPreset management commands"]
|
|
28
|
+
Entry -->|"check / status / init\ngovernance / lesson-promote\n..."| Core["dist/lib/harness-core.mjs\n(called directly)"]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Four command modules each own one domain; other commands call `harness-core.mjs` directly.
|
|
32
|
+
|
|
33
|
+
**Why this split**: Command modules handle commands with complex interaction logic
|
|
34
|
+
(multi-step, reading/writing multiple files, user prompts), while simple query commands
|
|
35
|
+
(`check`, `status`) are cleaner calling the core library directly.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Level 2 — What is harness-core.mjs
|
|
40
|
+
|
|
41
|
+
`harness-core.mjs` is a **facade** — it contains no business logic itself,
|
|
42
|
+
it just re-exports everything from all modules under `lib/`.
|
|
43
|
+
|
|
44
|
+
The benefit of this design: external code only needs to
|
|
45
|
+
`import from "./lib/harness-core.mjs"` to get all functionality,
|
|
46
|
+
without knowing which sub-module something lives in.
|
|
47
|
+
|
|
48
|
+
```mermaid
|
|
49
|
+
flowchart TD
|
|
50
|
+
Core["harness-core.mjs\n(pure re-export facade)"]
|
|
51
|
+
|
|
52
|
+
Core --> G1["① Core utilities layer\ncore-shared + markdown-utils"]
|
|
53
|
+
Core --> G2["② Task scanning layer\ntask-scanner + review-model + lesson-candidates"]
|
|
54
|
+
Core --> G3["③ Check and governance layer\ncheck-profiles + governance-sync + governance-index"]
|
|
55
|
+
Core --> G4["④ Dashboard layer\ndashboard-data + dashboard-writer + workbench"]
|
|
56
|
+
Core --> G5["⑤ Task lifecycle layer\ntask-lifecycle + review-gates + review-confirm"]
|
|
57
|
+
Core --> G6["⑥ Migration and Preset layer\nmigration-planner + preset-registry + tombstone"]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Let's expand each layer.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Level 3 — Six functional layers in detail
|
|
65
|
+
|
|
66
|
+
### ① Core utilities layer
|
|
67
|
+
|
|
68
|
+
These two modules are the foundation for all other modules — almost every module imports them:
|
|
69
|
+
|
|
70
|
+
```mermaid
|
|
71
|
+
flowchart LR
|
|
72
|
+
CoreShared["core-shared.mjs\nPath resolution / constant enums\nFile read/write / locale handling\nTemplate rendering"]
|
|
73
|
+
MarkdownUtils["markdown-utils.mjs\nMarkdown table extraction\nRow updates / column lookup\nDependency list splitting"]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`core-shared` defines all allowed enum values — it's the "type system" for the whole system:
|
|
77
|
+
|
|
78
|
+
| Enum | Allowed values |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `allowedTaskStates` | `not_started / planned / in_progress / review / blocked / done` |
|
|
81
|
+
| `allowedTaskBudgets` | `simple / standard / complex` |
|
|
82
|
+
| `allowedPhaseStates` | `planned / in_progress / review / blocked / done / skipped` |
|
|
83
|
+
| `allowedCapabilities` | `core / module-parallel / subagent-worker / adversarial-review / ...` |
|
|
84
|
+
|
|
85
|
+
`markdown-utils` provides structured operations on Markdown tables — this is the technical
|
|
86
|
+
foundation that lets the whole system derive state from Markdown files.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### ② Task scanning layer
|
|
91
|
+
|
|
92
|
+
Responsible for reading all files under `coding-agent-harness/planning/tasks/` and parsing them into
|
|
93
|
+
structured data:
|
|
94
|
+
|
|
95
|
+
```mermaid
|
|
96
|
+
flowchart TD
|
|
97
|
+
TaskScanner["task-scanner.mjs\nScans all task directories\nParses state / budget / phases / metadata"]
|
|
98
|
+
|
|
99
|
+
TaskScanner --> ReviewModel["task-review-model.mjs\nReview confirmation parsing\nLifecycle queue derivation\nTombstone parsing"]
|
|
100
|
+
TaskScanner --> LessonCandidates["task-lesson-candidates.mjs\nLesson candidate status parsing\nDecision completion determination"]
|
|
101
|
+
|
|
102
|
+
ReviewModel --> CoreShared
|
|
103
|
+
ReviewModel --> MarkdownUtils
|
|
104
|
+
TaskScanner --> CoreShared
|
|
105
|
+
TaskScanner --> MarkdownUtils
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`task-review-model` contains several key **derivation functions** — they don't read files,
|
|
109
|
+
they compute new state from already-parsed data:
|
|
110
|
+
|
|
111
|
+
| Function | Input | Output |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| `deriveLifecycleState()` | taskState + reviewStatus + tombstone | `lifecycleState` (queue classification) |
|
|
114
|
+
| `deriveTaskQueues()` | lifecycleState + materials + lessons | `taskQueues[]` (which queues it belongs to) |
|
|
115
|
+
| `deriveReviewQueueState()` | findings + confirmation | `reviewQueueState` |
|
|
116
|
+
| `parseTaskTombstone()` | task_plan.md content | soft-delete / merge / superseded state |
|
|
117
|
+
|
|
118
|
+
These derivation functions are **pure functions** — same input always produces same output,
|
|
119
|
+
making them easy to test and debug.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### ③ Check and governance layer
|
|
124
|
+
|
|
125
|
+
Responsible for validating compliance and maintaining atomic writes to global indexes:
|
|
126
|
+
|
|
127
|
+
```mermaid
|
|
128
|
+
flowchart TD
|
|
129
|
+
CheckProfiles["check-profiles.mjs\nbuildStatus() orchestrates 9 validators\nReturns failures + warnings + tasks"]
|
|
130
|
+
|
|
131
|
+
CheckProfiles --> V1["validateCapabilities\nCapability registry consistency"]
|
|
132
|
+
CheckProfiles --> V2["validateReviewSchema\nreview.md structure"]
|
|
133
|
+
CheckProfiles --> V3["validateVisualMaps\nvisual_map compliance"]
|
|
134
|
+
CheckProfiles --> V4["validatePlanContracts\nTask contract markers"]
|
|
135
|
+
CheckProfiles --> V5["validateTaskPresetContracts\nPreset contracts"]
|
|
136
|
+
CheckProfiles --> V6["validateContextDocs\nContext doc completeness"]
|
|
137
|
+
CheckProfiles --> V7["validateGovernanceTableBoundaries\nTable boundaries"]
|
|
138
|
+
CheckProfiles --> V8["validateSubagentAuthorization\nSubagent authorization"]
|
|
139
|
+
CheckProfiles --> V9["validateTaskCompletionConsistency\nCompletion consistency"]
|
|
140
|
+
|
|
141
|
+
CheckProfiles --> GitSummary["git-status-summary.mjs\nGit status summary (dirty files etc.)"]
|
|
142
|
+
|
|
143
|
+
GovSync["governance-sync.mjs\nAtomic lock + row-level update + Git commit\n(auto-called on task state changes)"]
|
|
144
|
+
GovIndex["governance-index-generator.mjs\nRebuilds global index tables\n(manually triggered)"]
|
|
145
|
+
GovIndex --> GovSync
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Important distinction**: `governance-sync` and `check-profiles` have no dependency on each other.
|
|
149
|
+
- `check-profiles`: read-only, validates state, writes no files
|
|
150
|
+
- `governance-sync`: write-only, updates the ledger, does no validation
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### ④ Dashboard layer
|
|
155
|
+
|
|
156
|
+
Responsible for converting scan results into an HTML Dashboard:
|
|
157
|
+
|
|
158
|
+
```mermaid
|
|
159
|
+
flowchart TD
|
|
160
|
+
DashData["dashboard-data.mjs\nbuildDashboardBundle()\nCollects status + documents + tables + graph + adoption"]
|
|
161
|
+
|
|
162
|
+
DashData --> CheckProfiles["check-profiles.mjs\n(calls buildStatus)"]
|
|
163
|
+
DashData --> DashWriter["dashboard-writer.mjs\nWrites HTML + JSON files\n(static snapshot mode)"]
|
|
164
|
+
DashData --> StatusRenderer["status-dashboard-renderer.mjs\nRenders status summary text"]
|
|
165
|
+
|
|
166
|
+
DashWorkbench["dashboard-workbench.mjs\nDev dynamic serving\nHTTP server + file watching + auto-refresh\n(harness dev command)"]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`DashWorkbench` and `DashData` / `DashWriter` are **independent**:
|
|
170
|
+
- `DashData` + `DashWriter`: generates static snapshots (read-only)
|
|
171
|
+
- `DashWorkbench`: starts a local HTTP server, supports Workbench write operations
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### ⑤ Task lifecycle layer
|
|
176
|
+
|
|
177
|
+
Responsible for executing all task state transition commands:
|
|
178
|
+
|
|
179
|
+
```mermaid
|
|
180
|
+
flowchart TD
|
|
181
|
+
TaskLifecycle["task-lifecycle.mjs\nLifecycle command implementations\nnew-task / task-start / task-phase\ntask-review / task-complete"]
|
|
182
|
+
|
|
183
|
+
TaskLifecycle --> ReviewGates["task-lifecycle/review-gates.mjs\nGate validation logic\n(checks before entering review)"]
|
|
184
|
+
TaskLifecycle --> ReviewConfirm["task-lifecycle/review-confirm.mjs\nHuman confirmation execution\n(review-confirm command)"]
|
|
185
|
+
TaskLifecycle --> TextUtils["task-lifecycle/text-utils.mjs\nText append utilities\n(appending content to Markdown files)"]
|
|
186
|
+
TaskLifecycle --> GovSync["governance-sync.mjs\nSync ledger on state changes"]
|
|
187
|
+
TaskLifecycle --> MigPreset["task-migration-preset.mjs\nMigration Preset context injection"]
|
|
188
|
+
|
|
189
|
+
ReviewConfirm --> GitGate["review-confirm-git-gate.mjs\nGit atomic commit gate\n(writes human confirmation block + commit)"]
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`review-confirm` is the most special command in the entire lifecycle layer — it's the only
|
|
193
|
+
operation that requires a Git atomic commit, and the only one that cannot be automatically
|
|
194
|
+
executed by an Agent (see design decisions in [01-system-overview.md](01-system-overview.md)).
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### ⑥ Migration and Preset layer
|
|
199
|
+
|
|
200
|
+
```mermaid
|
|
201
|
+
flowchart TD
|
|
202
|
+
PresetReg["preset-registry.mjs\nReads presets/ YAML\nValidates package completeness\nLayered discovery (project / user / bundled)"]
|
|
203
|
+
PresetEngine["preset-engine.mjs\nExecutes Preset entrypoints\n(template / script / check types)"]
|
|
204
|
+
PresetAudit["preset-audit-contracts.mjs\nValidates Preset contract completeness"]
|
|
205
|
+
PresetResource["preset-resource-contracts.mjs\nValidates Preset resource declarations"]
|
|
206
|
+
|
|
207
|
+
MigPlanner["migration-planner.mjs\nAnalyzes target repo gaps\nGenerates migration action queue"]
|
|
208
|
+
MigSupport["migration-support.mjs\nSession management / locale detection\nGit status check / full-cutover verification"]
|
|
209
|
+
Tombstone["task-tombstone-commands.mjs\nSoft-delete / merge / reopen commands"]
|
|
210
|
+
|
|
211
|
+
LessonSed["task-lesson-sedimentation.mjs\nLesson sedimentation task creation"]
|
|
212
|
+
LessonMaint["lesson-maintenance.mjs\nLesson library maintenance"]
|
|
213
|
+
TaskIndex["task-index.mjs\nTask index generation"]
|
|
214
|
+
|
|
215
|
+
MigPlanner --> MigSupport
|
|
216
|
+
PresetEngine --> PresetReg
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Complete dependency map (reference)
|
|
222
|
+
|
|
223
|
+
If you've understood the layering above, this diagram serves as a lookup index:
|
|
224
|
+
|
|
225
|
+
```mermaid
|
|
226
|
+
flowchart TD
|
|
227
|
+
Entry["harness.mjs"] --> DashCmd & MigCmd & TaskCmd & PresetCmd & Core["harness-core.mjs"]
|
|
228
|
+
|
|
229
|
+
Core --> CoreShared & MarkdownUtils
|
|
230
|
+
Core --> TaskScanner --> ReviewModel & LessonCandidates
|
|
231
|
+
Core --> CheckProfiles --> GitSummary
|
|
232
|
+
Core --> GovSync
|
|
233
|
+
Core --> GovIndex --> GovSync
|
|
234
|
+
Core --> DashData --> DashWriter & StatusRenderer
|
|
235
|
+
Core --> DashWorkbench
|
|
236
|
+
Core --> TaskLifecycle --> ReviewGates & ReviewConfirm & TextUtils & GovSync & MigPreset
|
|
237
|
+
ReviewConfirm --> GitGate
|
|
238
|
+
Core --> PresetReg
|
|
239
|
+
Core --> PresetEngine --> PresetReg
|
|
240
|
+
Core --> MigPlanner --> MigSupport
|
|
241
|
+
Core --> Tombstone
|
|
242
|
+
Core --> LessonSed
|
|
243
|
+
Core --> LessonMaint
|
|
244
|
+
Core --> TaskIndex
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Level 2 — Module naming patterns
|
|
250
|
+
|
|
251
|
+
Understanding naming patterns helps you locate code quickly:
|
|
252
|
+
|
|
253
|
+
| Prefix / suffix | Meaning | Examples |
|
|
254
|
+
| --- | --- | --- |
|
|
255
|
+
| `task-` | Task-related | `task-scanner`, `task-lifecycle`, `task-review-model` |
|
|
256
|
+
| `dashboard-` | Dashboard-related | `dashboard-data`, `dashboard-writer`, `dashboard-workbench` |
|
|
257
|
+
| `governance-` | Governance / ledger-related | `governance-sync`, `governance-index-generator` |
|
|
258
|
+
| `migration-` | Migration-related | `migration-planner`, `migration-support` |
|
|
259
|
+
| `preset-` | Preset-related | `preset-registry`, `preset-engine`, `preset-audit-contracts` |
|
|
260
|
+
| `check-` | Validators | `check-profiles`, `check-module-parallel` |
|
|
261
|
+
| `-command.mjs` | CLI command modules | `task-command`, `dashboard-command` |
|
|
262
|
+
| `-utils.mjs` | Utility functions | `markdown-utils`, `text-utils` |
|
|
263
|
+
| `-gates.mjs` | Gate logic | `review-gates`, `review-confirm-git-gate` |
|