@vaubaan/harness 0.0.0-stage → 1.3.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/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +190 -2
- package/dist/agents/coding.agent.md +183 -0
- package/dist/agents/merge.agent.md +139 -0
- package/dist/agents/planning.agent.md +194 -0
- package/dist/agents/review.agent.md +176 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +2896 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/clean-code.cmd.md +26 -0
- package/dist/commands/decision.cmd.md +19 -0
- package/dist/commands/doc-audit.cmd.md +24 -0
- package/dist/commands/drift.cmd.md +18 -0
- package/dist/commands/handbook.cmd.md +21 -0
- package/dist/commands/readme.cmd.md +19 -0
- package/dist/commands/spec.cmd.md +20 -0
- package/dist/commands/test-plan.cmd.md +22 -0
- package/dist/commands/workflow.cmd.md +19 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +1673 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +42 -0
- package/dist/init.js +1055 -0
- package/dist/init.js.map +1 -0
- package/dist/linters/index.d.ts +43 -0
- package/dist/linters/index.js +726 -0
- package/dist/linters/index.js.map +1 -0
- package/dist/parser/index.d.ts +247 -0
- package/dist/parser/index.js +114 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/render-B9_kNtQc.d.ts +50 -0
- package/dist/render.d.ts +3 -0
- package/dist/render.js +539 -0
- package/dist/render.js.map +1 -0
- package/dist/skills/clean-code-guardian.skill.md +391 -0
- package/dist/skills/decision-record-writer.skill.md +166 -0
- package/dist/skills/doc-audit.skill.md +257 -0
- package/dist/skills/drift-detector.skill.md +173 -0
- package/dist/skills/handbook-writer.skill.md +185 -0
- package/dist/skills/readme-writer.skill.md +131 -0
- package/dist/skills/spec-writer.skill.md +165 -0
- package/dist/skills/test-plan-writer.skill.md +179 -0
- package/dist/skills/workflow-writer.skill.md +168 -0
- package/dist/templates/code-quality.md.tmpl +57 -0
- package/dist/templates/coding-workflow.md.tmpl +88 -0
- package/dist/templates/decision.md.tmpl +60 -0
- package/dist/templates/e2e-tests.md.tmpl +62 -0
- package/dist/templates/handbook.md.tmpl +58 -0
- package/dist/templates/integration-tests.md.tmpl +50 -0
- package/dist/templates/readme.md.tmpl +51 -0
- package/dist/templates/spec.md.tmpl +64 -0
- package/package.json +77 -4
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
tracks:
|
|
3
|
+
- .github/workflows/*
|
|
4
|
+
- vercel.json
|
|
5
|
+
- package.json
|
|
6
|
+
last_reviewed: <DATE>
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Coding workflow
|
|
10
|
+
|
|
11
|
+
This document describes *how we work* on this project: the CI
|
|
12
|
+
pipeline, the environments, the PR (or direct-push) process, the
|
|
13
|
+
branch model, the commit conventions, and the release
|
|
14
|
+
process.
|
|
15
|
+
|
|
16
|
+
## 1. CI pipeline
|
|
17
|
+
|
|
18
|
+
| Trigger | Jobs triggered | Typical duration |
|
|
19
|
+
|------------------------------|------------------------------------------|------------------|
|
|
20
|
+
| push to `<MAIN_BRANCH>` | <JOBS_ON_MAIN_PUSH> | <DURATION> |
|
|
21
|
+
| pull_request | <JOBS_ON_PR> | <DURATION> |
|
|
22
|
+
| tag `v*` | <JOBS_ON_TAG> | <DURATION> |
|
|
23
|
+
| schedule | <JOBS_ON_SCHEDULE> | <DURATION> |
|
|
24
|
+
|
|
25
|
+
**Jobs required to merge a PR:** <REQUIRED_JOBS>.
|
|
26
|
+
|
|
27
|
+
**How to force a re-run:** <RERUN_INSTRUCTIONS>.
|
|
28
|
+
|
|
29
|
+
## 2. Environments
|
|
30
|
+
|
|
31
|
+
| Env | URL | Source branch | Data | Access |
|
|
32
|
+
|----------------|------------------------------|--------------------|--------------------------|-------------------|
|
|
33
|
+
| `prod` | <PROD_URL> | <PROD_BRANCH> | <PROD_DATA> | <PROD_ACCESS> |
|
|
34
|
+
| `staging` | <STAGING_URL> | <STAGING_BRANCH> | <STAGING_DATA> | <STAGING_ACCESS> |
|
|
35
|
+
| `preview` | <PREVIEW_URL_PATTERN> | feature branches | <PREVIEW_DATA> | <PREVIEW_ACCESS> |
|
|
36
|
+
| `local` | <LOCAL_URL> | n/a | <LOCAL_DATA> | dev |
|
|
37
|
+
|
|
38
|
+
Each environment has its own set of variables — see
|
|
39
|
+
<ENV_VARS_REFERENCE>.
|
|
40
|
+
|
|
41
|
+
## 3. Process: PR or direct-push
|
|
42
|
+
|
|
43
|
+
<PR_OR_DIRECT_PUSH_DECLARATION>
|
|
44
|
+
|
|
45
|
+
### If PR
|
|
46
|
+
|
|
47
|
+
- Creation: <PR_CREATION_RULES>
|
|
48
|
+
- Review: <REVIEW_RULES>
|
|
49
|
+
- Merge: <MERGE_RULES>
|
|
50
|
+
|
|
51
|
+
### If direct-push
|
|
52
|
+
|
|
53
|
+
- Branches allowed for direct-push: <DIRECT_PUSH_BRANCHES>
|
|
54
|
+
- Safeguards: <DIRECT_PUSH_GUARDS>
|
|
55
|
+
|
|
56
|
+
## 4. Branch model
|
|
57
|
+
|
|
58
|
+
- **Model:** <TRUNK_BASED | GITFLOW | GITHUB_FLOW | OTHER>
|
|
59
|
+
- **Main branch:** `<MAIN_BRANCH>`
|
|
60
|
+
- **Staging branch (if distinct):** `<STAGING_BRANCH>`
|
|
61
|
+
- **Feature naming convention:** `<FEATURE_BRANCH_PATTERN>`
|
|
62
|
+
- **Max lifetime of a feature branch:** <MAX_LIFETIME>
|
|
63
|
+
|
|
64
|
+
## 5. Commit / merge conventions
|
|
65
|
+
|
|
66
|
+
- **Message format:** <COMMIT_MESSAGE_FORMAT>
|
|
67
|
+
- **Conventional commits?** <YES_NO_DETAILS>
|
|
68
|
+
- **Squash, rebase or merge?** <MERGE_STRATEGY>
|
|
69
|
+
- **Signing required?** <SIGNING_POLICY>
|
|
70
|
+
|
|
71
|
+
## 6. Release
|
|
72
|
+
|
|
73
|
+
- **Who can trigger a release:** <RELEASE_AUTHORITY>
|
|
74
|
+
- **How we tag:** <TAGGING_PROCESS>
|
|
75
|
+
- **Versioning:** <VERSIONING_SCHEME>
|
|
76
|
+
- **Rollback:** <ROLLBACK_PROCESS>
|
|
77
|
+
- **Freeze windows:** <FREEZE_WINDOWS>
|
|
78
|
+
- **Communication:** <RELEASE_NOTES_CHANNEL>
|
|
79
|
+
|
|
80
|
+
### Minimal release runbook
|
|
81
|
+
|
|
82
|
+
1. <RELEASE_STEP_1>
|
|
83
|
+
2. <RELEASE_STEP_2>
|
|
84
|
+
3. <RELEASE_STEP_N>
|
|
85
|
+
|
|
86
|
+
### Post-release incident
|
|
87
|
+
|
|
88
|
+
See <INCIDENT_RUNBOOK_REF>.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# <DECISION_TITLE>
|
|
2
|
+
|
|
3
|
+
- **Date:** <DATE>
|
|
4
|
+
- **Author:** <AUTHOR>
|
|
5
|
+
- **Status:** <PROPOSED | ACCEPTED | SUPERSEDED | DEPRECATED>
|
|
6
|
+
- **Supersedes:** <PREVIOUS_ADR_SLUG | none>
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
Describe the situation that makes this decision necessary. What problem
|
|
11
|
+
are we solving? What constraints apply (technical, organizational,
|
|
12
|
+
time-related)? What signals triggered the discussion?
|
|
13
|
+
|
|
14
|
+
This section must be readable on its own: a reader discovering the
|
|
15
|
+
ADR six months later must understand why the question came up.
|
|
16
|
+
|
|
17
|
+
## Decision
|
|
18
|
+
|
|
19
|
+
State the chosen decision in one to three clear sentences. No
|
|
20
|
+
"we will probably" — it is settled.
|
|
21
|
+
|
|
22
|
+
Then detail the conditions of application: scope, exceptions,
|
|
23
|
+
thresholds, effective dates.
|
|
24
|
+
|
|
25
|
+
## Consequences
|
|
26
|
+
|
|
27
|
+
List the expected effects of the decision, positive **and** negative.
|
|
28
|
+
|
|
29
|
+
**Positive:**
|
|
30
|
+
|
|
31
|
+
- <POSITIVE_CONSEQUENCE_1>
|
|
32
|
+
- <POSITIVE_CONSEQUENCE_N>
|
|
33
|
+
|
|
34
|
+
**Negative:**
|
|
35
|
+
|
|
36
|
+
- <NEGATIVE_CONSEQUENCE_1>
|
|
37
|
+
- <NEGATIVE_CONSEQUENCE_N>
|
|
38
|
+
|
|
39
|
+
**Neutral / to watch:**
|
|
40
|
+
|
|
41
|
+
- <NEUTRAL_CONSEQUENCE_1>
|
|
42
|
+
|
|
43
|
+
## Rejected alternatives
|
|
44
|
+
|
|
45
|
+
List the options seriously considered that were not chosen,
|
|
46
|
+
with the reason for rejecting each one. This section is as important
|
|
47
|
+
as the decision itself — it avoids re-debating the same
|
|
48
|
+
alternatives later.
|
|
49
|
+
|
|
50
|
+
### Alternative A — <ALTERNATIVE_A_NAME>
|
|
51
|
+
|
|
52
|
+
<DESCRIPTION_A>
|
|
53
|
+
|
|
54
|
+
Rejected because: <REJECTION_REASON_A>.
|
|
55
|
+
|
|
56
|
+
### Alternative B — <ALTERNATIVE_B_NAME>
|
|
57
|
+
|
|
58
|
+
<DESCRIPTION_B>
|
|
59
|
+
|
|
60
|
+
Rejected because: <REJECTION_REASON_B>.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
tracks:
|
|
3
|
+
- <E2E_TEST_DIR_OR_FILE_1>
|
|
4
|
+
- <E2E_TEST_DIR_OR_FILE_2>
|
|
5
|
+
last_reviewed: <DATE>
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# E2E test plan
|
|
9
|
+
|
|
10
|
+
## Scope
|
|
11
|
+
|
|
12
|
+
E2E tests verify the **complete** system against real dependencies
|
|
13
|
+
(or a staging environment faithful to prod). We distinguish:
|
|
14
|
+
|
|
15
|
+
- **Golden paths**: the main user journeys that must
|
|
16
|
+
pass on every release. Exhaustive coverage required.
|
|
17
|
+
- **Edge cases**: less frequent but high-value scenarios
|
|
18
|
+
(errors, permissions, boundary states). Selective coverage.
|
|
19
|
+
|
|
20
|
+
Anything that can be validated in local integration (see
|
|
21
|
+
[integration-tests.md](./integration-tests.md)) **must** be —
|
|
22
|
+
E2E tests are expensive, we reserve them for journeys that cannot
|
|
23
|
+
be validated otherwise.
|
|
24
|
+
|
|
25
|
+
## Stack
|
|
26
|
+
|
|
27
|
+
- **E2E runner:** <E2E_RUNNER>
|
|
28
|
+
- **Drivers:** <BROWSER_OR_API_DRIVER>
|
|
29
|
+
- **Target environment:** <ENV_TARGET>
|
|
30
|
+
- **Reporting:** <REPORT_TOOL>
|
|
31
|
+
|
|
32
|
+
## Fixture conventions
|
|
33
|
+
|
|
34
|
+
- **E2E organization:** each scenario runs in an isolated
|
|
35
|
+
fixture (`<E2E_ORG_NAMING_CONVENTION>`) to avoid
|
|
36
|
+
interference between parallel runs.
|
|
37
|
+
- **Naming:** <FIXTURE_NAMING_RULE>
|
|
38
|
+
- **Seed data:** <SEED_STRATEGY>
|
|
39
|
+
- **Authentication:** <AUTH_STRATEGY>
|
|
40
|
+
|
|
41
|
+
## Sweeper / cleanup
|
|
42
|
+
|
|
43
|
+
E2E fixtures inevitably leave artifacts behind (created orgs,
|
|
44
|
+
uploaded files, in-flight jobs). The sweeper:
|
|
45
|
+
|
|
46
|
+
- **Cadence:** <SWEEPER_FREQUENCY>
|
|
47
|
+
- **Purge criterion:** <PURGE_CRITERIA>
|
|
48
|
+
- **Logs:** <SWEEPER_LOG_LOCATION>
|
|
49
|
+
- **Dry-run mode:** <DRY_RUN_SWITCH>
|
|
50
|
+
|
|
51
|
+
## Covered scenarios
|
|
52
|
+
|
|
53
|
+
| ID | Scenario | Category | Linked spec | Test file |
|
|
54
|
+
|--------|-----------------------------------|-----------------|----------------------|----------------------------|
|
|
55
|
+
| E2E-01 | <SCENARIO_1_NAME> | golden | [[<SPEC_NAME_1>]] | <TEST_FILE_PATH_1> |
|
|
56
|
+
| E2E-02 | <SCENARIO_2_NAME> | edge | [[<SPEC_NAME_2>]] | <TEST_FILE_PATH_2> |
|
|
57
|
+
| E2E-NN | <SCENARIO_N_NAME> | golden | edge | [[<SPEC_NAME_N>]] | <TEST_FILE_PATH_N> |
|
|
58
|
+
|
|
59
|
+
## Known gaps
|
|
60
|
+
|
|
61
|
+
- <GAP_1> — <REASON> — <TRACKING_REF>
|
|
62
|
+
- <GAP_N> — ...
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
tracks:
|
|
3
|
+
- <RELEVANT_CODE_PATH_1>
|
|
4
|
+
- <RELEVANT_CODE_PATH_2>
|
|
5
|
+
last_reviewed: <DATE>
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# <FEATURE_NAME> — handbook
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Describe in one paragraph what this feature / module *actually* does
|
|
13
|
+
in the code, as opposed to the spec, which describes *what we
|
|
14
|
+
want*. Explicitly mention the files or directories involved.
|
|
15
|
+
|
|
16
|
+
The `tracks:` frontmatter above lists the code files this
|
|
17
|
+
handbook depends on. The `frontmatter-tracks` linter and the
|
|
18
|
+
`drift-detector` skill rely on it to flag drifts.
|
|
19
|
+
|
|
20
|
+
## How it works
|
|
21
|
+
|
|
22
|
+
Explain the internals, cross-linking to the code
|
|
23
|
+
files (`[<path/to/file.ext>](../../<path/to/file.ext>)`). Cover:
|
|
24
|
+
|
|
25
|
+
- The main entry point and its contract.
|
|
26
|
+
- The control or data flow through the modules listed
|
|
27
|
+
in `tracks:`.
|
|
28
|
+
- The data structures / entities handled.
|
|
29
|
+
- The implicit assumptions that are not visible in the spec.
|
|
30
|
+
|
|
31
|
+
### <SUB_TOPIC_1>
|
|
32
|
+
|
|
33
|
+
<DESCRIPTION_1>
|
|
34
|
+
|
|
35
|
+
### <SUB_TOPIC_2>
|
|
36
|
+
|
|
37
|
+
<DESCRIPTION_2>
|
|
38
|
+
|
|
39
|
+
## How to use it
|
|
40
|
+
|
|
41
|
+
If the feature exposes an API (function, endpoint, CLI), give a
|
|
42
|
+
minimal invocation example. Mention the prerequisites (env
|
|
43
|
+
variables, initial state, dependencies).
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
<USAGE_EXAMPLE>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## How to debug
|
|
50
|
+
|
|
51
|
+
List the typical failures and their diagnosis.
|
|
52
|
+
|
|
53
|
+
- **Symptom:** <SYMPTOM_1> — **Likely cause:** <CAUSE_1> —
|
|
54
|
+
**Fix:** <FIX_1>.
|
|
55
|
+
- **Symptom:** <SYMPTOM_2> — ...
|
|
56
|
+
|
|
57
|
+
Also mention: where to look at the logs, which flags to enable for
|
|
58
|
+
verbose output, which tests reproduce the bug fastest.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
tracks:
|
|
3
|
+
- <TEST_DIR_OR_FILE_1>
|
|
4
|
+
- <TEST_DIR_OR_FILE_2>
|
|
5
|
+
last_reviewed: <DATE>
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Integration test plan
|
|
9
|
+
|
|
10
|
+
## Scope
|
|
11
|
+
|
|
12
|
+
Define what is tested in integration **vs** unit **vs** e2e:
|
|
13
|
+
|
|
14
|
+
- **Unit**: isolated, no real I/O, next to the code (`*.test.<ext>`).
|
|
15
|
+
Not documented here.
|
|
16
|
+
- **Integration**: several modules assembled, real I/O against
|
|
17
|
+
local dependencies (ephemeral DB, service mocked at the network
|
|
18
|
+
level, temporary filesystem). This is the scope of this document.
|
|
19
|
+
- **E2E**: complete system against real or staging dependencies,
|
|
20
|
+
walking through a user journey. Documented in
|
|
21
|
+
[e2e-tests.md](./e2e-tests.md).
|
|
22
|
+
|
|
23
|
+
Specify here the boundaries specific to the current project.
|
|
24
|
+
|
|
25
|
+
## Test stack
|
|
26
|
+
|
|
27
|
+
- **Runner:** <TEST_RUNNER>
|
|
28
|
+
- **Assertions:** <ASSERTION_LIB>
|
|
29
|
+
- **Fixtures:** <FIXTURE_STRATEGY>
|
|
30
|
+
- **Setup / teardown:** <SETUP_TEARDOWN>
|
|
31
|
+
- **Data:** <DATA_STRATEGY>
|
|
32
|
+
|
|
33
|
+
## Covered scenarios
|
|
34
|
+
|
|
35
|
+
| ID | Scenario | Linked spec | Test file |
|
|
36
|
+
|-------|-------------------------------------|-------------------------|------------------------------------|
|
|
37
|
+
| IT-01 | <SCENARIO_1_NAME> | [[<SPEC_NAME_1>]] | <TEST_FILE_PATH_1> |
|
|
38
|
+
| IT-02 | <SCENARIO_2_NAME> | [[<SPEC_NAME_2>]] | <TEST_FILE_PATH_2> |
|
|
39
|
+
| IT-NN | <SCENARIO_N_NAME> | [[<SPEC_NAME_N>]] | <TEST_FILE_PATH_N> |
|
|
40
|
+
|
|
41
|
+
Each scenario must cross-link the spec it verifies (syntax
|
|
42
|
+
`[[spec-name]]`) — the `cross-link` linter uses it.
|
|
43
|
+
|
|
44
|
+
## Known gaps
|
|
45
|
+
|
|
46
|
+
Explicitly list the areas not covered in integration, with a
|
|
47
|
+
risk estimate and a pointer to the tracking ticket, if any.
|
|
48
|
+
|
|
49
|
+
- <GAP_1> — risk <LOW | MEDIUM | HIGH> — <TRACKING_REF>
|
|
50
|
+
- <GAP_N> — ...
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# <PROJECT_NAME>
|
|
2
|
+
|
|
3
|
+
> <ONE_LINE_PITCH>
|
|
4
|
+
|
|
5
|
+
## What is this
|
|
6
|
+
|
|
7
|
+
<ONE_PARAGRAPH_DESCRIPTION>
|
|
8
|
+
|
|
9
|
+
Describe in one paragraph what the project does, who it is for, and
|
|
10
|
+
what its value proposition is. Stay factual; no marketing.
|
|
11
|
+
|
|
12
|
+
## Quick start
|
|
13
|
+
|
|
14
|
+
### Install
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
<INSTALL_COMMAND>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Run
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
<RUN_COMMAND>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
<OPTIONAL_FIRST_USE_EXAMPLE>
|
|
27
|
+
|
|
28
|
+
## Documentation
|
|
29
|
+
|
|
30
|
+
The project maintains six documentation pillars:
|
|
31
|
+
|
|
32
|
+
- [Spec](docs/spec/) — theoretical vision: what we want.
|
|
33
|
+
- [Decisions](docs/decisions/) — ADRs: what we decided and why.
|
|
34
|
+
- [Handbook](docs/handbook/) — implementation docs: how it actually
|
|
35
|
+
works.
|
|
36
|
+
- [Tests](docs/tests/) — test plans (integration + e2e).
|
|
37
|
+
- [Workflow](docs/workflow/coding-workflow.md) — CI, env variants, PR
|
|
38
|
+
process, branches, release.
|
|
39
|
+
- This README — entry point.
|
|
40
|
+
|
|
41
|
+
## Contributing
|
|
42
|
+
|
|
43
|
+
<CONTRIBUTING_POINTER>
|
|
44
|
+
|
|
45
|
+
See [docs/workflow/coding-workflow.md](docs/workflow/coding-workflow.md)
|
|
46
|
+
for the commit conventions, the branch model, and the release
|
|
47
|
+
process.
|
|
48
|
+
|
|
49
|
+
## License
|
|
50
|
+
|
|
51
|
+
<LICENSE_NAME> — see [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# <SUBSYSTEM_NAME> — spec
|
|
2
|
+
|
|
3
|
+
> **Status:** <DRAFT | REVIEW | STABLE>
|
|
4
|
+
>
|
|
5
|
+
> <ONE_PARAGRAPH_FRAMING>
|
|
6
|
+
>
|
|
7
|
+
> Describe in a few lines what this subsystem covers, why
|
|
8
|
+
> it exists, and how it fits with the other pieces of the project.
|
|
9
|
+
|
|
10
|
+
## 0. Vocabulary
|
|
11
|
+
|
|
12
|
+
List the <N> keywords this subsystem reasons about. Define
|
|
13
|
+
each one in one to three lines, without reference to any specific technology.
|
|
14
|
+
|
|
15
|
+
| Term | Definition |
|
|
16
|
+
|-----------------|---------------------------------------------------------------------|
|
|
17
|
+
| <TERM_1> | <DEFINITION_1> |
|
|
18
|
+
| <TERM_2> | <DEFINITION_2> |
|
|
19
|
+
| <TERM_N> | <DEFINITION_N> |
|
|
20
|
+
|
|
21
|
+
## 1. Vision
|
|
22
|
+
|
|
23
|
+
Articulate in 3 to 7 points what this subsystem **must** be. Stay
|
|
24
|
+
abstract — this is the "what", not the "how".
|
|
25
|
+
|
|
26
|
+
1. <VISION_POINT_1>
|
|
27
|
+
2. <VISION_POINT_2>
|
|
28
|
+
3. <VISION_POINT_N>
|
|
29
|
+
|
|
30
|
+
## 2. Out of scope
|
|
31
|
+
|
|
32
|
+
Explicitly list what the subsystem does **not** do. This
|
|
33
|
+
section is as important as the vision: it closes doors.
|
|
34
|
+
|
|
35
|
+
- <NON_GOAL_1>
|
|
36
|
+
- <NON_GOAL_2>
|
|
37
|
+
- <NON_GOAL_N>
|
|
38
|
+
|
|
39
|
+
## 3. Domain
|
|
40
|
+
|
|
41
|
+
### 3.1 Entities
|
|
42
|
+
|
|
43
|
+
List the main entities and their relationships. Stay at the
|
|
44
|
+
conceptual level — no table schema, no function signature.
|
|
45
|
+
|
|
46
|
+
### 3.2 Invariants
|
|
47
|
+
|
|
48
|
+
List the properties that must hold true at all times.
|
|
49
|
+
|
|
50
|
+
- <INVARIANT_1>
|
|
51
|
+
- <INVARIANT_N>
|
|
52
|
+
|
|
53
|
+
## 4. <FREE_SECTION_TITLE>
|
|
54
|
+
|
|
55
|
+
Free sections for the rest of the spec: usage flows, conceptual
|
|
56
|
+
interface contracts, acceptance criteria, etc.
|
|
57
|
+
|
|
58
|
+
## N. Open decisions
|
|
59
|
+
|
|
60
|
+
List the questions not yet settled, with a pointer to the ADR
|
|
61
|
+
that will close them once they are.
|
|
62
|
+
|
|
63
|
+
- <OPEN_QUESTION_1>
|
|
64
|
+
- <OPEN_QUESTION_N>
|
package/package.json
CHANGED
|
@@ -1,6 +1,79 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaubaan/harness",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Coding Agent Harness (CAH) — multi-engine skills + commands + linters for Vaubaan sandboxes",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"author": "Vaubaan",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/vaubaan/harness.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/vaubaan/harness#readme",
|
|
13
|
+
"bugs": "https://github.com/vaubaan/harness/issues",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"registry": "https://registry.npmjs.org/",
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=20"
|
|
20
|
+
},
|
|
21
|
+
"bin": {
|
|
22
|
+
"vaubaan-harness": "./dist/cli/index.js"
|
|
23
|
+
},
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./render": {
|
|
30
|
+
"types": "./dist/render.d.ts",
|
|
31
|
+
"import": "./dist/render.js"
|
|
32
|
+
},
|
|
33
|
+
"./linters": {
|
|
34
|
+
"types": "./dist/linters/index.d.ts",
|
|
35
|
+
"import": "./dist/linters/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./parser": {
|
|
38
|
+
"types": "./dist/parser/index.d.ts",
|
|
39
|
+
"import": "./dist/parser/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./init": {
|
|
42
|
+
"types": "./dist/init.d.ts",
|
|
43
|
+
"import": "./dist/init.js"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"files": ["dist", "README.md", "LICENSE", "NOTICE"],
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "tsup && node scripts/copy-content.mjs",
|
|
49
|
+
"dev": "tsup --watch",
|
|
50
|
+
"typecheck": "tsc --noEmit",
|
|
51
|
+
"lint": "biome check .",
|
|
52
|
+
"lint:fix": "biome check --write .",
|
|
53
|
+
"format": "biome format --write .",
|
|
54
|
+
"test": "vitest run",
|
|
55
|
+
"test:watch": "vitest",
|
|
56
|
+
"test:coverage": "vitest run --coverage",
|
|
57
|
+
"lint:harness": "node dist/cli/index.js lint --cwd .",
|
|
58
|
+
"ci": "npm run typecheck && npm run lint && npm run test && npm run build && npm run lint:harness",
|
|
59
|
+
"prepare": "husky"
|
|
60
|
+
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"commander": "^12.1.0",
|
|
63
|
+
"cosmiconfig": "^9.0.2",
|
|
64
|
+
"fast-glob": "^3.3.2",
|
|
65
|
+
"gray-matter": "^4.0.3",
|
|
66
|
+
"yaml": "^2.5.1",
|
|
67
|
+
"zod": "^3.23.8"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@biomejs/biome": "^1.9.4",
|
|
71
|
+
"@types/node": "^22.7.5",
|
|
72
|
+
"@vitest/coverage-v8": "^2.1.2",
|
|
73
|
+
"execa": "^9.4.0",
|
|
74
|
+
"husky": "^9.1.7",
|
|
75
|
+
"tsup": "^8.3.0",
|
|
76
|
+
"typescript": "^5.6.3",
|
|
77
|
+
"vitest": "^2.1.2"
|
|
78
|
+
}
|
|
79
|
+
}
|