@alecsibilia/luca 13.0.0-alpha.12 → 13.0.0-alpha.14

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 (66) hide show
  1. package/dist/chunks/branch.mjs +9 -7
  2. package/dist/chunks/checks.mjs +9 -7
  3. package/dist/chunks/claim-verify.mjs +5 -4
  4. package/dist/chunks/classify.mjs +1 -1
  5. package/dist/chunks/confidence.mjs +9 -7
  6. package/dist/chunks/hook.mjs +17 -7
  7. package/dist/chunks/init.mjs +3 -3
  8. package/dist/chunks/luca-gitignore.mjs +2 -2
  9. package/dist/chunks/phase.mjs +9 -7
  10. package/dist/chunks/plan.mjs +10 -8
  11. package/dist/chunks/pr-review.mjs +9 -7
  12. package/dist/chunks/preferences.mjs +9 -7
  13. package/dist/chunks/repair.mjs +1 -1
  14. package/dist/chunks/repo.mjs +9 -7
  15. package/dist/chunks/retro.mjs +6 -5
  16. package/dist/chunks/roadmap.mjs +9 -7
  17. package/dist/chunks/rules.mjs +6 -5
  18. package/dist/chunks/state.mjs +9 -7
  19. package/dist/chunks/stray-local-install.mjs +1 -1
  20. package/dist/chunks/telemetry.mjs +1 -1
  21. package/dist/chunks/todo.mjs +9 -7
  22. package/dist/chunks/vault-init.mjs +2 -2
  23. package/dist/chunks/verification.mjs +6 -5
  24. package/dist/chunks/workflow.mjs +9 -7
  25. package/dist/claude/.claude/agents/architect.md +17 -16
  26. package/dist/claude/.claude/agents/build.md +8 -2
  27. package/dist/claude/.claude/agents/debater.md +6 -0
  28. package/dist/claude/.claude/agents/discuss.md +6 -0
  29. package/dist/claude/.claude/agents/discussion.md +6 -0
  30. package/dist/claude/.claude/agents/execute.md +20 -13
  31. package/dist/claude/.claude/agents/executor.md +7 -1
  32. package/dist/claude/.claude/agents/fast.md +6 -0
  33. package/dist/claude/.claude/agents/finalize.md +29 -28
  34. package/dist/claude/.claude/agents/learner.md +29 -6
  35. package/dist/claude/.claude/agents/plan-reviewer.md +6 -0
  36. package/dist/claude/.claude/agents/plan.md +6 -0
  37. package/dist/claude/.claude/agents/research.md +8 -1
  38. package/dist/claude/.claude/agents/researcher.md +6 -0
  39. package/dist/claude/.claude/agents/review.md +9 -5
  40. package/dist/claude/.claude/agents/reviewer.md +20 -10
  41. package/dist/claude/.claude/agents/shadow-scanner.md +6 -0
  42. package/dist/claude/.claude/agents/test-writer.md +6 -0
  43. package/dist/claude/.claude/agents/triage.md +13 -18
  44. package/dist/claude/.claude/agents/verifier.md +15 -10
  45. package/dist/claude/.claude/hooks/context-refresher.ts +2 -1
  46. package/dist/claude/.claude/hooks/continuation-messages.ts +2 -1
  47. package/dist/claude/.claude/hooks/pipeline-guard.ts +2 -1
  48. package/dist/claude/skills/lu/SKILL.md +90 -1
  49. package/dist/claude/skills/luca-telemetry-report/SKILL.md +8 -1
  50. package/dist/claude/skills/phase-execute/SKILL.md +63 -0
  51. package/dist/claude/skills/session-resume/SKILL.md +41 -5
  52. package/dist/index.mjs +1 -1
  53. package/dist/shared/{luca.NNGS-NSE.mjs → luca.92gxSuz7.mjs} +1 -1
  54. package/dist/shared/{luca.BSiiWgBd.mjs → luca.B4XKevaZ.mjs} +4 -3
  55. package/dist/shared/luca.BAqmbI4n.mjs +8 -0
  56. package/dist/shared/{luca.1Es9-Gvz.mjs → luca.BRGd51XD.mjs} +1 -1
  57. package/dist/shared/{luca.CzglpVsy.mjs → luca.Bg_VHA2r.mjs} +1 -1
  58. package/dist/shared/{luca.CvcFKGbj.mjs → luca.C466HI-y.mjs} +1 -1
  59. package/dist/shared/{luca.BYM-DeyF.mjs → luca.CZfqdBsl.mjs} +42 -23
  60. package/dist/shared/luca.D-08LKzR.mjs +21 -0
  61. package/dist/shared/{luca.D5Rk3yXn.mjs → luca.D1iTA_aN.mjs} +16 -20
  62. package/dist/shared/{luca.DHbTnxmf.mjs → luca.DBcPn3_9.mjs} +2 -2
  63. package/dist/shared/{luca.CGOV-hrW.mjs → luca.DnzyY7Vh.mjs} +70 -7
  64. package/dist/shared/{luca.DQSuoQwr.mjs → luca.OxvM40dI.mjs} +1 -1
  65. package/dist/shared/{luca.juAH_s77.mjs → luca.S_KvKqlx.mjs} +2 -2
  66. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { t as lucaBranchGuardTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { t as lucaBranchGuardTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const guardCommand = defineCommand({
21
23
  meta: {
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { s as lucaChecksRunTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { s as lucaChecksRunTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const runCommand = defineCommand({
21
23
  meta: {
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import { resolve } from 'pathe';
3
- import { v as verifyFile } from '../shared/luca.CGOV-hrW.mjs';
3
+ import { v as verifyFile } from '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -9,6 +9,7 @@ import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
11
  import { l as logger } from '../shared/luca.dM-MKlNE.mjs';
12
+ import { s as sanitizeControlChars } from '../shared/luca.BAqmbI4n.mjs';
12
13
  import 'zod';
13
14
  import 'node:os';
14
15
  import 'consola';
@@ -44,14 +45,14 @@ const claimVerifyCommand = defineCommand({
44
45
  for (const failure of report.failures) {
45
46
  const loc = failure.claim.sourceLine > 0 ? ` (line ${failure.claim.sourceLine})` : "";
46
47
  logger.error(
47
- `${failure.reason}: ${failure.claim.text}${loc}
48
- ${failure.evidence}`
48
+ `${failure.reason}: ${sanitizeControlChars(failure.claim.text)}${loc}
49
+ ${sanitizeControlChars(failure.evidence)}`
49
50
  );
50
51
  }
51
52
  for (const warning of report.forbiddenLanguage) {
52
53
  logger.warn(
53
54
  `forbidden-language: "${warning.phrase}" (line ${warning.sourceLine}) has no nearby probe evidence
54
- ${warning.sourceContext}`
55
+ ${sanitizeControlChars(warning.sourceContext)}`
55
56
  );
56
57
  }
57
58
  if (report.passed) {
@@ -1,5 +1,5 @@
1
1
  import { defineCommand } from 'citty';
2
- import { C as ClassifyComplexityInputSchema } from '../shared/luca.CGOV-hrW.mjs';
2
+ import { C as ClassifyComplexityInputSchema } from '../shared/luca.DnzyY7Vh.mjs';
3
3
  import 'node:fs';
4
4
  import 'node:fs/promises';
5
5
  import 'node:path';
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
- import '../shared/luca.CGOV-hrW.mjs';
3
- import { l as loadCurrentState, r as resolveActiveSlug } from '../shared/luca.DQSuoQwr.mjs';
2
+ import '../shared/luca.DnzyY7Vh.mjs';
3
+ import { l as loadCurrentState, r as resolveActiveSlug } from '../shared/luca.OxvM40dI.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,16 +8,18 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { r as readConfidenceJournal, b as renderConfidenceJournalMarkdown, g as getConfidenceSummary } from '../shared/luca.juAH_s77.mjs';
11
+ import { r as readConfidenceJournal, b as renderConfidenceJournalMarkdown, g as getConfidenceSummary } from '../shared/luca.S_KvKqlx.mjs';
12
12
  import { l as logger } from '../shared/luca.dM-MKlNE.mjs';
13
13
  import 'zod';
14
- import { v as lucaConfidenceLogTool } from '../shared/luca.BYM-DeyF.mjs';
15
- import '../shared/luca.NNGS-NSE.mjs';
16
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
14
+ import { v as lucaConfidenceLogTool } from '../shared/luca.CZfqdBsl.mjs';
15
+ import '../shared/luca.92gxSuz7.mjs';
16
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
17
17
  import 'node:os';
18
- import '../shared/luca.CzglpVsy.mjs';
18
+ import '../shared/luca.Bg_VHA2r.mjs';
19
19
  import 'consola';
20
+ import '../shared/luca.BAqmbI4n.mjs';
20
21
  import '../shared/luca.CQ3g1xrD.mjs';
22
+ import '../shared/luca.D1iTA_aN.mjs';
21
23
 
22
24
  function selectConfidenceGateActions(entries) {
23
25
  const auto = [];
@@ -1,18 +1,18 @@
1
1
  import { defineCommand } from 'citty';
2
- import { c as coarsePhaseOf, t as toLucaRelative, a as classifyWritePath, b as TMP_PATH_PATTERN, A as AUDIT_PATH_PATTERN, W as WAVE_FILE_RE } from '../shared/luca.CGOV-hrW.mjs';
3
- import { l as loadCurrentState, S as STEP_ARTIFACTS, r as resolveActiveSlug } from '../shared/luca.DQSuoQwr.mjs';
2
+ import { c as coarsePhaseOf, t as toLucaRelative, a as classifyWritePath, b as TMP_PATH_PATTERN, A as AUDIT_PATH_PATTERN, W as WAVE_FILE_RE } from '../shared/luca.DnzyY7Vh.mjs';
3
+ import { l as loadCurrentState, S as STEP_ARTIFACTS, r as resolveActiveSlug } from '../shared/luca.OxvM40dI.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
7
- import { p as phasePathFor } from '../shared/luca.CzglpVsy.mjs';
7
+ import { p as phasePathFor } from '../shared/luca.Bg_VHA2r.mjs';
8
8
  import 'node:crypto';
9
9
  import 'node:module';
10
10
  import 'node:url';
11
11
  import 'node:child_process';
12
+ import { tmpdir } from 'node:os';
12
13
  import { parse } from 'shell-quote';
13
- import { l as lucaStateClaimOwnerTool } from '../shared/luca.NNGS-NSE.mjs';
14
+ import { l as lucaStateClaimOwnerTool } from '../shared/luca.92gxSuz7.mjs';
14
15
  import 'zod';
15
- import 'node:os';
16
16
 
17
17
  const STAGE_TOOL_MATRIX = {
18
18
  IDLE: {
@@ -572,6 +572,9 @@ async function handleStageGateHook(opts) {
572
572
  const sessionId = parsed.session_id ?? parsed.sessionId;
573
573
  const cwd = opts.cwd ?? process.cwd();
574
574
  const homedir = opts.homedir ?? process.env.HOME;
575
+ const tmpdirs = opts.tmpdirs ?? [process.env.TMPDIR, tmpdir()].filter(
576
+ (d) => Boolean(d)
577
+ );
575
578
  const state = await loadCurrentState({ cwd });
576
579
  if (toolName === "Bash" && sessionId && state.ownerSessionId !== sessionId && isStateAdvanceCommand(
577
580
  toolInput?.command ?? ""
@@ -600,9 +603,14 @@ async function handleStageGateHook(opts) {
600
603
  return { exitCode: 0, toolName, toolInput, decision: "allow" };
601
604
  }
602
605
  const relTarget = toLucaRelative(targetPath, cwd);
603
- const pc = classifyWritePath(targetPath, { homedir, cwd });
606
+ const pc = classifyWritePath(targetPath, { homedir, cwd, tmpdirs });
604
607
  if (pc.class === "denied") {
605
608
  pathBlockReason = `${toolName} to '${targetPath}' is always denied: ${pc.reason ?? "forbidden path"}`;
609
+ } else if (pc.class === "ephemeral") {
610
+ log(
611
+ `stage-gate: ${toolName} to '${targetPath}' is ephemeral scratch \u2014 allowing`
612
+ );
613
+ return { exitCode: 0, toolName, toolInput, decision: "allow" };
606
614
  } else if (pc.class === "planning-general" || pc.class === "planning-audit") {
607
615
  const gate = artifactPathGate(relTarget, state.pipelineStep, state);
608
616
  if (gate.kind === "block") {
@@ -630,7 +638,7 @@ async function handleStageGateHook(opts) {
630
638
  pathBlockReason = `Bash command is always denied: ${bashResult.reason ?? "forbidden command"}`;
631
639
  } else {
632
640
  for (const target of bashResult.targetPaths) {
633
- const pc = classifyWritePath(target, { homedir });
641
+ const pc = classifyWritePath(target, { homedir, tmpdirs });
634
642
  if (pc.class === "denied") {
635
643
  pathBlockReason = `Bash writes to denied path '${target}': ${pc.reason ?? "forbidden path"}`;
636
644
  break;
@@ -779,6 +787,8 @@ function pathClassToToolCategory(c) {
779
787
  return "planning-write-general";
780
788
  case "planning-audit":
781
789
  return "planning-write-audit";
790
+ case "ephemeral":
791
+ throw new Error("pathClassToToolCategory called with ephemeral");
782
792
  case "denied":
783
793
  throw new Error("pathClassToToolCategory called with denied");
784
794
  }
@@ -1,17 +1,17 @@
1
1
  import * as p from '@clack/prompts';
2
2
  import { defineCommand, runMain } from 'citty';
3
3
  import { join } from 'pathe';
4
- import { w as writeProjectSkeleton } from '../shared/luca.1Es9-Gvz.mjs';
4
+ import { w as writeProjectSkeleton } from '../shared/luca.BRGd51XD.mjs';
5
5
  import { existsSync, statSync, chmodSync } from 'node:fs';
6
6
  import { readFile, writeFile, rename, unlink, mkdir, readdir, copyFile } from 'node:fs/promises';
7
7
  import { homedir } from 'node:os';
8
8
  import { join as join$1, dirname, delimiter } from 'node:path';
9
9
  import { d as defaultClaudeHome, a as defaultAntigravityHome, r as resolveBundledArtifactsForHooks, i as installSkills } from '../shared/luca.41dcdyd6.mjs';
10
- import { d as detectProjectContext, s as suggestVaultName, a as autoCreateVault, w as writeVaultConfig } from '../shared/luca.CvcFKGbj.mjs';
10
+ import { d as detectProjectContext, s as suggestVaultName, a as autoCreateVault, w as writeVaultConfig } from '../shared/luca.C466HI-y.mjs';
11
11
  import { l as logger } from '../shared/luca.dM-MKlNE.mjs';
12
12
  import { M as MuninndbInstallResultSchema, r as resolvePlatformTarget, g as getLucaHomePaths, a as MUNINNDB_BINARY_NAME, b as getCommonBinaryPaths, c as resolveMuninndbPort, d as checkMuninndbService, e as MuninndbServiceStatusSchema, w as waitForMuninndbHealthy, f as ensureLucaHome, h as checkMuninndbBinary } from '../shared/luca.BfjhRHhj.mjs';
13
13
  import { c as checkPrerequisites, p as promptBunInstall } from '../shared/luca.DTomPq7I.mjs';
14
- import '../shared/luca.CGOV-hrW.mjs';
14
+ import '../shared/luca.DnzyY7Vh.mjs';
15
15
  import 'zod';
16
16
  import 'node:child_process';
17
17
  import 'node:crypto';
@@ -1,11 +1,11 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
- import { e as ensureLucaGitignore, L as LUCA_GITIGNORE_ENTRIES } from '../shared/luca.1Es9-Gvz.mjs';
4
+ import { e as ensureLucaGitignore, L as LUCA_GITIGNORE_ENTRIES } from '../shared/luca.BRGd51XD.mjs';
5
5
  import 'node:os';
6
6
  import 'pathe';
7
7
  import 'node:url';
8
- import '../shared/luca.CGOV-hrW.mjs';
8
+ import '../shared/luca.DnzyY7Vh.mjs';
9
9
  import 'zod';
10
10
  import 'node:child_process';
11
11
  import 'node:crypto';
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { c as lucaPhaseCurrentTool, d as lucaPhaseAdvanceTool, e as lucaPhaseArchiveTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { c as lucaPhaseCurrentTool, d as lucaPhaseAdvanceTool, e as lucaPhaseArchiveTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const currentCommand = defineCommand({
21
23
  meta: {
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,19 +8,21 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { f as lucaPlanLintTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { f as lucaPlanLintTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const lintCommand = defineCommand({
21
23
  meta: {
22
24
  name: "lint",
23
- description: "Warn-only advisory lint of a plan.md against the pinned criterion grammar (ac-NN / anti-NN IDs, compound criteria, absolute quantifiers, missing anti-criteria). Exits 0 on lint findings \u2014 they are warnings, never blockers (only operational errors like an unreadable file exit 1). Phase-agnostic."
25
+ description: "Warn-only advisory lint of a plan.md against the pinned criterion and deliverable grammars \u2014 seven checks: four criterion (ac-NN / anti-NN IDs, compound criteria, absolute quantifiers, missing anti-criteria) plus three deliverable (missing ## Deliverables section, malformed D-line, deliverable referencing an unknown ac-ID). Exits 0 on lint findings \u2014 they are warnings, never blockers (only operational errors like an unreadable file exit 1). Phase-agnostic."
24
26
  },
25
27
  args: {
26
28
  file: {
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { o as lucaPrReviewDetectConvergenceTool, p as lucaPrReviewFilterStaleTool, q as lucaPrReviewRegressionCheckTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { o as lucaPrReviewDetectConvergenceTool, p as lucaPrReviewFilterStaleTool, q as lucaPrReviewRegressionCheckTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const filterStaleCommand = defineCommand({
21
23
  meta: {
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { i as lucaPreferencesReadTool, j as lucaPreferencesWriteTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { i as lucaPreferencesReadTool, j as lucaPreferencesWriteTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const readCommand = defineCommand({
21
23
  meta: {
@@ -2,7 +2,7 @@ import { defineCommand } from 'citty';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { readFile, rm } from 'node:fs/promises';
4
4
  import { join } from 'node:path';
5
- import { l as lucaStateSchema } from '../shared/luca.CGOV-hrW.mjs';
5
+ import { l as lucaStateSchema } from '../shared/luca.DnzyY7Vh.mjs';
6
6
  import 'node:crypto';
7
7
  import 'node:module';
8
8
  import 'node:url';
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { r as lucaRepoCleanupApplyTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { r as lucaRepoCleanupApplyTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const cleanupApplyCommand = defineCommand({
21
23
  meta: {
@@ -1,5 +1,5 @@
1
1
  import { defineCommand } from 'citty';
2
- import '../shared/luca.CGOV-hrW.mjs';
2
+ import '../shared/luca.DnzyY7Vh.mjs';
3
3
  import 'node:fs';
4
4
  import 'node:fs/promises';
5
5
  import 'node:path';
@@ -7,13 +7,14 @@ import 'node:crypto';
7
7
  import 'node:module';
8
8
  import 'node:url';
9
9
  import 'node:child_process';
10
- import { a as analyzeRun, g as gatherRunArtifacts, r as renderPostmortemMarkdown, c as computePostmortemExitCode } from '../shared/luca.BSiiWgBd.mjs';
11
- import { l as listRuns } from '../shared/luca.juAH_s77.mjs';
10
+ import { a as analyzeRun, g as gatherRunArtifacts, r as renderPostmortemMarkdown, c as computePostmortemExitCode } from '../shared/luca.B4XKevaZ.mjs';
11
+ import { l as listRuns } from '../shared/luca.S_KvKqlx.mjs';
12
12
  import { l as logger } from '../shared/luca.dM-MKlNE.mjs';
13
13
  import 'zod';
14
14
  import 'node:os';
15
- import '../shared/luca.D5Rk3yXn.mjs';
16
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.D1iTA_aN.mjs';
16
+ import '../shared/luca.Bg_VHA2r.mjs';
17
+ import '../shared/luca.D-08LKzR.mjs';
17
18
  import 'pathe';
18
19
  import 'consola';
19
20
 
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { g as lucaRoadmapReadTool, h as lucaRoadmapCreateTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { g as lucaRoadmapReadTool, h as lucaRoadmapCreateTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const readCommand = defineCommand({
21
23
  meta: {
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import { join as join$1 } from 'pathe';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import { existsSync, readdirSync, statSync, readFileSync } from 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import { isAbsolute, resolve, join, extname } from 'node:path';
@@ -8,13 +8,14 @@ import 'node:crypto';
8
8
  import { createRequire } from 'node:module';
9
9
  import { pathToFileURL } from 'node:url';
10
10
  import 'node:child_process';
11
- import { a as analyzeRun, g as gatherRunArtifacts } from '../shared/luca.BSiiWgBd.mjs';
12
- import { l as listRuns } from '../shared/luca.juAH_s77.mjs';
11
+ import { a as analyzeRun, g as gatherRunArtifacts } from '../shared/luca.B4XKevaZ.mjs';
12
+ import { l as listRuns } from '../shared/luca.S_KvKqlx.mjs';
13
13
  import { l as logger } from '../shared/luca.dM-MKlNE.mjs';
14
14
  import 'zod';
15
15
  import 'node:os';
16
- import '../shared/luca.D5Rk3yXn.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
16
+ import '../shared/luca.D1iTA_aN.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.D-08LKzR.mjs';
18
19
  import 'consola';
19
20
 
20
21
  let tsModuleCache = void 0;
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import 'zod';
3
- import '../shared/luca.CGOV-hrW.mjs';
3
+ import '../shared/luca.DnzyY7Vh.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { l as lucaStateSetCurrentPhaseTool, a as lucaStateAdvanceTool, b as lucaStateReadTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import { l as lucaStateClaimOwnerTool } from '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { l as lucaStateSetCurrentPhaseTool, a as lucaStateAdvanceTool, b as lucaStateReadTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import { l as lucaStateClaimOwnerTool } from '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const readCommand = defineCommand({
21
23
  meta: {
@@ -1,7 +1,7 @@
1
1
  import { existsSync, lstatSync } from 'node:fs';
2
2
  import { rm, writeFile, readdir, rmdir } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
- import '../shared/luca.CGOV-hrW.mjs';
4
+ import '../shared/luca.DnzyY7Vh.mjs';
5
5
  import 'node:crypto';
6
6
  import 'node:module';
7
7
  import 'node:url';
@@ -1,5 +1,5 @@
1
1
  import { defineCommand } from 'citty';
2
- import { R as RunIdSchema, L as LUCA_DIR_ROOT, T as TelemetryRecordSchema } from '../shared/luca.CGOV-hrW.mjs';
2
+ import { R as RunIdSchema, L as LUCA_DIR_ROOT, T as TelemetryRecordSchema } from '../shared/luca.DnzyY7Vh.mjs';
3
3
  import { mkdirSync, appendFileSync } from 'node:fs';
4
4
  import 'node:fs/promises';
5
5
  import { join, dirname } from 'node:path';
@@ -1,4 +1,4 @@
1
- import { d as TodoPriority } from '../shared/luca.CGOV-hrW.mjs';
1
+ import { d as TodoPriority } from '../shared/luca.DnzyY7Vh.mjs';
2
2
  import 'node:fs';
3
3
  import 'node:fs/promises';
4
4
  import 'node:path';
@@ -8,14 +8,16 @@ import 'node:url';
8
8
  import 'node:child_process';
9
9
  import { defineCommand } from 'citty';
10
10
  import 'zod';
11
- import { k as lucaTodoUpdateTool, m as lucaTodoListTool, n as lucaTodoAddTool } from '../shared/luca.BYM-DeyF.mjs';
12
- import '../shared/luca.NNGS-NSE.mjs';
13
- import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DHbTnxmf.mjs';
11
+ import { k as lucaTodoUpdateTool, m as lucaTodoListTool, n as lucaTodoAddTool } from '../shared/luca.CZfqdBsl.mjs';
12
+ import '../shared/luca.92gxSuz7.mjs';
13
+ import { r as rejectUnknownFlags, b as readJsonPayload, a as runWriteHandler } from '../shared/luca.DBcPn3_9.mjs';
14
14
  import 'node:os';
15
- import '../shared/luca.DQSuoQwr.mjs';
16
- import '../shared/luca.juAH_s77.mjs';
17
- import '../shared/luca.CzglpVsy.mjs';
15
+ import '../shared/luca.OxvM40dI.mjs';
16
+ import '../shared/luca.S_KvKqlx.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
18
+ import '../shared/luca.BAqmbI4n.mjs';
18
19
  import '../shared/luca.CQ3g1xrD.mjs';
20
+ import '../shared/luca.D1iTA_aN.mjs';
19
21
 
20
22
  const addCommand = defineCommand({
21
23
  meta: {
@@ -1,5 +1,5 @@
1
1
  import { existsSync, mkdirSync } from 'node:fs';
2
- import '../shared/luca.CGOV-hrW.mjs';
2
+ import '../shared/luca.DnzyY7Vh.mjs';
3
3
  import 'node:fs/promises';
4
4
  import 'node:path';
5
5
  import { l as loadCurrentConfig } from '../shared/luca.CQ3g1xrD.mjs';
@@ -10,7 +10,7 @@ import 'node:child_process';
10
10
  import * as p from '@clack/prompts';
11
11
  import { defineCommand } from 'citty';
12
12
  import { join } from 'pathe';
13
- import { d as detectProjectContext, r as runVaultWizard, w as writeVaultConfig, b as writeApiKeyToEnv, e as ensureEnvInGitignore, v as verifyVaultConnection } from '../shared/luca.CvcFKGbj.mjs';
13
+ import { d as detectProjectContext, r as runVaultWizard, w as writeVaultConfig, b as writeApiKeyToEnv, e as ensureEnvInGitignore, v as verifyVaultConnection } from '../shared/luca.C466HI-y.mjs';
14
14
  import 'zod';
15
15
  import 'node:os';
16
16
  import '../shared/luca.BZc5veeE.mjs';
@@ -1,6 +1,6 @@
1
1
  import { defineCommand } from 'citty';
2
- import '../shared/luca.CGOV-hrW.mjs';
3
- import { l as loadCurrentState, r as resolveActiveSlug } from '../shared/luca.DQSuoQwr.mjs';
2
+ import '../shared/luca.DnzyY7Vh.mjs';
3
+ import { l as loadCurrentState, r as resolveActiveSlug } from '../shared/luca.OxvM40dI.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
6
6
  import 'node:path';
@@ -8,12 +8,13 @@ import 'node:crypto';
8
8
  import 'node:module';
9
9
  import 'node:url';
10
10
  import 'node:child_process';
11
- import { l as listPhaseSlugs, r as readVerificationResult, a as aggregateVerificationResults } from '../shared/luca.D5Rk3yXn.mjs';
11
+ import { r as readVerificationResult, a as aggregateVerificationResults } from '../shared/luca.D1iTA_aN.mjs';
12
+ import { l as listPhaseSlugs } from '../shared/luca.D-08LKzR.mjs';
12
13
  import { l as logger } from '../shared/luca.dM-MKlNE.mjs';
13
- import { r as rejectUnknownFlags } from '../shared/luca.DHbTnxmf.mjs';
14
+ import { r as rejectUnknownFlags } from '../shared/luca.DBcPn3_9.mjs';
14
15
  import 'zod';
15
16
  import 'node:os';
16
- import '../shared/luca.CzglpVsy.mjs';
17
+ import '../shared/luca.Bg_VHA2r.mjs';
17
18
  import 'pathe';
18
19
  import 'consola';
19
20