dev-playbooks-cn 1.0.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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +466 -0
  3. package/bin/devbooks.js +987 -0
  4. package/package.json +43 -0
  5. package/skills/Skills/344/275/277/347/224/250/350/257/264/346/230/216.md +446 -0
  6. package/skills/Skill/345/274/200/345/217/221/346/214/207/345/215/227.md +248 -0
  7. package/skills/_shared/context-detection-template.md +315 -0
  8. package/skills/_shared/mcp-enhancement-template.md +144 -0
  9. package/skills/_shared/references//351/200/232/347/224/250/345/256/210/351/227/250/345/215/217/350/256/256.md +114 -0
  10. package/skills/_template/config-discovery-template.md +126 -0
  11. package/skills/devbooks-brownfield-bootstrap/SKILL.md +167 -0
  12. package/skills/devbooks-brownfield-bootstrap/references//344/273/243/347/240/201/345/257/274/350/210/252/347/255/226/347/225/245.md +203 -0
  13. package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226.md +96 -0
  14. package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226/346/217/220/347/244/272/350/257/215.md +115 -0
  15. package/skills/devbooks-brownfield-bootstrap/references//346/234/257/350/257/255/350/241/250/346/250/241/346/235/277.md +42 -0
  16. package/skills/devbooks-brownfield-bootstrap/scripts/cod-update.sh +357 -0
  17. package/skills/devbooks-brownfield-bootstrap/templates/project-profile-template.md +172 -0
  18. package/skills/devbooks-c4-map/SKILL.md +151 -0
  19. package/skills/devbooks-c4-map/references/C4/346/236/266/346/236/204/345/234/260/345/233/276/346/217/220/347/244/272/350/257/215.md +33 -0
  20. package/skills/devbooks-c4-map/references//345/210/206/345/261/202/347/272/246/346/235/237/346/243/200/346/237/245/346/270/205/345/215/225.md +185 -0
  21. package/skills/devbooks-code-review/SKILL.md +175 -0
  22. package/skills/devbooks-code-review/references/PR/346/250/241/346/235/277/344/270/216/346/214/207/345/215/227.md +321 -0
  23. package/skills/devbooks-code-review/references//344/273/243/347/240/201/350/257/204/345/256/241/346/217/220/347/244/272/350/257/215.md +100 -0
  24. package/skills/devbooks-code-review/references//345/235/217/345/221/263/351/201/223/351/200/237/346/237/245/350/241/250.md +495 -0
  25. package/skills/devbooks-code-review/references//350/265/204/346/272/220/347/256/241/347/220/206/345/256/241/346/237/245/346/270/205/345/215/225.md +311 -0
  26. package/skills/devbooks-coder/SKILL.md +219 -0
  27. package/skills/devbooks-coder/references//344/273/243/347/240/201/345/256/236/347/216/260/346/217/220/347/244/272/350/257/215.md +70 -0
  28. package/skills/devbooks-coder/references//344/275/216/351/243/216/351/231/251/346/224/271/345/212/250/346/212/200/346/234/257.md +275 -0
  29. package/skills/devbooks-coder/references//346/227/245/345/277/227/350/247/204/350/214/203.md +329 -0
  30. package/skills/devbooks-coder/references//347/274/226/347/240/201/351/243/216/346/240/274/347/273/206/345/210/231.md +351 -0
  31. package/skills/devbooks-coder/references//351/224/231/350/257/257/347/240/201/350/247/204/350/214/203.md +463 -0
  32. package/skills/devbooks-delivery-workflow/SKILL.md +217 -0
  33. package/skills/devbooks-delivery-workflow/references//344/272/244/344/273/230/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md +256 -0
  34. package/skills/devbooks-delivery-workflow/references//345/216/237/345/236/213-/347/224/237/344/272/247/345/217/214/350/275/250/346/250/241/345/274/217.md +168 -0
  35. package/skills/devbooks-delivery-workflow/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +133 -0
  36. package/skills/devbooks-delivery-workflow/scripts/ac-trace-check.sh +330 -0
  37. package/skills/devbooks-delivery-workflow/scripts/audit-scope.sh +262 -0
  38. package/skills/devbooks-delivery-workflow/scripts/change-check.sh +1040 -0
  39. package/skills/devbooks-delivery-workflow/scripts/change-codemod-scaffold.sh +135 -0
  40. package/skills/devbooks-delivery-workflow/scripts/change-evidence.sh +152 -0
  41. package/skills/devbooks-delivery-workflow/scripts/change-scaffold.sh +442 -0
  42. package/skills/devbooks-delivery-workflow/scripts/change-spec-delta-scaffold.sh +136 -0
  43. package/skills/devbooks-delivery-workflow/scripts/constitution-check.sh +237 -0
  44. package/skills/devbooks-delivery-workflow/scripts/env-match-check.sh +128 -0
  45. package/skills/devbooks-delivery-workflow/scripts/fitness-check.sh +387 -0
  46. package/skills/devbooks-delivery-workflow/scripts/guardrail-check.sh +519 -0
  47. package/skills/devbooks-delivery-workflow/scripts/handoff-check.sh +141 -0
  48. package/skills/devbooks-delivery-workflow/scripts/hygiene-check.sh +340 -0
  49. package/skills/devbooks-delivery-workflow/scripts/migrate-from-openspec.sh +385 -0
  50. package/skills/devbooks-delivery-workflow/scripts/migrate-to-v2-gates.sh +202 -0
  51. package/skills/devbooks-delivery-workflow/scripts/progress-dashboard.sh +319 -0
  52. package/skills/devbooks-delivery-workflow/scripts/prototype-promote.sh +341 -0
  53. package/skills/devbooks-delivery-workflow/scripts/spec-preview.sh +203 -0
  54. package/skills/devbooks-delivery-workflow/scripts/spec-promote.sh +118 -0
  55. package/skills/devbooks-delivery-workflow/scripts/spec-rollback.sh +124 -0
  56. package/skills/devbooks-delivery-workflow/scripts/spec-stage.sh +117 -0
  57. package/skills/devbooks-delivery-workflow/scripts/verify-all.sh +78 -0
  58. package/skills/devbooks-delivery-workflow/scripts/verify-npm-package.sh +123 -0
  59. package/skills/devbooks-delivery-workflow/scripts/verify-openspec-free.sh +81 -0
  60. package/skills/devbooks-delivery-workflow/scripts/verify-slash-commands.sh +146 -0
  61. package/skills/devbooks-delivery-workflow/templates/handoff.md +50 -0
  62. package/skills/devbooks-design-backport/SKILL.md +73 -0
  63. package/skills/devbooks-design-backport/references//345/233/236/345/206/231/350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +196 -0
  64. package/skills/devbooks-design-doc/SKILL.md +121 -0
  65. package/skills/devbooks-design-doc/references//345/276/256/346/234/215/345/212/241/350/256/276/350/256/241/346/270/205/345/215/225.md +149 -0
  66. package/skills/devbooks-design-doc/references//350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +189 -0
  67. package/skills/devbooks-design-doc/references//351/232/220/347/247/201/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +240 -0
  68. package/skills/devbooks-entropy-monitor/SKILL.md +188 -0
  69. package/skills/devbooks-entropy-monitor/references//347/206/265/345/272/246/351/207/217/346/226/271/346/263/225/350/256/272.md +223 -0
  70. package/skills/devbooks-entropy-monitor/scripts/entropy-measure.sh +449 -0
  71. package/skills/devbooks-entropy-monitor/scripts/entropy-report.sh +303 -0
  72. package/skills/devbooks-entropy-monitor/templates/thresholds.json +99 -0
  73. package/skills/devbooks-federation/SKILL.md +264 -0
  74. package/skills/devbooks-federation/scripts/federation-check.sh +144 -0
  75. package/skills/devbooks-federation/templates/federation.yaml +89 -0
  76. package/skills/devbooks-impact-analysis/SKILL.md +135 -0
  77. package/skills/devbooks-impact-analysis/references//345/275/261/345/223/215/345/210/206/346/236/220/346/217/220/347/244/272/350/257/215.md +82 -0
  78. package/skills/devbooks-impact-analysis/scripts/graph-cache.sh +214 -0
  79. package/skills/devbooks-implementation-plan/SKILL.md +83 -0
  80. package/skills/devbooks-implementation-plan/references//347/274/226/347/240/201/350/256/241/345/210/222/346/217/220/347/244/272/350/257/215.md +99 -0
  81. package/skills/devbooks-index-bootstrap/SKILL.md +240 -0
  82. package/skills/devbooks-proposal-author/SKILL.md +83 -0
  83. package/skills/devbooks-proposal-author/references//346/217/220/346/241/210/346/222/260/345/206/231/346/217/220/347/244/272/350/257/215.md +66 -0
  84. package/skills/devbooks-proposal-challenger/SKILL.md +86 -0
  85. package/skills/devbooks-proposal-challenger/references//344/274/246/347/220/206/344/270/216/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +176 -0
  86. package/skills/devbooks-proposal-challenger/references//346/217/220/346/241/210/350/264/250/347/226/221/346/217/220/347/244/272/350/257/215.md +57 -0
  87. package/skills/devbooks-proposal-debate-workflow/SKILL.md +78 -0
  88. package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/345/267/245/344/275/234/346/265/201.md +24 -0
  89. package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/346/250/241/346/235/277.md +35 -0
  90. package/skills/devbooks-proposal-debate-workflow/scripts/proposal-debate-check.sh +102 -0
  91. package/skills/devbooks-proposal-judge/SKILL.md +78 -0
  92. package/skills/devbooks-proposal-judge/references//346/217/220/346/241/210/350/243/201/345/206/263/346/217/220/347/244/272/350/257/215.md +37 -0
  93. package/skills/devbooks-router/SKILL.md +346 -0
  94. package/skills/devbooks-spec-contract/SKILL.md +191 -0
  95. package/skills/devbooks-spec-contract/references/API/350/256/276/350/256/241/346/214/207/345/215/227.md +349 -0
  96. package/skills/devbooks-spec-contract/references//345/245/221/347/272/246/344/270/216/346/225/260/346/215/256/345/256/232/344/271/211/346/217/220/347/244/272/350/257/215.md +85 -0
  97. package/skills/devbooks-spec-contract/references//350/247/204/346/240/274/345/217/230/346/233/264/346/217/220/347/244/272/350/257/215.md +63 -0
  98. package/skills/devbooks-spec-contract/references//351/232/220/345/274/217/345/217/230/346/233/264/346/243/200/346/265/213/346/217/220/347/244/272/350/257/215.md +183 -0
  99. package/skills/devbooks-spec-contract/scripts/implicit-change-detect.sh +378 -0
  100. package/skills/devbooks-spec-gardener/SKILL.md +72 -0
  101. package/skills/devbooks-spec-gardener/references//350/247/204/346/240/274/345/233/255/344/270/201/346/217/220/347/244/272/350/257/215.md +41 -0
  102. package/skills/devbooks-test-owner/SKILL.md +172 -0
  103. package/skills/devbooks-test-owner/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +228 -0
  104. package/skills/devbooks-test-owner/references//345/274/202/346/255/245/347/263/273/347/273/237/346/265/213/350/257/225/347/255/226/347/225/245.md +316 -0
  105. package/skills/devbooks-test-owner/references//346/265/213/350/257/225/344/273/243/347/240/201/346/217/220/347/244/272/350/257/215.md +208 -0
  106. package/skills/devbooks-test-owner/references//346/265/213/350/257/225/345/210/206/345/261/202/347/255/226/347/225/245.md +281 -0
  107. package/skills/devbooks-test-owner/references//346/265/213/350/257/225/351/251/261/345/212/250.md +394 -0
  108. package/skills/devbooks-test-owner/references//350/247/243/344/276/235/350/265/226/346/212/200/346/234/257/351/200/237/346/237/245/350/241/250.md +432 -0
  109. package/skills/devbooks-test-reviewer/SKILL.md +189 -0
  110. package/templates/.devbooks/config.yaml +88 -0
  111. package/templates/claude-commands/devbooks/apply.md +38 -0
  112. package/templates/claude-commands/devbooks/archive.md +33 -0
  113. package/templates/claude-commands/devbooks/backport.md +19 -0
  114. package/templates/claude-commands/devbooks/bootstrap.md +19 -0
  115. package/templates/claude-commands/devbooks/c4.md +19 -0
  116. package/templates/claude-commands/devbooks/challenger.md +19 -0
  117. package/templates/claude-commands/devbooks/code.md +19 -0
  118. package/templates/claude-commands/devbooks/debate.md +19 -0
  119. package/templates/claude-commands/devbooks/delivery.md +19 -0
  120. package/templates/claude-commands/devbooks/design.md +19 -0
  121. package/templates/claude-commands/devbooks/entropy.md +19 -0
  122. package/templates/claude-commands/devbooks/federation.md +19 -0
  123. package/templates/claude-commands/devbooks/gardener.md +19 -0
  124. package/templates/claude-commands/devbooks/impact.md +19 -0
  125. package/templates/claude-commands/devbooks/index.md +19 -0
  126. package/templates/claude-commands/devbooks/judge.md +19 -0
  127. package/templates/claude-commands/devbooks/plan.md +19 -0
  128. package/templates/claude-commands/devbooks/proposal.md +19 -0
  129. package/templates/claude-commands/devbooks/quick.md +42 -0
  130. package/templates/claude-commands/devbooks/review.md +19 -0
  131. package/templates/claude-commands/devbooks/router.md +19 -0
  132. package/templates/claude-commands/devbooks/spec.md +19 -0
  133. package/templates/claude-commands/devbooks/test-review.md +19 -0
  134. package/templates/claude-commands/devbooks/test.md +19 -0
  135. package/templates/dev-playbooks/README.md +458 -0
  136. package/templates/dev-playbooks/changes/.gitkeep +1 -0
  137. package/templates/dev-playbooks/constitution.md +116 -0
  138. package/templates/dev-playbooks/project.md +96 -0
  139. package/templates/dev-playbooks/scripts/.gitkeep +1 -0
  140. package/templates/dev-playbooks/specs/_meta/anti-patterns/.gitkeep +2 -0
  141. package/templates/dev-playbooks/specs/_meta/glossary.md +47 -0
  142. package/templates/dev-playbooks/specs/_meta/project-profile.md +79 -0
  143. package/templates/dev-playbooks/specs/architecture/fitness-rules.md +95 -0
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'EOF' >&2
6
+ usage: change-codemod-scaffold.sh <change-id> [--name <codemod-name>] [--project-root <dir>] [--change-root <dir>] [--force]
7
+
8
+ Creates a runnable codemod script under:
9
+ <change-root>/<change-id>/scripts/codemod-<codemod-name>.sh
10
+
11
+ Defaults (can be overridden by flags or env):
12
+ DEVBOOKS_PROJECT_ROOT: pwd
13
+ DEVBOOKS_CHANGE_ROOT: changes
14
+ EOF
15
+ }
16
+
17
+ if [[ $# -eq 0 ]]; then
18
+ usage
19
+ exit 2
20
+ fi
21
+
22
+ if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
23
+ usage
24
+ exit 0
25
+ fi
26
+
27
+ change_id="$1"
28
+ shift
29
+
30
+ project_root="${DEVBOOKS_PROJECT_ROOT:-$(pwd)}"
31
+ change_root="${DEVBOOKS_CHANGE_ROOT:-changes}"
32
+ name="lsc"
33
+ force=false
34
+
35
+ while [[ $# -gt 0 ]]; do
36
+ case "$1" in
37
+ -h|--help)
38
+ usage
39
+ exit 0
40
+ ;;
41
+ --name)
42
+ name="${2:-}"
43
+ shift 2
44
+ ;;
45
+ --project-root)
46
+ project_root="${2:-}"
47
+ shift 2
48
+ ;;
49
+ --change-root)
50
+ change_root="${2:-}"
51
+ shift 2
52
+ ;;
53
+ --force)
54
+ force=true
55
+ shift
56
+ ;;
57
+ *)
58
+ usage
59
+ exit 2
60
+ ;;
61
+ esac
62
+ done
63
+
64
+ if [[ -z "$change_id" || "$change_id" == "-"* || "$change_id" =~ [[:space:]] ]]; then
65
+ echo "error: invalid change-id: '$change_id'" >&2
66
+ exit 2
67
+ fi
68
+
69
+ if [[ -z "$name" || "$name" =~ [[:space:]] || "$name" == *"/"* ]]; then
70
+ echo "error: invalid --name (no whitespace, no '/'): '$name'" >&2
71
+ exit 2
72
+ fi
73
+
74
+ project_root="${project_root%/}"
75
+ change_root="${change_root%/}"
76
+
77
+ if [[ "$change_root" = /* ]]; then
78
+ change_dir="${change_root}/${change_id}"
79
+ else
80
+ change_dir="${project_root}/${change_root}/${change_id}"
81
+ fi
82
+
83
+ target_dir="${change_dir}/scripts"
84
+ target_file="${target_dir}/codemod-${name}.sh"
85
+
86
+ if [[ -f "$target_file" && "$force" != true ]]; then
87
+ echo "skip: ${target_file}"
88
+ exit 0
89
+ fi
90
+
91
+ mkdir -p "$target_dir"
92
+
93
+ cat >"$target_file" <<'EOF'
94
+ #!/usr/bin/env bash
95
+ set -euo pipefail
96
+
97
+ usage() {
98
+ cat <<'USAGE' >&2
99
+ usage: codemod-<name>.sh [--apply]
100
+
101
+ Runs a large-scale mechanical change. Default is dry-run.
102
+
103
+ Recommended flow:
104
+ 1) Implement the mechanical transformation deterministically.
105
+ 2) Run tests / static checks.
106
+ 3) Capture evidence to <change-root>/<change-id>/evidence/ via change-evidence.sh.
107
+ USAGE
108
+ }
109
+
110
+ apply=false
111
+ while [[ $# -gt 0 ]]; do
112
+ case "$1" in
113
+ -h|--help) usage; exit 0 ;;
114
+ --apply) apply=true; shift ;;
115
+ *) usage; exit 2 ;;
116
+ esac
117
+ done
118
+
119
+ repo_root="$(pwd)"
120
+
121
+ if [[ "$apply" != true ]]; then
122
+ echo "dry-run: no changes applied"
123
+ echo "repo_root: ${repo_root}"
124
+ echo "next: edit this script to implement your codemod, then re-run with --apply"
125
+ exit 0
126
+ fi
127
+
128
+ echo "apply: TODO implement codemod steps"
129
+ exit 2
130
+ EOF
131
+
132
+ chmod +x "$target_file"
133
+ echo "wrote: ${target_file}"
134
+ echo "ok: scaffolded codemod script for ${change_id} (${name})"
135
+
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'EOF' >&2
6
+ usage: change-evidence.sh <change-id> [--project-root <dir>] [--change-root <dir>] [--label <name>] [--out <file>] -- <command> [args...]
7
+
8
+ Runs a command and captures its combined stdout/stderr into:
9
+ <change-root>/<change-id>/evidence/
10
+
11
+ Defaults (can be overridden by flags or env):
12
+ DEVBOOKS_PROJECT_ROOT: pwd
13
+ DEVBOOKS_CHANGE_ROOT: changes
14
+ EOF
15
+ }
16
+
17
+ if [[ $# -eq 0 ]]; then
18
+ usage
19
+ exit 2
20
+ fi
21
+
22
+ if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
23
+ usage
24
+ exit 0
25
+ fi
26
+
27
+ change_id="$1"
28
+ shift
29
+
30
+ project_root="${DEVBOOKS_PROJECT_ROOT:-$(pwd)}"
31
+ change_root="${DEVBOOKS_CHANGE_ROOT:-changes}"
32
+ label="evidence"
33
+ out_path=""
34
+
35
+ while [[ $# -gt 0 ]]; do
36
+ case "$1" in
37
+ -h|--help)
38
+ usage
39
+ exit 0
40
+ ;;
41
+ --project-root)
42
+ project_root="${2:-}"
43
+ shift 2
44
+ ;;
45
+ --change-root)
46
+ change_root="${2:-}"
47
+ shift 2
48
+ ;;
49
+ --label)
50
+ label="${2:-}"
51
+ shift 2
52
+ ;;
53
+ --out)
54
+ out_path="${2:-}"
55
+ shift 2
56
+ ;;
57
+ --)
58
+ shift
59
+ break
60
+ ;;
61
+ *)
62
+ usage
63
+ exit 2
64
+ ;;
65
+ esac
66
+ done
67
+
68
+ if [[ -z "$change_id" || "$change_id" == "-"* || "$change_id" =~ [[:space:]] ]]; then
69
+ echo "error: invalid change-id: '$change_id'" >&2
70
+ exit 2
71
+ fi
72
+
73
+ if [[ -z "$label" || "$label" =~ [[:space:]] ]]; then
74
+ echo "error: invalid --label (no whitespace): '$label'" >&2
75
+ exit 2
76
+ fi
77
+
78
+ if [[ $# -lt 1 ]]; then
79
+ echo "error: missing command after '--'" >&2
80
+ usage
81
+ exit 2
82
+ fi
83
+
84
+ project_root="${project_root%/}"
85
+ change_root="${change_root%/}"
86
+
87
+ if [[ "$change_root" = /* ]]; then
88
+ change_dir="${change_root}/${change_id}"
89
+ else
90
+ change_dir="${project_root}/${change_root}/${change_id}"
91
+ fi
92
+
93
+ evidence_dir="${change_dir}/evidence"
94
+ mkdir -p "$evidence_dir"
95
+
96
+ sanitize() {
97
+ printf '%s' "$1" | sed -E 's/[^A-Za-z0-9._-]+/-/g; s/^-+//; s/-+$//'
98
+ }
99
+
100
+ ts="$(date +%Y%m%d-%H%M%S)"
101
+ safe_label="$(sanitize "$label")"
102
+ if [[ -z "$safe_label" ]]; then
103
+ safe_label="evidence"
104
+ fi
105
+
106
+ if [[ -n "$out_path" ]]; then
107
+ if [[ "$out_path" = /* ]]; then
108
+ out_file="$out_path"
109
+ else
110
+ out_file="${evidence_dir}/${out_path}"
111
+ fi
112
+ else
113
+ out_file="${evidence_dir}/${ts}-${safe_label}.log"
114
+ fi
115
+
116
+ mkdir -p "$(dirname "$out_file")"
117
+
118
+ cmd_pretty="$(printf '%q ' "$@")"
119
+
120
+ {
121
+ echo "# Evidence capture"
122
+ echo "# change-id: ${change_id}"
123
+ echo "# timestamp: $(date -Iseconds)"
124
+ echo "# project-root: ${project_root}"
125
+ echo "# cwd: ${project_root}"
126
+ echo "# command: ${cmd_pretty}"
127
+ echo
128
+ } >"$out_file"
129
+
130
+ echo "devbooks: capturing evidence -> ${out_file}"
131
+ echo "devbooks: running: ${cmd_pretty}"
132
+
133
+ set +e
134
+ (
135
+ cd "$project_root"
136
+ "$@" 2>&1
137
+ ) | tee -a "$out_file"
138
+ exit_code="${PIPESTATUS[0]}"
139
+ set -e
140
+
141
+ {
142
+ echo
143
+ echo "# exit_code: ${exit_code}"
144
+ } >>"$out_file"
145
+
146
+ if [[ "$exit_code" -ne 0 ]]; then
147
+ echo "fail: command exit_code=${exit_code} (evidence recorded)" >&2
148
+ exit "$exit_code"
149
+ fi
150
+
151
+ echo "ok: evidence recorded"
152
+