@jonit-dev/night-watch-cli 1.8.12-beta.1 → 1.8.12-beta.10
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/dist/cli.js +3729 -2027
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts +12 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +307 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/analytics.d.ts.map +1 -1
- package/dist/commands/analytics.js +60 -0
- package/dist/commands/analytics.js.map +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +45 -0
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +13 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/merge.d.ts.map +1 -1
- package/dist/commands/merge.js +30 -3
- package/dist/commands/merge.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +45 -0
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/qa.d.ts.map +1 -1
- package/dist/commands/qa.js +24 -0
- package/dist/commands/qa.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +20 -0
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/resolve.d.ts.map +1 -1
- package/dist/commands/resolve.js +26 -0
- package/dist/commands/resolve.js.map +1 -1
- package/dist/commands/review.d.ts +2 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +46 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts +16 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +85 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/shared/env-builder.d.ts.map +1 -1
- package/dist/commands/shared/env-builder.js +1 -0
- package/dist/commands/shared/env-builder.js.map +1 -1
- package/dist/commands/shared/feedback.d.ts +24 -0
- package/dist/commands/shared/feedback.d.ts.map +1 -0
- package/dist/commands/shared/feedback.js +38 -0
- package/dist/commands/shared/feedback.js.map +1 -0
- package/dist/commands/slice.d.ts.map +1 -1
- package/dist/commands/slice.js +48 -1
- package/dist/commands/slice.js.map +1 -1
- package/dist/scripts/night-watch-audit-cron.sh +1 -0
- package/dist/scripts/night-watch-cron.sh +186 -23
- package/dist/scripts/night-watch-helpers.sh +65 -2
- package/dist/scripts/night-watch-merger-cron.sh +137 -36
- package/dist/scripts/night-watch-plan-cron.sh +2 -0
- package/dist/scripts/night-watch-pr-resolver-cron.sh +6 -0
- package/dist/scripts/night-watch-pr-reviewer-cron.sh +16 -5
- package/dist/scripts/night-watch-qa-cron.sh +8 -1
- package/dist/scripts/night-watch-slicer-cron.sh +3 -0
- package/dist/templates/night-watch.config.json +21 -0
- package/dist/templates/slicer.md +3 -0
- package/dist/web/assets/index-B6E6kOoR.js +406 -0
- package/dist/web/assets/index-C-xpWpS8.css +1 -0
- package/dist/web/assets/index-CEYe-290.js +412 -0
- package/dist/web/assets/index-DIMUXIP8.css +1 -0
- package/dist/web/assets/index-DpvzoXEv.js +442 -0
- package/dist/web/assets/index-DyME41HV.css +1 -0
- package/dist/web/assets/index-NR27JE3b.js +406 -0
- package/dist/web/index.html +2 -2
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGL,iBAAiB,EAkBlB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGL,iBAAiB,EAkBlB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4CD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,GACnB,MAAM,CAkCR;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,2BAA2B,CAAC,CA8CtC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAmBnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2NnD"}
|
package/dist/commands/slice.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { CLAUDE_MODEL_IDS, LOCK_FILE_PREFIX, PROVIDER_COMMANDS, createBoardProvider, createSpinner, createTable, dim, getRoadmapStatus, header, info, isProcessRunning, loadConfig, projectRuntimeKey, resolveJobProvider, sendNotifications, sliceNextItem, error as uiError, warn, } from '@night-watch/core';
|
|
5
5
|
import { buildBaseEnvVars, getTelegramStatusWebhooks, maybeApplyCronSchedulingDelay, } from './shared/env-builder.js';
|
|
6
|
+
import { recordJobOutcome } from './shared/feedback.js';
|
|
6
7
|
import * as fs from 'fs';
|
|
7
8
|
import * as path from 'path';
|
|
8
9
|
function plannerLockPath(projectDir) {
|
|
@@ -85,7 +86,10 @@ export async function createPlannerIssue(projectDir, config, result) {
|
|
|
85
86
|
return { created: false, skippedReason: 'board-not-configured' };
|
|
86
87
|
}
|
|
87
88
|
const issueTitle = `PRD: ${result.item.title}`;
|
|
88
|
-
const normalizeTitle = (t) => t
|
|
89
|
+
const normalizeTitle = (t) => t
|
|
90
|
+
.replace(/^PRD:\s*/i, '')
|
|
91
|
+
.trim()
|
|
92
|
+
.toLowerCase();
|
|
89
93
|
const existingIssues = await provider.getAllIssues();
|
|
90
94
|
const existing = existingIssues.find((issue) => normalizeTitle(issue.title) === normalizeTitle(result.item.title));
|
|
91
95
|
if (existing) {
|
|
@@ -255,6 +259,7 @@ export function sliceCommand(program) {
|
|
|
255
259
|
// Execute planner with spinner
|
|
256
260
|
const spinner = createSpinner('Running Planner...');
|
|
257
261
|
spinner.start();
|
|
262
|
+
const startedAt = Date.now();
|
|
258
263
|
try {
|
|
259
264
|
await maybeApplyCronSchedulingDelay(config, 'slicer', projectDir);
|
|
260
265
|
const result = await sliceNextItem(projectDir, config);
|
|
@@ -287,6 +292,30 @@ export function sliceCommand(program) {
|
|
|
287
292
|
// Send notifications (fire-and-forget, failures do not affect exit code)
|
|
288
293
|
const nothingPending = result.error === 'No pending items to process';
|
|
289
294
|
const exitCode = result.sliced || nothingPending ? 0 : 1;
|
|
295
|
+
if (!options.dryRun) {
|
|
296
|
+
try {
|
|
297
|
+
recordJobOutcome({
|
|
298
|
+
config,
|
|
299
|
+
exitCode,
|
|
300
|
+
finishedAt: Date.now(),
|
|
301
|
+
jobType: 'planner',
|
|
302
|
+
metadata: {
|
|
303
|
+
error: result.error ?? null,
|
|
304
|
+
file: result.file ?? null,
|
|
305
|
+
itemTitle: result.item?.title ?? null,
|
|
306
|
+
sliced: result.sliced,
|
|
307
|
+
},
|
|
308
|
+
projectDir,
|
|
309
|
+
providerKey: resolveJobProvider(config, 'slicer'),
|
|
310
|
+
startedAt,
|
|
311
|
+
stderr: result.error,
|
|
312
|
+
stdout: result.file ? `Created ${result.file}` : undefined,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
// Outcome persistence must not change command exit behavior.
|
|
317
|
+
}
|
|
318
|
+
}
|
|
290
319
|
if (!options.dryRun && result.sliced) {
|
|
291
320
|
await sendNotifications(config, {
|
|
292
321
|
event: 'run_succeeded',
|
|
@@ -307,6 +336,24 @@ export function sliceCommand(program) {
|
|
|
307
336
|
process.exit(exitCode);
|
|
308
337
|
}
|
|
309
338
|
catch (err) {
|
|
339
|
+
try {
|
|
340
|
+
recordJobOutcome({
|
|
341
|
+
config,
|
|
342
|
+
exitCode: 1,
|
|
343
|
+
finishedAt: Date.now(),
|
|
344
|
+
jobType: 'planner',
|
|
345
|
+
metadata: {
|
|
346
|
+
error: err instanceof Error ? err.message : String(err),
|
|
347
|
+
},
|
|
348
|
+
projectDir,
|
|
349
|
+
providerKey: resolveJobProvider(config, 'slicer'),
|
|
350
|
+
startedAt,
|
|
351
|
+
stderr: err instanceof Error ? err.message : String(err),
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
// Outcome persistence must not change command exit behavior.
|
|
356
|
+
}
|
|
310
357
|
spinner.fail('Failed to execute planner command');
|
|
311
358
|
uiError(`${err instanceof Error ? err.message : String(err)}`);
|
|
312
359
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ mkdir -p "${LOG_DIR}"
|
|
|
28
28
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
29
29
|
# shellcheck source=night-watch-helpers.sh
|
|
30
30
|
source "${SCRIPT_DIR}/night-watch-helpers.sh"
|
|
31
|
+
skip_if_job_paused "${SCRIPT_TYPE}" "${PROJECT_DIR}"
|
|
31
32
|
|
|
32
33
|
# emit_result helper - must be defined before use
|
|
33
34
|
emit_result() {
|
|
@@ -50,6 +50,7 @@ PROJECT_RUNTIME_KEY=$(project_runtime_key "${PROJECT_DIR}")
|
|
|
50
50
|
# NOTE: Lock file path must match executorLockPath() in src/utils/status-data.ts
|
|
51
51
|
LOCK_FILE="/tmp/night-watch-${PROJECT_RUNTIME_KEY}.lock"
|
|
52
52
|
SCRIPT_TYPE="executor"
|
|
53
|
+
skip_if_job_paused "${SCRIPT_TYPE}" "${PROJECT_DIR}"
|
|
53
54
|
|
|
54
55
|
emit_result() {
|
|
55
56
|
local status="${1:?status required}"
|
|
@@ -518,28 +519,43 @@ checkpoint_timeout_progress() {
|
|
|
518
519
|
local worktree_dir="${1:?worktree_dir required}"
|
|
519
520
|
local branch_name="${2:?branch_name required}"
|
|
520
521
|
local prd_file="${3:?prd_file required}"
|
|
522
|
+
CHECKPOINT_STATUS="none"
|
|
521
523
|
|
|
522
524
|
if [ ! -d "${worktree_dir}" ]; then
|
|
523
|
-
return
|
|
525
|
+
return 1
|
|
524
526
|
fi
|
|
525
527
|
|
|
526
528
|
if ! git -C "${worktree_dir}" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
527
|
-
return
|
|
529
|
+
return 1
|
|
528
530
|
fi
|
|
529
531
|
|
|
530
532
|
if [ -z "$(git -C "${worktree_dir}" status --porcelain 2>/dev/null)" ]; then
|
|
531
533
|
log "TIMEOUT: No local changes to checkpoint for ${prd_file}"
|
|
532
|
-
|
|
534
|
+
if executor_branch_has_commits_ahead_of_base; then
|
|
535
|
+
CHECKPOINT_STATUS="available"
|
|
536
|
+
return 0
|
|
537
|
+
fi
|
|
538
|
+
return 1
|
|
533
539
|
fi
|
|
534
540
|
|
|
535
541
|
log "TIMEOUT: Checkpointing local progress for ${prd_file} on ${branch_name}"
|
|
536
542
|
if git -C "${worktree_dir}" add -A >/dev/null 2>&1; then
|
|
537
543
|
if ! git -C "${worktree_dir}" diff --cached --quiet >/dev/null 2>&1; then
|
|
538
|
-
git -C "${worktree_dir}" commit --no-verify \
|
|
544
|
+
if git -C "${worktree_dir}" commit --no-verify \
|
|
539
545
|
-m "chore: checkpoint timed-out progress for ${prd_file}" \
|
|
540
|
-
>> "${LOG_FILE}" 2>&1
|
|
546
|
+
>> "${LOG_FILE}" 2>&1; then
|
|
547
|
+
CHECKPOINT_STATUS="created"
|
|
548
|
+
return 0
|
|
549
|
+
fi
|
|
541
550
|
fi
|
|
542
551
|
fi
|
|
552
|
+
|
|
553
|
+
if executor_branch_has_commits_ahead_of_base; then
|
|
554
|
+
CHECKPOINT_STATUS="available"
|
|
555
|
+
return 0
|
|
556
|
+
fi
|
|
557
|
+
|
|
558
|
+
return 1
|
|
543
559
|
}
|
|
544
560
|
|
|
545
561
|
extract_timeout_phase_titles() {
|
|
@@ -569,15 +585,29 @@ build_timeout_followup_comment() {
|
|
|
569
585
|
local prd_label="${2:?prd_label required}"
|
|
570
586
|
local branch_name="${3:?branch_name required}"
|
|
571
587
|
local issue_body="${4:-}"
|
|
588
|
+
local checkpoint_status="${5:-none}"
|
|
572
589
|
local phase_titles=""
|
|
573
590
|
local comment=""
|
|
591
|
+
local resume_note=""
|
|
574
592
|
|
|
575
593
|
phase_titles=$(extract_timeout_phase_titles "${issue_body}" || true)
|
|
576
594
|
|
|
595
|
+
case "${checkpoint_status}" in
|
|
596
|
+
created)
|
|
597
|
+
resume_note="Progress was checkpointed on branch ${branch_name}, so the next run will resume from the latest checkpoint."
|
|
598
|
+
;;
|
|
599
|
+
available)
|
|
600
|
+
resume_note="Existing branch progress is available on ${branch_name}, so the next run can resume from that branch state."
|
|
601
|
+
;;
|
|
602
|
+
*)
|
|
603
|
+
resume_note="No checkpoint was created because the run produced no local changes or branch commits. The next run will start this issue from the current base branch."
|
|
604
|
+
;;
|
|
605
|
+
esac
|
|
606
|
+
|
|
577
607
|
comment="Timeout follow-up:
|
|
578
608
|
|
|
579
609
|
Execution hit the ${max_runtime}s runtime limit while processing ${prd_label}.
|
|
580
|
-
|
|
610
|
+
${resume_note}
|
|
581
611
|
|
|
582
612
|
Suggested slices for the next runs:"
|
|
583
613
|
|
|
@@ -661,8 +691,90 @@ if [ -z "${EXECUTOR_PROMPT_PATH}" ]; then
|
|
|
661
691
|
fi
|
|
662
692
|
EXECUTOR_PROMPT_REF=$(instruction_ref_for_prompt "${PROJECT_DIR}" "${EXECUTOR_PROMPT_PATH}")
|
|
663
693
|
PROGRESS_PUSH_CMD=$(project_git_push_command "${BRANCH_NAME}")
|
|
694
|
+
AUDIT_TRIAGE_RESULT_FILE=".night-watch-audit-triage-result"
|
|
695
|
+
AUDIT_TRIAGE_RESULT_PATH="${WORKTREE_DIR}/${AUDIT_TRIAGE_RESULT_FILE}"
|
|
696
|
+
|
|
697
|
+
is_audit_board_issue() {
|
|
698
|
+
if [ -z "${ISSUE_NUMBER}" ]; then
|
|
699
|
+
return 1
|
|
700
|
+
fi
|
|
701
|
+
|
|
702
|
+
if printf '%s\n%s\n' "${ISSUE_TITLE_RAW}" "${ISSUE_BODY}" \
|
|
703
|
+
| grep -Eiq '(^|[[:space:]])Audit:|Night Watch audit detected|Report:[[:space:]]+`?logs/audit-report\.md`?|Finding:[[:space:]]+[0-9]+'; then
|
|
704
|
+
return 0
|
|
705
|
+
fi
|
|
706
|
+
|
|
707
|
+
return 1
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
is_tiny_audit_board_issue() {
|
|
711
|
+
if ! is_audit_board_issue; then
|
|
712
|
+
return 1
|
|
713
|
+
fi
|
|
714
|
+
|
|
715
|
+
local line_count
|
|
716
|
+
line_count=$(printf '%s\n' "${ISSUE_BODY}" | wc -l | tr -d '[:space:]')
|
|
717
|
+
if [ "${line_count:-0}" -gt 160 ]; then
|
|
718
|
+
return 1
|
|
719
|
+
fi
|
|
720
|
+
|
|
721
|
+
if printf '%s\n' "${ISSUE_BODY}" \
|
|
722
|
+
| grep -Eiq '^[[:space:]]*#{1,4}[[:space:]]*(Phase|Implementation Plan|Acceptance Criteria|Requirements)\b'; then
|
|
723
|
+
return 1
|
|
724
|
+
fi
|
|
725
|
+
|
|
726
|
+
return 0
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
build_audit_triage_prompt() {
|
|
730
|
+
cat <<EOF
|
|
731
|
+
Audit triage/fix for GitHub issue #${ISSUE_NUMBER}: ${ISSUE_TITLE_RAW}
|
|
732
|
+
|
|
733
|
+
${ISSUE_BODY}
|
|
664
734
|
|
|
665
|
-
|
|
735
|
+
## Setup
|
|
736
|
+
- You are already inside an isolated worktree at: ${WORKTREE_DIR}
|
|
737
|
+
- Current branch is already checked out: ${BRANCH_NAME}
|
|
738
|
+
- Do NOT run git checkout/switch in ${PROJECT_DIR}
|
|
739
|
+
- Do NOT create or remove worktrees; the cron script manages that
|
|
740
|
+
|
|
741
|
+
## Lean Audit Workflow
|
|
742
|
+
This is an audit finding, not a full PRD. First validate the claim against the current code.
|
|
743
|
+
|
|
744
|
+
If the finding is false positive or the code is already safe:
|
|
745
|
+
1. Make no code changes and do not commit.
|
|
746
|
+
2. Write this marker file in the worktree:
|
|
747
|
+
${AUDIT_TRIAGE_RESULT_FILE}
|
|
748
|
+
3. Put "false_positive" on the first line and a concise reason on the following line(s).
|
|
749
|
+
4. Stop immediately after writing the marker.
|
|
750
|
+
|
|
751
|
+
If the finding is actionable:
|
|
752
|
+
1. Make the smallest correct fix.
|
|
753
|
+
2. Add or update focused tests only when they materially protect the behavior.
|
|
754
|
+
3. Run the relevant verification command(s).
|
|
755
|
+
4. Commit and push the fix to the existing branch:
|
|
756
|
+
${PROGRESS_PUSH_CMD}
|
|
757
|
+
5. Stop immediately after the final push.
|
|
758
|
+
|
|
759
|
+
Do NOT read the full PRD executor workflow. Do NOT use PRD phase planning or parallelize this tiny triage task.
|
|
760
|
+
Do NOT process any other issues.
|
|
761
|
+
EOF
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
read_audit_triage_result() {
|
|
765
|
+
if [ ! -f "${AUDIT_TRIAGE_RESULT_PATH}" ]; then
|
|
766
|
+
return 1
|
|
767
|
+
fi
|
|
768
|
+
|
|
769
|
+
head -n 1 "${AUDIT_TRIAGE_RESULT_PATH}" \
|
|
770
|
+
| tr '[:upper:]' '[:lower:]' \
|
|
771
|
+
| sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//'
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
if is_tiny_audit_board_issue; then
|
|
775
|
+
log "PROMPT: Using lean audit triage workflow for issue #${ISSUE_NUMBER}"
|
|
776
|
+
PROMPT="$(build_audit_triage_prompt)"
|
|
777
|
+
elif [ -n "${ISSUE_NUMBER}" ]; then
|
|
666
778
|
PROMPT="Implement the following PRD (GitHub issue #${ISSUE_NUMBER}: ${ISSUE_TITLE_RAW}):
|
|
667
779
|
|
|
668
780
|
${ISSUE_BODY}
|
|
@@ -724,6 +836,11 @@ Follow all CLAUDE.md conventions (if present).
|
|
|
724
836
|
- Do NOT process any other PRDs — only ${ELIGIBLE_PRD}"
|
|
725
837
|
fi
|
|
726
838
|
|
|
839
|
+
if [ -n "${NW_PROJECT_FEEDBACK_PROMPT:-}" ]; then
|
|
840
|
+
PROMPT="${PROMPT}"$'\n\n'"${NW_PROJECT_FEEDBACK_PROMPT}"
|
|
841
|
+
log "INFO: Added project feedback prompt context"
|
|
842
|
+
fi
|
|
843
|
+
|
|
727
844
|
# Dry-run mode: print diagnostics and exit
|
|
728
845
|
if [ "${NW_DRY_RUN:-0}" = "1" ]; then
|
|
729
846
|
log "DRY-RUN: Would process ${ELIGIBLE_PRD}"
|
|
@@ -864,14 +981,20 @@ while [ "${ATTEMPT}" -lt "${MAX_RETRIES}" ]; do
|
|
|
864
981
|
break
|
|
865
982
|
fi
|
|
866
983
|
log "CONTEXT-EXHAUSTED: Session ${ATTEMPT_NUM} hit context limit — checkpointing and resuming (${ATTEMPT}/${MAX_RETRIES})"
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
984
|
+
CHECKPOINT_STATUS="none"
|
|
985
|
+
checkpoint_timeout_progress "${WORKTREE_DIR}" "${BRANCH_NAME}" "${ELIGIBLE_PRD}" || true
|
|
986
|
+
if [ "${CHECKPOINT_STATUS}" != "none" ]; then
|
|
987
|
+
push_executor_branch "update" >> "${LOG_FILE}" 2>&1 || true
|
|
988
|
+
ensure_executor_pr >> "${LOG_FILE}" 2>&1 || true
|
|
989
|
+
RESUME_PROGRESS_NOTE="Progress is available on branch ${BRANCH_NAME}."
|
|
990
|
+
else
|
|
991
|
+
RESUME_PROGRESS_NOTE="No checkpoint was created because there were no local changes or branch commits."
|
|
992
|
+
fi
|
|
870
993
|
# Switch prompt to "continue" mode for the next attempt (fresh context)
|
|
871
994
|
if [ -n "${ISSUE_NUMBER}" ]; then
|
|
872
995
|
PROMPT="Continue implementing PRD (GitHub issue #${ISSUE_NUMBER}: ${ISSUE_TITLE_RAW}).
|
|
873
996
|
|
|
874
|
-
The previous session ran out of context window.
|
|
997
|
+
The previous session ran out of context window. ${RESUME_PROGRESS_NOTE}
|
|
875
998
|
|
|
876
999
|
## Your task
|
|
877
1000
|
1. Review the current state: check git log, existing code changes, and any task list
|
|
@@ -901,7 +1024,7 @@ Follow all CLAUDE.md conventions (if present).
|
|
|
901
1024
|
else
|
|
902
1025
|
PROMPT="Continue implementing the PRD at ${PRD_DIR_REL}/${ELIGIBLE_PRD}
|
|
903
1026
|
|
|
904
|
-
The previous session ran out of context window.
|
|
1027
|
+
The previous session ran out of context window. ${RESUME_PROGRESS_NOTE}
|
|
905
1028
|
|
|
906
1029
|
## Your task
|
|
907
1030
|
1. Review the current state: check git log, existing code changes, and any task list
|
|
@@ -1091,6 +1214,29 @@ if [ "${EXIT_CODE}" -eq 0 ] && grep -qiF 'Exceeded USD budget' "${LOG_FILE}" 2>/
|
|
|
1091
1214
|
EXIT_CODE=1
|
|
1092
1215
|
fi
|
|
1093
1216
|
|
|
1217
|
+
if [ ${EXIT_CODE} -eq 0 ] && is_tiny_audit_board_issue; then
|
|
1218
|
+
AUDIT_TRIAGE_RESULT=$(read_audit_triage_result || true)
|
|
1219
|
+
if [ "${AUDIT_TRIAGE_RESULT}" = "false_positive" ]; then
|
|
1220
|
+
AUDIT_TRIAGE_REASON=$(tail -n +2 "${AUDIT_TRIAGE_RESULT_PATH}" 2>/dev/null | sed -E '/^[[:space:]]*$/d' | head -n 5 || true)
|
|
1221
|
+
if [ -z "${AUDIT_TRIAGE_REASON}" ]; then
|
|
1222
|
+
AUDIT_TRIAGE_REASON="Audit finding was validated as a false positive or already safe."
|
|
1223
|
+
fi
|
|
1224
|
+
log "AUDIT-TRIAGE: Issue #${ISSUE_NUMBER} marked false positive; closing without PR"
|
|
1225
|
+
if [ -n "${NW_CLI}" ]; then
|
|
1226
|
+
"${NW_CLI}" board comment "${ISSUE_NUMBER}" \
|
|
1227
|
+
--body "Audit triage found this is a false positive / already safe (via ${EFFECTIVE_PROVIDER_LABEL}).
|
|
1228
|
+
|
|
1229
|
+
${AUDIT_TRIAGE_REASON}" 2>>"${LOG_FILE}" || true
|
|
1230
|
+
"${NW_CLI}" board close-issue "${ISSUE_NUMBER}" 2>>"${LOG_FILE}" || \
|
|
1231
|
+
"${NW_CLI}" board move-issue "${ISSUE_NUMBER}" --column "Done" 2>>"${LOG_FILE}" || true
|
|
1232
|
+
fi
|
|
1233
|
+
night_watch_history record "${PROJECT_DIR}" "${ELIGIBLE_PRD}" success --exit-code 0 2>/dev/null || true
|
|
1234
|
+
emit_result "success_audit_false_positive" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}|reason=audit_false_positive|detail=$(sanitize_result_value "${AUDIT_TRIAGE_REASON}")"
|
|
1235
|
+
cleanup_worktrees "${PROJECT_DIR}"
|
|
1236
|
+
exit 0
|
|
1237
|
+
fi
|
|
1238
|
+
fi
|
|
1239
|
+
|
|
1094
1240
|
if [ ${EXIT_CODE} -eq 0 ]; then
|
|
1095
1241
|
if ! ensure_executor_pr; then
|
|
1096
1242
|
log "FAIL: Unable to create or reuse executor PR for ${BRANCH_NAME} after provider completion"
|
|
@@ -1159,14 +1305,22 @@ if [ ${EXIT_CODE} -eq 0 ]; then
|
|
|
1159
1305
|
fi
|
|
1160
1306
|
elif [ ${EXIT_CODE} -eq 124 ]; then
|
|
1161
1307
|
log "TIMEOUT: Session limit hit after ${SESSION_MAX_RUNTIME}s while processing ${ELIGIBLE_PRD}"
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1308
|
+
CHECKPOINT_STATUS="none"
|
|
1309
|
+
checkpoint_timeout_progress "${WORKTREE_DIR}" "${BRANCH_NAME}" "${ELIGIBLE_PRD}" || true
|
|
1310
|
+
if [ "${CHECKPOINT_STATUS}" != "none" ]; then
|
|
1311
|
+
push_executor_branch "update" >> "${LOG_FILE}" 2>&1 || true
|
|
1312
|
+
ensure_executor_pr >> "${LOG_FILE}" 2>&1 || true
|
|
1313
|
+
fi
|
|
1165
1314
|
if [ -n "${ISSUE_NUMBER}" ]; then
|
|
1166
1315
|
"${NW_CLI}" board move-issue "${ISSUE_NUMBER}" --column "Ready" 2>>"${LOG_FILE}" || true
|
|
1167
1316
|
if [ "${SESSION_MAX_RUNTIME}" != "${MAX_RUNTIME}" ]; then
|
|
1317
|
+
if [ "${CHECKPOINT_STATUS}" = "none" ]; then
|
|
1318
|
+
SESSION_TIMEOUT_BODY="Session paused after ${SESSION_MAX_RUNTIME}s (via ${EFFECTIVE_PROVIDER_LABEL}). No checkpoint was created because there were no local changes or branch commits. Will retry from the current base branch on the next run."
|
|
1319
|
+
else
|
|
1320
|
+
SESSION_TIMEOUT_BODY="Session paused after ${SESSION_MAX_RUNTIME}s (via ${EFFECTIVE_PROVIDER_LABEL}). Progress is available on branch \`${BRANCH_NAME}\`. Will resume automatically on the next run."
|
|
1321
|
+
fi
|
|
1168
1322
|
"${NW_CLI}" board comment "${ISSUE_NUMBER}" \
|
|
1169
|
-
--body "
|
|
1323
|
+
--body "${SESSION_TIMEOUT_BODY}" 2>>"${LOG_FILE}" || true
|
|
1170
1324
|
else
|
|
1171
1325
|
"${NW_CLI}" board comment "${ISSUE_NUMBER}" \
|
|
1172
1326
|
--body "Execution timed out after ${SESSION_MAX_RUNTIME}s (via ${EFFECTIVE_PROVIDER_LABEL}). Moved back to Ready for retry." 2>>"${LOG_FILE}" || true
|
|
@@ -1174,12 +1328,13 @@ elif [ ${EXIT_CODE} -eq 124 ]; then
|
|
|
1174
1328
|
"${SESSION_MAX_RUNTIME}" \
|
|
1175
1329
|
"${ELIGIBLE_PRD}" \
|
|
1176
1330
|
"${BRANCH_NAME}" \
|
|
1177
|
-
"${ISSUE_BODY}"
|
|
1331
|
+
"${ISSUE_BODY}" \
|
|
1332
|
+
"${CHECKPOINT_STATUS}")
|
|
1178
1333
|
"${NW_CLI}" board comment "${ISSUE_NUMBER}" --body "${TIMEOUT_FOLLOWUP_COMMENT}" 2>>"${LOG_FILE}" || true
|
|
1179
1334
|
fi
|
|
1180
1335
|
fi
|
|
1181
1336
|
night_watch_history record "${PROJECT_DIR}" "${ELIGIBLE_PRD}" timeout --exit-code 124 2>/dev/null || true
|
|
1182
|
-
emit_result "timeout" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}"
|
|
1337
|
+
emit_result "timeout" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}|checkpoint=${CHECKPOINT_STATUS}"
|
|
1183
1338
|
elif [ "${DOUBLE_RATE_LIMITED}" = "1" ]; then
|
|
1184
1339
|
if [ -n "${ISSUE_NUMBER}" ]; then
|
|
1185
1340
|
"${NW_CLI}" board move-issue "${ISSUE_NUMBER}" --column "Ready" 2>>"${LOG_FILE}" || true
|
|
@@ -1191,16 +1346,24 @@ elif [ "${DOUBLE_RATE_LIMITED}" = "1" ]; then
|
|
|
1191
1346
|
elif check_context_exhausted "${LOG_FILE}" "${LOG_LINE_BEFORE}"; then
|
|
1192
1347
|
# All resume attempts for context exhaustion were used up
|
|
1193
1348
|
log "FAIL: Context window exhausted after ${MAX_RETRIES} resume attempts for ${ELIGIBLE_PRD}"
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1349
|
+
CHECKPOINT_STATUS="none"
|
|
1350
|
+
checkpoint_timeout_progress "${WORKTREE_DIR}" "${BRANCH_NAME}" "${ELIGIBLE_PRD}" || true
|
|
1351
|
+
if [ "${CHECKPOINT_STATUS}" != "none" ]; then
|
|
1352
|
+
push_executor_branch "update" >> "${LOG_FILE}" 2>&1 || true
|
|
1353
|
+
ensure_executor_pr >> "${LOG_FILE}" 2>&1 || true
|
|
1354
|
+
fi
|
|
1197
1355
|
if [ -n "${ISSUE_NUMBER}" ]; then
|
|
1198
1356
|
"${NW_CLI}" board move-issue "${ISSUE_NUMBER}" --column "Ready" 2>>"${LOG_FILE}" || true
|
|
1357
|
+
if [ "${CHECKPOINT_STATUS}" = "none" ]; then
|
|
1358
|
+
CONTEXT_COMMENT="Context window exhausted after ${MAX_RETRIES} resume attempts (${TOTAL_ELAPSED}s total, via ${EFFECTIVE_PROVIDER_LABEL}). No checkpoint was created because there were no local changes or branch commits. Will retry from the current base branch."
|
|
1359
|
+
else
|
|
1360
|
+
CONTEXT_COMMENT="Context window exhausted after ${MAX_RETRIES} resume attempts (${TOTAL_ELAPSED}s total, via ${EFFECTIVE_PROVIDER_LABEL}). Progress is available on branch \`${BRANCH_NAME}\`. Will resume on next run."
|
|
1361
|
+
fi
|
|
1199
1362
|
"${NW_CLI}" board comment "${ISSUE_NUMBER}" \
|
|
1200
|
-
--body "
|
|
1363
|
+
--body "${CONTEXT_COMMENT}" 2>>"${LOG_FILE}" || true
|
|
1201
1364
|
fi
|
|
1202
1365
|
night_watch_history record "${PROJECT_DIR}" "${ELIGIBLE_PRD}" context_exhausted --exit-code "${EXIT_CODE}" 2>/dev/null || true
|
|
1203
|
-
emit_result "failure" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}|reason=context_exhausted|exit_code=${EXIT_CODE}"
|
|
1366
|
+
emit_result "failure" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}|reason=context_exhausted|exit_code=${EXIT_CODE}|checkpoint=${CHECKPOINT_STATUS}"
|
|
1204
1367
|
else
|
|
1205
1368
|
PROVIDER_ERROR_DETAIL=$(latest_failure_detail "${LOG_FILE}" "${LOG_LINE_BEFORE}")
|
|
1206
1369
|
log "FAIL: Night watch exited with code ${EXIT_CODE} while processing ${ELIGIBLE_PRD}"
|
|
@@ -126,6 +126,7 @@ project_git_push_command() {
|
|
|
126
126
|
NW_EXECUTOR_PARTIAL_LABEL="${NW_EXECUTOR_PARTIAL_LABEL:-nw:partial}"
|
|
127
127
|
NW_EXECUTOR_RESUMABLE_LABEL="${NW_EXECUTOR_RESUMABLE_LABEL:-nw:resumable}"
|
|
128
128
|
NW_EXECUTOR_READY_REVIEW_LABEL="${NW_EXECUTOR_READY_REVIEW_LABEL:-nw:ready-review}"
|
|
129
|
+
NW_PR_RESOLVER_READY_LABEL="${NW_PR_RESOLVER_READY_LABEL:-ready-to-merge}"
|
|
129
130
|
|
|
130
131
|
csv_has_label() {
|
|
131
132
|
local csv="${1:-}"
|
|
@@ -188,7 +189,8 @@ find_executor_resume_pr() {
|
|
|
188
189
|
printf '%s' "${pr_list}" \
|
|
189
190
|
| jq -c \
|
|
190
191
|
--arg primary_prefix "${branch_prefix}/" \
|
|
191
|
-
--arg resumable_label "${NW_EXECUTOR_RESUMABLE_LABEL}"
|
|
192
|
+
--arg resumable_label "${NW_EXECUTOR_RESUMABLE_LABEL}" \
|
|
193
|
+
--arg ready_label "${NW_PR_RESOLVER_READY_LABEL}" '
|
|
192
194
|
[
|
|
193
195
|
.[]
|
|
194
196
|
| select(
|
|
@@ -198,6 +200,7 @@ find_executor_resume_pr() {
|
|
|
198
200
|
)
|
|
199
201
|
| .labelNames = ((.labels // []) | map(.name))
|
|
200
202
|
| select((.labelNames | index($resumable_label)) != null)
|
|
203
|
+
| select((.labelNames | index($ready_label)) == null)
|
|
201
204
|
]
|
|
202
205
|
| sort_by(.createdAt // "")
|
|
203
206
|
| .[0] // empty
|
|
@@ -1243,8 +1246,40 @@ or set primaryFallbackPreset / primaryFallbackModel in night-watch.config.json."
|
|
|
1243
1246
|
|
|
1244
1247
|
# ── Board mode issue discovery ────────────────────────────────────────────────
|
|
1245
1248
|
|
|
1249
|
+
is_audit_board_issue_json() {
|
|
1250
|
+
local issue_json="${1:?issue_json required}"
|
|
1251
|
+
|
|
1252
|
+
printf '%s' "${issue_json}" \
|
|
1253
|
+
| jq -r '[.title // "", .body // ""] | join("\n")' 2>/dev/null \
|
|
1254
|
+
| grep -Eiq '(^|[[:space:]])Audit:|Night Watch audit detected|Report:[[:space:]]+`?logs/audit-report\.md`?|Finding:[[:space:]]+[0-9]+'
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
is_audit_paused_or_disabled() {
|
|
1258
|
+
local cli_bin="${1:?cli_bin required}"
|
|
1259
|
+
local project_dir="${2:?project_dir required}"
|
|
1260
|
+
|
|
1261
|
+
if (cd "${project_dir}" && "${cli_bin}" job is-paused audit >/dev/null 2>&1); then
|
|
1262
|
+
return 0
|
|
1263
|
+
fi
|
|
1264
|
+
|
|
1265
|
+
local audit_enabled
|
|
1266
|
+
audit_enabled=$(
|
|
1267
|
+
cd "${project_dir}" \
|
|
1268
|
+
&& "${cli_bin}" config get audit.enabled 2>/dev/null \
|
|
1269
|
+
| tr '[:upper:]' '[:lower:]' \
|
|
1270
|
+
| sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//'
|
|
1271
|
+
) || true
|
|
1272
|
+
|
|
1273
|
+
if [ "${audit_enabled}" = "false" ]; then
|
|
1274
|
+
return 0
|
|
1275
|
+
fi
|
|
1276
|
+
|
|
1277
|
+
return 1
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1246
1280
|
# Get the next eligible issue from the board provider.
|
|
1247
|
-
# Iterates through Ready issues sorted by priority, skipping
|
|
1281
|
+
# Iterates through Ready issues sorted by priority, skipping audit findings when
|
|
1282
|
+
# audit is disabled/paused and skipping any in cooldown.
|
|
1248
1283
|
# Prints the JSON of the first eligible issue to stdout, or nothing if none found.
|
|
1249
1284
|
# Returns 0 on success, 1 if no Ready issues were returned, 2 if Ready issues
|
|
1250
1285
|
# were found but every candidate was skipped due to cooldown.
|
|
@@ -1292,6 +1327,16 @@ find_eligible_board_issue() {
|
|
|
1292
1327
|
number=$(printf '%s' "${issue}" | jq -r '.number' 2>/dev/null)
|
|
1293
1328
|
title=$(printf '%s' "${issue}" | jq -r '.title // empty' 2>/dev/null)
|
|
1294
1329
|
|
|
1330
|
+
# Skip stale audit findings while the audit job is paused/disabled. Audit
|
|
1331
|
+
# cron/config gates stop new scans, but Ready board issues can outlive them.
|
|
1332
|
+
if [ -n "${project_dir}" ] \
|
|
1333
|
+
&& is_audit_board_issue_json "${issue}" \
|
|
1334
|
+
&& is_audit_paused_or_disabled "${cli_bin}" "${project_dir}"; then
|
|
1335
|
+
log "SKIP-BOARD: Issue #${number} — audit issue skipped because audit is paused or disabled"
|
|
1336
|
+
i=$((i + 1))
|
|
1337
|
+
continue
|
|
1338
|
+
fi
|
|
1339
|
+
|
|
1295
1340
|
# Derive PRD name (same slug format used by the cron script for history keys)
|
|
1296
1341
|
prd_name="${number}-$(printf '%s' "${title}" | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9' '-' | sed 's/^-\|-$//g')"
|
|
1297
1342
|
|
|
@@ -1335,6 +1380,22 @@ arm_global_queue_cleanup() {
|
|
|
1335
1380
|
append_exit_trap "__night_watch_queue_cleanup \$?"
|
|
1336
1381
|
}
|
|
1337
1382
|
|
|
1383
|
+
skip_if_job_paused() {
|
|
1384
|
+
local script_type="${1:?script_type required}"
|
|
1385
|
+
local project_dir="${2:?project_dir required}"
|
|
1386
|
+
|
|
1387
|
+
local cli_bin
|
|
1388
|
+
cli_bin=$(resolve_night_watch_cli) || return 0
|
|
1389
|
+
|
|
1390
|
+
if (cd "${project_dir}" && "${cli_bin}" job is-paused "${script_type}" >/dev/null 2>&1); then
|
|
1391
|
+
log "SKIP: ${script_type} is paused in night-watch.config.json"
|
|
1392
|
+
if command -v emit_result >/dev/null 2>&1; then
|
|
1393
|
+
emit_result "skip_paused"
|
|
1394
|
+
fi
|
|
1395
|
+
exit 0
|
|
1396
|
+
fi
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1338
1399
|
# Atomically claim a queue slot or enqueue for later dispatch.
|
|
1339
1400
|
# Uses DB transaction (via `queue claim` CLI) for atomicity — no flock needed.
|
|
1340
1401
|
# Sets NW_QUEUE_ENTRY_ID on success and arms the cleanup trap.
|
|
@@ -1342,6 +1403,8 @@ arm_global_queue_cleanup() {
|
|
|
1342
1403
|
claim_or_enqueue() {
|
|
1343
1404
|
local script_type="${1:?script_type required}"
|
|
1344
1405
|
local project_dir="${2:?project_dir required}"
|
|
1406
|
+
skip_if_job_paused "${script_type}" "${project_dir}"
|
|
1407
|
+
|
|
1345
1408
|
local provider_key
|
|
1346
1409
|
provider_key=$(resolve_provider_key "${project_dir}" "${script_type}")
|
|
1347
1410
|
|