@jonit-dev/night-watch-cli 1.8.12-beta.12 → 1.8.12-beta.13

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 CHANGED
@@ -290,13 +290,14 @@ var init_job_registry = __esm({
290
290
  {
291
291
  id: "audit",
292
292
  name: "Auditor",
293
- description: "Performs code audits and creates issues for findings",
293
+ description: "Performs consolidated architecture and code quality audits",
294
294
  cliCommand: "audit",
295
295
  logName: "audit",
296
296
  lockSuffix: "-audit.lock",
297
297
  queuePriority: 10,
298
298
  envPrefix: "NW_AUDIT",
299
299
  extraFields: [
300
+ { name: "createIssues", type: "boolean", defaultValue: false },
300
301
  {
301
302
  name: "targetColumn",
302
303
  type: "enum",
@@ -305,9 +306,10 @@ var init_job_registry = __esm({
305
306
  }
306
307
  ],
307
308
  defaultConfig: {
308
- enabled: true,
309
+ enabled: false,
309
310
  schedule: "50 3 * * 1",
310
311
  maxRuntime: 1800,
312
+ createIssues: false,
311
313
  targetColumn: "Draft"
312
314
  }
313
315
  },
@@ -390,7 +392,7 @@ function resolveProviderBucketKey(provider, providerEnv) {
390
392
  return `claude-proxy:${baseUrl}`;
391
393
  }
392
394
  }
393
- var DEFAULT_DEFAULT_BRANCH, DEFAULT_PRD_DIR, DEFAULT_SUMMARY_WINDOW_HOURS, DEFAULT_MAX_RUNTIME, DEFAULT_REVIEWER_MAX_RUNTIME, DEFAULT_CRON_SCHEDULE, DEFAULT_REVIEWER_SCHEDULE, DEFAULT_CRON_SCHEDULE_OFFSET, DEFAULT_MAX_RETRIES, DEFAULT_REVIEWER_MAX_RETRIES, DEFAULT_REVIEWER_RETRY_DELAY, DEFAULT_REVIEWER_MAX_PRS_PER_RUN, DEFAULT_FEEDBACK, DEFAULT_BRANCH_PREFIX, DEFAULT_BRANCH_PATTERNS, DEFAULT_MIN_REVIEW_SCORE, DEFAULT_MAX_LOG_SIZE, DEFAULT_PROVIDER, DEFAULT_EXECUTOR_ENABLED, DEFAULT_REVIEWER_ENABLED, DEFAULT_PROVIDER_ENV, DEFAULT_FALLBACK_ON_RATE_LIMIT, DEFAULT_CLAUDE_MODEL, DEFAULT_PRIMARY_FALLBACK_MODEL, DEFAULT_SECONDARY_FALLBACK_MODEL, VALID_CLAUDE_MODELS, CLAUDE_MODEL_IDS, DEFAULT_NOTIFICATIONS, DEFAULT_PRD_PRIORITY, DEFAULT_SLICER_SCHEDULE, DEFAULT_SLICER_MAX_RUNTIME, DEFAULT_ROADMAP_SCANNER, DEFAULT_TEMPLATES_DIR, DEFAULT_BOARD_PROVIDER, DEFAULT_LOCAL_BOARD_INFO, DEFAULT_AUTO_MERGE, DEFAULT_AUTO_MERGE_METHOD, VALID_MERGE_METHODS, DEFAULT_QA_ENABLED, DEFAULT_QA_SCHEDULE, DEFAULT_QA_MAX_RUNTIME, DEFAULT_QA_ARTIFACTS, DEFAULT_QA_SKIP_LABEL, DEFAULT_QA_AUTO_INSTALL_PLAYWRIGHT, DEFAULT_QA_VALIDATED_LABEL, DEFAULT_QA, QA_LOG_NAME, DEFAULT_AUDIT_ENABLED, DEFAULT_AUDIT_SCHEDULE, DEFAULT_AUDIT_MAX_RUNTIME, DEFAULT_AUDIT_TARGET_COLUMN, DEFAULT_AUDIT, DEFAULT_ANALYTICS_ENABLED, DEFAULT_ANALYTICS_SCHEDULE, DEFAULT_ANALYTICS_MAX_RUNTIME, DEFAULT_ANALYTICS_LOOKBACK_DAYS, DEFAULT_ANALYTICS_TARGET_COLUMN, DEFAULT_ANALYTICS_PROMPT, DEFAULT_ANALYTICS, DEFAULT_PR_RESOLVER_ENABLED, DEFAULT_PR_RESOLVER_SCHEDULE, DEFAULT_PR_RESOLVER_MAX_RUNTIME, DEFAULT_PR_RESOLVER_MAX_PRS_PER_RUN, DEFAULT_PR_RESOLVER_PER_PR_TIMEOUT, DEFAULT_PR_RESOLVER_AI_CONFLICT_RESOLUTION, DEFAULT_PR_RESOLVER_AI_REVIEW_RESOLUTION, DEFAULT_PR_RESOLVER_READY_LABEL, DEFAULT_PR_RESOLVER, DEFAULT_MERGER_ENABLED, DEFAULT_MERGER_SCHEDULE, DEFAULT_MERGER_MAX_RUNTIME, DEFAULT_MERGER_MERGE_METHOD, DEFAULT_MERGER_MIN_REVIEW_SCORE, DEFAULT_MERGER_REBASE_BEFORE_MERGE, DEFAULT_MERGER_MAX_PRS_PER_RUN, DEFAULT_MERGER, MERGER_LOG_NAME, AUDIT_LOG_NAME, PLANNER_LOG_NAME, ANALYTICS_LOG_NAME, PR_RESOLVER_LOG_NAME, VALID_PROVIDERS, VALID_JOB_TYPES, DEFAULT_JOB_PROVIDERS, DEFAULT_PROVIDER_SCHEDULE_OVERRIDES, DEFAULT_WEBHOOK_TRIGGER_SECRET_ENV, DEFAULT_WEBHOOK_TRIGGER_MAX_SKEW_SECONDS, DEFAULT_WEBHOOK_TRIGGERS, BUILT_IN_PRESETS, BUILT_IN_PRESET_IDS, PROVIDER_COMMANDS, CONFIG_FILE_NAME, LOCK_FILE_PREFIX, LOG_DIR, CLAIM_FILE_EXTENSION, EXECUTOR_LOG_NAME, REVIEWER_LOG_NAME, EXECUTOR_LOG_FILE, REVIEWER_LOG_FILE, LOG_FILE_NAMES, GLOBAL_CONFIG_DIR, REGISTRY_FILE_NAME, HISTORY_FILE_NAME, PRD_STATES_FILE_NAME, STATE_DB_FILE_NAME, GLOBAL_NOTIFICATIONS_FILE_NAME, MAX_HISTORY_RECORDS_PER_PRD, DEFAULT_QUEUE_ENABLED, DEFAULT_QUEUE_MODE, DEFAULT_QUEUE_MAX_CONCURRENCY, DEFAULT_QUEUE_MAX_WAIT_TIME, DEFAULT_QUEUE_PRIORITY, DEFAULT_QUEUE, DEFAULT_SCHEDULING_PRIORITY;
395
+ var DEFAULT_DEFAULT_BRANCH, DEFAULT_PRD_DIR, DEFAULT_SUMMARY_WINDOW_HOURS, DEFAULT_MAX_RUNTIME, DEFAULT_REVIEWER_MAX_RUNTIME, DEFAULT_CRON_SCHEDULE, DEFAULT_REVIEWER_SCHEDULE, DEFAULT_CRON_SCHEDULE_OFFSET, DEFAULT_MAX_RETRIES, DEFAULT_REVIEWER_MAX_RETRIES, DEFAULT_REVIEWER_RETRY_DELAY, DEFAULT_REVIEWER_MAX_PRS_PER_RUN, DEFAULT_FEEDBACK, DEFAULT_BRANCH_PREFIX, DEFAULT_BRANCH_PATTERNS, DEFAULT_MIN_REVIEW_SCORE, DEFAULT_MAX_LOG_SIZE, DEFAULT_PROVIDER, DEFAULT_EXECUTOR_ENABLED, DEFAULT_REVIEWER_ENABLED, DEFAULT_PROVIDER_ENV, DEFAULT_FALLBACK_ON_RATE_LIMIT, DEFAULT_CLAUDE_MODEL, DEFAULT_PRIMARY_FALLBACK_MODEL, DEFAULT_SECONDARY_FALLBACK_MODEL, VALID_CLAUDE_MODELS, CLAUDE_MODEL_IDS, DEFAULT_NOTIFICATIONS, DEFAULT_PRD_PRIORITY, DEFAULT_SLICER_SCHEDULE, DEFAULT_SLICER_MAX_RUNTIME, DEFAULT_ROADMAP_SCANNER, DEFAULT_TEMPLATES_DIR, DEFAULT_BOARD_PROVIDER, DEFAULT_LOCAL_BOARD_INFO, DEFAULT_AUTO_MERGE, DEFAULT_AUTO_MERGE_METHOD, VALID_MERGE_METHODS, DEFAULT_QA_ENABLED, DEFAULT_QA_SCHEDULE, DEFAULT_QA_MAX_RUNTIME, DEFAULT_QA_ARTIFACTS, DEFAULT_QA_SKIP_LABEL, DEFAULT_QA_AUTO_INSTALL_PLAYWRIGHT, DEFAULT_QA_VALIDATED_LABEL, DEFAULT_QA, QA_LOG_NAME, DEFAULT_AUDIT_ENABLED, DEFAULT_AUDIT_SCHEDULE, DEFAULT_AUDIT_MAX_RUNTIME, DEFAULT_AUDIT_CREATE_ISSUES, DEFAULT_AUDIT_TARGET_COLUMN, DEFAULT_AUDIT, DEFAULT_ANALYTICS_ENABLED, DEFAULT_ANALYTICS_SCHEDULE, DEFAULT_ANALYTICS_MAX_RUNTIME, DEFAULT_ANALYTICS_LOOKBACK_DAYS, DEFAULT_ANALYTICS_TARGET_COLUMN, DEFAULT_ANALYTICS_PROMPT, DEFAULT_ANALYTICS, DEFAULT_PR_RESOLVER_ENABLED, DEFAULT_PR_RESOLVER_SCHEDULE, DEFAULT_PR_RESOLVER_MAX_RUNTIME, DEFAULT_PR_RESOLVER_MAX_PRS_PER_RUN, DEFAULT_PR_RESOLVER_PER_PR_TIMEOUT, DEFAULT_PR_RESOLVER_AI_CONFLICT_RESOLUTION, DEFAULT_PR_RESOLVER_AI_REVIEW_RESOLUTION, DEFAULT_PR_RESOLVER_READY_LABEL, DEFAULT_PR_RESOLVER, DEFAULT_MERGER_ENABLED, DEFAULT_MERGER_SCHEDULE, DEFAULT_MERGER_MAX_RUNTIME, DEFAULT_MERGER_MERGE_METHOD, DEFAULT_MERGER_MIN_REVIEW_SCORE, DEFAULT_MERGER_REBASE_BEFORE_MERGE, DEFAULT_MERGER_MAX_PRS_PER_RUN, DEFAULT_MERGER, MERGER_LOG_NAME, AUDIT_LOG_NAME, PLANNER_LOG_NAME, ANALYTICS_LOG_NAME, PR_RESOLVER_LOG_NAME, VALID_PROVIDERS, VALID_JOB_TYPES, DEFAULT_JOB_PROVIDERS, DEFAULT_PROVIDER_SCHEDULE_OVERRIDES, DEFAULT_WEBHOOK_TRIGGER_SECRET_ENV, DEFAULT_WEBHOOK_TRIGGER_MAX_SKEW_SECONDS, DEFAULT_WEBHOOK_TRIGGERS, BUILT_IN_PRESETS, BUILT_IN_PRESET_IDS, PROVIDER_COMMANDS, CONFIG_FILE_NAME, LOCK_FILE_PREFIX, LOG_DIR, CLAIM_FILE_EXTENSION, EXECUTOR_LOG_NAME, REVIEWER_LOG_NAME, EXECUTOR_LOG_FILE, REVIEWER_LOG_FILE, LOG_FILE_NAMES, GLOBAL_CONFIG_DIR, REGISTRY_FILE_NAME, HISTORY_FILE_NAME, PRD_STATES_FILE_NAME, STATE_DB_FILE_NAME, GLOBAL_NOTIFICATIONS_FILE_NAME, MAX_HISTORY_RECORDS_PER_PRD, DEFAULT_QUEUE_ENABLED, DEFAULT_QUEUE_MODE, DEFAULT_QUEUE_MAX_CONCURRENCY, DEFAULT_QUEUE_MAX_WAIT_TIME, DEFAULT_QUEUE_PRIORITY, DEFAULT_QUEUE, DEFAULT_SCHEDULING_PRIORITY;
394
396
  var init_constants = __esm({
395
397
  "../core/dist/constants.js"() {
396
398
  "use strict";
@@ -471,14 +473,16 @@ var init_constants = __esm({
471
473
  validatedLabel: DEFAULT_QA_VALIDATED_LABEL
472
474
  };
473
475
  QA_LOG_NAME = "night-watch-qa";
474
- DEFAULT_AUDIT_ENABLED = true;
476
+ DEFAULT_AUDIT_ENABLED = false;
475
477
  DEFAULT_AUDIT_SCHEDULE = "50 3 * * 1";
476
478
  DEFAULT_AUDIT_MAX_RUNTIME = 1800;
479
+ DEFAULT_AUDIT_CREATE_ISSUES = false;
477
480
  DEFAULT_AUDIT_TARGET_COLUMN = "Draft";
478
481
  DEFAULT_AUDIT = {
479
482
  enabled: DEFAULT_AUDIT_ENABLED,
480
483
  schedule: DEFAULT_AUDIT_SCHEDULE,
481
484
  maxRuntime: DEFAULT_AUDIT_MAX_RUNTIME,
485
+ createIssues: DEFAULT_AUDIT_CREATE_ISSUES,
482
486
  targetColumn: DEFAULT_AUDIT_TARGET_COLUMN
483
487
  };
484
488
  DEFAULT_ANALYTICS_ENABLED = false;
@@ -867,7 +871,11 @@ function normalizeConfig(rawConfig) {
867
871
  continue;
868
872
  const rawJob = readObject2(rawConfig[jobId]);
869
873
  if (rawJob) {
870
- normalized[jobId] = normalizeJobConfig(rawJob, jobDef);
874
+ const normalizedJob = normalizeJobConfig(rawJob, jobDef);
875
+ if (jobId === "audit" && rawJob.createIssues === void 0 && rawJob.targetColumn !== void 0) {
876
+ normalizedJob.createIssues = true;
877
+ }
878
+ normalized[jobId] = normalizedJob;
871
879
  }
872
880
  }
873
881
  const prResolverDef = getJobDef("pr-resolver");
@@ -8667,6 +8675,16 @@ function buildIssueBody(finding) {
8667
8675
  async function syncAuditFindingsToBoard(config, projectDir) {
8668
8676
  const findings = loadAuditFindings(projectDir);
8669
8677
  const targetColumn = config.audit.targetColumn;
8678
+ if (!config.audit.createIssues) {
8679
+ return {
8680
+ status: "skipped",
8681
+ findingsCount: findings.length,
8682
+ issuesCreated: 0,
8683
+ issuesFailed: 0,
8684
+ targetColumn: null,
8685
+ summary: "audit board issue creation is disabled"
8686
+ };
8687
+ }
8670
8688
  if (findings.length === 0) {
8671
8689
  return {
8672
8690
  status: "skipped",
@@ -9613,6 +9631,7 @@ __export(dist_exports, {
9613
9631
  DEFAULT_ANALYTICS_SCHEDULE: () => DEFAULT_ANALYTICS_SCHEDULE,
9614
9632
  DEFAULT_ANALYTICS_TARGET_COLUMN: () => DEFAULT_ANALYTICS_TARGET_COLUMN,
9615
9633
  DEFAULT_AUDIT: () => DEFAULT_AUDIT,
9634
+ DEFAULT_AUDIT_CREATE_ISSUES: () => DEFAULT_AUDIT_CREATE_ISSUES,
9616
9635
  DEFAULT_AUDIT_ENABLED: () => DEFAULT_AUDIT_ENABLED,
9617
9636
  DEFAULT_AUDIT_MAX_RUNTIME: () => DEFAULT_AUDIT_MAX_RUNTIME,
9618
9637
  DEFAULT_AUDIT_SCHEDULE: () => DEFAULT_AUDIT_SCHEDULE,
@@ -12061,6 +12080,7 @@ import * as path26 from "path";
12061
12080
  function buildEnvVars4(config, options) {
12062
12081
  const env = buildBaseEnvVars(config, "audit", options.dryRun);
12063
12082
  env.NW_AUDIT_MAX_RUNTIME = String(config.audit.maxRuntime);
12083
+ env.NW_AUDIT_CREATE_ISSUES = config.audit.createIssues ? "1" : "0";
12064
12084
  env.NW_CLAUDE_MODEL_ID = CLAUDE_MODEL_IDS[config.primaryFallbackModel ?? config.claudeModel ?? "sonnet"];
12065
12085
  const telegramWebhooks = getTelegramStatusWebhooks(config);
12066
12086
  if (telegramWebhooks.length > 0) {
@@ -12100,7 +12120,10 @@ function auditCommand(program2) {
12100
12120
  configTable.push(["Provider", auditProvider]);
12101
12121
  configTable.push(["Provider CLI", PROVIDER_COMMANDS[auditProvider]]);
12102
12122
  configTable.push(["Max Runtime", `${config.audit.maxRuntime}s`]);
12103
- configTable.push(["Target Column", config.audit.targetColumn]);
12123
+ configTable.push(["Create Board Issues", config.audit.createIssues ? "yes" : "no"]);
12124
+ if (config.audit.createIssues) {
12125
+ configTable.push(["Target Column", config.audit.targetColumn]);
12126
+ }
12104
12127
  configTable.push(["Report File", path26.join(projectDir, "logs", "audit-report.md")]);
12105
12128
  console.log(configTable.toString());
12106
12129
  header("Provider Invocation");
@@ -16714,6 +16737,9 @@ function validateConfigChanges(changes, currentConfig) {
16714
16737
  if (audit.maxRuntime !== void 0 && (typeof audit.maxRuntime !== "number" || audit.maxRuntime < 60)) {
16715
16738
  return "audit.maxRuntime must be a number >= 60";
16716
16739
  }
16740
+ if (audit.createIssues !== void 0 && typeof audit.createIssues !== "boolean") {
16741
+ return "audit.createIssues must be a boolean";
16742
+ }
16717
16743
  if (audit.targetColumn !== void 0 && !BOARD_COLUMNS.includes(audit.targetColumn)) {
16718
16744
  return `audit.targetColumn must be one of: ${BOARD_COLUMNS.join(", ")}`;
16719
16745
  }
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAEL,iBAAiB,EAalB,MAAM,mBAAmB,CAAC;AAU3B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2KnD"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAEL,iBAAiB,EAalB,MAAM,mBAAmB,CAAC;AAU3B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8KnD"}
@@ -14,6 +14,7 @@ export function buildEnvVars(config, options) {
14
14
  const env = buildBaseEnvVars(config, 'audit', options.dryRun);
15
15
  // Audit-specific settings
16
16
  env.NW_AUDIT_MAX_RUNTIME = String(config.audit.maxRuntime);
17
+ env.NW_AUDIT_CREATE_ISSUES = config.audit.createIssues ? '1' : '0';
17
18
  env.NW_CLAUDE_MODEL_ID =
18
19
  CLAUDE_MODEL_IDS[config.primaryFallbackModel ?? config.claudeModel ?? 'sonnet'];
19
20
  // Telegram status messages from bash scripts (start/progress/final status)
@@ -66,7 +67,10 @@ export function auditCommand(program) {
66
67
  configTable.push(['Provider', auditProvider]);
67
68
  configTable.push(['Provider CLI', PROVIDER_COMMANDS[auditProvider]]);
68
69
  configTable.push(['Max Runtime', `${config.audit.maxRuntime}s`]);
69
- configTable.push(['Target Column', config.audit.targetColumn]);
70
+ configTable.push(['Create Board Issues', config.audit.createIssues ? 'yes' : 'no']);
71
+ if (config.audit.createIssues) {
72
+ configTable.push(['Target Column', config.audit.targetColumn]);
73
+ }
70
74
  configTable.push(['Report File', path.join(projectDir, 'logs', 'audit-report.md')]);
71
75
  console.log(configTable.toString());
72
76
  header('Provider Invocation');
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ set -euo pipefail
8
8
  # The Node.js CLI will inject config values via environment variables.
9
9
  # Required env vars (with defaults shown):
10
10
  # NW_AUDIT_MAX_RUNTIME=1800 - Maximum runtime in seconds (30 minutes)
11
+ # NW_AUDIT_CREATE_ISSUES=0 - Set to 1 to request per-finding board issue sections
11
12
  # NW_PROVIDER_CMD=claude - AI provider CLI to use (claude, codex, etc.)
12
13
  # NW_DRY_RUN=0 - Set to 1 for dry-run mode (prints diagnostics only)
13
14
 
@@ -73,7 +74,7 @@ fi
73
74
  rotate_log
74
75
  log_separator
75
76
  log "RUN-START: audit invoked project=${PROJECT_DIR} provider=${PROVIDER_CMD} dry_run=${NW_DRY_RUN:-0}"
76
- log "CONFIG: max_runtime=${MAX_RUNTIME}s max_retries=${NW_AUDIT_MAX_RETRIES:-3} retry_delay=${NW_AUDIT_RETRY_DELAY:-120}s"
77
+ log "CONFIG: max_runtime=${MAX_RUNTIME}s create_issues=${NW_AUDIT_CREATE_ISSUES:-0} max_retries=${NW_AUDIT_MAX_RETRIES:-3} retry_delay=${NW_AUDIT_RETRY_DELAY:-120}s"
77
78
 
78
79
  if ! acquire_lock "${LOCK_FILE}"; then
79
80
  emit_result "skip_locked"
@@ -107,6 +108,15 @@ ${AUDIT_PROMPT_TEMPLATE}"
107
108
  fi
108
109
 
109
110
  AUDIT_PROMPT="$(cat "${AUDIT_PROMPT_TEMPLATE}")"
111
+ if [ "${NW_AUDIT_CREATE_ISSUES:-0}" = "1" ]; then
112
+ AUDIT_PROMPT="${AUDIT_PROMPT}
113
+
114
+ ## Explicit Board Issue Mode
115
+
116
+ This project explicitly enabled audit board issue creation. Keep the consolidated report and priority matrix above, and also add a final section named \`## Board Issue Findings\`.
117
+
118
+ In that final section only, include one \`### Finding N\` block for each issue that genuinely needs a separate board card. Use the legacy exact fields \`Location\`, \`Severity\`, \`Category\`, \`Description\`, \`Snippet\`, and \`Suggested Fix\` so Night Watch can sync those selected findings. Do not create a board issue block for every observation; only include independently executable work items."
119
+ fi
110
120
 
111
121
  if [ -n "${NW_DEFAULT_BRANCH:-}" ]; then
112
122
  DEFAULT_BRANCH="${NW_DEFAULT_BRANCH}"
@@ -1255,6 +1255,7 @@ if [ ${EXIT_CODE} -eq 0 ]; then
1255
1255
  # Board mode: comment with PR URL, then close issue and move to Done
1256
1256
  PR_URL=$(gh pr list --state open --json headRefName,url \
1257
1257
  --jq ".[] | select(.headRefName == \"${BRANCH_NAME}\") | .url" 2>/dev/null || true)
1258
+ PR_URL=${PR_URL:-${EXECUTOR_PR_URL}}
1258
1259
  if [ -n "${PR_URL}" ]; then
1259
1260
  "${NW_CLI}" board comment "${ISSUE_NUMBER}" --body "PR opened: ${PR_URL} (via ${EFFECTIVE_PROVIDER_LABEL})" 2>>"${LOG_FILE}" || true
1260
1261
  gh pr comment "${PR_URL}" --body "> 🤖 Implemented by ${EFFECTIVE_PROVIDER_LABEL}" 2>>"${LOG_FILE}" || true
@@ -1262,16 +1263,17 @@ if [ ${EXIT_CODE} -eq 0 ]; then
1262
1263
  "${NW_CLI}" board close-issue "${ISSUE_NUMBER}" 2>>"${LOG_FILE}" || \
1263
1264
  "${NW_CLI}" board move-issue "${ISSUE_NUMBER}" --column "Done" 2>>"${LOG_FILE}" || true
1264
1265
  log "SUCCESS: PR opened and ready for review — ${PR_URL}"
1265
- emit_result "success_open_pr" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}${PR_URL:+|pr_url=${PR_URL}}"
1266
+ emit_result "success_open_pr" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}${PR_URL:+|pr_url=${PR_URL}}${EXECUTOR_PR_NUMBER:+|pr_number=${EXECUTOR_PR_NUMBER}}"
1266
1267
  elif finalize_prd_done "implemented, PR opened on ${BRANCH_NAME}"; then
1267
1268
  # Non-board mode: post attribution comment to the PR
1268
1269
  NON_BOARD_PR_URL=$(gh pr list --state open --json headRefName,url \
1269
1270
  --jq ".[] | select(.headRefName == \"${BRANCH_NAME}\") | .url" 2>/dev/null || true)
1271
+ NON_BOARD_PR_URL=${NON_BOARD_PR_URL:-${EXECUTOR_PR_URL}}
1270
1272
  if [ -n "${NON_BOARD_PR_URL}" ]; then
1271
1273
  gh pr comment "${NON_BOARD_PR_URL}" --body "> 🤖 Implemented by ${EFFECTIVE_PROVIDER_LABEL}" 2>>"${LOG_FILE}" || true
1272
1274
  fi
1273
1275
  log "SUCCESS: PR opened and ready for review — ${NON_BOARD_PR_URL}"
1274
- emit_result "success_open_pr" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}${NON_BOARD_PR_URL:+|pr_url=${NON_BOARD_PR_URL}}"
1276
+ emit_result "success_open_pr" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}${NON_BOARD_PR_URL:+|pr_url=${NON_BOARD_PR_URL}}${EXECUTOR_PR_NUMBER:+|pr_number=${EXECUTOR_PR_NUMBER}}"
1275
1277
  else
1276
1278
  night_watch_history record "${PROJECT_DIR}" "${ELIGIBLE_PRD}" failure --exit-code 1 2>/dev/null || true
1277
1279
  emit_result "failure_finalize" "prd=${ELIGIBLE_PRD}|branch=${BRANCH_NAME}|reason=finalize_failed|detail=Failed_to_finalize_open_prd"
@@ -1,4 +1,6 @@
1
- You are the Night Watch Code Auditor. Your job is to scan the codebase for real engineering risks and write a structured, high-signal report.
1
+ You are the Night Watch Code Auditor. Your job is to scan the codebase for systemic engineering risks and write a consolidated architecture/code-quality audit report for human prioritization.
2
+
3
+ The default output is a broad report, not executor fodder. Do not create or recommend one board issue per finding unless an explicit "Board Issue Mode" section is appended to this prompt.
2
4
 
3
5
  ## What to look for
4
6
 
@@ -30,65 +32,97 @@ You are the Night Watch Code Auditor. Your job is to scan the codebase for real
30
32
 
31
33
  - `node_modules/`, `dist/`, `.git/`, `coverage/`, generated files.
32
34
  - Test files (`*.test.ts`, `*.spec.ts`, `__tests__/`) unless they expose production design flaws.
33
- - Intentional no-op catches in file walkers/read-only probing paths (e.g., `catch { continue }`, `catch { return null }` when clearly harmless).
35
+ - Intentional no-op catches in file walkers/read-only probing paths (for example, `catch { continue }`, `catch { return null }` when clearly harmless).
34
36
  - Cosmetic style-only nits (formatting, naming preference, import order).
35
- - Hypothetical principle violations without concrete impact.
37
+ - Hypothetical principle violations without concrete code evidence and impact.
36
38
 
37
39
  ## How to scan
38
40
 
39
41
  Use file-reading/search tools and scan systematically, prioritizing:
40
42
 
41
- - `src/` (core TypeScript implementation)
42
- - `scripts/` (automation and shell execution paths)
43
+ - `src/` and package implementation directories.
44
+ - `scripts/` and automation/runtime shell paths.
45
+ - Shared configuration, scheduler, queue, provider, board, and command flows.
43
46
 
44
47
  For each potential issue, verify:
45
48
 
46
49
  1. It is real and actionable.
47
- 2. It has concrete impact (correctness, security, scalability, operability, maintainability).
48
- 3. The fix direction is clear.
50
+ 2. It has concrete impact on correctness, security, scalability, operability, or maintainability.
51
+ 3. The affected locations show a pattern or systemic design problem, not just a tiny isolated nit.
52
+ 4. The fix direction is useful for human planning.
53
+
54
+ ## Priority model
55
+
56
+ Use an Effort x Impact priority model:
49
57
 
50
- ## Severity model
58
+ - **Impact**: critical, high, medium, low.
59
+ - **Effort**: small, medium, large.
60
+ - **Priority**: P0, P1, P2, P3.
51
61
 
52
- - **critical**: likely production outage/data loss/security exposure or severe architectural risk.
53
- - **high**: significant bug/risk with near-term impact.
54
- - **medium**: clear risk/smell that should be addressed soon.
55
- - **low**: valid but lower urgency.
62
+ Assign P0/P1 only when the issue is urgent or unlocks significant risk reduction. Be selective.
56
63
 
57
64
  ## Report format
58
65
 
59
- Write findings to `logs/audit-report.md` using this exact format:
66
+ Write `logs/audit-report.md` using this format:
60
67
 
61
68
  ```markdown
62
- # Code Audit Report
69
+ # Architecture and Code Quality Audit
63
70
 
64
71
  Generated: <ISO timestamp>
65
72
 
66
- ## Findings
73
+ ## Executive Summary
67
74
 
68
- ### Finding 1
75
+ One to three concise paragraphs covering the highest-risk themes, the likely cost of leaving them alone, and the recommended order of attack.
69
76
 
70
- - **Location**: `src/path/to/file.ts:42`
71
- - **Severity**: critical | high | medium | low
72
- - **Category**: empty_catch | critical_todo | hardcoded_secret | unhandled_promise | unsafe_assertion | scalability_hotspot | architecture_violation | srp_violation | dry_violation | kiss_violation | solid_violation | yagni_violation
73
- - **Description**: What the issue is, why it matters, and concrete impact
74
- - **Snippet**: `the offending code`
75
- - **Suggested Fix**: Specific fix direction (minimal, pragmatic)
77
+ ## Priority Matrix
76
78
 
77
- ### Finding 2
79
+ | Priority | Theme | Impact | Effort | Why now |
80
+ | -------- | ------------ | ------ | ------ | -------------- |
81
+ | P1 | <theme name> | high | medium | <short reason> |
78
82
 
79
- ...
80
- ```
83
+ ## Findings by Theme
81
84
 
82
- If you find **no actionable issues**, write exactly this to `logs/audit-report.md`:
85
+ ### <Theme Name>
86
+
87
+ Impact: critical | high | medium | low
88
+ Effort: small | medium | large
89
+ Priority: P0 | P1 | P2 | P3
90
+
91
+ #### Evidence
92
+
93
+ - `<path>:<line>` - what is happening and why it matters.
94
+ - `<path>:<line>` - related evidence showing this is systemic.
95
+
96
+ #### Architecture or Quality Rule Violated
97
+
98
+ Name the concrete rule or boundary being violated.
99
+
100
+ #### Recommended Direction
101
+
102
+ Describe the pragmatic remediation path. Prefer grouped fixes and sequencing over tiny task breakdowns.
103
+
104
+ #### Full Violation List
105
+
106
+ - `<path>:<line>` - concise violation.
107
+ - `<path>:<line>` - concise violation.
108
+
109
+ ## Cross-Cutting Recommendations
110
+
111
+ - <Recommendation that helps multiple themes>
112
+
113
+ ## No-Issue Result
114
+
115
+ If there are no actionable systemic issues, write exactly:
83
116
 
84
- ```
85
117
  NO_ISSUES_FOUND
86
118
  ```
87
119
 
88
120
  ## Rules
89
121
 
90
- - Prioritize high-impact findings over volume. 3 strong findings beat 15 weak ones.
91
- - Report principle violations (SRP/DRY/KISS/SOLID/YAGNI) only when they create concrete risk.
122
+ - Favor grouped systemic findings over granular one-off findings.
123
+ - Include a full violation list under each theme so humans can size and prioritize the work.
124
+ - Do not use `### Finding N` headings in default report mode.
125
+ - Do not create one issue per finding, and do not optimize the report for automatic execution.
126
+ - Report principle violations only when they create concrete risk.
92
127
  - Avoid theoretical architecture criticism without code evidence.
93
- - Be decisive: skip noisy false positives.
94
128
  - After writing the report, stop. Do NOT open PRs, push code, or make changes.
@@ -1,8 +1,11 @@
1
- You are the Night Watch Code Auditor. Your job is to scan the codebase for real engineering risks and write a structured, high-signal report.
1
+ You are the Night Watch Code Auditor. Your job is to scan the codebase for systemic engineering risks and write a consolidated architecture/code-quality audit report for human prioritization.
2
+
3
+ The default output is a broad report, not executor fodder. Do not create or recommend one board issue per finding unless an explicit "Board Issue Mode" section is appended to this prompt.
2
4
 
3
5
  ## What to look for
4
6
 
5
7
  ### 1) Critical runtime and security risks
8
+
6
9
  1. **Empty or swallowed catches** - `catch` blocks that discard meaningful errors in non-trivial paths.
7
10
  2. **Critical TODOs/FIXMEs/HACKs** - comments mentioning `bug`, `security`, `race`, `leak`, `crash`, `hotfix`, `rollback`, `unsafe`.
8
11
  3. **Hardcoded secrets or tokens** - API keys, passwords, tokens in source (exclude env var references).
@@ -10,12 +13,14 @@ You are the Night Watch Code Auditor. Your job is to scan the codebase for real
10
13
  5. **Unsafe type assertions** - `as any`, `as unknown as X`, dangerous non-null assertions (`!`) on uncertain input.
11
14
 
12
15
  ### 2) Scalability and performance hotspots
16
+
13
17
  1. **N+1 / repeated expensive work** - repeated DB/API/file operations in loops.
14
18
  2. **Unbounded processing** - full in-memory loading of large datasets, missing pagination/streaming/chunking.
15
19
  3. **Blocking work on hot paths** - sync I/O or CPU-heavy work in frequent request/loop paths.
16
20
  4. **Missing backpressure/limits** - unbounded queues, retries, fan-out, or concurrency.
17
21
 
18
22
  ### 3) Architecture and maintainability risks
23
+
19
24
  1. **Architecture violations** - business logic mixed into transport/UI/glue layers; hidden cross-layer dependencies.
20
25
  2. **SRP violations** - modules/functions/classes doing multiple unrelated responsibilities.
21
26
  3. **DRY violations** - duplicated logic likely to drift and cause inconsistent behavior.
@@ -27,61 +32,97 @@ You are the Night Watch Code Auditor. Your job is to scan the codebase for real
27
32
 
28
33
  - `node_modules/`, `dist/`, `.git/`, `coverage/`, generated files.
29
34
  - Test files (`*.test.ts`, `*.spec.ts`, `__tests__/`) unless they expose production design flaws.
30
- - Intentional no-op catches in file walkers/read-only probing paths (e.g., `catch { continue }`, `catch { return null }` when clearly harmless).
35
+ - Intentional no-op catches in file walkers/read-only probing paths (for example, `catch { continue }`, `catch { return null }` when clearly harmless).
31
36
  - Cosmetic style-only nits (formatting, naming preference, import order).
32
- - Hypothetical principle violations without concrete impact.
37
+ - Hypothetical principle violations without concrete code evidence and impact.
33
38
 
34
39
  ## How to scan
35
40
 
36
41
  Use file-reading/search tools and scan systematically, prioritizing:
37
- - `src/` (core TypeScript implementation)
38
- - `scripts/` (automation and shell execution paths)
42
+
43
+ - `src/` and package implementation directories.
44
+ - `scripts/` and automation/runtime shell paths.
45
+ - Shared configuration, scheduler, queue, provider, board, and command flows.
39
46
 
40
47
  For each potential issue, verify:
48
+
41
49
  1. It is real and actionable.
42
- 2. It has concrete impact (correctness, security, scalability, operability, maintainability).
43
- 3. The fix direction is clear.
50
+ 2. It has concrete impact on correctness, security, scalability, operability, or maintainability.
51
+ 3. The affected locations show a pattern or systemic design problem, not just a tiny isolated nit.
52
+ 4. The fix direction is useful for human planning.
53
+
54
+ ## Priority model
44
55
 
45
- ## Severity model
56
+ Use an Effort x Impact priority model:
46
57
 
47
- - **critical**: likely production outage/data loss/security exposure or severe architectural risk.
48
- - **high**: significant bug/risk with near-term impact.
49
- - **medium**: clear risk/smell that should be addressed soon.
50
- - **low**: valid but lower urgency.
58
+ - **Impact**: critical, high, medium, low.
59
+ - **Effort**: small, medium, large.
60
+ - **Priority**: P0, P1, P2, P3.
61
+
62
+ Assign P0/P1 only when the issue is urgent or unlocks significant risk reduction. Be selective.
51
63
 
52
64
  ## Report format
53
65
 
54
- Write findings to `logs/audit-report.md` using this exact format:
66
+ Write `logs/audit-report.md` using this format:
55
67
 
56
68
  ```markdown
57
- # Code Audit Report
69
+ # Architecture and Code Quality Audit
58
70
 
59
71
  Generated: <ISO timestamp>
60
72
 
61
- ## Findings
73
+ ## Executive Summary
62
74
 
63
- ### Finding 1
64
- - **Location**: `src/path/to/file.ts:42`
65
- - **Severity**: critical | high | medium | low
66
- - **Category**: empty_catch | critical_todo | hardcoded_secret | unhandled_promise | unsafe_assertion | scalability_hotspot | architecture_violation | srp_violation | dry_violation | kiss_violation | solid_violation | yagni_violation
67
- - **Description**: What the issue is, why it matters, and concrete impact
68
- - **Snippet**: `the offending code`
69
- - **Suggested Fix**: Specific fix direction (minimal, pragmatic)
75
+ One to three concise paragraphs covering the highest-risk themes, the likely cost of leaving them alone, and the recommended order of attack.
70
76
 
71
- ### Finding 2
72
- ...
73
- ```
77
+ ## Priority Matrix
74
78
 
75
- If you find **no actionable issues**, write exactly this to `logs/audit-report.md`:
79
+ | Priority | Theme | Impact | Effort | Why now |
80
+ | -------- | ------------ | ------ | ------ | -------------- |
81
+ | P1 | <theme name> | high | medium | <short reason> |
82
+
83
+ ## Findings by Theme
84
+
85
+ ### <Theme Name>
86
+
87
+ Impact: critical | high | medium | low
88
+ Effort: small | medium | large
89
+ Priority: P0 | P1 | P2 | P3
90
+
91
+ #### Evidence
92
+
93
+ - `<path>:<line>` - what is happening and why it matters.
94
+ - `<path>:<line>` - related evidence showing this is systemic.
95
+
96
+ #### Architecture or Quality Rule Violated
97
+
98
+ Name the concrete rule or boundary being violated.
99
+
100
+ #### Recommended Direction
101
+
102
+ Describe the pragmatic remediation path. Prefer grouped fixes and sequencing over tiny task breakdowns.
103
+
104
+ #### Full Violation List
105
+
106
+ - `<path>:<line>` - concise violation.
107
+ - `<path>:<line>` - concise violation.
108
+
109
+ ## Cross-Cutting Recommendations
110
+
111
+ - <Recommendation that helps multiple themes>
112
+
113
+ ## No-Issue Result
114
+
115
+ If there are no actionable systemic issues, write exactly:
76
116
 
77
- ```
78
117
  NO_ISSUES_FOUND
79
118
  ```
80
119
 
81
120
  ## Rules
82
121
 
83
- - Prioritize high-impact findings over volume. 3 strong findings beat 15 weak ones.
84
- - Report principle violations (SRP/DRY/KISS/SOLID/YAGNI) only when they create concrete risk.
122
+ - Favor grouped systemic findings over granular one-off findings.
123
+ - Include a full violation list under each theme so humans can size and prioritize the work.
124
+ - Do not use `### Finding N` headings in default report mode.
125
+ - Do not create one issue per finding, and do not optimize the report for automatic execution.
126
+ - Report principle violations only when they create concrete risk.
85
127
  - Avoid theoretical architecture criticism without code evidence.
86
- - Be decisive: skip noisy false positives.
87
128
  - After writing the report, stop. Do NOT open PRs, push code, or make changes.