@rasensio/aidlc 1.21.0 → 1.23.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/roadmap.d.ts.map +1 -1
- package/dist/commands/roadmap.js +19 -1
- package/dist/commands/roadmap.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +31 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/concurrency/common-dir.d.ts +13 -0
- package/dist/concurrency/common-dir.d.ts.map +1 -1
- package/dist/concurrency/common-dir.js +17 -1
- package/dist/concurrency/common-dir.js.map +1 -1
- package/dist/concurrency/detect.d.ts +28 -1
- package/dist/concurrency/detect.d.ts.map +1 -1
- package/dist/concurrency/detect.js +69 -5
- package/dist/concurrency/detect.js.map +1 -1
- package/dist/concurrency/types.d.ts +20 -0
- package/dist/concurrency/types.d.ts.map +1 -1
- package/dist/events/event-bus.d.ts +2 -0
- package/dist/events/event-bus.d.ts.map +1 -1
- package/dist/events/event-bus.js +76 -9
- package/dist/events/event-bus.js.map +1 -1
- package/dist/roadmap/paths.d.ts +99 -3
- package/dist/roadmap/paths.d.ts.map +1 -1
- package/dist/roadmap/paths.js +144 -17
- package/dist/roadmap/paths.js.map +1 -1
- package/dist/roadmap/sync/body.d.ts +109 -23
- package/dist/roadmap/sync/body.d.ts.map +1 -1
- package/dist/roadmap/sync/body.js +260 -23
- package/dist/roadmap/sync/body.js.map +1 -1
- package/dist/roadmap/sync/collect.d.ts +9 -0
- package/dist/roadmap/sync/collect.d.ts.map +1 -1
- package/dist/roadmap/sync/collect.js +48 -3
- package/dist/roadmap/sync/collect.js.map +1 -1
- package/dist/roadmap/sync/execute.d.ts.map +1 -1
- package/dist/roadmap/sync/execute.js +12 -2
- package/dist/roadmap/sync/execute.js.map +1 -1
- package/dist/roadmap/sync/gh.d.ts +10 -0
- package/dist/roadmap/sync/gh.d.ts.map +1 -1
- package/dist/roadmap/sync/gh.js +24 -0
- package/dist/roadmap/sync/gh.js.map +1 -1
- package/dist/roadmap/sync/markdown.d.ts +79 -0
- package/dist/roadmap/sync/markdown.d.ts.map +1 -0
- package/dist/roadmap/sync/markdown.js +165 -0
- package/dist/roadmap/sync/markdown.js.map +1 -0
- package/dist/roadmap/sync/marker.d.ts +10 -1
- package/dist/roadmap/sync/marker.d.ts.map +1 -1
- package/dist/roadmap/sync/marker.js +16 -1
- package/dist/roadmap/sync/marker.js.map +1 -1
- package/dist/roadmap/sync/plan.d.ts +7 -0
- package/dist/roadmap/sync/plan.d.ts.map +1 -1
- package/dist/roadmap/sync/plan.js +22 -4
- package/dist/roadmap/sync/plan.js.map +1 -1
- package/dist/roadmap/sync/render.d.ts.map +1 -1
- package/dist/roadmap/sync/render.js +2 -0
- package/dist/roadmap/sync/render.js.map +1 -1
- package/dist/roadmap/sync/sanitize.d.ts +56 -0
- package/dist/roadmap/sync/sanitize.d.ts.map +1 -0
- package/dist/roadmap/sync/sanitize.js +140 -0
- package/dist/roadmap/sync/sanitize.js.map +1 -0
- package/dist/roadmap/sync/types.d.ts +30 -2
- package/dist/roadmap/sync/types.d.ts.map +1 -1
- package/dist/roadmap/sync/types.js +9 -2
- package/dist/roadmap/sync/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Make one item's prose safe to publish, and make its references clickable.
|
|
3
|
+
*
|
|
4
|
+
* The body used to carry no item prose at all, and the reason was three real hazards. Two
|
|
5
|
+
* of them are properties of GitHub's renderer and one is a property of this feature's own
|
|
6
|
+
* marker scanner:
|
|
7
|
+
*
|
|
8
|
+
* - **Marker injection.** The item↔issue link is an HTML comment. An item that quotes one
|
|
9
|
+
* would stamp a second marker onto a different issue, and `indexByMarker` then refuses
|
|
10
|
+
* the whole run as ambiguous — or, before that guard existed, retitled the wrong issue.
|
|
11
|
+
* - **Notification side effects.** `@name` and `#123` notify people and cross-link issues
|
|
12
|
+
* the instant they are published. A sync is not a reason for somebody's inbox to move.
|
|
13
|
+
* - **Field limits.** GitHub caps a body at 65,536 characters, so the prose needs a budget
|
|
14
|
+
* (that half lives in `body.ts`).
|
|
15
|
+
*
|
|
16
|
+
* The rejected alternative was to publish nothing and make the reader follow a link, which
|
|
17
|
+
* is what shipped in v1.21.0 and what this instance exists to undo: a body carrying no
|
|
18
|
+
* item-specific words is a redirect, and thirty of them on a board are thirty copies of one
|
|
19
|
+
* paragraph.
|
|
20
|
+
*
|
|
21
|
+
* **Everything here is code-aware, and that is the whole design.** Measured over this
|
|
22
|
+
* project's 76 items on 2026-09-07, 40 of the 41 hazard spans are inside a fence or an
|
|
23
|
+
* inline code span — `@clack/prompts`, `actions/checkout@v4`, colour hexes like `#0891b2`
|
|
24
|
+
* — and exactly one is in prose. A rule that ignored code would corrupt forty spans in
|
|
25
|
+
* order to defuse one. See `markdown.ts`.
|
|
26
|
+
*
|
|
27
|
+
* Requirements: richer-issue-bodies/AC-9, richer-issue-bodies/AC-10,
|
|
28
|
+
* richer-issue-bodies/AC-11, richer-issue-bodies/AC-12, richer-issue-bodies/AC-29
|
|
29
|
+
*
|
|
30
|
+
* @module
|
|
31
|
+
*/
|
|
32
|
+
import { codeMask, inlineCodeSpans, mapProse } from './markdown.js';
|
|
33
|
+
/** An item id, as the roadmap skill mints them. */
|
|
34
|
+
const ITEM_ID_RE = /item-\d{8}-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g;
|
|
35
|
+
/**
|
|
36
|
+
* An HTML comment, terminated or not.
|
|
37
|
+
*
|
|
38
|
+
* The unterminated alternative matters: GitHub's renderer swallows everything after a bare
|
|
39
|
+
* `<!--` to the end of the document, so leaving one in would blank the rest of the body.
|
|
40
|
+
* Dropping it is both safer and closer to what a reader would have seen anyway.
|
|
41
|
+
*/
|
|
42
|
+
const HTML_COMMENT_RE = /<!--[\s\S]*?-->|<!--[\s\S]*$/g;
|
|
43
|
+
/** A mention GitHub would linkify. Requires a letter or digit after the `@`. */
|
|
44
|
+
const MENTION_RE = /@[A-Za-z0-9][-A-Za-z0-9]*/g;
|
|
45
|
+
/** An issue or pull-request cross-reference GitHub would link and notify. */
|
|
46
|
+
const ISSUE_REF_RE = /#[0-9]+/g;
|
|
47
|
+
/**
|
|
48
|
+
* Sanitize and enrich an item body for publication.
|
|
49
|
+
*
|
|
50
|
+
* Four rules, and the **order is load-bearing**, because two of them insert text a later
|
|
51
|
+
* rule must not re-examine:
|
|
52
|
+
*
|
|
53
|
+
* 1. Item references become links. This runs first because it is the only rule that
|
|
54
|
+
* deliberately rewrites a code span, and because the link it emits contains no `@`, `#`
|
|
55
|
+
* or `<!--` for rules 2–4 to find.
|
|
56
|
+
* 2. Prose HTML comments are removed — the marker-injection defence, and lossless, since a
|
|
57
|
+
* comment renders as nothing.
|
|
58
|
+
* 3. Prose mentions are wrapped in backticks.
|
|
59
|
+
* 4. Prose issue references are wrapped in backticks.
|
|
60
|
+
*
|
|
61
|
+
* Rules 2–4 run through `mapProse`, so code is untouched by construction rather than by a
|
|
62
|
+
* filter that could be got wrong.
|
|
63
|
+
*/
|
|
64
|
+
export function sanitizeItemBody(body, ctx) {
|
|
65
|
+
const linked = linkItemReferences(body, ctx);
|
|
66
|
+
return mapProse(linked, defuseProse);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Apply rules 2–4 to one prose run.
|
|
70
|
+
*
|
|
71
|
+
* Comments go first: a marker *is* a comment, so removing comments is what closes the
|
|
72
|
+
* injection hazard, and doing it before the backtick rules means a `@name` inside a
|
|
73
|
+
* comment is deleted rather than wrapped.
|
|
74
|
+
*/
|
|
75
|
+
function defuseProse(prose) {
|
|
76
|
+
return prose
|
|
77
|
+
.replace(HTML_COMMENT_RE, '')
|
|
78
|
+
.replace(MENTION_RE, (m) => `\`${m}\``)
|
|
79
|
+
.replace(ISSUE_REF_RE, (m) => `\`${m}\``);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Turn item references into links, in code spans and in prose alike.
|
|
83
|
+
*
|
|
84
|
+
* All 32 references in the real corpus are inline code spans whose **entire** content is
|
|
85
|
+
* the id (`` `item-20260902-review-gate-vs-tasks-review` ``) — measured, and the reason
|
|
86
|
+
* the first draft of this rule was retired by Amendment 1: a prose-only rule would never
|
|
87
|
+
* have fired once.
|
|
88
|
+
*
|
|
89
|
+
* The rewrite is deliberately narrow. Only a span whose whole content is a known id is
|
|
90
|
+
* touched, and the replacement re-wraps the same content in the same number of backticks
|
|
91
|
+
* inside a link, so a multi-backtick span stays valid. An id with no entry in `itemPaths`
|
|
92
|
+
* is left byte-identical, because an unresolvable link is worse than no link.
|
|
93
|
+
*/
|
|
94
|
+
function linkItemReferences(body, ctx) {
|
|
95
|
+
const { itemPaths, fileUrl } = ctx;
|
|
96
|
+
if (fileUrl === null || itemPaths.size === 0)
|
|
97
|
+
return body;
|
|
98
|
+
const edits = [];
|
|
99
|
+
// Code spans whose entire content is a known id.
|
|
100
|
+
const spans = inlineCodeSpans(body);
|
|
101
|
+
for (const span of spans) {
|
|
102
|
+
const relPath = itemPaths.get(span.content);
|
|
103
|
+
if (relPath === undefined)
|
|
104
|
+
continue;
|
|
105
|
+
const ticks = '`'.repeat(span.ticks);
|
|
106
|
+
edits.push({
|
|
107
|
+
start: span.start,
|
|
108
|
+
end: span.end,
|
|
109
|
+
text: `[${ticks}${span.content}${ticks}](${fileUrl(relPath)})`,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Bare ids in prose. The mask — not `spans` — decides what counts as prose here:
|
|
113
|
+
// `inlineCodeSpans` deliberately omits spans inside fenced blocks, so testing against it
|
|
114
|
+
// alone would rewrite an id sitting in a code sample and corrupt the block.
|
|
115
|
+
const mask = codeMask(body);
|
|
116
|
+
ITEM_ID_RE.lastIndex = 0;
|
|
117
|
+
let match;
|
|
118
|
+
while ((match = ITEM_ID_RE.exec(body)) !== null) {
|
|
119
|
+
if (mask[match.index] === 1)
|
|
120
|
+
continue;
|
|
121
|
+
const relPath = itemPaths.get(match[0]);
|
|
122
|
+
if (relPath === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
edits.push({
|
|
125
|
+
start: match.index,
|
|
126
|
+
end: match.index + match[0].length,
|
|
127
|
+
text: `[\`${match[0]}\`](${fileUrl(relPath)})`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (edits.length === 0)
|
|
131
|
+
return body;
|
|
132
|
+
// Right to left, so earlier offsets stay valid as later text is spliced in.
|
|
133
|
+
edits.sort((a, b) => b.start - a.start);
|
|
134
|
+
let out = body;
|
|
135
|
+
for (const edit of edits) {
|
|
136
|
+
out = out.slice(0, edit.start) + edit.text + out.slice(edit.end);
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/roadmap/sync/sanitize.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,8 +26,8 @@ import type { RoadmapStatus } from '../paths.js';
|
|
|
26
26
|
* criteria unachievable — "the second plan contains only X or Y" cannot be checked
|
|
27
27
|
* against a list nobody wrote down.
|
|
28
28
|
*/
|
|
29
|
-
export type Outcome = 'create' | 'update-title' | 'update-labels' | 'close' | 'unchanged' | 'skip' | 'state-divergent' | 'ineligible-with-issue' | 'orphan-missing' | 'label-without-marker';
|
|
30
|
-
/** The
|
|
29
|
+
export type Outcome = 'create' | 'update-title' | 'update-labels' | 'update-body' | 'close' | 'unchanged' | 'skip' | 'state-divergent' | 'ineligible-with-issue' | 'orphan-missing' | 'label-without-marker';
|
|
30
|
+
/** The five outcomes that write. Everything else is a report. */
|
|
31
31
|
export declare const WRITE_OUTCOMES: readonly Outcome[];
|
|
32
32
|
/**
|
|
33
33
|
* Outcomes that suppress every write for their item (design DE-18).
|
|
@@ -42,6 +42,22 @@ export declare const TERMINAL_REPORTS: readonly Outcome[];
|
|
|
42
42
|
export declare const WRITE_ORDER: readonly Outcome[];
|
|
43
43
|
/** True when this outcome performs a `gh` write. */
|
|
44
44
|
export declare function isWrite(outcome: Outcome): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* The frontmatter facts a reader with no checkout cannot otherwise see.
|
|
47
|
+
*
|
|
48
|
+
* Every field is nullable and `null` means *not recorded*. It is never coerced to an
|
|
49
|
+
* empty string or a guess: an item with no `author` is a normal item, and rendering
|
|
50
|
+
* `not recorded` tells a reader something true, where a blank tells them nothing and an
|
|
51
|
+
* invented value tells them something false.
|
|
52
|
+
*/
|
|
53
|
+
export interface ItemFacts {
|
|
54
|
+
createdAt: string | null;
|
|
55
|
+
author: string | null;
|
|
56
|
+
source: string | null;
|
|
57
|
+
promotedTo: string | null;
|
|
58
|
+
/** Item ids, in file order. Empty when the key is absent or holds no usable ids. */
|
|
59
|
+
dependsOn: readonly string[];
|
|
60
|
+
}
|
|
45
61
|
/** An item that can be projected: parseable, with an id. */
|
|
46
62
|
export interface ProjectableItem {
|
|
47
63
|
id: string;
|
|
@@ -51,6 +67,9 @@ export interface ProjectableItem {
|
|
|
51
67
|
filename: string;
|
|
52
68
|
/** Repo-relative path, for the issue body. */
|
|
53
69
|
relPath: string;
|
|
70
|
+
/** Everything below the frontmatter, verbatim. Projected after sanitization. */
|
|
71
|
+
body: string;
|
|
72
|
+
facts: ItemFacts;
|
|
54
73
|
}
|
|
55
74
|
/**
|
|
56
75
|
* Why an item cannot be projected.
|
|
@@ -93,6 +112,15 @@ export interface PlanLine {
|
|
|
93
112
|
detail: string | null;
|
|
94
113
|
addLabels: readonly string[];
|
|
95
114
|
removeLabels: readonly string[];
|
|
115
|
+
/**
|
|
116
|
+
* The exact bytes to send, on `create` and `update-body`; null on every other outcome.
|
|
117
|
+
*
|
|
118
|
+
* Decided in the pure planner rather than in `execute.ts` (design DD-6). The merge that
|
|
119
|
+
* produces it has four branches and has to preserve a human's additions, which is
|
|
120
|
+
* exactly the kind of logic that should not live in the one module capable of
|
|
121
|
+
* irreversible writes — and here it is testable with no `gh` at all.
|
|
122
|
+
*/
|
|
123
|
+
newBody: string | null;
|
|
96
124
|
}
|
|
97
125
|
export interface Plan {
|
|
98
126
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/roadmap/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,cAAc,GACd,eAAe,GACf,OAAO,GACP,WAAW,GACX,MAAM,GACN,iBAAiB,GACjB,uBAAuB,GACvB,gBAAgB,GAChB,sBAAsB,CAAC;AAE3B,iEAAiE;AACjE,eAAO,MAAM,cAAc,EAAE,SAAS,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/roadmap/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,cAAc,GACd,eAAe,GACf,aAAa,GACb,OAAO,GACP,WAAW,GACX,MAAM,GACN,iBAAiB,GACjB,uBAAuB,GACvB,gBAAgB,GAChB,sBAAsB,CAAC;AAE3B,iEAAiE;AACjE,eAAO,MAAM,cAAc,EAAE,SAAS,OAAO,EAM5C,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,OAAO,EAAiD,CAAC;AAEjG,uFAAuF;AACvF,eAAO,MAAM,WAAW,EAAE,SAAS,OAAO,EAMzC,CAAC;AAEF,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oFAAoF;IACpF,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,YAAY,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,kBAAkB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0BAA0B;AAC1B,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,IAAI;IACnB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B,qDAAqD;IACrD,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @module
|
|
20
20
|
*/
|
|
21
|
-
/** The
|
|
21
|
+
/** The five outcomes that write. Everything else is a report. */
|
|
22
22
|
export const WRITE_OUTCOMES = [
|
|
23
23
|
'create',
|
|
24
24
|
'update-title',
|
|
25
25
|
'update-labels',
|
|
26
|
+
'update-body',
|
|
26
27
|
'close',
|
|
27
28
|
];
|
|
28
29
|
/**
|
|
@@ -35,7 +36,13 @@ export const WRITE_OUTCOMES = [
|
|
|
35
36
|
*/
|
|
36
37
|
export const TERMINAL_REPORTS = ['state-divergent', 'ineligible-with-issue'];
|
|
37
38
|
/** Execution order within one item: edit while the issue is still open, then close. */
|
|
38
|
-
export const WRITE_ORDER = [
|
|
39
|
+
export const WRITE_ORDER = [
|
|
40
|
+
'create',
|
|
41
|
+
'update-title',
|
|
42
|
+
'update-labels',
|
|
43
|
+
'update-body',
|
|
44
|
+
'close',
|
|
45
|
+
];
|
|
39
46
|
/** True when this outcome performs a `gh` write. */
|
|
40
47
|
export function isWrite(outcome) {
|
|
41
48
|
return WRITE_OUTCOMES.includes(outcome);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/roadmap/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/roadmap/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwBH,iEAAiE;AACjE,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,QAAQ;IACR,cAAc;IACd,eAAe;IACf,aAAa;IACb,OAAO;CACR,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;AAEjG,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAuB;IAC7C,QAAQ;IACR,cAAc;IACd,eAAe;IACf,aAAa;IACb,OAAO;CACR,CAAC;AAEF,oDAAoD;AACpD,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,OAAO,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rasensio/aidlc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.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.23.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "22.15.32",
|