@aperant/framework 0.6.5 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/README.md +17 -251
  3. package/dist/cli/commands/check-version.d.mts.map +1 -1
  4. package/dist/cli/commands/check-version.mjs +76 -1
  5. package/dist/cli/commands/check-version.mjs.map +1 -1
  6. package/dist/cli/commands/ci-watch.d.mts.map +1 -1
  7. package/dist/cli/commands/ci-watch.mjs +34 -4
  8. package/dist/cli/commands/ci-watch.mjs.map +1 -1
  9. package/dist/cli/commands/commit.d.mts.map +1 -1
  10. package/dist/cli/commands/commit.mjs +25 -8
  11. package/dist/cli/commands/commit.mjs.map +1 -1
  12. package/dist/cli/commands/event.d.mts.map +1 -1
  13. package/dist/cli/commands/event.mjs +66 -0
  14. package/dist/cli/commands/event.mjs.map +1 -1
  15. package/dist/cli/commands/init.d.mts +8 -1
  16. package/dist/cli/commands/init.d.mts.map +1 -1
  17. package/dist/cli/commands/init.mjs +91 -9
  18. package/dist/cli/commands/init.mjs.map +1 -1
  19. package/dist/cli/commands/modes.d.mts.map +1 -1
  20. package/dist/cli/commands/modes.mjs +2 -1
  21. package/dist/cli/commands/modes.mjs.map +1 -1
  22. package/dist/cli/commands/release-notes.d.mts +11 -0
  23. package/dist/cli/commands/release-notes.d.mts.map +1 -0
  24. package/dist/cli/commands/release-notes.mjs +173 -0
  25. package/dist/cli/commands/release-notes.mjs.map +1 -0
  26. package/dist/cli/commands/task.d.mts.map +1 -1
  27. package/dist/cli/commands/task.mjs +285 -139
  28. package/dist/cli/commands/task.mjs.map +1 -1
  29. package/dist/cli/commands/triage.d.mts.map +1 -1
  30. package/dist/cli/commands/triage.mjs +9 -5
  31. package/dist/cli/commands/triage.mjs.map +1 -1
  32. package/dist/cli/config/load.d.mts +14 -0
  33. package/dist/cli/config/load.d.mts.map +1 -1
  34. package/dist/cli/config/load.mjs +40 -0
  35. package/dist/cli/config/load.mjs.map +1 -1
  36. package/dist/cli/config/upgrade-gitignore.d.mts.map +1 -1
  37. package/dist/cli/config/upgrade-gitignore.mjs +6 -0
  38. package/dist/cli/config/upgrade-gitignore.mjs.map +1 -1
  39. package/dist/cli/consistency/parse-review.d.mts.map +1 -1
  40. package/dist/cli/consistency/parse-review.mjs +4 -1
  41. package/dist/cli/consistency/parse-review.mjs.map +1 -1
  42. package/dist/cli/coordination/auto-emit-artifact-ready.d.mts +16 -0
  43. package/dist/cli/coordination/auto-emit-artifact-ready.d.mts.map +1 -0
  44. package/dist/cli/coordination/auto-emit-artifact-ready.mjs +88 -0
  45. package/dist/cli/coordination/auto-emit-artifact-ready.mjs.map +1 -0
  46. package/dist/cli/coordination/event-schema.d.mts +16 -0
  47. package/dist/cli/coordination/event-schema.d.mts.map +1 -0
  48. package/dist/cli/coordination/event-schema.mjs +161 -0
  49. package/dist/cli/coordination/event-schema.mjs.map +1 -0
  50. package/dist/cli/coordination/store.d.mts +6 -0
  51. package/dist/cli/coordination/store.d.mts.map +1 -1
  52. package/dist/cli/coordination/store.mjs +14 -0
  53. package/dist/cli/coordination/store.mjs.map +1 -1
  54. package/dist/cli/dispatch.d.mts.map +1 -1
  55. package/dist/cli/dispatch.mjs +2 -0
  56. package/dist/cli/dispatch.mjs.map +1 -1
  57. package/dist/cli/gate/gates/review-clean.d.mts.map +1 -1
  58. package/dist/cli/gate/gates/review-clean.mjs +4 -2
  59. package/dist/cli/gate/gates/review-clean.mjs.map +1 -1
  60. package/dist/cli/help.mjs +2 -2
  61. package/dist/cli/help.mjs.map +1 -1
  62. package/dist/cli/install/update-chips.d.mts +23 -0
  63. package/dist/cli/install/update-chips.d.mts.map +1 -1
  64. package/dist/cli/install/update-chips.mjs +60 -0
  65. package/dist/cli/install/update-chips.mjs.map +1 -1
  66. package/dist/cli/release-notes/compile.d.mts +38 -0
  67. package/dist/cli/release-notes/compile.d.mts.map +1 -0
  68. package/dist/cli/release-notes/compile.mjs +244 -0
  69. package/dist/cli/release-notes/compile.mjs.map +1 -0
  70. package/dist/cli/release-notes/draft.d.mts +73 -0
  71. package/dist/cli/release-notes/draft.d.mts.map +1 -0
  72. package/dist/cli/release-notes/draft.mjs +120 -0
  73. package/dist/cli/release-notes/draft.mjs.map +1 -0
  74. package/dist/cli/release-notes/output-dir.d.mts +20 -0
  75. package/dist/cli/release-notes/output-dir.d.mts.map +1 -0
  76. package/dist/cli/release-notes/output-dir.mjs +42 -0
  77. package/dist/cli/release-notes/output-dir.mjs.map +1 -0
  78. package/dist/cli/release-notes/persona-filter.d.mts +51 -0
  79. package/dist/cli/release-notes/persona-filter.d.mts.map +1 -0
  80. package/dist/cli/release-notes/persona-filter.mjs +127 -0
  81. package/dist/cli/release-notes/persona-filter.mjs.map +1 -0
  82. package/dist/cli/release-notes/publish.d.mts +23 -0
  83. package/dist/cli/release-notes/publish.d.mts.map +1 -0
  84. package/dist/cli/release-notes/publish.mjs +125 -0
  85. package/dist/cli/release-notes/publish.mjs.map +1 -0
  86. package/dist/cli/release-notes/ship-autodraft.d.mts +37 -0
  87. package/dist/cli/release-notes/ship-autodraft.d.mts.map +1 -0
  88. package/dist/cli/release-notes/ship-autodraft.mjs +97 -0
  89. package/dist/cli/release-notes/ship-autodraft.mjs.map +1 -0
  90. package/dist/cli/roadmap/conductor-view.d.mts +13 -0
  91. package/dist/cli/roadmap/conductor-view.d.mts.map +1 -0
  92. package/dist/cli/roadmap/conductor-view.mjs +31 -0
  93. package/dist/cli/roadmap/conductor-view.mjs.map +1 -0
  94. package/dist/cli/route/skill-discover.d.mts.map +1 -1
  95. package/dist/cli/route/skill-discover.mjs +2 -1
  96. package/dist/cli/route/skill-discover.mjs.map +1 -1
  97. package/dist/cli/task/ids.d.mts +7 -4
  98. package/dist/cli/task/ids.d.mts.map +1 -1
  99. package/dist/cli/task/ids.mjs +11 -10
  100. package/dist/cli/task/ids.mjs.map +1 -1
  101. package/dist/types/config.d.ts +11 -7
  102. package/dist/types/config.d.ts.map +1 -1
  103. package/package.json +9 -1
  104. package/prompts/conductor-status-check.md +23 -0
  105. package/prompts/conductor-sub-agent.md +57 -0
  106. package/prompts/conductor-system.md +172 -0
  107. package/skills/apt-close-task/SKILL.md +25 -0
  108. package/skills/apt-diagram/SKILL.md +45 -9
  109. package/skills/apt-plan/SKILL.md +12 -0
  110. package/skills/apt-plan/adapters/conductor.md +98 -0
  111. package/skills/apt-release-notes/SKILL.md +193 -0
  112. package/skills/apt-release-notes/appendices/persona-voice.md +59 -0
  113. package/skills/apt-setup/SKILL.md +148 -3
  114. package/skills/apt-ship/SKILL.md +74 -12
  115. package/skills/apt-spar/SKILL.md +290 -0
  116. package/skills/apt-update/SKILL.md +51 -9
  117. package/skills/apt-watch-ci/SKILL.md +2 -2
  118. package/src/cli/commands/check-version.mjs +73 -1
  119. package/src/cli/commands/ci-watch.mjs +35 -4
  120. package/src/cli/commands/commit.mjs +27 -8
  121. package/src/cli/commands/event.mjs +68 -0
  122. package/src/cli/commands/init.mjs +101 -9
  123. package/src/cli/commands/modes.mjs +2 -1
  124. package/src/cli/commands/release-notes.mjs +187 -0
  125. package/src/cli/commands/task.mjs +305 -152
  126. package/src/cli/commands/triage.mjs +14 -5
  127. package/src/cli/config/load.mjs +37 -0
  128. package/src/cli/config/upgrade-gitignore.mjs +6 -0
  129. package/src/cli/consistency/parse-review.mjs +3 -1
  130. package/src/cli/coordination/auto-emit-artifact-ready.mjs +96 -0
  131. package/src/cli/coordination/event-schema.d.ts +13 -0
  132. package/src/cli/coordination/event-schema.mjs +174 -0
  133. package/src/cli/coordination/store.mjs +14 -0
  134. package/src/cli/dispatch.mjs +2 -0
  135. package/src/cli/gate/gates/review-clean.mjs +4 -2
  136. package/src/cli/help.mjs +2 -2
  137. package/src/cli/install/update-chips.mjs +57 -0
  138. package/src/cli/release-notes/compile.mjs +261 -0
  139. package/src/cli/release-notes/draft.mjs +133 -0
  140. package/src/cli/release-notes/output-dir.mjs +52 -0
  141. package/src/cli/release-notes/persona-filter.mjs +126 -0
  142. package/src/cli/release-notes/publish.mjs +128 -0
  143. package/src/cli/release-notes/ship-autodraft.mjs +106 -0
  144. package/src/cli/roadmap/conductor-view.d.ts +10 -0
  145. package/src/cli/roadmap/conductor-view.mjs +31 -0
  146. package/src/cli/route/skill-discover.mjs +2 -1
  147. package/src/cli/task/ids.mjs +15 -13
  148. package/templates/config.json +28 -3
  149. package/workflows/docs.md +12 -0
@@ -0,0 +1,127 @@
1
+ /**
2
+ * release-notes/persona-filter.mjs — shared persona-filter logic.
3
+ *
4
+ * The compile + autodraft surfaces both need the same predicate: given a
5
+ * persona id (or name) extracted from a fragment, the project's
6
+ * `.aperant/personas.json` roster, and a filter mode, decide whether the
7
+ * fragment belongs in the user-facing body, in the "Needs Triage" bucket,
8
+ * or filtered out entirely.
9
+ *
10
+ * Three filter modes (config.changelog.release_notes.persona_filter):
11
+ *
12
+ * - 'primary' — only personas whose `tier === 'primary'`.
13
+ * - 'primary+secondary' — primary OR secondary. DEFAULT.
14
+ * - 'all' — every tier passes (no filter).
15
+ *
16
+ * Triage rules (ID-6 in spec.md, never-silent-drop invariant):
17
+ *
18
+ * - Fragment with no persona tag → bucket = 'triage'.
19
+ * - Fragment with a tag that doesn't
20
+ * resolve to a known persona in the
21
+ * roster → bucket = 'triage'.
22
+ * - Fragment whose persona DOES resolve
23
+ * but is filtered out by the mode → bucket = 'filtered'.
24
+ * - Fragment whose persona resolves AND
25
+ * passes the mode → bucket = 'body', with the
26
+ * resolved tier exposed for
27
+ * grouping in compile output.
28
+ *
29
+ * The matcher is case-insensitive on persona names. Empty string and the
30
+ * literal sentinel `(none)` are both treated as "no tag" — the draft
31
+ * renderer writes `persona: (none)` when no --persona flag is passed.
32
+ */
33
+ /** @typedef {'primary' | 'secondary' | 'tertiary' | 'unknown'} PersonaTier */
34
+ /** @typedef {'body' | 'triage' | 'filtered'} FilterBucket */
35
+ const NONE_SENTINELS = new Set(['', '(none)', 'none', 'null', 'undefined']);
36
+ /**
37
+ * True when the raw persona-tag string from a fragment should be treated as
38
+ * "no tag" (and therefore routed to triage with reason `no-persona-tag`).
39
+ * Mirrors `NONE_SENTINELS` so callers — notably `compile.mjs`'s triage-reason
40
+ * labeller — stay in lockstep with the classifier. Case-insensitive.
41
+ *
42
+ * @param {string | null | undefined} raw
43
+ * @returns {boolean}
44
+ */
45
+ export function isNoneSentinel(raw) {
46
+ const normalized = (raw ?? '').trim().toLowerCase();
47
+ return NONE_SENTINELS.has(normalized);
48
+ }
49
+ /**
50
+ * Read tier + name out of a persona envelope row (the shape personas.mjs
51
+ * persists). Tier lives inside `ui_json` (a JSON string). Returns null
52
+ * when the row is unusable.
53
+ *
54
+ * @param {{ ui_json?: unknown }} row
55
+ * @returns {{ name: string, tier: PersonaTier } | null}
56
+ */
57
+ export function extractPersonaIdentity(row) {
58
+ if (!row || typeof row !== 'object')
59
+ return null;
60
+ if (typeof row.ui_json !== 'string')
61
+ return null;
62
+ let parsed;
63
+ try {
64
+ parsed = JSON.parse(row.ui_json);
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ if (!parsed || typeof parsed !== 'object')
70
+ return null;
71
+ const name = typeof parsed.name === 'string' ? parsed.name.trim() : '';
72
+ const tierRaw = typeof parsed.tier === 'string' ? parsed.tier.trim().toLowerCase() : '';
73
+ if (name.length === 0)
74
+ return null;
75
+ /** @type {PersonaTier} */
76
+ const tier = tierRaw === 'primary' || tierRaw === 'secondary' || tierRaw === 'tertiary' ? tierRaw : 'unknown';
77
+ return { name, tier };
78
+ }
79
+ /**
80
+ * Build a name → tier map from a personas envelope.
81
+ *
82
+ * @param {{ personas?: Array<{ ui_json?: unknown }> } | null | undefined} envelope
83
+ * @returns {Map<string, PersonaTier>}
84
+ */
85
+ export function buildPersonaTierMap(envelope) {
86
+ /** @type {Map<string, PersonaTier>} */
87
+ const map = new Map();
88
+ if (!envelope || !Array.isArray(envelope.personas))
89
+ return map;
90
+ for (const row of envelope.personas) {
91
+ const identity = extractPersonaIdentity(row);
92
+ if (!identity)
93
+ continue;
94
+ map.set(identity.name.toLowerCase(), identity.tier);
95
+ }
96
+ return map;
97
+ }
98
+ /**
99
+ * Classify a fragment's persona tag against the roster + filter mode.
100
+ *
101
+ * @param {string | null | undefined} personaTag The raw tag from the fragment.
102
+ * @param {Map<string, PersonaTier>} tierMap From `buildPersonaTierMap`.
103
+ * @param {'primary' | 'primary+secondary' | 'all'} mode
104
+ * @returns {{ bucket: FilterBucket, resolvedName: string | null, resolvedTier: PersonaTier | null }}
105
+ */
106
+ export function classifyFragment(personaTag, tierMap, mode) {
107
+ const normalized = (personaTag ?? '').trim().toLowerCase();
108
+ if (normalized.length === 0 || NONE_SENTINELS.has(normalized)) {
109
+ return { bucket: 'triage', resolvedName: null, resolvedTier: null };
110
+ }
111
+ const tier = tierMap.get(normalized);
112
+ if (tier === undefined) {
113
+ // Tag was set but the roster doesn't recognize it — never silent-drop.
114
+ return { bucket: 'triage', resolvedName: personaTag ?? null, resolvedTier: null };
115
+ }
116
+ if (mode === 'all') {
117
+ return { bucket: 'body', resolvedName: personaTag ?? null, resolvedTier: tier };
118
+ }
119
+ if (mode === 'primary' && tier !== 'primary') {
120
+ return { bucket: 'filtered', resolvedName: personaTag ?? null, resolvedTier: tier };
121
+ }
122
+ if (mode === 'primary+secondary' && tier !== 'primary' && tier !== 'secondary') {
123
+ return { bucket: 'filtered', resolvedName: personaTag ?? null, resolvedTier: tier };
124
+ }
125
+ return { bucket: 'body', resolvedName: personaTag ?? null, resolvedTier: tier };
126
+ }
127
+ //# sourceMappingURL=persona-filter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-filter.mjs","sourceRoot":"","sources":["../../../src/cli/release-notes/persona-filter.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @param {PublishInput} input
3
+ * @returns {PublishResult}
4
+ */
5
+ export function publishTag(input: PublishInput): PublishResult;
6
+ export type PublishInput = {
7
+ projectDir: string;
8
+ tag: string;
9
+ outputDir: string | null;
10
+ dryRun: boolean;
11
+ };
12
+ export type PublishResult = {
13
+ status: "ok";
14
+ mode: "created" | "edited" | "dry-run";
15
+ notesPath: string;
16
+ } | {
17
+ status: "skipped";
18
+ reason: "gh-not-found" | "notes-not-found" | "gh-failed";
19
+ notesPath?: string;
20
+ exit_code?: number | null;
21
+ stderr?: string | null;
22
+ };
23
+ //# sourceMappingURL=publish.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.mts","sourceRoot":"","sources":["../../../src/cli/release-notes/publish.mjs"],"names":[],"mappings":"AA0FA;;;GAGG;AACH,kCAHW,YAAY,GACV,aAAa,CAmCzB;;gBAzGa,MAAM;SACN,MAAM;eACN,MAAM,GAAG,IAAI;YACb,OAAO;;4BAIR;IACR,MAAM,EAAE,IAAI,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,cAAc,GAAG,iBAAiB,GAAG,WAAW,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * release-notes/publish.mjs — `gh release create/edit` shell.
3
+ *
4
+ * Reads `<output_dir>/<tag>.md` and shells `gh release create <tag>
5
+ * --notes-file <path>` (or `gh release edit` if a release already exists
6
+ * for that tag). When `gh` is unavailable on the host, returns a graceful
7
+ * `{status: 'skipped', reason: 'gh-not-found'}` envelope rather than
8
+ * crashing — AC4.
9
+ *
10
+ * Tests inject a custom shell via the GH_BIN env var (mocked to a no-op
11
+ * shell script) so the publish branch of TD-5 can run without making a
12
+ * real network call.
13
+ */
14
+ import { execFileSync, spawnSync } from 'node:child_process';
15
+ import { existsSync } from 'node:fs';
16
+ import { join } from 'node:path';
17
+ import { resolveOutputDir, validateTag } from './output-dir.mjs';
18
+ /**
19
+ * @typedef {Object} PublishInput
20
+ * @property {string} projectDir
21
+ * @property {string} tag
22
+ * @property {string | null} outputDir
23
+ * @property {boolean} dryRun
24
+ */
25
+ /**
26
+ * @typedef {{
27
+ * status: 'ok',
28
+ * mode: 'created' | 'edited' | 'dry-run',
29
+ * notesPath: string,
30
+ * } | {
31
+ * status: 'skipped',
32
+ * reason: 'gh-not-found' | 'notes-not-found' | 'gh-failed',
33
+ * notesPath?: string,
34
+ * exit_code?: number | null,
35
+ * stderr?: string | null,
36
+ * }} PublishResult
37
+ */
38
+ /**
39
+ * Resolve which `gh` binary to use. Defaults to `gh` on PATH; tests
40
+ * override via the GH_BIN env var (only honored in NODE_ENV=test).
41
+ *
42
+ * @returns {string}
43
+ */
44
+ function ghBin() {
45
+ if (process.env.NODE_ENV === 'test') {
46
+ const override = process.env.GH_BIN;
47
+ if (override && override.length > 0)
48
+ return override;
49
+ }
50
+ return 'gh';
51
+ }
52
+ /**
53
+ * Detect whether `gh` is available on the host. Uses `which` semantics:
54
+ * `gh --version` exit-0 → available. Any error path → unavailable.
55
+ *
56
+ * @returns {boolean}
57
+ */
58
+ function ghAvailable() {
59
+ try {
60
+ const result = spawnSync(ghBin(), ['--version'], { stdio: ['ignore', 'ignore', 'ignore'] });
61
+ return result.status === 0;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Check whether a release already exists for the given tag.
69
+ *
70
+ * @param {string} projectDir
71
+ * @param {string} tag
72
+ * @returns {boolean}
73
+ */
74
+ function releaseExists(projectDir, tag) {
75
+ try {
76
+ const result = spawnSync(ghBin(), ['release', 'view', tag, '--json', 'tagName'], {
77
+ cwd: projectDir,
78
+ stdio: ['ignore', 'pipe', 'ignore'],
79
+ });
80
+ return result.status === 0;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ /**
87
+ * @param {PublishInput} input
88
+ * @returns {PublishResult}
89
+ */
90
+ export function publishTag(input) {
91
+ validateTag(input.tag);
92
+ const outputDir = resolveOutputDir(input.projectDir, input.outputDir);
93
+ const notesPath = join(outputDir, `${input.tag}.md`);
94
+ if (!existsSync(notesPath)) {
95
+ return { status: 'skipped', reason: 'notes-not-found', notesPath };
96
+ }
97
+ if (input.dryRun) {
98
+ return { status: 'ok', mode: 'dry-run', notesPath };
99
+ }
100
+ if (!ghAvailable()) {
101
+ return { status: 'skipped', reason: 'gh-not-found', notesPath };
102
+ }
103
+ const exists = releaseExists(input.projectDir, input.tag);
104
+ const verb = exists ? 'edit' : 'create';
105
+ const args = ['release', verb, input.tag, '--notes-file', notesPath];
106
+ // `gh release edit` only takes --notes-file; `gh release create` takes
107
+ // --notes-file too and a positional tag — same argv order works.
108
+ try {
109
+ execFileSync(ghBin(), args, {
110
+ cwd: input.projectDir,
111
+ stdio: ['ignore', 'pipe', 'pipe'],
112
+ });
113
+ }
114
+ catch (err) {
115
+ return {
116
+ status: 'skipped',
117
+ reason: 'gh-failed',
118
+ notesPath,
119
+ exit_code: err.status ?? null,
120
+ stderr: err.stderr?.toString() ?? null,
121
+ };
122
+ }
123
+ return { status: 'ok', mode: exists ? 'edited' : 'created', notesPath };
124
+ }
125
+ //# sourceMappingURL=publish.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.mjs","sourceRoot":"","sources":["../../../src/cli/release-notes/publish.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Compute the autodraft decision.
3
+ *
4
+ * @param {AutodraftInput} input
5
+ * @returns {AutodraftResult}
6
+ */
7
+ export function decideAutodraft(input: AutodraftInput): AutodraftResult;
8
+ export type FeatureDiffEntry = {
9
+ feature_id: string;
10
+ area?: string | undefined;
11
+ personas?: string[] | undefined;
12
+ };
13
+ export type AutodraftInput = {
14
+ featureDiff: FeatureDiffEntry[];
15
+ personasEnvelope: {
16
+ personas?: Array<{
17
+ ui_json?: unknown;
18
+ }>;
19
+ } | null;
20
+ personaFilter: "primary" | "primary+secondary" | "all";
21
+ requirePrField: boolean;
22
+ };
23
+ export type AutodraftResult = {
24
+ status: "draft";
25
+ line: string;
26
+ persona: string;
27
+ matchedFeatures: string[];
28
+ } | {
29
+ status: "block";
30
+ reason: "no-feature-match" | "no-persona-signal";
31
+ message: string;
32
+ } | {
33
+ status: "warn";
34
+ reason: "no-feature-match" | "no-persona-signal";
35
+ message: string;
36
+ };
37
+ //# sourceMappingURL=ship-autodraft.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-autodraft.d.mts","sourceRoot":"","sources":["../../../src/cli/release-notes/ship-autodraft.mjs"],"names":[],"mappings":"AAkDA;;;;;GAKG;AACH,uCAHW,cAAc,GACZ,eAAe,CA+B3B;;gBApEa,MAAM;;;;;iBAON,gBAAgB,EAAE;sBAClB;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,IAAI;mBAClD,SAAS,GAAG,mBAAmB,GAAG,KAAK;oBACvC,OAAO;;8BAIR;IACR,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,GAAG;IACF,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG;IACF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * release-notes/ship-autodraft.mjs — apt-ship Section 2.6 helper.
3
+ *
4
+ * Deterministic, unit-testable shape: given a feature-registry diff +
5
+ * personas envelope + persona_filter mode, decide whether the PR body
6
+ * should grow a `Release note: …` line OR ship should block.
7
+ *
8
+ * This module is intentionally pure — the apt-ship SKILL.md body shells
9
+ * `apt-tools features-audit . --diff-since <base> --json` and feeds the
10
+ * envelope here. Keeping the decision pure makes TD-4 trivial: fixture in,
11
+ * decision out, no I/O.
12
+ */
13
+ import { buildPersonaTierMap, classifyFragment } from './persona-filter.mjs';
14
+ /**
15
+ * @typedef {Object} FeatureDiffEntry
16
+ * @property {string} feature_id
17
+ * @property {string} [area]
18
+ * @property {string[]} [personas]
19
+ */
20
+ /**
21
+ * @typedef {Object} AutodraftInput
22
+ * @property {FeatureDiffEntry[]} featureDiff
23
+ * @property {{ personas?: Array<{ ui_json?: unknown }> } | null} personasEnvelope
24
+ * @property {'primary' | 'primary+secondary' | 'all'} personaFilter
25
+ * @property {boolean} requirePrField
26
+ */
27
+ /**
28
+ * @typedef {{
29
+ * status: 'draft',
30
+ * line: string,
31
+ * persona: string,
32
+ * matchedFeatures: string[],
33
+ * } | {
34
+ * status: 'block',
35
+ * reason: 'no-feature-match' | 'no-persona-signal',
36
+ * message: string,
37
+ * } | {
38
+ * status: 'warn',
39
+ * reason: 'no-feature-match' | 'no-persona-signal',
40
+ * message: string,
41
+ * }} AutodraftResult
42
+ */
43
+ const BLOCK_MESSAGE = '[APT] No release-note signal found — author manual note in PR body or label PR no-notes';
44
+ /**
45
+ * Compute the autodraft decision.
46
+ *
47
+ * @param {AutodraftInput} input
48
+ * @returns {AutodraftResult}
49
+ */
50
+ export function decideAutodraft(input) {
51
+ const tierMap = buildPersonaTierMap(input.personasEnvelope);
52
+ if (!Array.isArray(input.featureDiff) || input.featureDiff.length === 0) {
53
+ return failClassify(input, 'no-feature-match');
54
+ }
55
+ // Walk the diff; the first feature whose persona resolves into the
56
+ // filter mode wins. (Multi-persona dispatch is intentionally out of
57
+ // scope here — host LLM-side narrative can refine per persona; the
58
+ // CLI just picks a clean signal so ship is decisive.)
59
+ for (const feature of input.featureDiff) {
60
+ if (!Array.isArray(feature.personas) || feature.personas.length === 0)
61
+ continue;
62
+ for (const personaTag of feature.personas) {
63
+ const decision = classifyFragment(personaTag, tierMap, input.personaFilter);
64
+ if (decision.bucket === 'body' && decision.resolvedTier) {
65
+ return {
66
+ status: 'draft',
67
+ line: `Release note: ${feature.feature_id} — ships for ${personaTag}.`,
68
+ persona: personaTag,
69
+ matchedFeatures: [feature.feature_id],
70
+ };
71
+ }
72
+ }
73
+ }
74
+ // No persona signal anywhere — features exist but none carry a tag
75
+ // that the roster + filter accept.
76
+ return failClassify(input, 'no-persona-signal');
77
+ }
78
+ /**
79
+ * Translate a failure reason into the right envelope shape based on
80
+ * `require_pr_field`. require=true → block; require=false → warn (skill
81
+ * proceeds without the line).
82
+ *
83
+ * @param {AutodraftInput} input
84
+ * @param {'no-feature-match' | 'no-persona-signal'} reason
85
+ * @returns {AutodraftResult}
86
+ */
87
+ function failClassify(input, reason) {
88
+ if (input.requirePrField) {
89
+ return { status: 'block', reason, message: BLOCK_MESSAGE };
90
+ }
91
+ return {
92
+ status: 'warn',
93
+ reason,
94
+ message: `[APT] auto-draft skipped (${reason}) — release_notes.require_pr_field is false; proceeding without a Release note line.`,
95
+ };
96
+ }
97
+ //# sourceMappingURL=ship-autodraft.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-autodraft.mjs","sourceRoot":"","sources":["../../../src/cli/release-notes/ship-autodraft.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5E;;;;;GAKG;AAEH;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,aAAa,GAClB,yFAAyF,CAAA;AAE1F;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAK;IACpC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAE3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,YAAY,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IAC/C,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,mEAAmE;IACnE,sDAAsD;IACtD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAC/E,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;YAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBACzD,OAAO;oBACN,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,iBAAiB,OAAO,CAAC,UAAU,gBAAgB,UAAU,GAAG;oBACtE,OAAO,EAAE,UAAU;oBACnB,eAAe,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;iBACrC,CAAA;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,mEAAmE;IACnE,mCAAmC;IACnC,OAAO,YAAY,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAA;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM;IAClC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;IAC3D,CAAC;IACD,OAAO;QACN,MAAM,EAAE,MAAM;QACd,MAAM;QACN,OAAO,EAAE,6BAA6B,MAAM,sFAAsF;KAClI,CAAA;AACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Build a flat per-scope roadmap snapshot for the Conductor.
3
+ *
4
+ * @param {string} projectRoot
5
+ * @returns {{ scopes: Array<{ scope: string, roadmap: unknown }> }}
6
+ */
7
+ export function buildConductorRoadmapView(projectRoot: string): {
8
+ scopes: Array<{
9
+ scope: string;
10
+ roadmap: unknown;
11
+ }>;
12
+ };
13
+ //# sourceMappingURL=conductor-view.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conductor-view.d.mts","sourceRoot":"","sources":["../../../src/cli/roadmap/conductor-view.mjs"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,uDAHW,MAAM,GACJ;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAAE,CAUlE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * conductor-view.mjs — read-only roadmap surface for the Aperant
3
+ * Conductor's `getRoadmap` tool.
4
+ *
5
+ * Wraps `loadRoadmapForScope` + `listRoadmapScopes` so the Conductor sees
6
+ * the same overlay-aware view every framework command sees. Direct reads
7
+ * of `.aperant/roadmap/*\/phases/*.json` or `milestones.json` would miss
8
+ * the dual-write overlay (seed_id from legacy blob, etc.) — Codex
9
+ * roundtable correction #3.
10
+ *
11
+ * Step 5 of Conductor v2 ship order.
12
+ */
13
+ import { loadRoadmapForScope } from './io.mjs';
14
+ import { listRoadmapScopes } from './paths.mjs';
15
+ /**
16
+ * Build a flat per-scope roadmap snapshot for the Conductor.
17
+ *
18
+ * @param {string} projectRoot
19
+ * @returns {{ scopes: Array<{ scope: string, roadmap: unknown }> }}
20
+ */
21
+ export function buildConductorRoadmapView(projectRoot) {
22
+ const scopes = listRoadmapScopes(projectRoot);
23
+ const out = [];
24
+ for (const scope of scopes) {
25
+ const roadmap = loadRoadmapForScope(projectRoot, scope);
26
+ if (roadmap !== null)
27
+ out.push({ scope, roadmap });
28
+ }
29
+ return { scopes: out };
30
+ }
31
+ //# sourceMappingURL=conductor-view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conductor-view.mjs","sourceRoot":"","sources":["../../../src/cli/roadmap/conductor-view.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAW;IACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QACvD,IAAI,OAAO,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;AACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-discover.d.mts","sourceRoot":"","sources":["../../../src/cli/route/skill-discover.mjs"],"names":[],"mappings":"AA2RA;;;;;;;GAOG;AACH,sCAEC;AAED;;;;;;;;;;;;;GAaG;AACH,mEAJG;IAAqB,SAAS,EAAtB,MAAM;IACS,mBAAmB,EAAlC,MAAM,EAAE;CAChB,GAAU,cAAc,CAc1B;;UA5Ra,MAAM;iBACN,MAAM;WACN,MAAM;YACN,MAAM;iBACN,MAAM;oBACN,OAAO;cACP,OAAO;kBACP,OAAO;gBACP,MAAM,GAAC,IAAI;WACX,MAAM,EAAE;4BACR,MAAM;qBACN,MAAM,EAAE;kBACR,YAAY,GAAC,kBAAkB,GAAC,cAAc,GAAC,MAAM;mBACrD,CAAC,OAAO,GAAC,UAAU,GAAC,MAAM,GAAC,OAAO,CAAC,GAAC,SAAS;;;;eAC7C,MAAM;;;eAKN,MAAM;YACN,mBAAmB,GAAC,qBAAqB,GAAC,uBAAuB,GAAC,YAAY;;;;YAM9E,eAAe,EAAE;aACjB,cAAc,EAAE;mBAChB,MAAM,EAAE"}
1
+ {"version":3,"file":"skill-discover.d.mts","sourceRoot":"","sources":["../../../src/cli/route/skill-discover.mjs"],"names":[],"mappings":"AA4RA;;;;;;;GAOG;AACH,sCAEC;AAED;;;;;;;;;;;;;GAaG;AACH,mEAJG;IAAqB,SAAS,EAAtB,MAAM;IACS,mBAAmB,EAAlC,MAAM,EAAE;CAChB,GAAU,cAAc,CAc1B;;UA5Ra,MAAM;iBACN,MAAM;WACN,MAAM;YACN,MAAM;iBACN,MAAM;oBACN,OAAO;cACP,OAAO;kBACP,OAAO;gBACP,MAAM,GAAC,IAAI;WACX,MAAM,EAAE;4BACR,MAAM;qBACN,MAAM,EAAE;kBACR,YAAY,GAAC,kBAAkB,GAAC,cAAc,GAAC,MAAM;mBACrD,CAAC,OAAO,GAAC,UAAU,GAAC,MAAM,GAAC,OAAO,CAAC,GAAC,SAAS;;;;eAC7C,MAAM;;;eAKN,MAAM;YACN,mBAAmB,GAAC,qBAAqB,GAAC,uBAAuB,GAAC,YAAY;;;;YAM9E,eAAe,EAAE;aACjB,cAAc,EAAE;mBAChB,MAAM,EAAE"}
@@ -20,6 +20,7 @@
20
20
  import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, statSync, } from 'node:fs';
21
21
  import { isAbsolute, join, relative, resolve } from 'node:path';
22
22
  import { parse as parseYaml } from 'yaml';
23
+ import { sanitizeAptVersionForYamlParse } from '../install/version-header.mjs';
23
24
  import { SkillFrontmatterSchema } from '../skill-author/contract.mjs';
24
25
  const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n/;
25
26
  /**
@@ -115,7 +116,7 @@ function readSkill(file) {
115
116
  }
116
117
  let parsed;
117
118
  try {
118
- parsed = parseYaml(m[1]);
119
+ parsed = parseYaml(sanitizeAptVersionForYamlParse(m[1]));
119
120
  }
120
121
  catch (err) {
121
122
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"skill-discover.mjs","sourceRoot":"","sources":["../../../src/cli/route/skill-discover.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACN,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,QAAQ,GACR,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAErE,MAAM,cAAc,GAAG,yBAAyB,CAAA;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,SAAS,iBAAiB,CAAC,IAAI,EAAE,KAAK;IACrC,IAAI,QAAQ,CAAA;IACZ,IAAI,CAAC;QACJ,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,2EAA2E;QAC3E,OAAO,KAAK,CAAA;IACb,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,QAAQ,CAAA;QACZ,IAAI,CAAC;YACJ,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC;YACR,SAAQ;QACT,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACxC,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;IAC3E,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAI;IACtB,IAAI,IAAI,CAAA;IACR,IAAI,CAAC;QACJ,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC/E,CAAA;IACF,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IACpC,IAAI,CAAC,CAAC,EAAE,CAAC;QACR,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAA;IAC1F,CAAC;IACD,IAAI,MAAM,CAAA;IACV,IAAI,CAAC;QACJ,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,uBAAuB;YAC/B,MAAM,EAAE,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC/E,CAAA;IACF,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,uBAAuB;YAC/B,MAAM,EAAE,CAAC,wCAAwC,CAAC;SAClD,CAAA;IACF,CAAC;IACD,MAAM,GAAG,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,uBAAuB;YAC/B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CACrE;SACD,CAAA;IACF,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAA;IAClB,OAAO;QACN,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACP,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;YAChC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACjD,sBAAsB,EAAE,CAAC,CAAC,sBAAsB;YAChD,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/E,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,SAAS,EAAE,IAAI;SACf;KACD,CAAA;AACF,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAI;IAC1B,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAA;IACjC,IAAI,IAAI,CAAA;IACR,IAAI,CAAC;QACJ,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,CAAA;IACX,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,GAAG,CAAA;IACnC,IAAI,OAAO,CAAA;IACX,IAAI,CAAC;QACJ,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,CAAA;IACX,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAQ;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;YACvC,IAAI,UAAU,CAAC,SAAS,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/C,CAAC;QACD,4DAA4D;QAC5D,kEAAkE;QAClE,+DAA+D;QAC/D,uBAAuB;IACxB,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,MAAM;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAA;QACvC,8DAA8D;QAC9D,gEAAgE;QAChE,uEAAuE;QACvE,OAAO,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,MAAM,kBAAkB,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,UAAU,CAAC,SAAS,EAAE,IAAI;IAClC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;QAClD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACtE,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAChF,cAAc,CACb,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACnC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,EAClE,OAAO,CACP,CAAA;IACF,CAAC;IAAC,MAAM,CAAC;QACR,sDAAsD;IACvD,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAA;AAChC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAEpC;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa;IAC5B,cAAc,CAAC,KAAK,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAChE,2DAA2D;IAC3D,MAAM,aAAa,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAA;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC1E,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,sBAAsB,EAAE,CAAC,CAAA;IACjF,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,uBAAuB,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAClE,MAAM,KAAK,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7F,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAA;gBAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAClB,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAC3B,SAAQ;YACT,CAAC;YACD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;gBACxE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAClB,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAC3B,SAAQ;YACT,CAAC;YACD,gEAAgE;YAChE,sEAAsE;YACtE,kEAAkE;YAClE,mEAAmE;YACnE,+DAA+D;YAC/D,sDAAsD;YACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;YAC9C,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7F,OAAO;QACN,MAAM;QACN,OAAO;QACP,aAAa,EAAE,KAAK;KACpB,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"skill-discover.mjs","sourceRoot":"","sources":["../../../src/cli/route/skill-discover.mjs"],"names":[],"mappings":"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"}
@@ -3,14 +3,17 @@
3
3
  * Supported formats: YY-MM-DD (default, sorts chronologically), DD-MM-YY, MM-DD-YY
4
4
  * Uses hyphens as separators for filesystem safety.
5
5
  */
6
- export function formatDateForTask(dateFormat: any): string;
6
+ export function formatDateForTask(dateFormat: any, now?: Date): string;
7
7
  /**
8
8
  * Generate a short task ID from description + timestamp.
9
- * Format: {date}_{slug}-{4-char-hash}
10
- * Date comes first so tasks sort chronologically in file explorers.
9
+ * Format: {slug}_{date}
10
+ * Slug comes first so task lists scan by verb instead of by date.
11
11
  * Date format is configurable via preferences.date_format in config.
12
+ * Same-day same-slug collisions are disambiguated by the caller
13
+ * (see commands/task.mjs) via a numeric -2, -3, … suffix; this
14
+ * generator never emits a counter or a random hash.
12
15
  */
13
- export function generateTaskId(description: any, config: any): string;
16
+ export function generateTaskId(description: any, config: any, now?: Date): string;
14
17
  export function getTaskDir(projectDir: any, taskId: any): string;
15
18
  /**
16
19
  * C28 — scope-aware proof directory.
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.mts","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,2DAcC;AAED;;;;;GAKG;AACH,sEAUC;AAED,iEAEC;AAED;;;;;GAKG;AACH,8EAGC"}
1
+ {"version":3,"file":"ids.d.mts","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,uEAaC;AAED;;;;;;;;GAQG;AACH,kFAUC;AAED,iEAEC;AAED;;;;;GAKG;AACH,8EAGC"}
@@ -7,8 +7,7 @@ import { join, resolve } from 'node:path';
7
7
  * Supported formats: YY-MM-DD (default, sorts chronologically), DD-MM-YY, MM-DD-YY
8
8
  * Uses hyphens as separators for filesystem safety.
9
9
  */
10
- export function formatDateForTask(dateFormat) {
11
- const now = new Date();
10
+ export function formatDateForTask(dateFormat, now = new Date()) {
12
11
  const yy = String(now.getFullYear()).slice(2);
13
12
  const mm = String(now.getMonth() + 1).padStart(2, '0');
14
13
  const dd = String(now.getDate()).padStart(2, '0');
@@ -24,20 +23,22 @@ export function formatDateForTask(dateFormat) {
24
23
  }
25
24
  /**
26
25
  * Generate a short task ID from description + timestamp.
27
- * Format: {date}_{slug}-{4-char-hash}
28
- * Date comes first so tasks sort chronologically in file explorers.
26
+ * Format: {slug}_{date}
27
+ * Slug comes first so task lists scan by verb instead of by date.
29
28
  * Date format is configurable via preferences.date_format in config.
29
+ * Same-day same-slug collisions are disambiguated by the caller
30
+ * (see commands/task.mjs) via a numeric -2, -3, … suffix; this
31
+ * generator never emits a counter or a random hash.
30
32
  */
31
- export function generateTaskId(description, config) {
33
+ export function generateTaskId(description, config, now = new Date()) {
32
34
  const slug = description
33
35
  .toLowerCase()
34
36
  .replace(/[^a-z0-9]+/g, '-')
35
- .replace(/^-|-$/g, '')
36
- .slice(0, 40);
37
+ .slice(0, 40)
38
+ .replace(/^-|-$/g, '') || 'task';
37
39
  const dateFormat = config?.preferences?.date_format || 'YY-MM-DD';
38
- const date = formatDateForTask(dateFormat);
39
- const hash = Math.random().toString(36).slice(2, 6);
40
- return `${date}_${slug}-${hash}`;
40
+ const date = formatDateForTask(dateFormat, now);
41
+ return `${slug}_${date}`;
41
42
  }
42
43
  export function getTaskDir(projectDir, taskId) {
43
44
  return join(resolve(projectDir), '.aperant', 'tasks', taskId);
@@ -1 +1 @@
1
- {"version":3,"file":"ids.mjs","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAU;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU,CAAC;QAChB;YACC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;IAC5B,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,WAAW,EAAE,MAAM;IACjD,MAAM,IAAI,GAAG,WAAW;SACtB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACd,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,WAAW,IAAI,UAAU,CAAA;IACjE,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnD,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAU,EAAE,MAAM;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM;IACpD,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;AAC7E,CAAC"}
1
+ {"version":3,"file":"ids.mjs","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU,CAAC;QAChB;YACC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;IAC5B,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACnE,MAAM,IAAI,GACT,WAAW;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,MAAM,CAAA;IAClC,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,WAAW,IAAI,UAAU,CAAA;IACjE,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAC/C,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAU,EAAE,MAAM;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM;IACpD,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;AAC7E,CAAC"}