cleargate 0.8.2 → 0.11.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/CHANGELOG.md +210 -0
- package/README.md +22 -1
- package/dist/MANIFEST.json +276 -31
- package/dist/chunk-HZPJ5QX4.js +459 -0
- package/dist/chunk-HZPJ5QX4.js.map +1 -0
- package/dist/{chunk-OM4FAEA7.js → chunk-Q3BTSXCK.js} +69 -3
- package/dist/chunk-Q3BTSXCK.js.map +1 -0
- package/dist/cli.cjs +2888 -598
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +2481 -619
- package/dist/cli.js.map +1 -1
- package/dist/lib/ledger.cjs +120 -0
- package/dist/lib/ledger.cjs.map +1 -0
- package/dist/lib/ledger.d.cts +64 -0
- package/dist/lib/ledger.d.ts +64 -0
- package/dist/lib/ledger.js +96 -0
- package/dist/lib/ledger.js.map +1 -0
- package/dist/lib/lifecycle-reconcile.cjs +497 -0
- package/dist/lib/lifecycle-reconcile.cjs.map +1 -0
- package/dist/lib/lifecycle-reconcile.d.cts +136 -0
- package/dist/lib/lifecycle-reconcile.d.ts +136 -0
- package/dist/lib/lifecycle-reconcile.js +20 -0
- package/dist/lib/lifecycle-reconcile.js.map +1 -0
- package/dist/templates/cleargate-planning/.claude/agents/architect.md +65 -10
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-contradict.md +108 -0
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-ingest.md +49 -3
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-lint.md +6 -1
- package/dist/templates/cleargate-planning/.claude/agents/developer.md +51 -2
- package/dist/templates/cleargate-planning/.claude/agents/devops.md +249 -0
- package/dist/templates/cleargate-planning/.claude/agents/qa.md +91 -1
- package/dist/templates/cleargate-planning/.claude/agents/reporter.md +72 -14
- package/dist/templates/cleargate-planning/.claude/hooks/pre-commit-surface-gate.sh +21 -0
- package/dist/templates/cleargate-planning/.claude/hooks/pre-tool-use-task.sh +148 -0
- package/dist/templates/cleargate-planning/.claude/hooks/session-start.sh +6 -0
- package/dist/templates/cleargate-planning/.claude/hooks/stamp-and-gate.sh +12 -1
- package/dist/templates/cleargate-planning/.claude/hooks/token-ledger.sh +334 -96
- package/dist/templates/cleargate-planning/.claude/settings.json +4 -0
- package/dist/templates/cleargate-planning/.claude/skills/sprint-execution/SKILL.md +644 -0
- package/dist/templates/cleargate-planning/.cleargate/config.example.yml +19 -0
- package/dist/templates/cleargate-planning/.cleargate/knowledge/cleargate-enforcement.md +542 -0
- package/dist/templates/cleargate-planning/.cleargate/knowledge/cleargate-protocol.md +102 -428
- package/dist/templates/cleargate-planning/.cleargate/knowledge/mid-sprint-triage-rubric.md +160 -0
- package/dist/templates/cleargate-planning/.cleargate/knowledge/readiness-gates.md +72 -9
- package/dist/templates/cleargate-planning/.cleargate/knowledge/sprint-closeout-checklist.md +71 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/assert_story_files.mjs +24 -2
- package/dist/templates/cleargate-planning/.cleargate/scripts/close_sprint.mjs +471 -29
- package/dist/templates/cleargate-planning/.cleargate/scripts/dedupe_frontmatter.mjs +219 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/gate-checks.json +3 -3
- package/dist/templates/cleargate-planning/.cleargate/scripts/init_sprint.mjs +86 -10
- package/dist/templates/cleargate-planning/.cleargate/scripts/lib/report-filename.mjs +54 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/prep_doc_refresh.mjs +378 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/prep_qa_context.mjs +888 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/run_script.sh +173 -87
- package/dist/templates/cleargate-planning/.cleargate/scripts/sprint_trends.mjs +71 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/suggest_improvements.mjs +483 -13
- package/dist/templates/cleargate-planning/.cleargate/scripts/test/test_prep_qa_context.sh +482 -0
- package/dist/templates/cleargate-planning/.cleargate/scripts/validate_state.mjs +32 -8
- package/dist/templates/cleargate-planning/.cleargate/scripts/write_dispatch.sh +136 -0
- package/dist/templates/cleargate-planning/.cleargate/templates/Bug.md +27 -1
- package/dist/templates/cleargate-planning/.cleargate/templates/CR.md +35 -1
- package/dist/templates/cleargate-planning/.cleargate/templates/Sprint Plan Template.md +48 -14
- package/dist/templates/cleargate-planning/.cleargate/templates/epic.md +40 -3
- package/dist/templates/cleargate-planning/.cleargate/templates/hotfix.md +53 -0
- package/dist/templates/cleargate-planning/.cleargate/templates/initiative.md +98 -29
- package/dist/templates/cleargate-planning/.cleargate/templates/proposal.md +17 -4
- package/dist/templates/cleargate-planning/.cleargate/templates/sprint_context.md +8 -0
- package/dist/templates/cleargate-planning/.cleargate/templates/sprint_report.md +23 -4
- package/dist/templates/cleargate-planning/.cleargate/templates/story.md +58 -3
- package/dist/templates/cleargate-planning/CLAUDE.md +30 -10
- package/dist/templates/cleargate-planning/MANIFEST.json +276 -31
- package/dist/{whoami-CX7CXJD5.js → whoami-W4U6DPVG.js} +17 -17
- package/dist/whoami-W4U6DPVG.js.map +1 -0
- package/package.json +20 -6
- package/templates/cleargate-planning/.claude/agents/architect.md +65 -10
- package/templates/cleargate-planning/.claude/agents/cleargate-wiki-contradict.md +108 -0
- package/templates/cleargate-planning/.claude/agents/cleargate-wiki-ingest.md +49 -3
- package/templates/cleargate-planning/.claude/agents/cleargate-wiki-lint.md +6 -1
- package/templates/cleargate-planning/.claude/agents/developer.md +51 -2
- package/templates/cleargate-planning/.claude/agents/devops.md +249 -0
- package/templates/cleargate-planning/.claude/agents/qa.md +91 -1
- package/templates/cleargate-planning/.claude/agents/reporter.md +72 -14
- package/templates/cleargate-planning/.claude/hooks/pre-commit-surface-gate.sh +21 -0
- package/templates/cleargate-planning/.claude/hooks/pre-tool-use-task.sh +148 -0
- package/templates/cleargate-planning/.claude/hooks/session-start.sh +6 -0
- package/templates/cleargate-planning/.claude/hooks/stamp-and-gate.sh +12 -1
- package/templates/cleargate-planning/.claude/hooks/token-ledger.sh +334 -96
- package/templates/cleargate-planning/.claude/settings.json +4 -0
- package/templates/cleargate-planning/.claude/skills/sprint-execution/SKILL.md +644 -0
- package/templates/cleargate-planning/.cleargate/config.example.yml +19 -0
- package/templates/cleargate-planning/.cleargate/knowledge/cleargate-enforcement.md +542 -0
- package/templates/cleargate-planning/.cleargate/knowledge/cleargate-protocol.md +102 -428
- package/templates/cleargate-planning/.cleargate/knowledge/mid-sprint-triage-rubric.md +160 -0
- package/templates/cleargate-planning/.cleargate/knowledge/readiness-gates.md +72 -9
- package/templates/cleargate-planning/.cleargate/knowledge/sprint-closeout-checklist.md +71 -0
- package/templates/cleargate-planning/.cleargate/scripts/assert_story_files.mjs +24 -2
- package/templates/cleargate-planning/.cleargate/scripts/close_sprint.mjs +471 -29
- package/templates/cleargate-planning/.cleargate/scripts/dedupe_frontmatter.mjs +219 -0
- package/templates/cleargate-planning/.cleargate/scripts/gate-checks.json +3 -3
- package/templates/cleargate-planning/.cleargate/scripts/init_sprint.mjs +86 -10
- package/templates/cleargate-planning/.cleargate/scripts/lib/report-filename.mjs +54 -0
- package/templates/cleargate-planning/.cleargate/scripts/prep_doc_refresh.mjs +378 -0
- package/templates/cleargate-planning/.cleargate/scripts/prep_qa_context.mjs +888 -0
- package/templates/cleargate-planning/.cleargate/scripts/run_script.sh +173 -87
- package/templates/cleargate-planning/.cleargate/scripts/sprint_trends.mjs +71 -0
- package/templates/cleargate-planning/.cleargate/scripts/suggest_improvements.mjs +483 -13
- package/templates/cleargate-planning/.cleargate/scripts/test/test_prep_qa_context.sh +482 -0
- package/templates/cleargate-planning/.cleargate/scripts/validate_state.mjs +32 -8
- package/templates/cleargate-planning/.cleargate/scripts/write_dispatch.sh +136 -0
- package/templates/cleargate-planning/.cleargate/templates/Bug.md +27 -1
- package/templates/cleargate-planning/.cleargate/templates/CR.md +35 -1
- package/templates/cleargate-planning/.cleargate/templates/Sprint Plan Template.md +48 -14
- package/templates/cleargate-planning/.cleargate/templates/epic.md +40 -3
- package/templates/cleargate-planning/.cleargate/templates/hotfix.md +53 -0
- package/templates/cleargate-planning/.cleargate/templates/initiative.md +98 -29
- package/templates/cleargate-planning/.cleargate/templates/sprint_context.md +8 -0
- package/templates/cleargate-planning/.cleargate/templates/sprint_report.md +23 -4
- package/templates/cleargate-planning/.cleargate/templates/story.md +58 -3
- package/templates/cleargate-planning/CLAUDE.md +30 -10
- package/templates/cleargate-planning/MANIFEST.json +276 -31
- package/dist/chunk-OM4FAEA7.js.map +0 -1
- package/dist/whoami-CX7CXJD5.js.map +0 -1
- package/templates/cleargate-planning/.cleargate/templates/proposal.md +0 -61
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# pre-tool-use-task.sh — PreToolUse:Task hook.
|
|
3
|
+
#
|
|
4
|
+
# CR-026: Auto-write a dispatch marker on every Task() spawn so the
|
|
5
|
+
# SubagentStop hook (token-ledger.sh) can attribute tokens to the correct
|
|
6
|
+
# work item and agent without relying on transcript-grep heuristics.
|
|
7
|
+
#
|
|
8
|
+
# This hook addresses BUG-024 §3.1 Defect 3: manual write_dispatch.sh calls
|
|
9
|
+
# were unreliable (~5 calls vs ~19 spawns in SPRINT-18). The hook fires
|
|
10
|
+
# automatically on every Task() spawn inside the orchestrator session.
|
|
11
|
+
#
|
|
12
|
+
# Input: JSON on stdin from Claude Code with fields:
|
|
13
|
+
# session_id, transcript_path, cwd, hook_event_name, tool_name, tool_input
|
|
14
|
+
# For tool_name == "Task", tool_input has: subagent_type, description, prompt.
|
|
15
|
+
#
|
|
16
|
+
# Output: writes .cleargate/sprint-runs/<sprint>/.dispatch-<ts>-<pid>-<rand>.json
|
|
17
|
+
# with { work_item_id, agent_type, spawned_at, session_id, writer }
|
|
18
|
+
# Uniquified filename prevents collision under parallel Task() spawns.
|
|
19
|
+
# SubagentStop hook uses newest-file lookup (ls -t) to consume it.
|
|
20
|
+
#
|
|
21
|
+
# Log: .cleargate/hook-log/pre-tool-use-task.log
|
|
22
|
+
#
|
|
23
|
+
# Exit code: 0 always. Never blocks a Task spawn.
|
|
24
|
+
#
|
|
25
|
+
# Banner-immunity: reads tool_input.prompt directly from the JSON payload —
|
|
26
|
+
# no transcript involvement, so the SessionStart blocked-items banner cannot
|
|
27
|
+
# poison this path (contrast with token-ledger.sh's transcript-grep fallback).
|
|
28
|
+
|
|
29
|
+
set -u
|
|
30
|
+
|
|
31
|
+
# ─── Resolve repo root (matches token-ledger.sh:59 + write_dispatch.sh:30) ───
|
|
32
|
+
REPO_ROOT="${ORCHESTRATOR_PROJECT_DIR:-${CLAUDE_PROJECT_DIR}}"
|
|
33
|
+
LOG_DIR="${REPO_ROOT}/.cleargate/hook-log"
|
|
34
|
+
mkdir -p "${LOG_DIR}"
|
|
35
|
+
HOOK_LOG="${LOG_DIR}/pre-tool-use-task.log"
|
|
36
|
+
ACTIVE_SENTINEL="${REPO_ROOT}/.cleargate/sprint-runs/.active"
|
|
37
|
+
|
|
38
|
+
TS="$(date -u +%FT%TZ)"
|
|
39
|
+
|
|
40
|
+
# Read stdin once
|
|
41
|
+
INPUT="$(cat)"
|
|
42
|
+
|
|
43
|
+
# ─── Extract tool_name to confirm this is a Task spawn ────────────────────────
|
|
44
|
+
TOOL_NAME="$(printf '%s' "${INPUT}" | jq -r '.tool_name // empty' 2>/dev/null)"
|
|
45
|
+
if [[ "${TOOL_NAME}" != "Task" ]]; then
|
|
46
|
+
# Not a Task spawn — nothing to do; exit silently.
|
|
47
|
+
exit 0
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# ─── Resolve active sprint via sentinel ───────────────────────────────────────
|
|
51
|
+
if [[ ! -f "${ACTIVE_SENTINEL}" ]]; then
|
|
52
|
+
printf '[%s] no .active sentinel — dispatch marker skipped (off-sprint)\n' "${TS}" >> "${HOOK_LOG}"
|
|
53
|
+
exit 0
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
SPRINT_ID="$(tr -d '[:space:]' < "${ACTIVE_SENTINEL}")"
|
|
57
|
+
if [[ -z "${SPRINT_ID}" ]]; then
|
|
58
|
+
printf '[%s] .active sentinel is empty — dispatch marker skipped\n' "${TS}" >> "${HOOK_LOG}"
|
|
59
|
+
exit 0
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
SPRINT_DIR="${REPO_ROOT}/.cleargate/sprint-runs/${SPRINT_ID}"
|
|
63
|
+
mkdir -p "${SPRINT_DIR}"
|
|
64
|
+
|
|
65
|
+
# ─── Extract subagent_type ────────────────────────────────────────────────────
|
|
66
|
+
AGENT_TYPE="$(printf '%s' "${INPUT}" | jq -r '.tool_input.subagent_type // empty' 2>/dev/null)"
|
|
67
|
+
ALLOW_LIST="architect developer qa reporter cleargate-wiki-contradict"
|
|
68
|
+
if [[ -z "${AGENT_TYPE}" ]] || ! printf '%s\n' ${ALLOW_LIST} | grep -qxF "${AGENT_TYPE}"; then
|
|
69
|
+
printf '[%s] no marker: agent_type absent or not in allow-list (%s)\n' "${TS}" "${AGENT_TYPE:-<empty>}" >> "${HOOK_LOG}"
|
|
70
|
+
exit 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# ─── Extract work_item_id from first 5 lines of tool_input.prompt ─────────────
|
|
74
|
+
# Regex: (STORY=?NNN-NN | BUG-NNN | EPIC-NNN | CR-NNN | PROPOSAL-NNN | HOTFIX-NNN)
|
|
75
|
+
PROMPT_HEAD="$(printf '%s' "${INPUT}" | jq -r '.tool_input.prompt // ""' 2>/dev/null | head -5)"
|
|
76
|
+
if [[ -z "${PROMPT_HEAD}" ]]; then
|
|
77
|
+
printf '[%s] no marker: prompt empty or unreadable\n' "${TS}" >> "${HOOK_LOG}"
|
|
78
|
+
exit 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
WORK_ITEM_RAW="$(printf '%s' "${PROMPT_HEAD}" \
|
|
82
|
+
| grep -oE '(STORY=?[0-9]{3}-[0-9]{2}|BUG-[0-9]+|EPIC-[0-9]+|CR-[0-9]+|PROPOSAL-[0-9]+|HOTFIX-[0-9]+)' \
|
|
83
|
+
| head -1)"
|
|
84
|
+
|
|
85
|
+
if [[ -z "${WORK_ITEM_RAW}" ]]; then
|
|
86
|
+
printf '[%s] no marker: regex miss (agent=%s prompt_head=%s)\n' \
|
|
87
|
+
"${TS}" "${AGENT_TYPE}" "$(printf '%s' "${PROMPT_HEAD}" | head -1 | cut -c1-60)" >> "${HOOK_LOG}"
|
|
88
|
+
exit 0
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# Normalize STORY=NNN-NN → STORY-NNN-NN
|
|
92
|
+
WORK_ITEM_ID="$(printf '%s' "${WORK_ITEM_RAW}" | sed 's/=/\-/')"
|
|
93
|
+
|
|
94
|
+
# ─── Resolve orchestrator session ID ─────────────────────────────────────────
|
|
95
|
+
# Path-B: uniquified filename makes session ID irrelevant for lookup.
|
|
96
|
+
# We embed it in the JSON body for forensic value only.
|
|
97
|
+
# GOTCHA-5: CLAUDE_SESSION_ID may be unset on nested spawns; fall back to stdin payload.
|
|
98
|
+
SESSION_ID="${CLAUDE_SESSION_ID:-}"
|
|
99
|
+
if [[ -z "${SESSION_ID}" ]]; then
|
|
100
|
+
SESSION_ID="$(printf '%s' "${INPUT}" | jq -r '.session_id // empty' 2>/dev/null)"
|
|
101
|
+
fi
|
|
102
|
+
[[ -z "${SESSION_ID}" ]] && SESSION_ID="unknown"
|
|
103
|
+
|
|
104
|
+
# ─── Resolve cleargate version ────────────────────────────────────────────────
|
|
105
|
+
PKG_JSON="${REPO_ROOT}/cleargate-cli/package.json"
|
|
106
|
+
CG_VERSION="unknown"
|
|
107
|
+
if [[ -f "${PKG_JSON}" ]]; then
|
|
108
|
+
CG_VERSION="$(jq -r '.version // "unknown"' "${PKG_JSON}" 2>/dev/null || echo "unknown")"
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# ─── Write dispatch file atomically (mktemp + mv, matches write_dispatch.sh:110-112) ──
|
|
112
|
+
# Uniquified filename: .dispatch-<ts-epoch>-<pid>-<random>.json
|
|
113
|
+
# Prevents collision under parallel Task() spawns; newest-file lookup at SubagentStop.
|
|
114
|
+
SPAWNED_AT="${TS}"
|
|
115
|
+
DISPATCH_FILENAME=".dispatch-$(date -u +%s)-$$-${RANDOM}.json"
|
|
116
|
+
DISPATCH_TARGET="${SPRINT_DIR}/${DISPATCH_FILENAME}"
|
|
117
|
+
|
|
118
|
+
DISPATCH_JSON="$(jq -cn \
|
|
119
|
+
--arg work_item_id "${WORK_ITEM_ID}" \
|
|
120
|
+
--arg agent_type "${AGENT_TYPE}" \
|
|
121
|
+
--arg spawned_at "${SPAWNED_AT}" \
|
|
122
|
+
--arg session_id "${SESSION_ID}" \
|
|
123
|
+
--arg writer "pre-tool-use-task.sh@cleargate-${CG_VERSION}" \
|
|
124
|
+
'{
|
|
125
|
+
work_item_id: $work_item_id,
|
|
126
|
+
agent_type: $agent_type,
|
|
127
|
+
spawned_at: $spawned_at,
|
|
128
|
+
session_id: $session_id,
|
|
129
|
+
writer: $writer
|
|
130
|
+
}' 2>/dev/null)"
|
|
131
|
+
|
|
132
|
+
if [[ -z "${DISPATCH_JSON}" ]]; then
|
|
133
|
+
printf '[%s] error: jq failed to build dispatch JSON\n' "${TS}" >> "${HOOK_LOG}"
|
|
134
|
+
exit 0
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
TMP="$(mktemp "${SPRINT_DIR}/.dispatch-tmp-XXXXXX" 2>/dev/null)"
|
|
138
|
+
if [[ -z "${TMP}" ]]; then
|
|
139
|
+
printf '[%s] error: mktemp failed for dispatch file\n' "${TS}" >> "${HOOK_LOG}"
|
|
140
|
+
exit 0
|
|
141
|
+
fi
|
|
142
|
+
printf '%s\n' "${DISPATCH_JSON}" > "${TMP}"
|
|
143
|
+
mv "${TMP}" "${DISPATCH_TARGET}"
|
|
144
|
+
|
|
145
|
+
printf '[%s] wrote dispatch: sprint=%s work_item=%s agent=%s file=%s\n' \
|
|
146
|
+
"${TS}" "${SPRINT_ID}" "${WORK_ITEM_ID}" "${AGENT_TYPE}" "${DISPATCH_FILENAME}" >> "${HOOK_LOG}"
|
|
147
|
+
|
|
148
|
+
exit 0
|
|
@@ -17,6 +17,12 @@ fi
|
|
|
17
17
|
|
|
18
18
|
"${CG[@]}" doctor --session-start || true
|
|
19
19
|
|
|
20
|
+
# --- Sprint-active skill auto-load directive (STORY-026-01) ---
|
|
21
|
+
ACTIVE_FILE="${REPO_ROOT}/.cleargate/sprint-runs/.active"
|
|
22
|
+
if [ -s "${ACTIVE_FILE}" ] && [ -n "$(tr -d '[:space:]' < "${ACTIVE_FILE}")" ]; then
|
|
23
|
+
printf '→ Active sprint detected. Load skill: sprint-execution\n'
|
|
24
|
+
fi
|
|
25
|
+
|
|
20
26
|
# ── §14.9 SessionStart sync nudge (STORY-010-08) ─────────────────────────────
|
|
21
27
|
# Daily-throttled: probe remote for updates at most once per 24h.
|
|
22
28
|
# Never auto-pulls or auto-pushes. Exits 0 regardless of outcome.
|
|
@@ -24,8 +24,19 @@ TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
|
24
24
|
# Ordered chain — stamp MUST precede gate (gate may read draft_tokens)
|
|
25
25
|
"${CG[@]}" stamp-tokens "$FILE" >>"$LOG" 2>&1
|
|
26
26
|
SR1=$?
|
|
27
|
-
|
|
27
|
+
# CR-032: capture gate check stdout to tmpfile so we can re-emit ⚠️ lines to
|
|
28
|
+
# hook stdout (→ Claude Code system-reminder). gate.ts emits ❌ lines to
|
|
29
|
+
# stdout (gate.ts:259), not stderr; the tmpfile captures them separately.
|
|
30
|
+
GATE_OUT=$(mktemp)
|
|
31
|
+
"${CG[@]}" gate check "$FILE" >"$GATE_OUT" 2>>"$LOG"
|
|
28
32
|
SR2=$?
|
|
33
|
+
cat "$GATE_OUT" >>"$LOG"
|
|
34
|
+
if [ "$SR2" -ne 0 ]; then
|
|
35
|
+
WORK_ITEM_ID=$(grep -m1 -oE '(EPIC|STORY|CR|BUG|HOTFIX|PROPOSAL|INITIATIVE|SPRINT)-[0-9]+(-[0-9]+)?' "$FILE" | head -1)
|
|
36
|
+
: "${WORK_ITEM_ID:=<work-item>}"
|
|
37
|
+
grep '^❌' "$GATE_OUT" 2>/dev/null | sed -E "s/^❌ /⚠️ gate failed: ${WORK_ITEM_ID} — /"
|
|
38
|
+
fi
|
|
39
|
+
rm -f "$GATE_OUT"
|
|
29
40
|
"${CG[@]}" wiki ingest "$FILE" >>"$LOG" 2>&1
|
|
30
41
|
SR3=$?
|
|
31
42
|
echo "[$TS] stamp=$SR1 gate=$SR2 ingest=$SR3 file=$FILE" >>"$LOG"
|