pm-presets 2026.5.28

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/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ # Changelog
2
+
3
+ ## 2026.5.28
4
+
5
+ Initial release. Consolidates the 5 individual `pm-preset-*` packages into a
6
+ single `pm-presets` package:
7
+
8
+ - **bug-triage** (`pm triage-setup`) — strict governance for production incidents, hotfixes, and root-cause tracking
9
+ - **indie-dev** (`pm indie-setup`) — minimal-ceremony workspace for solo developers
10
+ - **open-source** (`pm oss-setup`) — issue triage and contributor-friendly templates for OSS maintainers
11
+ - **software-sprint** (`pm sprint-setup`) — sprint-based team workflow with epics, features, tasks, and bugs
12
+ - **startup-roadmap** (`pm roadmap-setup`) — investor-grade milestones and quarterly planning for startups
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 unbraind
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,163 @@
1
+ # pm-presets
2
+
3
+ All 5 official [pm-cli](https://github.com/unbraind/pm-cli) workspace presets in one package.
4
+
5
+ Install once, get all preset setup commands:
6
+
7
+ ```bash
8
+ pm install github.com/unbraind/pm-presets --project
9
+ ```
10
+
11
+ ## Available Presets
12
+
13
+ | Preset | Command | Governance | Best For |
14
+ |---|---|---|---|
15
+ | **bug-triage** | `pm triage-setup` | strict | Incident response, triage teams |
16
+ | **indie-dev** | `pm indie-setup` | minimal | Solo developers, personal projects |
17
+ | **open-source** | `pm oss-setup` | standard | OSS maintainers with community contributors |
18
+ | **software-sprint** | `pm sprint-setup` | standard | Engineering teams running sprints |
19
+ | **startup-roadmap** | `pm roadmap-setup` | standard | Startups with investor-facing roadmaps |
20
+
21
+ ## Usage
22
+
23
+ 1. Initialize a pm workspace in your project:
24
+
25
+ ```bash
26
+ pm init
27
+ ```
28
+
29
+ 2. Apply a preset:
30
+
31
+ ```bash
32
+ pm triage-setup # strict bug triage
33
+ pm indie-setup # minimal solo dev
34
+ pm oss-setup # open-source project
35
+ pm sprint-setup # software sprint
36
+ pm roadmap-setup # startup roadmap
37
+ ```
38
+
39
+ All commands share the same flags:
40
+
41
+ | Flag | Short | Description |
42
+ |---|---|---|
43
+ | `--force` | `-f` | Overwrite existing settings.json and templates |
44
+ | `--dry-run` | `-n` | Preview changes without writing any files |
45
+ | `--prefix` | `-p` | Override the id_prefix in settings.json |
46
+
47
+ ## Presets in Detail
48
+
49
+ ### bug-triage
50
+
51
+ **Governance:** strict — ownership and root-cause metadata required to close items.
52
+
53
+ **Templates:** `incident`, `hotfix-task`, `regression`
54
+
55
+ **Default id_prefix:** `bug-`
56
+
57
+ Best for on-call teams and incident response workflows that need full audit trails.
58
+
59
+ ```bash
60
+ pm triage-setup
61
+ pm create --template incident
62
+ pm create --template hotfix-task
63
+ pm create --template regression
64
+ ```
65
+
66
+ ### indie-dev
67
+
68
+ **Governance:** minimal — no required fields, no ownership enforcement.
69
+
70
+ **Templates:** `idea`, `task`
71
+
72
+ **Default id_prefix:** `indie-`
73
+
74
+ Best for solo developers who want lightweight task tracking with zero ceremony.
75
+
76
+ ```bash
77
+ pm indie-setup
78
+ pm create --template idea
79
+ pm create --template task
80
+ ```
81
+
82
+ ### open-source
83
+
84
+ **Governance:** standard — structured without blocking community contributors.
85
+
86
+ **Templates:** `bug-report`, `feature-request`, `good-first-issue`
87
+
88
+ **Default id_prefix:** `oss-`
89
+
90
+ Best for open-source maintainers handling community submissions and milestone releases.
91
+
92
+ ```bash
93
+ pm oss-setup
94
+ pm create --template bug-report
95
+ pm create --template feature-request
96
+ pm create --template good-first-issue
97
+ ```
98
+
99
+ ### software-sprint
100
+
101
+ **Governance:** standard — sprint format validated, ownership warned.
102
+
103
+ **Templates:** `epic`, `feature`, `task`, `bug`
104
+
105
+ **Default id_prefix:** `sprint-`
106
+
107
+ Best for engineering teams running two-week sprints with epics and features.
108
+
109
+ ```bash
110
+ pm sprint-setup
111
+ pm create --template epic
112
+ pm create --template feature
113
+ pm create --template task
114
+ pm create --template bug
115
+ ```
116
+
117
+ ### startup-roadmap
118
+
119
+ **Governance:** standard with rich metadata — captures business value and strategic context.
120
+
121
+ **Templates:** `initiative`, `feature`, `milestone`
122
+
123
+ **Default id_prefix:** `road-`
124
+
125
+ Best for startups building investor-facing roadmaps with quarterly planning.
126
+
127
+ ```bash
128
+ pm roadmap-setup
129
+ pm create --template initiative
130
+ pm create --template feature
131
+ pm create --template milestone
132
+ ```
133
+
134
+ ## Migration from pm-preset-* packages
135
+
136
+ If you previously installed individual `pm-preset-*` packages, uninstall them
137
+ and install `pm-presets` instead:
138
+
139
+ ```bash
140
+ pm uninstall pm-preset-bug-triage
141
+ pm uninstall pm-preset-indie-dev
142
+ pm uninstall pm-preset-open-source
143
+ pm uninstall pm-preset-software-sprint
144
+ pm uninstall pm-preset-startup-roadmap
145
+
146
+ pm install github.com/unbraind/pm-presets --project
147
+ ```
148
+
149
+ The preset commands are identical — only the package name changed.
150
+
151
+ ## Programmatic API
152
+
153
+ ```typescript
154
+ import { PRESET_REGISTRY } from "pm-presets/registry";
155
+
156
+ for (const preset of PRESET_REGISTRY) {
157
+ console.log(preset.id, preset.command, preset.governance);
158
+ }
159
+ ```
160
+
161
+ ## License
162
+
163
+ MIT
@@ -0,0 +1,22 @@
1
+ /**
2
+ * pm-presets — all 5 official pm-cli workspace presets in one package.
3
+ *
4
+ * Each preset registers a setup command with the pm CLI extension API.
5
+ * Install this package once and get all presets:
6
+ *
7
+ * pm install github.com/unbraind/pm-presets --project
8
+ *
9
+ * Available commands after installation:
10
+ * pm triage-setup # bug-triage preset
11
+ * pm indie-setup # indie-dev preset
12
+ * pm oss-setup # open-source preset
13
+ * pm sprint-setup # software-sprint preset
14
+ * pm roadmap-setup # startup-roadmap preset
15
+ */
16
+ declare const _default: {
17
+ activate(api: import("@unbrained/pm-cli/sdk").ExtensionApi): void;
18
+ };
19
+ export default _default;
20
+ export { PRESET_REGISTRY } from "./registry.js";
21
+ export type { PresetDescriptor } from "./registry.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;;;;AAiCH,wBA+CG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * pm-presets — all 5 official pm-cli workspace presets in one package.
3
+ *
4
+ * Each preset registers a setup command with the pm CLI extension API.
5
+ * Install this package once and get all presets:
6
+ *
7
+ * pm install github.com/unbraind/pm-presets --project
8
+ *
9
+ * Available commands after installation:
10
+ * pm triage-setup # bug-triage preset
11
+ * pm indie-setup # indie-dev preset
12
+ * pm oss-setup # open-source preset
13
+ * pm sprint-setup # software-sprint preset
14
+ * pm roadmap-setup # startup-roadmap preset
15
+ */
16
+ import { runBugTriageSetup } from "./presets/bug-triage/index.js";
17
+ import { runIndieDevSetup } from "./presets/indie-dev/index.js";
18
+ import { runOpenSourceSetup } from "./presets/open-source/index.js";
19
+ import { runSoftwareSprintSetup } from "./presets/software-sprint/index.js";
20
+ import { runStartupRoadmapSetup } from "./presets/startup-roadmap/index.js";
21
+ const defineExtension = ((extension) => extension);
22
+ const COMMON_FLAGS = [
23
+ {
24
+ long: "force",
25
+ short: "f",
26
+ type: "boolean",
27
+ description: "Overwrite existing settings.json and template files without prompting.",
28
+ },
29
+ {
30
+ long: "dry-run",
31
+ short: "n",
32
+ type: "boolean",
33
+ description: "Preview what would be written without making any changes.",
34
+ },
35
+ {
36
+ long: "prefix",
37
+ short: "p",
38
+ type: "string",
39
+ description: "Override the id_prefix written to settings.json.",
40
+ },
41
+ ];
42
+ export default defineExtension({
43
+ activate(api) {
44
+ // ── bug-triage ──────────────────────────────────────────────────────────
45
+ api.registerCommand({
46
+ name: "triage-setup",
47
+ description: "Apply the bug-triage preset: strict governance for production incidents, hotfixes, and root-cause tracking.",
48
+ flags: COMMON_FLAGS,
49
+ run: runBugTriageSetup,
50
+ });
51
+ // ── indie-dev ───────────────────────────────────────────────────────────
52
+ api.registerCommand({
53
+ name: "indie-setup",
54
+ description: "Apply the indie-dev preset: minimal-ceremony workspace for solo developers and personal projects.",
55
+ flags: COMMON_FLAGS,
56
+ run: runIndieDevSetup,
57
+ });
58
+ // ── open-source ─────────────────────────────────────────────────────────
59
+ api.registerCommand({
60
+ name: "oss-setup",
61
+ description: "Apply the open-source preset: issue triage, milestone releases, and contributor-friendly templates.",
62
+ flags: COMMON_FLAGS,
63
+ run: runOpenSourceSetup,
64
+ });
65
+ // ── software-sprint ─────────────────────────────────────────────────────
66
+ api.registerCommand({
67
+ name: "sprint-setup",
68
+ description: "Apply the software-sprint preset: sprint-based workflow with epics, features, tasks, and bugs.",
69
+ flags: COMMON_FLAGS,
70
+ run: runSoftwareSprintSetup,
71
+ });
72
+ // ── startup-roadmap ─────────────────────────────────────────────────────
73
+ api.registerCommand({
74
+ name: "roadmap-setup",
75
+ description: "Apply the startup-roadmap preset: investor-grade milestones, strategic initiatives, and quarterly planning.",
76
+ flags: COMMON_FLAGS,
77
+ run: runStartupRoadmapSetup,
78
+ });
79
+ },
80
+ });
81
+ // Re-export public API
82
+ export { PRESET_REGISTRY } from "./registry.js";
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,MAAM,eAAe,GAA+B,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,SAAS,CAAQ,CAAC;AAE3F,MAAM,YAAY,GAAG;IACnB;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAkB;QACxB,WAAW,EAAE,wEAAwE;KACtF;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAkB;QACxB,WAAW,EAAE,2DAA2D;KACzE;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAiB;QACvB,WAAW,EAAE,kDAAkD;KAChE;CACF,CAAC;AAEF,eAAe,eAAe,CAAC;IAC7B,QAAQ,CAAC,GAAG;QACV,2EAA2E;QAC3E,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,6GAA6G;YAC/G,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,iBAAiB;SACvB,CAAC,CAAC;QAEH,2EAA2E;QAC3E,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,mGAAmG;YACrG,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,gBAAgB;SACtB,CAAC,CAAC;QAEH,2EAA2E;QAC3E,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,qGAAqG;YACvG,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,kBAAkB;SACxB,CAAC,CAAC;QAEH,2EAA2E;QAC3E,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,gGAAgG;YAClG,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,sBAAsB;SAC5B,CAAC,CAAC;QAEH,2EAA2E;QAC3E,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,6GAA6G;YAC/G,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,sBAAsB;SAC5B,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { CommandHandlerContext } from "@unbrained/pm-cli/sdk";
2
+ export declare const SETTINGS: {
3
+ readonly id_prefix: "bug-";
4
+ readonly governance: {
5
+ readonly preset: "strict";
6
+ readonly ownership_enforcement: "strict";
7
+ readonly create_mode_default: "strict";
8
+ readonly close_validation_default: "strict";
9
+ readonly metadata_profile: "strict";
10
+ };
11
+ readonly validation: {
12
+ readonly sprint_release_format: "strict_error";
13
+ readonly parent_reference: "warn";
14
+ };
15
+ readonly item_types: {
16
+ readonly definitions: readonly [{
17
+ readonly name: "Issue";
18
+ readonly description: "A defect, incident, or regression requiring investigation and resolution";
19
+ }, {
20
+ readonly name: "Task";
21
+ readonly description: "A remediation, hotfix, or follow-up task linked to an incident";
22
+ }];
23
+ };
24
+ readonly testing: {
25
+ readonly record_results_to_items: true;
26
+ };
27
+ readonly search: {
28
+ readonly mode: "keyword";
29
+ };
30
+ readonly calendar: {
31
+ readonly default_view: "agenda";
32
+ readonly first_day_of_week: 1;
33
+ };
34
+ readonly telemetry: {
35
+ readonly enabled: false;
36
+ };
37
+ };
38
+ export declare const TEMPLATES: Record<string, unknown>;
39
+ export declare function runBugTriageSetup(context: CommandHandlerContext): void;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presets/bug-triage/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAMnE,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BX,CAAC;AA+DX,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAI7C,CAAC;AAIF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CA6FtE"}
@@ -0,0 +1,172 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ // ─── Settings ────────────────────────────────────────────────────────────────
4
+ export const SETTINGS = {
5
+ id_prefix: "bug-",
6
+ governance: {
7
+ preset: "strict",
8
+ ownership_enforcement: "strict",
9
+ create_mode_default: "strict",
10
+ close_validation_default: "strict",
11
+ metadata_profile: "strict",
12
+ },
13
+ validation: {
14
+ sprint_release_format: "strict_error",
15
+ parent_reference: "warn",
16
+ },
17
+ item_types: {
18
+ definitions: [
19
+ {
20
+ name: "Issue",
21
+ description: "A defect, incident, or regression requiring investigation and resolution",
22
+ },
23
+ {
24
+ name: "Task",
25
+ description: "A remediation, hotfix, or follow-up task linked to an incident",
26
+ },
27
+ ],
28
+ },
29
+ testing: { record_results_to_items: true },
30
+ search: { mode: "keyword" },
31
+ calendar: { default_view: "agenda", first_day_of_week: 1 },
32
+ telemetry: { enabled: false },
33
+ };
34
+ // ─── Templates ───────────────────────────────────────────────────────────────
35
+ const TEMPLATE_INCIDENT = {
36
+ type: "Issue",
37
+ priority: "1",
38
+ tags: ["incident"],
39
+ meta: {
40
+ severity: "sev2",
41
+ environment: "production",
42
+ detected_at: "",
43
+ reported_by: "",
44
+ owner: "",
45
+ affected_systems: "",
46
+ affected_users: "",
47
+ steps_to_reproduce: "",
48
+ root_cause: "",
49
+ mitigation_applied: "",
50
+ resolution: "",
51
+ postmortem_url: "",
52
+ linked_hotfix: "",
53
+ },
54
+ };
55
+ const TEMPLATE_HOTFIX_TASK = {
56
+ type: "Task",
57
+ priority: "1",
58
+ tags: ["hotfix"],
59
+ meta: {
60
+ linked_incident: "",
61
+ assignee: "",
62
+ fix_description: "",
63
+ pr_link: "",
64
+ target_branch: "main",
65
+ deploy_target: "production",
66
+ rollback_plan: "",
67
+ reviewed_by: "",
68
+ deployed_at: "",
69
+ verified_by: "",
70
+ },
71
+ };
72
+ const TEMPLATE_REGRESSION = {
73
+ type: "Issue",
74
+ priority: "2",
75
+ tags: ["regression"],
76
+ meta: {
77
+ severity: "sev3",
78
+ environment: "",
79
+ introduced_in: "",
80
+ last_known_good_version: "",
81
+ steps_to_reproduce: "",
82
+ expected_behavior: "",
83
+ actual_behavior: "",
84
+ owner: "",
85
+ affected_tests: "",
86
+ root_cause: "",
87
+ fix_pr: "",
88
+ verified_fixed_in: "",
89
+ },
90
+ };
91
+ export const TEMPLATES = {
92
+ "incident.json": TEMPLATE_INCIDENT,
93
+ "hotfix-task.json": TEMPLATE_HOTFIX_TASK,
94
+ "regression.json": TEMPLATE_REGRESSION,
95
+ };
96
+ // ─── Command Handler ──────────────────────────────────────────────────────────
97
+ export function runBugTriageSetup(context) {
98
+ const { options, pm_root } = context;
99
+ const cwd = pm_root ?? process.cwd();
100
+ const pmDir = path.resolve(cwd, ".agents/pm");
101
+ const settingsPath = path.join(pmDir, "settings.json");
102
+ const templatesDir = path.join(pmDir, "templates");
103
+ const isDryRun = Boolean(options["dry-run"]);
104
+ const isForce = Boolean(options["force"]);
105
+ const prefixOverride = options["prefix"];
106
+ // 1. Check .agents/pm/ exists
107
+ if (!fs.existsSync(pmDir)) {
108
+ console.error(`pm workspace not found. Expected directory: ${pmDir}\n` +
109
+ `Run "pm init" first to initialise a pm workspace in this project.`);
110
+ return;
111
+ }
112
+ // 2. Build settings (optionally override prefix)
113
+ const settings = prefixOverride !== undefined
114
+ ? { ...SETTINGS, id_prefix: prefixOverride }
115
+ : SETTINGS;
116
+ if (isDryRun) {
117
+ console.log("[dry-run] Would write settings.json:");
118
+ console.log(JSON.stringify(settings, null, 2));
119
+ }
120
+ else {
121
+ if (fs.existsSync(settingsPath) && !isForce) {
122
+ console.warn(`settings.json already exists at ${settingsPath}. ` +
123
+ `Use --force to overwrite.`);
124
+ }
125
+ else {
126
+ if (fs.existsSync(settingsPath) && isForce) {
127
+ console.warn(`Overwriting existing settings.json (--force)`);
128
+ }
129
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf8");
130
+ console.log(`Wrote settings.json → ${settingsPath}`);
131
+ }
132
+ }
133
+ // 3. Create templates directory and write template files
134
+ if (isDryRun) {
135
+ console.log(`[dry-run] Would create directory: ${templatesDir}`);
136
+ for (const [filename, template] of Object.entries(TEMPLATES)) {
137
+ console.log(`[dry-run] Would write template: ${path.join(templatesDir, filename)}`);
138
+ console.log(JSON.stringify(template, null, 2));
139
+ }
140
+ }
141
+ else {
142
+ if (!fs.existsSync(templatesDir)) {
143
+ fs.mkdirSync(templatesDir, { recursive: true });
144
+ console.log(`Created templates directory → ${templatesDir}`);
145
+ }
146
+ for (const [filename, template] of Object.entries(TEMPLATES)) {
147
+ const templatePath = path.join(templatesDir, filename);
148
+ fs.writeFileSync(templatePath, JSON.stringify(template, null, 2) + "\n", "utf8");
149
+ console.log(`Wrote template → ${templatePath}`);
150
+ }
151
+ }
152
+ // 4. Print next steps
153
+ console.log("");
154
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
155
+ console.log(" Bug triage preset applied. Next steps:");
156
+ console.log("");
157
+ console.log(" Create a new production incident:");
158
+ console.log(" pm create --template incident");
159
+ console.log("");
160
+ console.log(" Create a hotfix task (linked to an incident):");
161
+ console.log(" pm create --template hotfix-task");
162
+ console.log("");
163
+ console.log(" Track a regression:");
164
+ console.log(" pm create --template regression");
165
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
166
+ console.log("");
167
+ // 5. Strict governance warning
168
+ console.warn("STRICT GOVERNANCE ACTIVE: All close operations require " +
169
+ "'root_cause' and 'resolution' metadata fields to be set. " +
170
+ "Items cannot be closed without this information.");
171
+ }
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/presets/bug-triage/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CommandHandlerContext } from "@unbrained/pm-cli/sdk";
2
+ export declare const SETTINGS: {
3
+ readonly id_prefix: "indie-";
4
+ readonly governance: {
5
+ readonly preset: "minimal";
6
+ readonly ownership_enforcement: "off";
7
+ readonly create_mode_default: "progressive";
8
+ readonly close_validation_default: "off";
9
+ readonly metadata_profile: "core";
10
+ };
11
+ readonly validation: {
12
+ readonly sprint_release_format: "off";
13
+ readonly parent_reference: "off";
14
+ };
15
+ readonly testing: {
16
+ readonly record_results_to_items: false;
17
+ };
18
+ readonly telemetry: {
19
+ readonly enabled: false;
20
+ };
21
+ };
22
+ export declare const TEMPLATES: Record<string, object>;
23
+ export declare function runIndieDevSetup(context: CommandHandlerContext): Promise<void>;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presets/indie-dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAMnE,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;CAmBX,CAAC;AAIX,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuB5C,CAAC;AAIF,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEpF"}