@bvdm/delano 0.1.5 → 0.1.8

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.
Files changed (145) hide show
  1. package/.delano/README.md +7 -0
  2. package/.delano/viewer/README.md +19 -0
  3. package/.delano/viewer/public/app.js +818 -0
  4. package/.delano/viewer/public/explorer.svg +3 -0
  5. package/.delano/viewer/public/index.html +21 -0
  6. package/.delano/viewer/public/markdown.svg +6 -0
  7. package/.delano/viewer/public/styles.css +1042 -0
  8. package/.delano/viewer/public/vscode.svg +24 -0
  9. package/.delano/viewer/server.js +389 -0
  10. package/HANDBOOK.md +66 -45
  11. package/README.md +21 -2
  12. package/assets/install-manifest.json +112 -23
  13. package/assets/payload/.agents/README.md +31 -6
  14. package/assets/payload/.agents/adapters/claude/README.md +22 -3
  15. package/assets/payload/.agents/adapters/codex/README.md +22 -3
  16. package/assets/payload/.agents/adapters/opencode/README.md +22 -3
  17. package/assets/payload/.agents/adapters/pi/README.md +22 -3
  18. package/assets/payload/.agents/common/log-safety.js +55 -0
  19. package/assets/payload/.agents/eval-fixtures/skill-output/invalid/missing-evidence/output.json +6 -0
  20. package/assets/payload/.agents/eval-fixtures/skill-output/valid/summary/output.json +7 -0
  21. package/assets/payload/.agents/fixtures/github/status-snapshot.json +6 -0
  22. package/assets/payload/.agents/fixtures/linear/issue-snapshot.json +6 -0
  23. package/assets/payload/.agents/hooks/bash-worktree-fix.sh +2 -1
  24. package/assets/payload/.agents/hooks/post-tool-logger.js +2 -1
  25. package/assets/payload/.agents/hooks/session-tracker.js +0 -0
  26. package/assets/payload/.agents/hooks/user-prompt-logger.js +17 -1
  27. package/assets/payload/.agents/logs/delivery-metrics.md +22 -0
  28. package/assets/payload/.agents/logs/schema.md +20 -1
  29. package/assets/payload/.agents/rules/delivery-modes.md +17 -0
  30. package/assets/payload/.agents/schemas/README.md +22 -0
  31. package/assets/payload/.agents/schemas/artifact-scope.json +237 -0
  32. package/assets/payload/.agents/schemas/artifacts/context.schema.json +11 -0
  33. package/assets/payload/.agents/schemas/artifacts/decision_log.schema.json +12 -0
  34. package/assets/payload/.agents/schemas/artifacts/evidence.schema.json +17 -0
  35. package/assets/payload/.agents/schemas/artifacts/plan.schema.json +83 -0
  36. package/assets/payload/.agents/schemas/artifacts/spec.schema.json +101 -0
  37. package/assets/payload/.agents/schemas/artifacts/task.schema.json +121 -0
  38. package/assets/payload/.agents/schemas/artifacts/update.schema.json +12 -0
  39. package/assets/payload/.agents/schemas/artifacts/workstream.schema.json +66 -0
  40. package/assets/payload/.agents/schemas/evidence-map.json +53 -0
  41. package/assets/payload/.agents/schemas/learning/closeout-learning-proposal.schema.json +20 -0
  42. package/assets/payload/.agents/schemas/learning/delivery-metric-event.schema.json +21 -0
  43. package/assets/payload/.agents/schemas/leases/lease.schema.json +39 -0
  44. package/assets/payload/.agents/schemas/metrics/delivery-event.schema.json +29 -0
  45. package/assets/payload/.agents/schemas/metrics/delivery-events.schema.json +49 -0
  46. package/assets/payload/.agents/schemas/operating-modes.json +42 -0
  47. package/assets/payload/.agents/schemas/status-transitions.json +31 -0
  48. package/assets/payload/.agents/schemas/sync/drift-report.schema.json +25 -0
  49. package/assets/payload/.agents/schemas/sync/drift-taxonomy.json +38 -0
  50. package/assets/payload/.agents/schemas/sync/sync-map.schema.json +39 -0
  51. package/assets/payload/.agents/scripts/README.md +1 -0
  52. package/assets/payload/.agents/scripts/audit-context-files.mjs +54 -0
  53. package/assets/payload/.agents/scripts/audit-context-scoring.mjs +14 -0
  54. package/assets/payload/.agents/scripts/build-drift-report.mjs +133 -0
  55. package/assets/payload/.agents/scripts/check-artifact-schemas.mjs +116 -0
  56. package/assets/payload/.agents/scripts/check-closeout-learning-proposals.mjs +23 -0
  57. package/assets/payload/.agents/scripts/check-context-audit.mjs +61 -0
  58. package/assets/payload/.agents/scripts/check-delivery-metric-events.mjs +35 -0
  59. package/assets/payload/.agents/scripts/check-delivery-metrics.mjs +52 -0
  60. package/assets/payload/.agents/scripts/check-evidence-map.mjs +143 -0
  61. package/assets/payload/.agents/scripts/check-github-status-inspection.mjs +93 -0
  62. package/assets/payload/.agents/scripts/check-github-sync.mjs +159 -0
  63. package/assets/payload/.agents/scripts/check-handoff-summaries.mjs +57 -0
  64. package/assets/payload/.agents/scripts/check-lease-conflicts.mjs +24 -0
  65. package/assets/payload/.agents/scripts/check-lease-contracts.mjs +17 -0
  66. package/assets/payload/.agents/scripts/check-linear-issue-inspection.mjs +63 -0
  67. package/assets/payload/.agents/scripts/check-local-sync-map.mjs +151 -0
  68. package/assets/payload/.agents/scripts/check-log-safety.sh +62 -0
  69. package/assets/payload/.agents/scripts/check-operating-modes.mjs +99 -0
  70. package/assets/payload/.agents/scripts/check-path-standards.sh +1 -1
  71. package/assets/payload/.agents/scripts/check-skill-output-evals.mjs +13 -0
  72. package/assets/payload/.agents/scripts/check-status-transitions.mjs +169 -0
  73. package/assets/payload/.agents/scripts/check-strict-fixtures.mjs +140 -0
  74. package/assets/payload/.agents/scripts/check-sync-schemas.mjs +52 -0
  75. package/assets/payload/.agents/scripts/check-text-safety.mjs +158 -0
  76. package/assets/payload/.agents/scripts/check-worktree-health.mjs +100 -0
  77. package/assets/payload/.agents/scripts/fix-path-standards.sh +1 -1
  78. package/assets/payload/.agents/scripts/git-sparse-download.sh +0 -0
  79. package/assets/payload/.agents/scripts/inspect-github-sync.mjs +108 -0
  80. package/assets/payload/.agents/scripts/lease-manager.mjs +88 -0
  81. package/assets/payload/.agents/scripts/log-event.js +3 -0
  82. package/assets/payload/.agents/scripts/log-event.sh +0 -0
  83. package/assets/payload/.agents/scripts/plan-sync-repairs.mjs +66 -0
  84. package/assets/payload/.agents/scripts/pm/blocked.sh +0 -0
  85. package/assets/payload/.agents/scripts/pm/epic-list.sh +0 -0
  86. package/assets/payload/.agents/scripts/pm/in-progress.sh +0 -0
  87. package/assets/payload/.agents/scripts/pm/init.sh +0 -0
  88. package/assets/payload/.agents/scripts/pm/next.sh +0 -0
  89. package/assets/payload/.agents/scripts/pm/prd-list.sh +0 -0
  90. package/assets/payload/.agents/scripts/pm/search.sh +0 -0
  91. package/assets/payload/.agents/scripts/pm/standup.sh +0 -0
  92. package/assets/payload/.agents/scripts/pm/status.sh +0 -0
  93. package/assets/payload/.agents/scripts/pm/validate.sh +657 -2
  94. package/assets/payload/.agents/scripts/propose-closeout-learning.mjs +20 -0
  95. package/assets/payload/.agents/scripts/query-log.sh +0 -0
  96. package/assets/payload/.agents/scripts/read-local-sync-map.mjs +135 -0
  97. package/assets/payload/.agents/scripts/select-next-task.mjs +22 -0
  98. package/assets/payload/.agents/scripts/summarize-project-metrics.mjs +15 -0
  99. package/assets/payload/.agents/scripts/test-and-log.sh +0 -0
  100. package/assets/payload/.agents/skills/README.md +6 -0
  101. package/assets/payload/.agents/skills/closeout-skill/SKILL.md +3 -0
  102. package/assets/payload/.agents/skills/closeout-skill/references/runbook.md +5 -2
  103. package/assets/payload/.agents/skills/closeout-skill/templates/closure-checklist.md +2 -0
  104. package/assets/payload/.agents/skills/closeout-skill/templates/learning-proposal.md +21 -0
  105. package/assets/payload/.agents/skills/closeout-skill/templates/learning-proposals.md +25 -0
  106. package/assets/payload/.agents/skills/manage-context/SKILL.md +55 -0
  107. package/assets/payload/.agents/skills/manage-context/references/context-audit-checklist.md +26 -0
  108. package/assets/payload/.agents/skills/manage-context/references/runbook.md +26 -0
  109. package/assets/payload/.agents/skills/manage-context/templates/context-debt-report.md +22 -0
  110. package/assets/payload/.agents/skills/manage-context/templates/context-refresh-summary.md +13 -0
  111. package/assets/payload/.agents/skills/onboarding/SKILL.md +49 -0
  112. package/assets/payload/.agents/skills/onboarding/references/agents-md-best-practices.md +76 -0
  113. package/assets/payload/.agents/skills/prototype-skill/SKILL.md +51 -0
  114. package/assets/payload/.agents/skills/prototype-skill/references/probe-design-checklist.md +26 -0
  115. package/assets/payload/.agents/skills/prototype-skill/references/runbook.md +27 -0
  116. package/assets/payload/.agents/skills/prototype-skill/templates/probe-approval-recommendation.md +13 -0
  117. package/assets/payload/.agents/skills/prototype-skill/templates/probe-findings.md +16 -0
  118. package/assets/payload/.agents/validation-fixtures/strict/invalid/broken-dependencies/dependency.md +18 -0
  119. package/assets/payload/.agents/validation-fixtures/strict/invalid/broken-dependencies/task.md +24 -0
  120. package/assets/payload/.agents/validation-fixtures/strict/invalid/invalid-transition/task.md +20 -0
  121. package/assets/payload/.agents/validation-fixtures/strict/invalid/missing-evidence/task.md +27 -0
  122. package/assets/payload/.agents/validation-fixtures/strict/invalid/path-leak/task.md +27 -0
  123. package/assets/payload/.agents/validation-fixtures/strict/invalid/stale-context/context.md +9 -0
  124. package/assets/payload/.agents/validation-fixtures/strict/manifest.json +11 -0
  125. package/assets/payload/.agents/validation-fixtures/strict/valid/minimal-project/task.md +27 -0
  126. package/assets/payload/.delano/viewer/README.md +19 -0
  127. package/assets/payload/.delano/viewer/public/app.js +818 -0
  128. package/assets/payload/.delano/viewer/public/explorer.svg +3 -0
  129. package/assets/payload/.delano/viewer/public/index.html +21 -0
  130. package/assets/payload/.delano/viewer/public/markdown.svg +6 -0
  131. package/assets/payload/.delano/viewer/public/styles.css +1042 -0
  132. package/assets/payload/.delano/viewer/public/vscode.svg +24 -0
  133. package/assets/payload/.delano/viewer/server.js +389 -0
  134. package/assets/payload/.project/templates/plan.md +1 -1
  135. package/assets/payload/.project/templates/spec.md +1 -1
  136. package/assets/payload/.project/templates/task.md +1 -0
  137. package/assets/payload/HANDBOOK.md +66 -45
  138. package/assets/payload/install-delano.sh +0 -0
  139. package/install-delano.sh +0 -0
  140. package/package.json +31 -2
  141. package/src/cli/commands/onboarding.js +29 -0
  142. package/src/cli/commands/viewer.js +81 -0
  143. package/src/cli/index.js +20 -0
  144. package/src/cli/lib/install.js +1 -0
  145. package/src/cli/lib/onboarding.js +243 -0
@@ -41,7 +41,18 @@ is_iso_utc() {
41
41
  [[ "$ts" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ ]]
42
42
  }
43
43
 
44
+ contains_value() {
45
+ local needle="$1"
46
+ shift
47
+ local item
48
+ for item in "$@"; do
49
+ [[ "$item" == "$needle" ]] && return 0
50
+ done
51
+ return 1
52
+ }
53
+
44
54
  python_cmd=()
55
+ node_cmd=()
45
56
 
46
57
  resolve_python_cmd() {
47
58
  if command -v python3 >/dev/null 2>&1 && python3 -c "import sys" >/dev/null 2>&1; then
@@ -62,6 +73,40 @@ resolve_python_cmd() {
62
73
  return 1
63
74
  }
64
75
 
76
+ resolve_node_cmd() {
77
+ if command -v node >/dev/null 2>&1 && node -e "process.exit(0)" >/dev/null 2>&1; then
78
+ node_cmd=(node)
79
+ return 0
80
+ fi
81
+
82
+ if command -v node.exe >/dev/null 2>&1 && node.exe -e "process.exit(0)" >/dev/null 2>&1; then
83
+ node_cmd=(node.exe)
84
+ return 0
85
+ fi
86
+
87
+ if command -v powershell.exe >/dev/null 2>&1; then
88
+ local win_node
89
+ win_node="$(powershell.exe -NoProfile -Command "(Get-Command node -ErrorAction SilentlyContinue).Source" 2>/dev/null | tr -d '\r' | head -n 1)"
90
+ if [[ -n "$win_node" ]]; then
91
+ local unix_node="$win_node"
92
+ if command -v cygpath >/dev/null 2>&1; then
93
+ unix_node="$(cygpath -u "$win_node")"
94
+ else
95
+ unix_node="${unix_node//\\//}"
96
+ if [[ "$unix_node" =~ ^([A-Za-z]):/(.*)$ ]]; then
97
+ unix_node="/${BASH_REMATCH[1],,}/${BASH_REMATCH[2]}"
98
+ fi
99
+ fi
100
+ if [[ -x "$unix_node" ]]; then
101
+ node_cmd=("$unix_node")
102
+ return 0
103
+ fi
104
+ fi
105
+ fi
106
+
107
+ return 1
108
+ }
109
+
65
110
  echo "Delano validation"
66
111
  echo "================="
67
112
 
@@ -88,9 +133,21 @@ else
88
133
  errors=$((errors + 1))
89
134
  fi
90
135
 
136
+ if resolve_node_cmd; then
137
+ if ! command -v node >/dev/null 2>&1; then
138
+ node() {
139
+ "${node_cmd[@]}" "$@"
140
+ }
141
+ fi
142
+ echo "Node runtime: ${node_cmd[*]}"
143
+ else
144
+ echo "Node runtime not found (tried: node, node.exe, PowerShell Get-Command node)"
145
+ fi
146
+
91
147
  # Required skill contracts
92
148
  required_skills=(
93
149
  discovery-skill
150
+ prototype-skill
94
151
  planning-skill
95
152
  breakdown-skill
96
153
  sync-skill
@@ -202,6 +259,15 @@ for project_dir in .project/projects/*; do
202
259
  done
203
260
  fi
204
261
 
262
+ workstream_ids=()
263
+ for workstream in "$project_dir"/workstreams/*.md; do
264
+ [[ -f "$workstream" ]] || continue
265
+ workstream_file="$(basename "$workstream" .md)"
266
+ if [[ "$workstream_file" =~ ^(WS-[A-Za-z0-9]+) ]]; then
267
+ workstream_ids+=("${BASH_REMATCH[1]}")
268
+ fi
269
+ done
270
+
205
271
  for task in "$project_dir"/tasks/*.md; do
206
272
  [[ -f "$task" ]] || continue
207
273
  if ! has_frontmatter "$task"; then
@@ -209,13 +275,23 @@ for project_dir in .project/projects/*; do
209
275
  errors=$((errors + 1))
210
276
  continue
211
277
  fi
212
- for key in id name status created updated linear_issue_id github_issue github_pr depends_on conflicts_with parallel priority estimate; do
278
+ for key in id name status workstream created updated linear_issue_id github_issue github_pr depends_on conflicts_with parallel priority estimate; do
213
279
  val="$(fm_get "$task" "$key")"
214
280
  if [[ -z "$val" && ! "$key" =~ ^(linear_issue_id|github_issue|github_pr|depends_on|conflicts_with)$ ]]; then
215
281
  echo " ❌ $(basename "$task") missing key: $key"
216
282
  errors=$((errors + 1))
217
283
  fi
218
284
  done
285
+ task_workstream="$(fm_get "$task" "workstream")"
286
+ if [[ -n "$task_workstream" ]]; then
287
+ if [[ ! "$task_workstream" =~ ^WS-[A-Za-z0-9]+$ ]]; then
288
+ echo " ❌ $(basename "$task") workstream must use canonical form like WS-A"
289
+ errors=$((errors + 1))
290
+ elif ! contains_value "$task_workstream" "${workstream_ids[@]}"; then
291
+ echo " ❌ $(basename "$task") workstream does not match a project workstream: $task_workstream"
292
+ errors=$((errors + 1))
293
+ fi
294
+ fi
219
295
  done
220
296
 
221
297
  # dependency cycle check for this project
@@ -288,7 +364,7 @@ if find .project .agents "${compat_paths[@]}" \
288
364
  \( -name '*.md' -o -name '*.json' -o -name '*.yaml' -o -name '*.yml' \) \
289
365
  -not -path '.agents/logs/*' \
290
366
  -not -path '.claude/logs/*' \
291
- -print0 | xargs -0 grep -nE '(/home/|/Users/|[A-Za-z]:\\)' >"$path_tmp" 2>/dev/null; then
367
+ -print0 | xargs -0 grep -nE '(/home/|/Users/|/mnt/[A-Za-z]/|[A-Za-z]:\\)' >"$path_tmp" 2>/dev/null; then
292
368
  echo ""
293
369
  echo "❌ Absolute path leakage found"
294
370
  head -n 20 "$path_tmp"
@@ -298,6 +374,585 @@ else
298
374
  echo "✅ No absolute path leakage in tracked docs and contracts"
299
375
  fi
300
376
 
377
+ if [[ -x .agents/scripts/check-log-safety.sh ]]; then
378
+ echo ""
379
+ if .agents/scripts/check-log-safety.sh; then
380
+ true
381
+ else
382
+ errors=$((errors + 1))
383
+ fi
384
+ fi
385
+
386
+ text_safety_check=""
387
+ if [[ -f .agents/scripts/check-text-safety.mjs ]]; then
388
+ text_safety_check=".agents/scripts/check-text-safety.mjs"
389
+ elif [[ -f scripts/check-text-safety.mjs ]]; then
390
+ text_safety_check="scripts/check-text-safety.mjs"
391
+ fi
392
+
393
+ if [[ -n "$text_safety_check" ]]; then
394
+ echo ""
395
+ if command -v node >/dev/null 2>&1; then
396
+ if node "$text_safety_check"; then
397
+ true
398
+ else
399
+ errors=$((errors + 1))
400
+ fi
401
+ else
402
+ echo "❌ Node runtime not found for text safety check"
403
+ errors=$((errors + 1))
404
+ fi
405
+ fi
406
+
407
+ if [[ -f scripts/check-package-manifest-drift.mjs ]]; then
408
+ echo ""
409
+ if command -v node >/dev/null 2>&1; then
410
+ if node scripts/check-package-manifest-drift.mjs; then
411
+ true
412
+ else
413
+ errors=$((errors + 1))
414
+ fi
415
+ else
416
+ echo "❌ Node runtime not found for package/manifest drift check"
417
+ errors=$((errors + 1))
418
+ fi
419
+ fi
420
+
421
+ if [[ -f scripts/check-agent-entry-docs.mjs ]]; then
422
+ echo ""
423
+ if command -v node >/dev/null 2>&1; then
424
+ if node scripts/check-agent-entry-docs.mjs; then
425
+ true
426
+ else
427
+ errors=$((errors + 1))
428
+ fi
429
+ else
430
+ echo "❌ Node runtime not found for agent entry doc check"
431
+ errors=$((errors + 1))
432
+ fi
433
+ fi
434
+
435
+ if [[ -f scripts/check-artifact-scope.mjs ]]; then
436
+ echo ""
437
+ if command -v node >/dev/null 2>&1; then
438
+ if node scripts/check-artifact-scope.mjs; then
439
+ true
440
+ else
441
+ errors=$((errors + 1))
442
+ fi
443
+ else
444
+ echo "❌ Node runtime not found for artifact scope check"
445
+ errors=$((errors + 1))
446
+ fi
447
+ fi
448
+
449
+ artifact_schema_check=""
450
+ if [[ -f .agents/scripts/check-artifact-schemas.mjs ]]; then
451
+ artifact_schema_check=".agents/scripts/check-artifact-schemas.mjs"
452
+ elif [[ -f scripts/check-artifact-schemas.mjs ]]; then
453
+ artifact_schema_check="scripts/check-artifact-schemas.mjs"
454
+ fi
455
+
456
+ if [[ -n "$artifact_schema_check" ]]; then
457
+ echo ""
458
+ if command -v node >/dev/null 2>&1; then
459
+ if node "$artifact_schema_check"; then
460
+ true
461
+ else
462
+ errors=$((errors + 1))
463
+ fi
464
+ else
465
+ echo "❌ Node runtime not found for artifact schema check"
466
+ errors=$((errors + 1))
467
+ fi
468
+ fi
469
+
470
+ operating_modes_check=""
471
+ if [[ -f .agents/scripts/check-operating-modes.mjs ]]; then
472
+ operating_modes_check=".agents/scripts/check-operating-modes.mjs"
473
+ elif [[ -f scripts/check-operating-modes.mjs ]]; then
474
+ operating_modes_check="scripts/check-operating-modes.mjs"
475
+ fi
476
+
477
+ if [[ -n "$operating_modes_check" ]]; then
478
+ echo ""
479
+ if command -v node >/dev/null 2>&1; then
480
+ if node "$operating_modes_check"; then
481
+ true
482
+ else
483
+ errors=$((errors + 1))
484
+ fi
485
+ else
486
+ echo "❌ Node runtime not found for operating modes check"
487
+ errors=$((errors + 1))
488
+ fi
489
+ fi
490
+
491
+ status_transition_check=""
492
+ if [[ -f .agents/scripts/check-status-transitions.mjs ]]; then
493
+ status_transition_check=".agents/scripts/check-status-transitions.mjs"
494
+ elif [[ -f scripts/check-status-transitions.mjs ]]; then
495
+ status_transition_check="scripts/check-status-transitions.mjs"
496
+ fi
497
+
498
+ if [[ -n "$status_transition_check" ]]; then
499
+ echo ""
500
+ if command -v node >/dev/null 2>&1; then
501
+ if node "$status_transition_check"; then
502
+ true
503
+ else
504
+ errors=$((errors + 1))
505
+ fi
506
+ else
507
+ echo "❌ Node runtime not found for status transition check"
508
+ errors=$((errors + 1))
509
+ fi
510
+ fi
511
+
512
+ evidence_map_check=""
513
+ if [[ -f .agents/scripts/check-evidence-map.mjs ]]; then
514
+ evidence_map_check=".agents/scripts/check-evidence-map.mjs"
515
+ elif [[ -f scripts/check-evidence-map.mjs ]]; then
516
+ evidence_map_check="scripts/check-evidence-map.mjs"
517
+ fi
518
+
519
+ if [[ -n "$evidence_map_check" ]]; then
520
+ echo ""
521
+ if command -v node >/dev/null 2>&1; then
522
+ if node "$evidence_map_check"; then
523
+ true
524
+ else
525
+ errors=$((errors + 1))
526
+ fi
527
+ else
528
+ echo "❌ Node runtime not found for evidence map check"
529
+ errors=$((errors + 1))
530
+ fi
531
+ fi
532
+
533
+ strict_fixtures_check=""
534
+ if [[ -f .agents/scripts/check-strict-fixtures.mjs ]]; then
535
+ strict_fixtures_check=".agents/scripts/check-strict-fixtures.mjs"
536
+ elif [[ -f scripts/check-strict-fixtures.mjs ]]; then
537
+ strict_fixtures_check="scripts/check-strict-fixtures.mjs"
538
+ fi
539
+
540
+ if [[ -n "$strict_fixtures_check" ]]; then
541
+ echo ""
542
+ if command -v node >/dev/null 2>&1; then
543
+ if node "$strict_fixtures_check"; then
544
+ true
545
+ else
546
+ errors=$((errors + 1))
547
+ fi
548
+ else
549
+ echo "❌ Node runtime not found for strict fixtures check"
550
+ errors=$((errors + 1))
551
+ fi
552
+ fi
553
+
554
+ sync_schema_check=""
555
+ if [[ -f .agents/scripts/check-sync-schemas.mjs ]]; then
556
+ sync_schema_check=".agents/scripts/check-sync-schemas.mjs"
557
+ elif [[ -f scripts/check-sync-schemas.mjs ]]; then
558
+ sync_schema_check="scripts/check-sync-schemas.mjs"
559
+ fi
560
+
561
+ if [[ -n "$sync_schema_check" ]]; then
562
+ echo ""
563
+ if command -v node >/dev/null 2>&1; then
564
+ if node "$sync_schema_check"; then
565
+ true
566
+ else
567
+ errors=$((errors + 1))
568
+ fi
569
+ else
570
+ echo "❌ Node runtime not found for sync schema check"
571
+ errors=$((errors + 1))
572
+ fi
573
+ fi
574
+
575
+ local_sync_map_check=""
576
+ if [[ -f .agents/scripts/check-local-sync-map.mjs ]]; then
577
+ local_sync_map_check=".agents/scripts/check-local-sync-map.mjs"
578
+ elif [[ -f scripts/check-local-sync-map.mjs ]]; then
579
+ local_sync_map_check="scripts/check-local-sync-map.mjs"
580
+ fi
581
+
582
+ if [[ -n "$local_sync_map_check" ]]; then
583
+ echo ""
584
+ if command -v node >/dev/null 2>&1; then
585
+ if node "$local_sync_map_check"; then
586
+ true
587
+ else
588
+ errors=$((errors + 1))
589
+ fi
590
+ else
591
+ echo "❌ Node runtime not found for local sync map check"
592
+ errors=$((errors + 1))
593
+ fi
594
+ fi
595
+
596
+ github_sync_check=""
597
+ if [[ -f .agents/scripts/check-github-sync.mjs ]]; then
598
+ github_sync_check=".agents/scripts/check-github-sync.mjs"
599
+ elif [[ -f scripts/check-github-sync.mjs ]]; then
600
+ github_sync_check="scripts/check-github-sync.mjs"
601
+ fi
602
+
603
+ if [[ -n "$github_sync_check" ]]; then
604
+ echo ""
605
+ if command -v node >/dev/null 2>&1; then
606
+ if node "$github_sync_check"; then
607
+ true
608
+ else
609
+ errors=$((errors + 1))
610
+ fi
611
+ else
612
+ echo "❌ Node runtime not found for GitHub sync inspection"
613
+ errors=$((errors + 1))
614
+ fi
615
+ fi
616
+
617
+ local_sync_map_check=""
618
+ if [[ -f .agents/scripts/read-local-sync-map.mjs ]]; then
619
+ local_sync_map_check=".agents/scripts/read-local-sync-map.mjs"
620
+ elif [[ -f scripts/read-local-sync-map.mjs ]]; then
621
+ local_sync_map_check="scripts/read-local-sync-map.mjs"
622
+ fi
623
+
624
+ if [[ -n "$local_sync_map_check" ]]; then
625
+ echo ""
626
+ if command -v node >/dev/null 2>&1; then
627
+ if node "$local_sync_map_check"; then
628
+ true
629
+ else
630
+ errors=$((errors + 1))
631
+ fi
632
+ else
633
+ echo "❌ Node runtime not found for local sync map check"
634
+ errors=$((errors + 1))
635
+ fi
636
+ fi
637
+
638
+ github_sync_check=""
639
+ if [[ -f .agents/scripts/inspect-github-sync.mjs ]]; then
640
+ github_sync_check=".agents/scripts/inspect-github-sync.mjs"
641
+ elif [[ -f scripts/inspect-github-sync.mjs ]]; then
642
+ github_sync_check="scripts/inspect-github-sync.mjs"
643
+ fi
644
+
645
+ if [[ -n "$github_sync_check" ]]; then
646
+ echo ""
647
+ if command -v node >/dev/null 2>&1; then
648
+ if node "$github_sync_check"; then
649
+ true
650
+ else
651
+ errors=$((errors + 1))
652
+ fi
653
+ else
654
+ echo "❌ Node runtime not found for GitHub sync inspection"
655
+ errors=$((errors + 1))
656
+ fi
657
+ fi
658
+
659
+ github_status_check=""
660
+ if [[ -f .agents/scripts/check-github-status-inspection.mjs ]]; then
661
+ github_status_check=".agents/scripts/check-github-status-inspection.mjs"
662
+ elif [[ -f scripts/check-github-status-inspection.mjs ]]; then
663
+ github_status_check="scripts/check-github-status-inspection.mjs"
664
+ fi
665
+
666
+ if [[ -n "$github_status_check" ]]; then
667
+ echo ""
668
+ if command -v node >/dev/null 2>&1; then
669
+ if node "$github_status_check"; then
670
+ true
671
+ else
672
+ errors=$((errors + 1))
673
+ fi
674
+ else
675
+ echo "❌ Node runtime not found for GitHub status inspection"
676
+ errors=$((errors + 1))
677
+ fi
678
+ fi
679
+
680
+ linear_issue_check=""
681
+ if [[ -f .agents/scripts/check-linear-issue-inspection.mjs ]]; then
682
+ linear_issue_check=".agents/scripts/check-linear-issue-inspection.mjs"
683
+ elif [[ -f scripts/check-linear-issue-inspection.mjs ]]; then
684
+ linear_issue_check="scripts/check-linear-issue-inspection.mjs"
685
+ fi
686
+
687
+ if [[ -n "$linear_issue_check" ]]; then
688
+ echo ""
689
+ if command -v node >/dev/null 2>&1; then
690
+ if node "$linear_issue_check"; then
691
+ true
692
+ else
693
+ errors=$((errors + 1))
694
+ fi
695
+ else
696
+ echo "❌ Node runtime not found for Linear issue inspection"
697
+ errors=$((errors + 1))
698
+ fi
699
+ fi
700
+
701
+ drift_report_check=""
702
+ if [[ -f .agents/scripts/build-drift-report.mjs ]]; then
703
+ drift_report_check=".agents/scripts/build-drift-report.mjs"
704
+ elif [[ -f scripts/build-drift-report.mjs ]]; then
705
+ drift_report_check="scripts/build-drift-report.mjs"
706
+ fi
707
+
708
+ if [[ -n "$drift_report_check" ]]; then
709
+ echo ""
710
+ if command -v node >/dev/null 2>&1; then
711
+ if node "$drift_report_check"; then
712
+ true
713
+ else
714
+ errors=$((errors + 1))
715
+ fi
716
+ else
717
+ echo "❌ Node runtime not found for dry-run drift report"
718
+ errors=$((errors + 1))
719
+ fi
720
+ fi
721
+
722
+ repair_plan_check=""
723
+ if [[ -f .agents/scripts/plan-sync-repairs.mjs ]]; then
724
+ repair_plan_check=".agents/scripts/plan-sync-repairs.mjs"
725
+ elif [[ -f scripts/plan-sync-repairs.mjs ]]; then
726
+ repair_plan_check="scripts/plan-sync-repairs.mjs"
727
+ fi
728
+
729
+ if [[ -n "$repair_plan_check" ]]; then
730
+ echo ""
731
+ if command -v node >/dev/null 2>&1; then
732
+ if node "$repair_plan_check"; then
733
+ true
734
+ else
735
+ errors=$((errors + 1))
736
+ fi
737
+ else
738
+ echo "❌ Node runtime not found for sync repair planning"
739
+ errors=$((errors + 1))
740
+ fi
741
+ fi
742
+
743
+ lease_contract_check=""
744
+ if [[ -f .agents/scripts/check-lease-contracts.mjs ]]; then
745
+ lease_contract_check=".agents/scripts/check-lease-contracts.mjs"
746
+ elif [[ -f scripts/check-lease-contracts.mjs ]]; then
747
+ lease_contract_check="scripts/check-lease-contracts.mjs"
748
+ fi
749
+
750
+ if [[ -n "$lease_contract_check" ]]; then
751
+ echo ""
752
+ if command -v node >/dev/null 2>&1; then
753
+ if node "$lease_contract_check"; then true; else errors=$((errors + 1)); fi
754
+ else
755
+ echo "❌ Node runtime not found for lease contract check"; errors=$((errors + 1))
756
+ fi
757
+ fi
758
+
759
+ lease_manager_check=""
760
+ if [[ -f .agents/scripts/lease-manager.mjs ]]; then
761
+ lease_manager_check=".agents/scripts/lease-manager.mjs"
762
+ elif [[ -f scripts/lease-manager.mjs ]]; then
763
+ lease_manager_check="scripts/lease-manager.mjs"
764
+ fi
765
+
766
+ if [[ -n "$lease_manager_check" ]]; then
767
+ echo ""
768
+ if command -v node >/dev/null 2>&1; then
769
+ if node "$lease_manager_check" self-test; then true; else errors=$((errors + 1)); fi
770
+ else
771
+ echo "❌ Node runtime not found for lease manager check"; errors=$((errors + 1))
772
+ fi
773
+ fi
774
+
775
+ lease_conflict_check=""
776
+ if [[ -f .agents/scripts/check-lease-conflicts.mjs ]]; then
777
+ lease_conflict_check=".agents/scripts/check-lease-conflicts.mjs"
778
+ elif [[ -f scripts/check-lease-conflicts.mjs ]]; then
779
+ lease_conflict_check="scripts/check-lease-conflicts.mjs"
780
+ fi
781
+
782
+ if [[ -n "$lease_conflict_check" ]]; then
783
+ echo ""
784
+ if command -v node >/dev/null 2>&1; then
785
+ if node "$lease_conflict_check" --zone scripts/lease-manager.mjs --mode exclusive; then true; else errors=$((errors + 1)); fi
786
+ else
787
+ echo "❌ Node runtime not found for lease conflict check"; errors=$((errors + 1))
788
+ fi
789
+ fi
790
+
791
+ next_task_check=""
792
+ if [[ -f .agents/scripts/select-next-task.mjs ]]; then
793
+ next_task_check=".agents/scripts/select-next-task.mjs"
794
+ elif [[ -f scripts/select-next-task.mjs ]]; then
795
+ next_task_check="scripts/select-next-task.mjs"
796
+ fi
797
+
798
+ if [[ -n "$next_task_check" ]]; then
799
+ echo ""
800
+ if command -v node >/dev/null 2>&1; then
801
+ if node "$next_task_check" --project delano-multi-agent-execution --stream default; then true; else errors=$((errors + 1)); fi
802
+ else
803
+ echo "❌ Node runtime not found for next task selection check"; errors=$((errors + 1))
804
+ fi
805
+ fi
806
+
807
+ worktree_health_check=""
808
+ if [[ -f .agents/scripts/check-worktree-health.mjs ]]; then
809
+ worktree_health_check=".agents/scripts/check-worktree-health.mjs"
810
+ elif [[ -f scripts/check-worktree-health.mjs ]]; then
811
+ worktree_health_check="scripts/check-worktree-health.mjs"
812
+ fi
813
+
814
+ if [[ -n "$worktree_health_check" ]]; then
815
+ echo ""
816
+ if command -v node >/dev/null 2>&1; then
817
+ if node "$worktree_health_check"; then true; else errors=$((errors + 1)); fi
818
+ else
819
+ echo "❌ Node runtime not found for worktree health check"; errors=$((errors + 1))
820
+ fi
821
+ fi
822
+
823
+ delivery_metrics_check=""
824
+ if [[ -f .agents/scripts/check-delivery-metric-events.mjs ]]; then
825
+ delivery_metrics_check=".agents/scripts/check-delivery-metric-events.mjs"
826
+ elif [[ -f scripts/check-delivery-metric-events.mjs ]]; then
827
+ delivery_metrics_check="scripts/check-delivery-metric-events.mjs"
828
+ fi
829
+
830
+ if [[ -n "$delivery_metrics_check" ]]; then
831
+ echo ""
832
+ if command -v node >/dev/null 2>&1; then
833
+ if node "$delivery_metrics_check"; then true; else errors=$((errors + 1)); fi
834
+ else
835
+ echo "❌ Node runtime not found for delivery metrics check"; errors=$((errors + 1))
836
+ fi
837
+ fi
838
+
839
+ handoff_summary_check=""
840
+ if [[ -f .agents/scripts/check-handoff-summaries.mjs ]]; then
841
+ handoff_summary_check=".agents/scripts/check-handoff-summaries.mjs"
842
+ elif [[ -f scripts/check-handoff-summaries.mjs ]]; then
843
+ handoff_summary_check="scripts/check-handoff-summaries.mjs"
844
+ fi
845
+
846
+ if [[ -n "$handoff_summary_check" ]]; then
847
+ echo ""
848
+ if command -v node >/dev/null 2>&1; then
849
+ if node "$handoff_summary_check" --self-test; then true; else errors=$((errors + 1)); fi
850
+ else
851
+ echo "❌ Node runtime not found for handoff summary check"; errors=$((errors + 1))
852
+ fi
853
+ fi
854
+
855
+ delivery_metrics_check=""
856
+ if [[ -f .agents/scripts/check-delivery-metrics.mjs ]]; then
857
+ delivery_metrics_check=".agents/scripts/check-delivery-metrics.mjs"
858
+ elif [[ -f scripts/check-delivery-metrics.mjs ]]; then
859
+ delivery_metrics_check="scripts/check-delivery-metrics.mjs"
860
+ fi
861
+
862
+ if [[ -n "$delivery_metrics_check" ]]; then
863
+ echo ""
864
+ if command -v node >/dev/null 2>&1; then
865
+ if node "$delivery_metrics_check"; then
866
+ true
867
+ else
868
+ errors=$((errors + 1))
869
+ fi
870
+ else
871
+ echo "❌ Node runtime not found for delivery metric event check"
872
+ errors=$((errors + 1))
873
+ fi
874
+ fi
875
+
876
+ project_metrics_check=""
877
+ if [[ -f .agents/scripts/summarize-project-metrics.mjs ]]; then
878
+ project_metrics_check=".agents/scripts/summarize-project-metrics.mjs"
879
+ elif [[ -f scripts/summarize-project-metrics.mjs ]]; then
880
+ project_metrics_check="scripts/summarize-project-metrics.mjs"
881
+ fi
882
+
883
+ if [[ -n "$project_metrics_check" ]]; then
884
+ echo ""
885
+ if command -v node >/dev/null 2>&1; then
886
+ if node "$project_metrics_check" --json >/dev/null; then true; else errors=$((errors + 1)); fi
887
+ else
888
+ echo "❌ Node runtime not found for project metrics summary"; errors=$((errors + 1))
889
+ fi
890
+ fi
891
+
892
+ context_audit_check=""
893
+ if [[ -f .agents/scripts/audit-context-scoring.mjs ]]; then
894
+ context_audit_check=".agents/scripts/audit-context-scoring.mjs"
895
+ elif [[ -f scripts/audit-context-scoring.mjs ]]; then
896
+ context_audit_check="scripts/audit-context-scoring.mjs"
897
+ fi
898
+
899
+ if [[ -n "$context_audit_check" ]]; then
900
+ echo ""
901
+ if command -v node >/dev/null 2>&1; then
902
+ if node "$context_audit_check"; then true; else errors=$((errors + 1)); fi
903
+ else
904
+ echo "❌ Node runtime not found for context audit scoring"; errors=$((errors + 1))
905
+ fi
906
+ fi
907
+
908
+ skill_eval_check=""
909
+ if [[ -f .agents/scripts/check-skill-output-evals.mjs ]]; then
910
+ skill_eval_check=".agents/scripts/check-skill-output-evals.mjs"
911
+ elif [[ -f scripts/check-skill-output-evals.mjs ]]; then
912
+ skill_eval_check="scripts/check-skill-output-evals.mjs"
913
+ fi
914
+
915
+ if [[ -n "$skill_eval_check" ]]; then
916
+ echo ""
917
+ if command -v node >/dev/null 2>&1; then
918
+ if node "$skill_eval_check"; then true; else errors=$((errors + 1)); fi
919
+ else
920
+ echo "❌ Node runtime not found for skill output evals"; errors=$((errors + 1))
921
+ fi
922
+ fi
923
+
924
+ closeout_learning_check=""
925
+ if [[ -f .agents/scripts/propose-closeout-learning.mjs ]]; then
926
+ closeout_learning_check=".agents/scripts/propose-closeout-learning.mjs"
927
+ elif [[ -f scripts/propose-closeout-learning.mjs ]]; then
928
+ closeout_learning_check="scripts/propose-closeout-learning.mjs"
929
+ fi
930
+
931
+ if [[ -n "$closeout_learning_check" ]]; then
932
+ echo ""
933
+ if command -v node >/dev/null 2>&1; then
934
+ if node "$closeout_learning_check" --json >/dev/null; then true; else errors=$((errors + 1)); fi
935
+ else
936
+ echo "❌ Node runtime not found for closeout learning proposal"; errors=$((errors + 1))
937
+ fi
938
+ fi
939
+
940
+ closeout_learning_proposal_check=""
941
+ if [[ -f .agents/scripts/check-closeout-learning-proposals.mjs ]]; then
942
+ closeout_learning_proposal_check=".agents/scripts/check-closeout-learning-proposals.mjs"
943
+ elif [[ -f scripts/check-closeout-learning-proposals.mjs ]]; then
944
+ closeout_learning_proposal_check="scripts/check-closeout-learning-proposals.mjs"
945
+ fi
946
+
947
+ if [[ -n "$closeout_learning_proposal_check" ]]; then
948
+ echo ""
949
+ if command -v node >/dev/null 2>&1; then
950
+ if node "$closeout_learning_proposal_check"; then true; else errors=$((errors + 1)); fi
951
+ else
952
+ echo "❌ Node runtime not found for closeout learning proposal check"; errors=$((errors + 1))
953
+ fi
954
+ fi
955
+
301
956
  echo ""
302
957
  echo "Summary"
303
958
  echo "-------"