@rasensio/aidlc 1.23.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/init.d.ts +78 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +234 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/roadmap.d.ts.map +1 -1
- package/dist/commands/roadmap.js +3 -3
- package/dist/commands/roadmap.js.map +1 -1
- package/dist/core/prompt.d.ts +8 -0
- package/dist/core/prompt.d.ts.map +1 -1
- package/dist/core/prompt.js +1 -0
- package/dist/core/prompt.js.map +1 -1
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +5 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/doctor/migrations/roadmap-sync-gh-missing.d.ts +44 -0
- package/dist/doctor/migrations/roadmap-sync-gh-missing.d.ts.map +1 -0
- package/dist/doctor/migrations/roadmap-sync-gh-missing.js +96 -0
- package/dist/doctor/migrations/roadmap-sync-gh-missing.js.map +1 -0
- package/dist/roadmap/sync/config.d.ts +38 -2
- package/dist/roadmap/sync/config.d.ts.map +1 -1
- package/dist/roadmap/sync/config.js +41 -10
- package/dist/roadmap/sync/config.js.map +1 -1
- package/dist/roadmap/sync/gh.d.ts +26 -1
- package/dist/roadmap/sync/gh.d.ts.map +1 -1
- package/dist/roadmap/sync/gh.js +54 -1
- package/dist/roadmap/sync/gh.js.map +1 -1
- package/dist/setup/setup-compute.d.ts +14 -0
- package/dist/setup/setup-compute.d.ts.map +1 -1
- package/dist/setup/setup-compute.js +48 -0
- package/dist/setup/setup-compute.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
-
/**
|
|
94
|
-
|
|
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;
|
|
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
|
-
/**
|
|
45
|
-
|
|
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 =
|
|
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
|
-
/**
|
|
132
|
-
|
|
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
|
-
/**
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
`
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAgBxE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6B,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAE7F,yDAAyD;AACzD,MAAM,OAAO,GAAG,0DAA0D,CAAC;AAE3E,2FAA2F;AAC3F,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C
|
|
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
|
-
*
|
|
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
|
|
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"}
|
package/dist/roadmap/sync/gh.js
CHANGED
|
@@ -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
|
-
*
|
|
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":"AAAA
|
|
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;
|
|
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":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"setup-compute.js","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rasensio/aidlc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.24.0",
|
|
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.
|
|
27
|
+
"@rasensio/aidlc-content": "1.24.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "22.15.32",
|