repo-harness 0.8.3 → 0.8.4

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.es.md CHANGED
@@ -85,7 +85,7 @@ artifacts.
85
85
  ## Novedades
86
86
 
87
87
  Las notas de versión viven en [`docs/CHANGELOG.md`](docs/CHANGELOG.md). La línea
88
- actual es `0.8.3`.
88
+ actual es `0.8.4`.
89
89
 
90
90
  ## Cómo funciona
91
91
 
@@ -419,8 +419,8 @@ Guards habituales:
419
419
 
420
420
  ## Release actual
421
421
 
422
- - npm package: `repo-harness@0.8.3`
423
- - Generated workflow stamp: `repo-harness@0.8.3+template@0.8.3`
422
+ - npm package: `repo-harness@0.8.4`
423
+ - Generated workflow stamp: `repo-harness@0.8.4+template@0.8.4`
424
424
  - GitHub repository: `Ancienttwo/repo-harness`
425
425
  - Release history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
426
426
 
package/README.fr.md CHANGED
@@ -85,7 +85,7 @@ l'emportent.
85
85
  ## Nouveautés
86
86
 
87
87
  Les notes de version vivent dans [`docs/CHANGELOG.md`](docs/CHANGELOG.md). La
88
- ligne actuelle est `0.8.3`.
88
+ ligne actuelle est `0.8.4`.
89
89
 
90
90
  ## Comment ça marche
91
91
 
@@ -424,8 +424,8 @@ Guards courants :
424
424
 
425
425
  ## Release actuelle
426
426
 
427
- - npm package : `repo-harness@0.8.3`
428
- - Generated workflow stamp : `repo-harness@0.8.3+template@0.8.3`
427
+ - npm package : `repo-harness@0.8.4`
428
+ - Generated workflow stamp : `repo-harness@0.8.4+template@0.8.4`
429
429
  - GitHub repository : `Ancienttwo/repo-harness`
430
430
  - Release history : [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
431
431
 
package/README.ja.md CHANGED
@@ -75,7 +75,7 @@ review、checks、handoff と食い違う場合は、source artifacts を優先
75
75
  ## What's New
76
76
 
77
77
  リリースノートは [`docs/CHANGELOG.md`](docs/CHANGELOG.md) にあります。現在の
78
- ラインは `0.8.3` です。
78
+ ラインは `0.8.4` です。
79
79
 
80
80
  ## 仕組み
81
81
 
@@ -398,8 +398,8 @@ hook がブロックしたときは、まず terminal の構造化された出
398
398
 
399
399
  ## 現在の Release
400
400
 
401
- - npm package:`repo-harness@0.8.3`
402
- - Generated workflow stamp:`repo-harness@0.8.3+template@0.8.3`
401
+ - npm package:`repo-harness@0.8.4`
402
+ - Generated workflow stamp:`repo-harness@0.8.4+template@0.8.4`
403
403
  - GitHub repository:`Ancienttwo/repo-harness`
404
404
  - Release history:[`docs/CHANGELOG.md`](docs/CHANGELOG.md)
405
405
 
package/README.md CHANGED
@@ -79,7 +79,7 @@ active plan, contract, review, checks, or handoff, the source artifacts win.
79
79
  ## What's New
80
80
 
81
81
  Release notes live in [`docs/CHANGELOG.md`](docs/CHANGELOG.md). The current line
82
- is `0.8.3`.
82
+ is `0.8.4`.
83
83
 
84
84
  ## How It Works
85
85
 
@@ -599,8 +599,8 @@ Most common guards:
599
599
 
600
600
  ## Current Release
601
601
 
602
- - npm package: `repo-harness@0.8.3`
603
- - Generated workflow stamp: `repo-harness@0.8.3+template@0.8.3`
602
+ - npm package: `repo-harness@0.8.4`
603
+ - Generated workflow stamp: `repo-harness@0.8.4+template@0.8.4`
604
604
  - GitHub repository: `Ancienttwo/repo-harness`
605
605
  - Release history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
606
606
 
package/README.zh-CN.md CHANGED
@@ -69,7 +69,7 @@ review、checks 或 handoff 冲突,以 source artifacts 为准。
69
69
 
70
70
  ## What's New
71
71
 
72
- Release notes 见 [`docs/CHANGELOG.md`](docs/CHANGELOG.md),当前版本线是 `0.8.3`。
72
+ Release notes 见 [`docs/CHANGELOG.md`](docs/CHANGELOG.md),当前版本线是 `0.8.4`。
73
73
 
74
74
  ## 工作原理
75
75
 
@@ -445,8 +445,8 @@ hook block 工作时,先看 terminal 里的结构化输出。核心字段是
445
445
 
446
446
  ## 当前 Release
447
447
 
448
- - npm package:`repo-harness@0.8.3`
449
- - Generated workflow stamp:`repo-harness@0.8.3+template@0.8.3`
448
+ - npm package:`repo-harness@0.8.4`
449
+ - Generated workflow stamp:`repo-harness@0.8.4+template@0.8.4`
450
450
  - GitHub repository:`Ancienttwo/repo-harness`
451
451
  - Release history:[`docs/CHANGELOG.md`](docs/CHANGELOG.md)
452
452
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.8.3",
3
- "templateVersion": "0.8.3",
2
+ "version": "0.8.4",
3
+ "templateVersion": "0.8.4",
4
4
  "skillName": "repo-harness",
5
5
  "contractId": "tasks-first-harness-v1",
6
6
  "compatibility": {
@@ -179,6 +179,10 @@
179
179
  {
180
180
  "version": "0.8.3",
181
181
  "description": "Keeps adopt and migration helper runtime package-only, removes local compatibility wrapper generation, and refreshes dependency lines to latest"
182
+ },
183
+ {
184
+ "version": "0.8.4",
185
+ "description": "Lets package-dispatched workstream sync resolve bundled helper siblings when downstream repos do not vendor legacy scripts"
182
186
  }
183
187
  ],
184
188
  "generatedProjectStamp": {
@@ -83,6 +83,47 @@ validate_block() {
83
83
  [[ -e "$block" ]]
84
84
  }
85
85
 
86
+ helper_sibling() {
87
+ local helper_name="$1"
88
+ local helper_dir=""
89
+ if [[ -n "${REPO_HARNESS_HELPER_SOURCE_PATH:-}" ]]; then
90
+ helper_dir="$(dirname "$REPO_HARNESS_HELPER_SOURCE_PATH")"
91
+ fi
92
+ if [[ -n "$helper_dir" && -f "$helper_dir/$helper_name" ]]; then
93
+ printf '%s\n' "$helper_dir/$helper_name"
94
+ return 0
95
+ fi
96
+ return 1
97
+ }
98
+
99
+ capability_resolver() {
100
+ local sibling=""
101
+ if command -v bun >/dev/null 2>&1 && [[ -f "scripts/capability-resolver.ts" ]]; then
102
+ bun scripts/capability-resolver.ts "$@"
103
+ return $?
104
+ fi
105
+ sibling="$(helper_sibling capability-resolver.ts || true)"
106
+ if command -v bun >/dev/null 2>&1 && [[ -n "$sibling" ]]; then
107
+ bun "$sibling" "$@"
108
+ return $?
109
+ fi
110
+ return 127
111
+ }
112
+
113
+ context_contract_sync() {
114
+ local sibling=""
115
+ if [[ -x "scripts/context-contract-sync.sh" ]]; then
116
+ bash "scripts/context-contract-sync.sh" "$@"
117
+ return $?
118
+ fi
119
+ sibling="$(helper_sibling context-contract-sync.sh || true)"
120
+ if [[ -n "$sibling" ]]; then
121
+ bash "$sibling" "$@"
122
+ return $?
123
+ fi
124
+ return 127
125
+ }
126
+
86
127
  while [[ $# -gt 0 ]]; do
87
128
  case "$1" in
88
129
  --block)
@@ -139,12 +180,12 @@ if ! validate_block "$functional_block"; then
139
180
  exit 2
140
181
  fi
141
182
 
142
- if [[ ! -f "scripts/capability-resolver.ts" ]] || ! command -v bun >/dev/null 2>&1; then
143
- echo "workstream-sync: scripts/capability-resolver.ts and bun are required" >&2
183
+ if ! command -v bun >/dev/null 2>&1 || ! capability_resolver list --format json >/dev/null 2>&1; then
184
+ echo "workstream-sync: capability-resolver.ts and bun are required" >&2
144
185
  exit 2
145
186
  fi
146
187
 
147
- if ! resolver_json="$(bun scripts/capability-resolver.ts match --path "$functional_block" --format json 2>&1)"; then
188
+ if ! resolver_json="$(capability_resolver match --path "$functional_block" --format json 2>&1)"; then
148
189
  echo "$resolver_json" >&2
149
190
  exit 1
150
191
  fi
@@ -257,8 +298,6 @@ fi
257
298
  event_json="{\"ts\":\"$(json_escape "$iso_timestamp")\",\"file_path\":\"$(json_escape "$workstream_file")\",\"severity\":\"medium\",\"functional_block\":\"$(json_escape "$functional_block")\",\"capability_id\":\"$(json_escape "$capability_id")\",\"matched_prefix\":\"$(json_escape "$matched_prefix")\",\"architecture_domain\":\"$(json_escape "$architecture_domain")\",\"architecture_capability\":\"$(json_escape "$architecture_capability")\",\"architecture_module\":\"$(json_escape "$architecture_module")\",\"workstream_dir\":\"$(json_escape "$workstream_dir")\",\"contract_agents\":\"$(json_escape "$contract_agents")\",\"contract_claude\":\"$(json_escape "$contract_claude")\",\"active_workstream\":\"$(json_escape "$workstream_file")\",\"change_type\":\"workstream-sync\",\"spawn_recommended\":false,\"contract_sync_required\":true,\"request_file\":\"$(json_escape "$request_file")\"}"
258
299
  printf '%s\n' "$event_json" >> "$event_file"
259
300
 
260
- if [[ -f "$helper_dir/context-contract-sync.sh" ]]; then
261
- bash "$helper_dir/context-contract-sync.sh" sync-event --json "$event_json"
262
- fi
301
+ context_contract_sync sync-event --json "$event_json" >/dev/null 2>&1 || true
263
302
 
264
303
  echo "[WorkstreamSync] Ensured $workstream_file for $capability_id."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "repo-harness",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "Installs, migrates, audits, and repairs repo-local agentic development harnesses",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -83,6 +83,47 @@ validate_block() {
83
83
  [[ -e "$block" ]]
84
84
  }
85
85
 
86
+ helper_sibling() {
87
+ local helper_name="$1"
88
+ local helper_dir=""
89
+ if [[ -n "${REPO_HARNESS_HELPER_SOURCE_PATH:-}" ]]; then
90
+ helper_dir="$(dirname "$REPO_HARNESS_HELPER_SOURCE_PATH")"
91
+ fi
92
+ if [[ -n "$helper_dir" && -f "$helper_dir/$helper_name" ]]; then
93
+ printf '%s\n' "$helper_dir/$helper_name"
94
+ return 0
95
+ fi
96
+ return 1
97
+ }
98
+
99
+ capability_resolver() {
100
+ local sibling=""
101
+ if command -v bun >/dev/null 2>&1 && [[ -f "scripts/capability-resolver.ts" ]]; then
102
+ bun scripts/capability-resolver.ts "$@"
103
+ return $?
104
+ fi
105
+ sibling="$(helper_sibling capability-resolver.ts || true)"
106
+ if command -v bun >/dev/null 2>&1 && [[ -n "$sibling" ]]; then
107
+ bun "$sibling" "$@"
108
+ return $?
109
+ fi
110
+ return 127
111
+ }
112
+
113
+ context_contract_sync() {
114
+ local sibling=""
115
+ if [[ -x "scripts/context-contract-sync.sh" ]]; then
116
+ bash "scripts/context-contract-sync.sh" "$@"
117
+ return $?
118
+ fi
119
+ sibling="$(helper_sibling context-contract-sync.sh || true)"
120
+ if [[ -n "$sibling" ]]; then
121
+ bash "$sibling" "$@"
122
+ return $?
123
+ fi
124
+ return 127
125
+ }
126
+
86
127
  while [[ $# -gt 0 ]]; do
87
128
  case "$1" in
88
129
  --block)
@@ -139,12 +180,12 @@ if ! validate_block "$functional_block"; then
139
180
  exit 2
140
181
  fi
141
182
 
142
- if [[ ! -f "scripts/capability-resolver.ts" ]] || ! command -v bun >/dev/null 2>&1; then
143
- echo "workstream-sync: scripts/capability-resolver.ts and bun are required" >&2
183
+ if ! command -v bun >/dev/null 2>&1 || ! capability_resolver list --format json >/dev/null 2>&1; then
184
+ echo "workstream-sync: capability-resolver.ts and bun are required" >&2
144
185
  exit 2
145
186
  fi
146
187
 
147
- if ! resolver_json="$(bun scripts/capability-resolver.ts match --path "$functional_block" --format json 2>&1)"; then
188
+ if ! resolver_json="$(capability_resolver match --path "$functional_block" --format json 2>&1)"; then
148
189
  echo "$resolver_json" >&2
149
190
  exit 1
150
191
  fi
@@ -257,8 +298,6 @@ fi
257
298
  event_json="{\"ts\":\"$(json_escape "$iso_timestamp")\",\"file_path\":\"$(json_escape "$workstream_file")\",\"severity\":\"medium\",\"functional_block\":\"$(json_escape "$functional_block")\",\"capability_id\":\"$(json_escape "$capability_id")\",\"matched_prefix\":\"$(json_escape "$matched_prefix")\",\"architecture_domain\":\"$(json_escape "$architecture_domain")\",\"architecture_capability\":\"$(json_escape "$architecture_capability")\",\"architecture_module\":\"$(json_escape "$architecture_module")\",\"workstream_dir\":\"$(json_escape "$workstream_dir")\",\"contract_agents\":\"$(json_escape "$contract_agents")\",\"contract_claude\":\"$(json_escape "$contract_claude")\",\"active_workstream\":\"$(json_escape "$workstream_file")\",\"change_type\":\"workstream-sync\",\"spawn_recommended\":false,\"contract_sync_required\":true,\"request_file\":\"$(json_escape "$request_file")\"}"
258
299
  printf '%s\n' "$event_json" >> "$event_file"
259
300
 
260
- if [[ -f "$helper_dir/context-contract-sync.sh" ]]; then
261
- bash "$helper_dir/context-contract-sync.sh" sync-event --json "$event_json"
262
- fi
301
+ context_contract_sync sync-event --json "$event_json" >/dev/null 2>&1 || true
263
302
 
264
303
  echo "[WorkstreamSync] Ensured $workstream_file for $capability_id."