@rasensio/aidlc 1.23.0 → 1.24.1

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.
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `roadmap-sync-gh-missing` (report tier): the project has configured the roadmap→GitHub
3
+ * Issues projection, and `gh` is not installed here.
4
+ *
5
+ * **Why `report` and not `confirm`, specifically.** A `confirm`-tier migration applies
6
+ * unprompted under `--yes`, and CI is exactly the environment where `gh` is legitimately
7
+ * absent — so a confirm-tier remover would delete a working project's `roadmap.sync`
8
+ * section on the first unattended `aidlc doctor --yes`. The remedy here is a decision
9
+ * (install the tool, or drop the config), and doctor may not make it. Precedent:
10
+ * `compliance-pack-drift.ts` uses `report` for the two conditions whose only fix is a
11
+ * decision, and this is one of those. Nothing here writes anything, under any tier or flag.
12
+ *
13
+ * **Presence, not authentication.** `check` is documented in `../types.ts` as pure state
14
+ * inspection shared verbatim by dry-run and real runs. `gh auth status` can reach the
15
+ * network, so putting it on doctor's default path would make an offline run report a
16
+ * problem that is not there. `resolveGhOnPath` walks `PATH` and tests execute permission —
17
+ * no subprocess, no network. Authentication stays with sync's own preflight, which has the
18
+ * better error message for it.
19
+ *
20
+ * **Nothing here spawns anything at all**, which is a stronger claim than "does not run
21
+ * `gh`". The primary checkout comes from `ctx.gitCommonDir`, already resolved by
22
+ * `doctor/context.ts`, rather than from `roadmap/paths.ts`'s `primaryCheckout` — that
23
+ * helper shells out to `git rev-parse`, and reaching for it would have quietly made the
24
+ * no-subprocess claim false while every test still passed.
25
+ *
26
+ * **Why the default path and not behind a flag.** Because it never shells out, there is no
27
+ * "doctor shells out" precedent to gate; because it is `applicable: false` for any project
28
+ * without a `roadmap.sync` section, a project that never opts in pays nothing; and
29
+ * `aidlc doctor` has no `--all` flag, so hiding it would mean inventing machinery for a
30
+ * check that costs a handful of `stat` calls.
31
+ *
32
+ * Requirements: issue-tracker-in-init/AC-23 … issue-tracker-in-init/AC-30
33
+ */
34
+ import type { CheckResult, DoctorContext, Migration } from '../types.js';
35
+ /**
36
+ * The single source of pending-ness, with the resolved `gh` path supplied.
37
+ *
38
+ * Exported and parameterised so both branches are testable without touching `PATH`, and so
39
+ * nothing else can compute pending-ness — the rule `../types.ts` states, which is what
40
+ * keeps a dry run and a real run from disagreeing.
41
+ */
42
+ export declare function ghMissingCheck(ctx: DoctorContext, ghPath: string | null): CheckResult;
43
+ export declare const roadmapSyncGhMissing: Migration;
44
+ //# sourceMappingURL=roadmap-sync-gh-missing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roadmap-sync-gh-missing.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/roadmap-sync-gh-missing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAkBzE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CAgCrF;AAED,eAAO,MAAM,oBAAoB,EAAE,SAMlC,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * `roadmap-sync-gh-missing` (report tier): the project has configured the roadmap→GitHub
3
+ * Issues projection, and `gh` is not installed here.
4
+ *
5
+ * **Why `report` and not `confirm`, specifically.** A `confirm`-tier migration applies
6
+ * unprompted under `--yes`, and CI is exactly the environment where `gh` is legitimately
7
+ * absent — so a confirm-tier remover would delete a working project's `roadmap.sync`
8
+ * section on the first unattended `aidlc doctor --yes`. The remedy here is a decision
9
+ * (install the tool, or drop the config), and doctor may not make it. Precedent:
10
+ * `compliance-pack-drift.ts` uses `report` for the two conditions whose only fix is a
11
+ * decision, and this is one of those. Nothing here writes anything, under any tier or flag.
12
+ *
13
+ * **Presence, not authentication.** `check` is documented in `../types.ts` as pure state
14
+ * inspection shared verbatim by dry-run and real runs. `gh auth status` can reach the
15
+ * network, so putting it on doctor's default path would make an offline run report a
16
+ * problem that is not there. `resolveGhOnPath` walks `PATH` and tests execute permission —
17
+ * no subprocess, no network. Authentication stays with sync's own preflight, which has the
18
+ * better error message for it.
19
+ *
20
+ * **Nothing here spawns anything at all**, which is a stronger claim than "does not run
21
+ * `gh`". The primary checkout comes from `ctx.gitCommonDir`, already resolved by
22
+ * `doctor/context.ts`, rather than from `roadmap/paths.ts`'s `primaryCheckout` — that
23
+ * helper shells out to `git rev-parse`, and reaching for it would have quietly made the
24
+ * no-subprocess claim false while every test still passed.
25
+ *
26
+ * **Why the default path and not behind a flag.** Because it never shells out, there is no
27
+ * "doctor shells out" precedent to gate; because it is `applicable: false` for any project
28
+ * without a `roadmap.sync` section, a project that never opts in pays nothing; and
29
+ * `aidlc doctor` has no `--all` flag, so hiding it would mean inventing machinery for a
30
+ * check that costs a handful of `stat` calls.
31
+ *
32
+ * Requirements: issue-tracker-in-init/AC-23 … issue-tracker-in-init/AC-30
33
+ */
34
+ import { dirname } from 'node:path';
35
+ import { readSyncConfig, syncConfigPath } from '../../roadmap/sync/config.js';
36
+ import { resolveGhOnPath } from '../../roadmap/sync/gh.js';
37
+ /**
38
+ * The primary checkout, from facts doctor has already resolved.
39
+ *
40
+ * Deliberately NOT `roadmap/paths.ts`'s `primaryCheckout`, which spawns
41
+ * `git rev-parse --git-common-dir`. `doctor/context.ts` exists to "resolve git facts once
42
+ * so migrations never shell out for repo topology themselves", and this migration's whole
43
+ * claim is that it performs no subprocess — calling the spawning helper would have made
44
+ * that claim false while every test still passed.
45
+ *
46
+ * The derivation is the same one `primaryCheckout` performs: all worktrees share the
47
+ * primary checkout's `.git`, so its parent is the primary working tree.
48
+ */
49
+ function primaryRoot(ctx) {
50
+ return ctx.gitCommonDir === null ? ctx.projectRoot : dirname(ctx.gitCommonDir);
51
+ }
52
+ /**
53
+ * The single source of pending-ness, with the resolved `gh` path supplied.
54
+ *
55
+ * Exported and parameterised so both branches are testable without touching `PATH`, and so
56
+ * nothing else can compute pending-ness — the rule `../types.ts` states, which is what
57
+ * keeps a dry run and a real run from disagreeing.
58
+ */
59
+ export function ghMissingCheck(ctx, ghPath) {
60
+ // The section is read from the PRIMARY checkout, the same tree the items come from and
61
+ // the same tree `aidlc roadmap sync` reads it from. Reading a worktree's copy would let a
62
+ // feature branch change what doctor reports.
63
+ const root = primaryRoot(ctx);
64
+ const loaded = readSyncConfig(root);
65
+ if (loaded.kind === 'not-configured') {
66
+ return { applicable: false, reason: 'roadmap projection is not configured' };
67
+ }
68
+ if (loaded.kind === 'invalid') {
69
+ // Deliberately not pending. An invalid section is a different defect with a better
70
+ // message elsewhere — `aidlc roadmap sync` prints the validator's own error at the
71
+ // moment it matters — and reporting it here would give one condition two voices. The
72
+ // reason still names it, so the not-applicable line stays informative.
73
+ return {
74
+ applicable: false,
75
+ reason: `roadmap.sync is present but not valid, which \`aidlc roadmap sync\` reports: ${loaded.error}`,
76
+ };
77
+ }
78
+ if (ghPath !== null)
79
+ return { applicable: true, pending: false };
80
+ return {
81
+ applicable: true,
82
+ pending: true,
83
+ description: 'roadmap.sync is configured but the GitHub CLI (`gh`) is not on PATH here, so ' +
84
+ '`aidlc roadmap sync` cannot run. Two remedies, and doctor applies neither: ' +
85
+ 'install the GitHub CLI and run `gh auth login`, or delete the roadmap.sync section ' +
86
+ `from ${syncConfigPath(root)}. If this is CI and sync runs elsewhere, nothing is wrong.`,
87
+ };
88
+ }
89
+ export const roadmapSyncGhMissing = {
90
+ id: 'roadmap-sync-gh-missing',
91
+ tier: 'report',
92
+ check(ctx) {
93
+ return ghMissingCheck(ctx, resolveGhOnPath());
94
+ },
95
+ };
96
+ //# sourceMappingURL=roadmap-sync-gh-missing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roadmap-sync-gh-missing.js","sourceRoot":"","sources":["../../../src/doctor/migrations/roadmap-sync-gh-missing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D;;;;;;;;;;;GAWG;AACH,SAAS,WAAW,CAAC,GAAkB;IACrC,OAAO,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAkB,EAAE,MAAqB;IACtE,uFAAuF;IACvF,0FAA0F;IAC1F,6CAA6C;IAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACrC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,mFAAmF;QACnF,mFAAmF;QACnF,qFAAqF;QACrF,uEAAuE;QACvE,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,gFAAgF,MAAM,CAAC,KAAK,EAAE;SACvG,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEjE,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,IAAI;QACb,WAAW,EACT,+EAA+E;YAC/E,6EAA6E;YAC7E,qFAAqF;YACrF,QAAQ,cAAc,CAAC,IAAI,CAAC,4DAA4D;KAC3F,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAc;IAC7C,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,GAAG;QACP,OAAO,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;IAChD,CAAC;CACF,CAAC"}
@@ -50,6 +50,15 @@ export type SyncConfigResult = {
50
50
  * issue are not the same exposure even when both are technically public.
51
51
  */
52
52
  export declare const DEFAULT_STATUSES: readonly RoadmapStatus[];
53
+ /**
54
+ * Absolute path of a checkout's config file.
55
+ *
56
+ * Exported so a refusal can name the file it read. `notConfiguredMessage` used to say
57
+ * `.aidlc/config.yaml` and stop there, which in a worktree names a file that is not the
58
+ * one consulted — the section is read from the primary checkout. One reader lost an
59
+ * afternoon to that on 2026-09-07 (issue-tracker-in-init/AC-31, AC-32).
60
+ */
61
+ export declare function syncConfigPath(root: string): string;
53
62
  /**
54
63
  * Validate a repository coordinate. Shared by the config value and `--repo`, so the two
55
64
  * can never diverge.
@@ -77,6 +86,21 @@ export declare function validateLabel(raw: unknown): {
77
86
  ok: false;
78
87
  error: string;
79
88
  };
89
+ /**
90
+ * Validate the eligible-status list.
91
+ *
92
+ * Exported so the `aidlc init` wizard can check its own answer against the reader's rule
93
+ * rather than reimplementing it. The wizard must never write a section this function
94
+ * refuses — a setup command that produces a config its own reader rejects is worse than
95
+ * no setup command (issue-tracker-in-init/AC-9).
96
+ */
97
+ export declare function validateStatuses(raw: unknown): {
98
+ ok: true;
99
+ statuses: RoadmapStatus[];
100
+ } | {
101
+ ok: false;
102
+ error: string;
103
+ };
80
104
  /**
81
105
  * Read and validate the `roadmap.sync` section from a checkout's config.
82
106
  *
@@ -90,6 +114,18 @@ export declare function readSyncConfig(primaryCheckoutRoot: string): SyncConfigR
90
114
  * which is why it goes through the same validator rather than a looser one.
91
115
  */
92
116
  export declare function withRepoOverride(config: SyncConfig, repo: string | undefined): SyncConfigResult;
93
- /** The message for a project that has not opted in. */
94
- export declare function notConfiguredMessage(): string;
117
+ /**
118
+ * The message for a project that has not opted in.
119
+ *
120
+ * Takes the path it read rather than deriving it, because the caller already resolved the
121
+ * primary checkout and deriving it twice is how the two come to disagree. Naming the
122
+ * absolute path is the whole point: on 2026-09-07 this refusal was read as a possible bug
123
+ * precisely because `.aidlc/config.yaml` in a worktree is not the file consulted, and the
124
+ * reader had no way to tell whether they were meant to write the section or whether
125
+ * something had failed to create it. `aidlc init` is named because it now offers to write
126
+ * it (issue-tracker-in-init/AC-31 … AC-33).
127
+ *
128
+ * @param configPath - The absolute path of the file that was read.
129
+ */
130
+ export declare function notConfiguredMessage(configPath: string): string;
95
131
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/roadmap/sync/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnE,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAAuC,CAAC;AAkC7F;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBpH;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA0BtG;AA+BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,mBAAmB,EAAE,MAAM,GAAG,gBAAgB,CAiD5E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAK/F;AAED,uDAAuD;AACvD,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/roadmap/sync/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnE,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAAuC,CAAC;AAQ7F;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAuBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBpH;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA0BtG;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA0BrH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,mBAAmB,EAAE,MAAM,GAAG,gBAAgB,CAiD5E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAK/F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAgB/D"}
@@ -41,13 +41,20 @@ export const DEFAULT_STATUSES = ['backlog', 'in-progress', 'done'];
41
41
  const REPO_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/;
42
42
  /** Three slash-separated parts — `gh`'s `[HOST/]OWNER/REPO`, which v1 does not support. */
43
43
  const GHE_REPO_RE = /^[^/]+\/[^/]+\/[^/]+$/;
44
- /** Absolute path of a checkout's config file. */
45
- function configPath(root) {
44
+ /**
45
+ * Absolute path of a checkout's config file.
46
+ *
47
+ * Exported so a refusal can name the file it read. `notConfiguredMessage` used to say
48
+ * `.aidlc/config.yaml` and stop there, which in a worktree names a file that is not the
49
+ * one consulted — the section is read from the primary checkout. One reader lost an
50
+ * afternoon to that on 2026-09-07 (issue-tracker-in-init/AC-31, AC-32).
51
+ */
52
+ export function syncConfigPath(root) {
46
53
  return join(root, '.aidlc', 'config.yaml');
47
54
  }
48
55
  /** The whole config document, or `{}` when absent or unusable. */
49
56
  function readDocument(root) {
50
- const path = configPath(root);
57
+ const path = syncConfigPath(root);
51
58
  if (!existsSync(path))
52
59
  return {};
53
60
  try {
@@ -128,8 +135,15 @@ export function validateLabel(raw) {
128
135
  }
129
136
  return { ok: true, label: raw };
130
137
  }
131
- /** Validate the eligible-status list. */
132
- function validateStatuses(raw) {
138
+ /**
139
+ * Validate the eligible-status list.
140
+ *
141
+ * Exported so the `aidlc init` wizard can check its own answer against the reader's rule
142
+ * rather than reimplementing it. The wizard must never write a section this function
143
+ * refuses — a setup command that produces a config its own reader rejects is worse than
144
+ * no setup command (issue-tracker-in-init/AC-9).
145
+ */
146
+ export function validateStatuses(raw) {
133
147
  if (!Array.isArray(raw)) {
134
148
  return {
135
149
  ok: false,
@@ -222,15 +236,32 @@ export function withRepoOverride(config, repo) {
222
236
  return { kind: 'invalid', error: checked.error };
223
237
  return { kind: 'ok', config: { ...config, repo: checked.repo } };
224
238
  }
225
- /** The message for a project that has not opted in. */
226
- export function notConfiguredMessage() {
227
- return ('roadmap projection is not configured. Add a `roadmap.sync` section to ' +
228
- '.aidlc/config.yaml:\n\n' +
239
+ /**
240
+ * The message for a project that has not opted in.
241
+ *
242
+ * Takes the path it read rather than deriving it, because the caller already resolved the
243
+ * primary checkout and deriving it twice is how the two come to disagree. Naming the
244
+ * absolute path is the whole point: on 2026-09-07 this refusal was read as a possible bug
245
+ * precisely because `.aidlc/config.yaml` in a worktree is not the file consulted, and the
246
+ * reader had no way to tell whether they were meant to write the section or whether
247
+ * something had failed to create it. `aidlc init` is named because it now offers to write
248
+ * it (issue-tracker-in-init/AC-31 … AC-33).
249
+ *
250
+ * @param configPath - The absolute path of the file that was read.
251
+ */
252
+ export function notConfiguredMessage(configPath) {
253
+ return ('roadmap projection is not configured — there is no `roadmap.sync` section. This is ' +
254
+ 'not an error: the section is opt-in and nothing writes it unless you ask.\n\n' +
255
+ `Read from: ${configPath}\n` +
256
+ ' (the PRIMARY checkout, always — items and eligibility are one fact, so a ' +
257
+ 'worktree copy is never consulted)\n\n' +
258
+ 'Two ways to configure it. Re-run `aidlc init` and answer yes to the roadmap ' +
259
+ 'projection question, or add the section by hand:\n\n' +
229
260
  ' roadmap:\n' +
230
261
  ' sync:\n' +
231
262
  ' provider: github\n' +
232
263
  ` statuses: [${DEFAULT_STATUSES.join(', ')}]\n\n` +
233
- `By default ${DEFAULT_STATUSES.join(', ')} are projected; inbox and hold are not, ` +
264
+ `A section that omits \`statuses\` projects ${DEFAULT_STATUSES.join(', ')}; inbox and hold are not, ` +
234
265
  'because an untriaged idea and a parked one are not decisions anybody has published.');
235
266
  }
236
267
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/roadmap/sync/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/roadmap/sync/config.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,13 @@
14
14
  * Nothing here reads `GH_TOKEN` or `GITHUB_TOKEN`. `gh` owns the credential; this
15
15
  * module owns the argv.
16
16
  *
17
- * Requirements: roadmap-issue-projection/AC-30, roadmap-issue-projection/AC-50
17
+ * One function here is **not** a subprocess and is the exception that proves the rule:
18
+ * {@link resolveGhOnPath} answers "is `gh` installed?" with a filesystem lookup, because
19
+ * `aidlc doctor` needs that answer on its default path and may not spawn to get it. It
20
+ * lives here rather than in a second file so all `gh` knowledge stays in one place.
21
+ *
22
+ * Requirements: roadmap-issue-projection/AC-30, roadmap-issue-projection/AC-50,
23
+ * issue-tracker-in-init/AC-29
18
24
  *
19
25
  * @module
20
26
  */
@@ -57,6 +63,25 @@ export declare function ghPreflight(gh: GhRunner): {
57
63
  ok: false;
58
64
  error: string;
59
65
  };
66
+ /**
67
+ * Where `gh` resolves on `PATH`, or null.
68
+ *
69
+ * **Presence only, and deliberately not a `run()` call.** This is the one probe that runs
70
+ * on `aidlc doctor`'s default path, and `check` is documented there as pure state
71
+ * inspection shared verbatim by dry-run and real runs (`doctor/types.ts:1-10`).
72
+ * `gh auth status` can reach the network, so an offline run would report a problem that is
73
+ * not there; even `gh --version` spawns a process on every doctor run in every project that
74
+ * opted in. A `PATH` walk with an execute-permission test is a handful of `stat` calls,
75
+ * offline and deterministic. Authentication stays with {@link ghPreflight}, which has the
76
+ * better message for it.
77
+ *
78
+ * `env` is a parameter, not a read of `process.env`, so both branches are testable without
79
+ * mutating the ambient environment (issue-tracker-in-init/AC-29, AC-30).
80
+ *
81
+ * `PATH` entries are untrusted path fragments: they are joined and permission-tested,
82
+ * never interpolated into a command.
83
+ */
84
+ export declare function resolveGhOnPath(env?: NodeJS.ProcessEnv): string | null;
60
85
  /** First non-empty line of a `gh` message, for one-line error reporting. */
61
86
  export declare function firstLine(text: string): string;
62
87
  /** `['--repo', repo]` when a coordinate was resolved, else `[]`. */
@@ -1 +1 @@
1
- {"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../../src/roadmap/sync/gh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,MAAM,QAAQ,GAChB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC;CACxC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAAoB,CAAC;AAE/C,kEAAkE;AAClE,wBAAgB,YAAY,IAAI,QAAQ,CAkBvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASrF;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,MAAM,EAAE,CAE/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAWhE"}
1
+ {"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../../src/roadmap/sync/gh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,MAAM,QAAQ,GAChB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC;CACxC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAAoB,CAAC;AAE/C,kEAAkE;AAClE,wBAAgB,YAAY,IAAI,QAAQ,CAkBvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASrF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CA0BnF;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,MAAM,EAAE,CAE/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAWhE"}
@@ -14,11 +14,19 @@
14
14
  * Nothing here reads `GH_TOKEN` or `GITHUB_TOKEN`. `gh` owns the credential; this
15
15
  * module owns the argv.
16
16
  *
17
- * Requirements: roadmap-issue-projection/AC-30, roadmap-issue-projection/AC-50
17
+ * One function here is **not** a subprocess and is the exception that proves the rule:
18
+ * {@link resolveGhOnPath} answers "is `gh` installed?" with a filesystem lookup, because
19
+ * `aidlc doctor` needs that answer on its default path and may not spawn to get it. It
20
+ * lives here rather than in a second file so all `gh` knowledge stays in one place.
21
+ *
22
+ * Requirements: roadmap-issue-projection/AC-30, roadmap-issue-projection/AC-50,
23
+ * issue-tracker-in-init/AC-29
18
24
  *
19
25
  * @module
20
26
  */
21
27
  import { execFileSync } from 'node:child_process';
28
+ import { accessSync, constants } from 'node:fs';
29
+ import { delimiter, join } from 'node:path';
22
30
  /**
23
31
  * 256 MiB.
24
32
  *
@@ -70,6 +78,51 @@ export function ghPreflight(gh) {
70
78
  `\`gh auth login\`, then try again.\n gh said: ${firstLine(result.error)}`,
71
79
  };
72
80
  }
81
+ /**
82
+ * Where `gh` resolves on `PATH`, or null.
83
+ *
84
+ * **Presence only, and deliberately not a `run()` call.** This is the one probe that runs
85
+ * on `aidlc doctor`'s default path, and `check` is documented there as pure state
86
+ * inspection shared verbatim by dry-run and real runs (`doctor/types.ts:1-10`).
87
+ * `gh auth status` can reach the network, so an offline run would report a problem that is
88
+ * not there; even `gh --version` spawns a process on every doctor run in every project that
89
+ * opted in. A `PATH` walk with an execute-permission test is a handful of `stat` calls,
90
+ * offline and deterministic. Authentication stays with {@link ghPreflight}, which has the
91
+ * better message for it.
92
+ *
93
+ * `env` is a parameter, not a read of `process.env`, so both branches are testable without
94
+ * mutating the ambient environment (issue-tracker-in-init/AC-29, AC-30).
95
+ *
96
+ * `PATH` entries are untrusted path fragments: they are joined and permission-tested,
97
+ * never interpolated into a command.
98
+ */
99
+ export function resolveGhOnPath(env = process.env) {
100
+ // Windows spells the variable `Path`; every other platform spells it `PATH`. Node
101
+ // normalizes `process.env.PATH` on win32 but a fabricated environment need not.
102
+ const raw = env.PATH ?? env.Path ?? '';
103
+ if (raw.length === 0)
104
+ return null;
105
+ // On win32 a bare `gh` is not executable — the extension carries that, and `PATHEXT`
106
+ // names which ones count. Elsewhere the empty suffix is the only candidate.
107
+ const suffixes = process.platform === 'win32'
108
+ ? (env.PATHEXT ?? '.COM;.EXE;.BAT;.CMD').split(';').filter((e) => e.length > 0)
109
+ : [''];
110
+ for (const dir of raw.split(delimiter)) {
111
+ if (dir.length === 0)
112
+ continue;
113
+ for (const suffix of suffixes) {
114
+ try {
115
+ const candidate = join(dir, `gh${suffix}`);
116
+ accessSync(candidate, constants.X_OK);
117
+ return candidate;
118
+ }
119
+ catch {
120
+ // Absent, or not executable by us. Keep looking — a later PATH entry may have it.
121
+ }
122
+ }
123
+ }
124
+ return null;
125
+ }
73
126
  /** First non-empty line of a `gh` message, for one-line error reporting. */
74
127
  export function firstLine(text) {
75
128
  for (const line of text.split('\n')) {
@@ -1 +1 @@
1
- {"version":3,"file":"gh.js","sourceRoot":"","sources":["../../../src/roadmap/sync/gh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gh.js","sourceRoot":"","sources":["../../../src/roadmap/sync/gh.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,20 @@ export interface SetupAnswers {
32
32
  * question silently clear a project's pack.
33
33
  */
34
34
  compliancePack?: string | null;
35
+ /**
36
+ * Statuses the wizard chose for `roadmap.sync`, or `null` for "do not project".
37
+ *
38
+ * Three-valued for the same reason `compliancePack` is, and the three values are not
39
+ * interchangeable. `undefined` is "the wizard did not ask" — `--non-interactive`,
40
+ * `--platform`, `--dry-run`, no TTY — and must leave an existing section exactly as it
41
+ * was. `null` is "the user was asked and said no", which removes the section. A list
42
+ * writes it.
43
+ *
44
+ * Typed `string[]`, not `RoadmapStatus[]`: this module is the pure merge layer and takes
45
+ * no dependency on the roadmap module. The wizard validates against the config reader's
46
+ * own `validateStatuses` before the answer gets here.
47
+ */
48
+ roadmapSyncStatuses?: string[] | null;
35
49
  }
36
50
  /** Configuration produced/consumed by the setup wizard. */
37
51
  export interface SetupConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"setup-compute.d.ts","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuFD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,OAAO,EAAE,YAAY,GACpB,WAAW,CAuBb"}
1
+ {"version":3,"file":"setup-compute.d.ts","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA2ID,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,OAAO,EAAE,YAAY,GACpB,WAAW,CA4Bb"}
@@ -82,6 +82,49 @@ function complianceSection(base, answers) {
82
82
  },
83
83
  };
84
84
  }
85
+ /**
86
+ * The `roadmap` key for a merged config, or nothing.
87
+ *
88
+ * Same three cases as {@link complianceSection}, one level deeper — the wizard owns
89
+ * `roadmap.sync`, not `roadmap`:
90
+ *
91
+ * answer undefined the wizard did not ask — keep whatever is there
92
+ * answer null the user chose no — drop `roadmap.sync`, keep its siblings
93
+ * answer a list write `provider` + `statuses`, keep `repo`, `label` and unknowns
94
+ *
95
+ * Two properties are deliberate and both are about not destroying a working setup. Writing
96
+ * overwrites only `provider` and `statuses`, because `repo` and `label` are hand-written
97
+ * values the wizard never asks about and could not restore. And removing drops `sync`
98
+ * alone — a sibling `roadmap.*` subsection survives, and an emptied `roadmap` mapping
99
+ * becomes `undefined` so it disappears from the file rather than serializing as
100
+ * `roadmap: {}` (issue-tracker-in-init/AC-13, AC-14).
101
+ */
102
+ function roadmapSection(base, answers) {
103
+ if (answers.roadmapSyncStatuses === undefined) {
104
+ return 'roadmap' in base ? { roadmap: base.roadmap } : {};
105
+ }
106
+ const existing = typeof base.roadmap === 'object' && base.roadmap !== null && !Array.isArray(base.roadmap)
107
+ ? base.roadmap
108
+ : {};
109
+ // Everything under `roadmap` except `sync`, which is the only key this owns.
110
+ const { sync: existingSync, ...siblings } = existing;
111
+ if (answers.roadmapSyncStatuses === null) {
112
+ return Object.keys(siblings).length > 0 ? { roadmap: siblings } : { roadmap: undefined };
113
+ }
114
+ const syncBase = typeof existingSync === 'object' && existingSync !== null && !Array.isArray(existingSync)
115
+ ? existingSync
116
+ : {};
117
+ return {
118
+ roadmap: {
119
+ ...siblings,
120
+ sync: {
121
+ ...syncBase,
122
+ provider: 'github',
123
+ statuses: [...answers.roadmapSyncStatuses],
124
+ },
125
+ },
126
+ };
127
+ }
85
128
  export function computeSetup(existing, answers) {
86
129
  const base = existing ?? DEFAULT_CONFIG;
87
130
  return {
@@ -101,6 +144,11 @@ export function computeSetup(existing, answers) {
101
144
  // never remove a pack. The answer REPLACES rather than unions — unioning a
102
145
  // selection would make "none" unexpressible.
103
146
  ...complianceSection(base, answers),
147
+ // `roadmap` is owned for the same reason, and for one more: without ownership the
148
+ // spread above would preserve an existing section and answering "no" could never
149
+ // remove it — which would make the wizard's "no" a lie in the only case where the
150
+ // user has something to say.
151
+ ...roadmapSection(base, answers),
104
152
  stalled_threshold_days: base.stalled_threshold_days,
105
153
  claim_timeout_minutes: base.claim_timeout_minutes,
106
154
  };
@@ -1 +1 @@
1
- {"version":3,"file":"setup-compute.js","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-compute.js","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmEH,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,YAAY;KACvB;IACD,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;IACX,sBAAsB,EAAE,CAAC;IACzB,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;GAEG;AACH,SAAS,WAAW,CAAC,CAAW,EAAE,CAAW;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CACxB,IAAiB,EACjB,OAAqB;IAErB,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;QAC7D,CAAC,CAAE,IAAI,CAAC,UAAsC;QAC9C,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,OAAO;QACL,UAAU,EAAE;YACV,OAAO,EAAE,QAAQ,CAAC,OAAO,KAAK,IAAI;YAClC,gFAAgF;YAChF,0DAA0D;YAC1D,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAqB,CAAC,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC;gBAC5E,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAC/C;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,cAAc,CACrB,IAAiB,EACjB,OAAqB;IAErB,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvF,CAAC,CAAE,IAAI,CAAC,OAAmC;QAC3C,CAAC,CAAC,EAAE,CAAC;IACT,6EAA6E;IAC7E,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAErD,IAAI,OAAO,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QACvF,CAAC,CAAE,YAAwC;QAC3C,CAAC,CAAC,EAAE,CAAC;IACT,OAAO;QACL,OAAO,EAAE;YACP,GAAG,QAAQ;YACX,IAAI,EAAE;gBACJ,GAAG,QAAQ;gBACX,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;aAC3C;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAA4B,EAC5B,OAAqB;IAErB,MAAM,IAAI,GAAG,QAAQ,IAAI,cAAc,CAAC;IAExC,OAAO;QACL,qEAAqE;QACrE,gEAAgE;QAChE,GAAG,IAAI;QACP,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE;YACR,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC3C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ;SACrD;QACD,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/D,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACzD,6EAA6E;QAC7E,4EAA4E;QAC5E,6EAA6E;QAC7E,2EAA2E;QAC3E,6CAA6C;QAC7C,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC;QACnC,kFAAkF;QAClF,iFAAiF;QACjF,kFAAkF;QAClF,6BAA6B;QAC7B,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;QAChC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;QACnD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;KAClD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rasensio/aidlc",
3
- "version": "1.23.0",
3
+ "version": "1.24.1",
4
4
  "description": "AI Development Lifecycle Framework — structured lifecycle guidance for AI coding agents across platforms",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
@@ -24,7 +24,7 @@
24
24
  "commander": "15.0.0",
25
25
  "picomatch": "4.0.5",
26
26
  "yaml": "2.9.0",
27
- "@rasensio/aidlc-content": "1.23.0"
27
+ "@rasensio/aidlc-content": "1.24.1"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/node": "22.15.32",