harnessed 4.3.0 → 4.5.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/README.md +49 -20
- package/bin/harnessed-inject-state.mjs +157 -0
- package/dist/cli.mjs +5832 -4607
- package/dist/cli.mjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/manifests/optional/codegraph.yaml +46 -0
- package/package.json +4 -2
- package/workflows/capabilities.yaml +26 -0
- package/workflows/disciplines/doc-discipline.yaml +49 -0
- package/workflows/judgments/stage-routing.yaml +7 -0
- package/workflows/ship/auto/SKILL.md +47 -0
- package/workflows/ship/auto/workflow.yaml +37 -0
- package/workflows/ship/preflight/SKILL.md +40 -0
- package/workflows/ship/preflight/workflow.yaml +29 -0
package/dist/index.mjs
CHANGED
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OAkGb,CAAA;;;AC/FO,IAAM,UAAU,eAAA,CAAI","file":"index.mjs","sourcesContent":["{\n \"name\": \"harnessed\",\n \"version\": \"4.5.0\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\",\n \"harnessed-inject-state\": \"./bin/harnessed-inject-state.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"manifests\",\n \"messages\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.md\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"expr-eval\": \"^2.0.2\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Main library entry — re-exports public APIs.\n// phase 1.1 batch 1: skeleton only; schema validator wired in batch 2 (T3+).\n\nimport pkg from '../package.json' with { type: 'json' }\n\nexport const VERSION = pkg.version\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../../schemas/manifest.v1.schema.json
|
|
2
|
+
# OPT-IN catalog manifest — lives in manifests/optional/ so `install-base` (which
|
|
3
|
+
# globs only manifests/tools + manifests/skill-packs) never pulls it into the base
|
|
4
|
+
# profile, and `harnessed install <name>` (tools + skill-packs only) never installs
|
|
5
|
+
# it. CodeGraph ships its own installer; harnessed catalogs + detects only.
|
|
6
|
+
apiVersion: harnessed/v1
|
|
7
|
+
kind: Manifest
|
|
8
|
+
metadata:
|
|
9
|
+
name: codegraph
|
|
10
|
+
display_name: CodeGraph
|
|
11
|
+
description: Pre-indexed code knowledge graph (semantic index) for Claude Code — fewer tokens/tool-calls. Opt-in, self-installed.
|
|
12
|
+
upstream:
|
|
13
|
+
source: codegraph
|
|
14
|
+
homepage: https://colbymchenry.github.io/codegraph/
|
|
15
|
+
repository: https://github.com/colbymchenry/codegraph.git
|
|
16
|
+
license: MIT
|
|
17
|
+
notice: |
|
|
18
|
+
CodeGraph by colbymchenry (MIT, 100% local). Optional semantic code index —
|
|
19
|
+
harnessed catalogs + detects only; CodeGraph self-installs via its own CLI
|
|
20
|
+
(`codegraph install` wires its MCP server into Claude Code). Not vendored.
|
|
21
|
+
spec:
|
|
22
|
+
type: cli-npm
|
|
23
|
+
component_type: cli-binary
|
|
24
|
+
category: search
|
|
25
|
+
install_type: npm
|
|
26
|
+
install:
|
|
27
|
+
method: npm-cli
|
|
28
|
+
cmd: "npm i -g @colbymchenry/codegraph && codegraph install --yes"
|
|
29
|
+
npm_version: ^1.0.0
|
|
30
|
+
idempotent_check: "command -v codegraph"
|
|
31
|
+
verify:
|
|
32
|
+
cmd: "codegraph status"
|
|
33
|
+
timeout_ms: 10000
|
|
34
|
+
expected_exit_code: 0
|
|
35
|
+
uninstall:
|
|
36
|
+
cmd: "codegraph uninstall --yes"
|
|
37
|
+
upstream_health:
|
|
38
|
+
stability: stable
|
|
39
|
+
last_check: "2026-06-13"
|
|
40
|
+
last_known_good_version: "1.0.0"
|
|
41
|
+
fallback_action: warn
|
|
42
|
+
signed_by: easyinplay
|
|
43
|
+
platforms:
|
|
44
|
+
- linux
|
|
45
|
+
- darwin
|
|
46
|
+
- win32
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harnessed",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "AI coding harness package manager + composition orchestrator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
},
|
|
26
26
|
"packageManager": "pnpm@10.12.0",
|
|
27
27
|
"bin": {
|
|
28
|
-
"harnessed": "./dist/cli.mjs"
|
|
28
|
+
"harnessed": "./dist/cli.mjs",
|
|
29
|
+
"harnessed-inject-state": "./bin/harnessed-inject-state.mjs"
|
|
29
30
|
},
|
|
30
31
|
"main": "./dist/index.mjs",
|
|
31
32
|
"types": "./dist/index.d.ts",
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
},
|
|
44
45
|
"files": [
|
|
45
46
|
"dist",
|
|
47
|
+
"bin",
|
|
46
48
|
"manifests",
|
|
47
49
|
"messages",
|
|
48
50
|
"workflows",
|
|
@@ -243,6 +243,15 @@ capabilities:
|
|
|
243
243
|
fires_when:
|
|
244
244
|
- subtask.needs_library_docs == true
|
|
245
245
|
|
|
246
|
+
codegraph:
|
|
247
|
+
impl: mcp
|
|
248
|
+
cmd: codegraph_explore
|
|
249
|
+
since: v7.0
|
|
250
|
+
category: tool-mcp
|
|
251
|
+
description: 语义代码索引 (symbol/call-graph query; opt-in self-installed, fewer tool-calls)
|
|
252
|
+
fires_when:
|
|
253
|
+
- subtask.type in ['code_navigation', 'symbol_lookup', 'call_graph']
|
|
254
|
+
|
|
246
255
|
tavily-mcp:
|
|
247
256
|
impl: mcp
|
|
248
257
|
cmd: tavily_search
|
|
@@ -574,6 +583,14 @@ capabilities:
|
|
|
574
583
|
description: cc-handoff Ideation→Onboarding + Plan→Execute + file-ownership-strict 跨 CC instance 协议
|
|
575
584
|
discipline_ref: workflows/disciplines/protocols.yaml
|
|
576
585
|
|
|
586
|
+
doc-discipline:
|
|
587
|
+
impl: harnessed-bundled
|
|
588
|
+
cmd: '<not-applicable-behavioral>'
|
|
589
|
+
since: v6.0
|
|
590
|
+
category: behavioral
|
|
591
|
+
description: STATE digest <100L halt + one-fact-per-file + overview-pointer-no-inline-narrative + transient-archive + status-from-artifacts + responsibility-one-home (6 rules)
|
|
592
|
+
discipline_ref: workflows/disciplines/doc-discipline.yaml
|
|
593
|
+
|
|
577
594
|
# ============================================================================
|
|
578
595
|
# Bucket 7 — gstack 33 optional registry-only (D-12 NEW v3)
|
|
579
596
|
# ============================================================================
|
|
@@ -806,6 +823,15 @@ capabilities:
|
|
|
806
823
|
fires_when:
|
|
807
824
|
- phase.stage == 'verify' AND phase.is_release_candidate == true
|
|
808
825
|
|
|
826
|
+
release-preflight:
|
|
827
|
+
impl: harnessed-bundled
|
|
828
|
+
cmd: harnessed release-preflight
|
|
829
|
+
since: v7.0
|
|
830
|
+
category: tool-cli
|
|
831
|
+
description: 只读发布就绪门 (CHANGELOG/version/git-clean/tag; PR ready != release ready)
|
|
832
|
+
fires_when:
|
|
833
|
+
- phase.stage == 'ship'
|
|
834
|
+
|
|
809
835
|
setup-deploy:
|
|
810
836
|
impl: gstack
|
|
811
837
|
install_type: user-skill
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# workflows/disciplines/doc-discipline.yaml
|
|
2
|
+
# 文档纪律 — bundled discipline (STATE digest line-limit + one-fact-per-file +
|
|
3
|
+
# overview-pointer-no-inline-narrative + transient-consume-then-archive +
|
|
4
|
+
# status-derived-from-artifacts + responsibility-matrix-one-home)
|
|
5
|
+
# Phase v6.0 T11.1 — 7th L0 Discipline Substrate per D-09
|
|
6
|
+
# Codifies CLAUDE.md 文档纪律 section (三层渐进式结构 + 反腐防膨胀铁律)
|
|
7
|
+
|
|
8
|
+
schema_version: harnessed.discipline.v1
|
|
9
|
+
discipline: doc
|
|
10
|
+
enforcement_layer: commit
|
|
11
|
+
auto_enforce: true
|
|
12
|
+
|
|
13
|
+
rules:
|
|
14
|
+
- id: state-digest-line-limit
|
|
15
|
+
description: STATE.md >100 lines triggers halt; override via `HARNESSED_ALLOW_LONG_STATE=1`
|
|
16
|
+
enforcement: halt
|
|
17
|
+
trigger: "phase.type == 'commit' AND changed_files contains '.planning/STATE.md'"
|
|
18
|
+
check_method: external-cmd
|
|
19
|
+
# No auto_fix_cmd — halt rules do not auto-fix; override is env-based in TS
|
|
20
|
+
|
|
21
|
+
- id: one-fact-per-file
|
|
22
|
+
description: Decision docs must be single-topic; duplicate fact spread across files violates one-fact-per-file
|
|
23
|
+
enforcement: warn
|
|
24
|
+
trigger: "phase.type == 'commit' AND changed_files matches '\\.planning/'"
|
|
25
|
+
check_method: heuristic
|
|
26
|
+
|
|
27
|
+
- id: overview-pointer-no-inline-narrative
|
|
28
|
+
description: ROADMAP/overview docs must not inline closing narrative (叙事进 SUMMARY, not ROADMAP)
|
|
29
|
+
enforcement: warn
|
|
30
|
+
trigger: "phase.type == 'commit' AND changed_files matches 'ROADMAP\\.md|STATE\\.md'"
|
|
31
|
+
check_method: heuristic
|
|
32
|
+
|
|
33
|
+
- id: transient-consume-then-archive
|
|
34
|
+
description: HANDOFF and other transient artifacts must be archived after consumption, not accumulated at .planning/ root
|
|
35
|
+
enforcement: warn
|
|
36
|
+
trigger: "phase.type == 'commit' AND changed_files matches 'HANDOFF'"
|
|
37
|
+
check_method: heuristic
|
|
38
|
+
|
|
39
|
+
- id: status-derived-from-artifacts
|
|
40
|
+
description: Phase status must derive from VERIFICATION artifacts + test results, not hand-maintained booleans in STATE/ROADMAP
|
|
41
|
+
enforcement: warn
|
|
42
|
+
trigger: "phase.type == 'commit' AND changed_files contains '.planning/STATE.md'"
|
|
43
|
+
check_method: heuristic
|
|
44
|
+
|
|
45
|
+
- id: responsibility-matrix-one-home
|
|
46
|
+
description: Each fact has exactly one home per responsibility matrix (decision→ADR, requirement→REQUIREMENTS, etc.); cross-file duplication is a violation
|
|
47
|
+
enforcement: info
|
|
48
|
+
trigger: "phase.type == 'commit' AND changed_files matches '\\.planning/'"
|
|
49
|
+
check_method: heuristic
|
|
@@ -92,6 +92,13 @@ triggers:
|
|
|
92
92
|
invokes:
|
|
93
93
|
- capability: code-simplifier
|
|
94
94
|
|
|
95
|
+
# Phase 21 NEW — Stage ⑤ Ship master → ship-preflight always (release-readiness gate)
|
|
96
|
+
ship-preflight-always:
|
|
97
|
+
description: /ship master → /ship-preflight 总 fire (read-only release-readiness gate)。
|
|
98
|
+
fires_when: "phase.stage == 'ship'"
|
|
99
|
+
invokes:
|
|
100
|
+
- capability: release-preflight
|
|
101
|
+
|
|
95
102
|
# v3.2.0 NEW — /auto super-master Phase 0.5 understanding check gate
|
|
96
103
|
auto-research-unclear:
|
|
97
104
|
description: |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ship
|
|
3
|
+
description: |
|
|
4
|
+
Stage ⑤ Ship master orchestrator — the release stage after Verify. ship-preflight
|
|
5
|
+
必跑串行 (release-readiness gate) → 委派 PR/deploy 给 gstack /ship → publish 留
|
|
6
|
+
publish.yml CI (tag push 触发)。schema_version: harnessed.workflow.v3 with delegates_to
|
|
7
|
+
(1 sub: preflight serial order 1) + disciplines_applied (6 default) + tools_available
|
|
8
|
+
(release-preflight + ship + planning-with-files)。Triggered by `/ship` (bare per ADR 0030)
|
|
9
|
+
or `harnessed ship` after `harnessed verify`. Deploy boundary = TAG-READY (no push/publish/tag).
|
|
10
|
+
trigger_phrases:
|
|
11
|
+
- "ship"
|
|
12
|
+
- "发布阶段"
|
|
13
|
+
- "stage 5 ship"
|
|
14
|
+
- "release stage"
|
|
15
|
+
- "send it"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# ship master orchestrator (v3) — Stage ⑤
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
The 5th stage, after Verify. harnessed has the pieces (a release-preflight gate, gstack
|
|
23
|
+
`/ship`, `publish.yml` CI) — this master orchestrates them into one repeatable release path,
|
|
24
|
+
the way comet (archive), Trellis (finish-work), and Claude-Harness (`/harness-release`) each
|
|
25
|
+
close their loop.
|
|
26
|
+
|
|
27
|
+
| order/mode | sub | when fires |
|
|
28
|
+
| ---------- | --- | ---------- |
|
|
29
|
+
| 1 (serial) | `preflight` | always when stage=='ship' — read-only release-readiness gate |
|
|
30
|
+
|
|
31
|
+
After preflight passes, the master delegates PR + deploy to gstack `/ship` (composition —
|
|
32
|
+
harnessed does not reimplement it), and the actual `npm publish` + GitHub release happen in
|
|
33
|
+
`publish.yml` CI on tag push.
|
|
34
|
+
|
|
35
|
+
## Process
|
|
36
|
+
|
|
37
|
+
1. **preflight (always)** — run `harnessed release-preflight`. If any check fails (most often
|
|
38
|
+
an empty `## [Unreleased]`), STOP and document the release / clean the tree first.
|
|
39
|
+
2. **PR / deploy (delegate)** — invoke gstack `/ship` for PR creation + pre-land review.
|
|
40
|
+
3. **publish (CI)** — push the `v<version>` tag (with explicit user approval) → `publish.yml`
|
|
41
|
+
runs `npm publish` + creates the GitHub release.
|
|
42
|
+
|
|
43
|
+
## Boundary (important)
|
|
44
|
+
|
|
45
|
+
This stage stops at **tag-ready**. It never pushes to the remote, never publishes to npm, and
|
|
46
|
+
never creates a git tag on its own. Those are CI + explicit-approval actions, by design —
|
|
47
|
+
"PR ready != release ready", and "release ready != already published".
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# workflows/ship/auto/workflow.yaml — Phase 21 (v7.0 follow-on)
|
|
2
|
+
#
|
|
3
|
+
# Stage ⑤ Ship master orchestrator — the release stage after Verify. Closes the
|
|
4
|
+
# ship-stage gap vs comet (archive) / Trellis (finish-work) / Claude-Harness
|
|
5
|
+
# (/harness-release). Composition, not reimplementation:
|
|
6
|
+
# ship-preflight (serial, always) → delegate PR/deploy to gstack /ship → publish
|
|
7
|
+
# stays in publish.yml CI on tag push.
|
|
8
|
+
#
|
|
9
|
+
# Deploy boundary = TAG-READY. This stage never pushes, publishes, or creates a tag.
|
|
10
|
+
#
|
|
11
|
+
# Master invariant (WorkflowSchemaV3 + check-workflow-schema K9):
|
|
12
|
+
# - phases 缺省 (master only has delegates_to[])
|
|
13
|
+
# - serial mode 必带 explicit order
|
|
14
|
+
#
|
|
15
|
+
# Sister refs:
|
|
16
|
+
# - workflows/ship/preflight/workflow.yaml — the preflight sub
|
|
17
|
+
# - workflows/judgments/stage-routing.yaml — ship-preflight-always trigger
|
|
18
|
+
# - workflows/capabilities.yaml — release-preflight + ship (gstack) + planning-with-files
|
|
19
|
+
|
|
20
|
+
schema_version: harnessed.workflow.v3
|
|
21
|
+
workflow: ship
|
|
22
|
+
description: |
|
|
23
|
+
Stage ⑤ Ship master orchestrator — release stage after Verify. ship-preflight 必跑串行
|
|
24
|
+
(release-readiness gate) → 委派 PR/deploy 给 gstack /ship → publish 留 publish.yml CI
|
|
25
|
+
(tag push 触发)。Deploy 边界 = tag-ready;本 stage 不 push/publish/创建 tag。
|
|
26
|
+
Triggered by `/ship` (bare per ADR 0030 namespace policy) after `harnessed verify`.
|
|
27
|
+
|
|
28
|
+
disciplines_applied: [karpathy, output-style, language, operational, priority, protocols]
|
|
29
|
+
tools_available:
|
|
30
|
+
- release-preflight
|
|
31
|
+
- ship
|
|
32
|
+
- planning-with-files
|
|
33
|
+
|
|
34
|
+
delegates_to:
|
|
35
|
+
- sub: preflight
|
|
36
|
+
mode: serial
|
|
37
|
+
order: 1
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ship-preflight
|
|
3
|
+
description: |
|
|
4
|
+
Stage ⑤.a Ship sub — release-preflight gate. Runs `harnessed release-preflight`
|
|
5
|
+
(read-only: CHANGELOG [Unreleased] non-empty + version + git-clean + tag-absent).
|
|
6
|
+
A failing gate blocks shipping. Nothing is pushed/published/tagged here.
|
|
7
|
+
trigger_phrases:
|
|
8
|
+
- "release preflight"
|
|
9
|
+
- "release ready"
|
|
10
|
+
- "ship preflight"
|
|
11
|
+
- "发布就绪检查"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# ship-preflight (Stage ⑤.a)
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
The machine-checkable "PR ready != release ready" gate. Runs the harnessed-native
|
|
19
|
+
`harnessed release-preflight` command, which inspects (read-only) whether the repo is
|
|
20
|
+
ready to tag a release:
|
|
21
|
+
|
|
22
|
+
| check | passes when |
|
|
23
|
+
| ----- | ----------- |
|
|
24
|
+
| `changelog` | `## [Unreleased]` has entries (this release is documented) |
|
|
25
|
+
| `version` | `package.json` has a valid semver |
|
|
26
|
+
| `git-clean` | the working tree has no uncommitted changes |
|
|
27
|
+
| `tag-absent` | a `v<version>` tag does NOT already exist |
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
|
|
31
|
+
1. Run `harnessed release-preflight`.
|
|
32
|
+
2. If any check fails, STOP — surface the `fix:` hints and do not proceed to PR/tag.
|
|
33
|
+
- Empty `[Unreleased]` is the most common failure: document the release first.
|
|
34
|
+
3. If all pass, the repo is **tag-ready**. The ship master continues to PR/deploy.
|
|
35
|
+
|
|
36
|
+
## Boundary
|
|
37
|
+
|
|
38
|
+
This gate is READ-ONLY. It never pushes, publishes, or creates a tag. The actual
|
|
39
|
+
`npm publish` + GitHub release happen in `publish.yml` CI when a `v<version>` tag is
|
|
40
|
+
pushed (with explicit user approval).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# workflows/ship/preflight/workflow.yaml — Phase 21 (v7.0 follow-on)
|
|
2
|
+
#
|
|
3
|
+
# Stage ⑤.a Ship sub-workflow — release-preflight gate ("PR ready != release ready").
|
|
4
|
+
# Read-only: checks CHANGELOG [Unreleased] / version / git-clean / tag-absence via
|
|
5
|
+
# `harnessed release-preflight`. Mutates nothing — publish stays in publish.yml CI.
|
|
6
|
+
#
|
|
7
|
+
# Sister refs:
|
|
8
|
+
# - workflows/judgments/stage-routing.yaml ship-preflight-always trigger
|
|
9
|
+
# - workflows/capabilities.yaml — release-preflight (harnessed-bundled CLI gate)
|
|
10
|
+
# - src/cli/lib/release-preflight.ts collectPreflight
|
|
11
|
+
|
|
12
|
+
schema_version: harnessed.workflow.v3
|
|
13
|
+
workflow: ship-preflight
|
|
14
|
+
description: |
|
|
15
|
+
Stage ⑤.a release-preflight gate — runs `harnessed release-preflight` (read-only:
|
|
16
|
+
CHANGELOG [Unreleased] non-empty + package.json version + git working tree clean +
|
|
17
|
+
v<version> tag absent). A failing gate BLOCKS shipping until the release is documented
|
|
18
|
+
and the tree is clean. Nothing is pushed, published, or tagged here.
|
|
19
|
+
|
|
20
|
+
disciplines_applied: [karpathy, output-style, language, operational, priority, protocols]
|
|
21
|
+
tools_available: [release-preflight]
|
|
22
|
+
|
|
23
|
+
phases:
|
|
24
|
+
- id: 01-release-preflight
|
|
25
|
+
name: release-preflight (read-only release-readiness gate; blocks on any failure)
|
|
26
|
+
upstream: harnessed
|
|
27
|
+
capability: '{{ capabilities.release-preflight.cmd }}'
|
|
28
|
+
model: haiku
|
|
29
|
+
max_iterations: 1
|