@nlaprell/shipit 1.0.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.
Files changed (160) hide show
  1. package/.cursor/commands/create_intent_from_issue.md +28 -0
  2. package/.cursor/commands/create_pr.md +28 -0
  3. package/.cursor/commands/dashboard.md +39 -0
  4. package/.cursor/commands/deploy.md +152 -0
  5. package/.cursor/commands/drift_check.md +36 -0
  6. package/.cursor/commands/fix.md +39 -0
  7. package/.cursor/commands/generate_release_plan.md +31 -0
  8. package/.cursor/commands/generate_roadmap.md +38 -0
  9. package/.cursor/commands/help.md +37 -0
  10. package/.cursor/commands/init_project.md +26 -0
  11. package/.cursor/commands/kill.md +72 -0
  12. package/.cursor/commands/new_intent.md +68 -0
  13. package/.cursor/commands/pr.md +77 -0
  14. package/.cursor/commands/revert-plan.md +58 -0
  15. package/.cursor/commands/risk.md +64 -0
  16. package/.cursor/commands/rollback.md +43 -0
  17. package/.cursor/commands/scope_project.md +53 -0
  18. package/.cursor/commands/ship.md +345 -0
  19. package/.cursor/commands/status.md +71 -0
  20. package/.cursor/commands/suggest.md +44 -0
  21. package/.cursor/commands/test_shipit.md +197 -0
  22. package/.cursor/commands/verify.md +50 -0
  23. package/.cursor/rules/architect.mdc +84 -0
  24. package/.cursor/rules/assumption-extractor.mdc +95 -0
  25. package/.cursor/rules/docs.mdc +66 -0
  26. package/.cursor/rules/implementer.mdc +112 -0
  27. package/.cursor/rules/pm.mdc +136 -0
  28. package/.cursor/rules/qa.mdc +97 -0
  29. package/.cursor/rules/security.mdc +90 -0
  30. package/.cursor/rules/steward.mdc +99 -0
  31. package/.cursor/rules/test-runner.mdc +196 -0
  32. package/AGENTS.md +121 -0
  33. package/README.md +264 -0
  34. package/_system/architecture/CANON.md +159 -0
  35. package/_system/architecture/invariants.yml +87 -0
  36. package/_system/architecture/project-schema.json +98 -0
  37. package/_system/architecture/workflow-state-layout.md +68 -0
  38. package/_system/artifacts/SYSTEM_STATE.md +43 -0
  39. package/_system/artifacts/confidence-calibration.json +16 -0
  40. package/_system/artifacts/dependencies.md +46 -0
  41. package/_system/artifacts/framework-files-manifest.json +179 -0
  42. package/_system/artifacts/usage.json +1 -0
  43. package/_system/behaviors/DO_RELEASE.md +371 -0
  44. package/_system/behaviors/DO_RELEASE_AI.md +329 -0
  45. package/_system/behaviors/PREPARE_RELEASE.md +373 -0
  46. package/_system/behaviors/PREPARE_RELEASE_AI.md +234 -0
  47. package/_system/behaviors/WORK_ROOT_PLATFORM_ISSUES.md +140 -0
  48. package/_system/behaviors/WORK_TEST_PLAN_ISSUES.md +380 -0
  49. package/_system/do-not-repeat/abandoned-designs.md +18 -0
  50. package/_system/do-not-repeat/bad-patterns.md +19 -0
  51. package/_system/do-not-repeat/failed-experiments.md +18 -0
  52. package/_system/do-not-repeat/rejected-libraries.md +19 -0
  53. package/_system/drift/baselines.md +49 -0
  54. package/_system/drift/metrics.md +33 -0
  55. package/_system/golden-data/.gitkeep +0 -0
  56. package/_system/golden-data/README.md +47 -0
  57. package/_system/reports/mutation/mutation.html +492 -0
  58. package/_system/security/audit-allowlist.json +4 -0
  59. package/bin/create-shipit-app +29 -0
  60. package/bin/shipit +183 -0
  61. package/cli/src/commands/check.js +82 -0
  62. package/cli/src/commands/create.js +195 -0
  63. package/cli/src/commands/init.js +267 -0
  64. package/cli/src/commands/upgrade.js +196 -0
  65. package/cli/src/utils/config.js +27 -0
  66. package/cli/src/utils/file-copy.js +144 -0
  67. package/cli/src/utils/gitignore-merge.js +44 -0
  68. package/cli/src/utils/manifest.js +105 -0
  69. package/cli/src/utils/package-json-merge.js +163 -0
  70. package/cli/src/utils/project-json-merge.js +57 -0
  71. package/cli/src/utils/prompts.js +30 -0
  72. package/cli/src/utils/stack-detection.js +56 -0
  73. package/cli/src/utils/stack-files.js +364 -0
  74. package/cli/src/utils/upgrade-backup.js +159 -0
  75. package/cli/src/utils/version.js +64 -0
  76. package/dashboard-app/README.md +73 -0
  77. package/dashboard-app/eslint.config.js +23 -0
  78. package/dashboard-app/index.html +13 -0
  79. package/dashboard-app/package.json +30 -0
  80. package/dashboard-app/pnpm-lock.yaml +2721 -0
  81. package/dashboard-app/public/dashboard.json +66 -0
  82. package/dashboard-app/public/vite.svg +1 -0
  83. package/dashboard-app/src/App.css +141 -0
  84. package/dashboard-app/src/App.tsx +155 -0
  85. package/dashboard-app/src/assets/react.svg +1 -0
  86. package/dashboard-app/src/index.css +68 -0
  87. package/dashboard-app/src/main.tsx +10 -0
  88. package/dashboard-app/tsconfig.app.json +28 -0
  89. package/dashboard-app/tsconfig.json +4 -0
  90. package/dashboard-app/tsconfig.node.json +26 -0
  91. package/dashboard-app/vite.config.ts +7 -0
  92. package/package.json +116 -0
  93. package/scripts/README.md +70 -0
  94. package/scripts/audit-check.sh +125 -0
  95. package/scripts/calibration-report.sh +198 -0
  96. package/scripts/check-readiness.sh +155 -0
  97. package/scripts/collect-metrics.sh +116 -0
  98. package/scripts/command-manifest.yml +131 -0
  99. package/scripts/create-test-plan-issue.sh +110 -0
  100. package/scripts/dashboard-start.sh +16 -0
  101. package/scripts/deploy.sh +170 -0
  102. package/scripts/drift-check.sh +93 -0
  103. package/scripts/execute-rollback.sh +177 -0
  104. package/scripts/export-dashboard-json.js +208 -0
  105. package/scripts/fix-intents.sh +239 -0
  106. package/scripts/generate-dashboard.sh +136 -0
  107. package/scripts/generate-docs.sh +279 -0
  108. package/scripts/generate-project-context.sh +142 -0
  109. package/scripts/generate-release-plan.sh +443 -0
  110. package/scripts/generate-roadmap.sh +189 -0
  111. package/scripts/generate-system-state.sh +95 -0
  112. package/scripts/gh/create-intent-from-issue.sh +82 -0
  113. package/scripts/gh/create-issue-from-intent.sh +59 -0
  114. package/scripts/gh/create-pr.sh +41 -0
  115. package/scripts/gh/link-issue.sh +44 -0
  116. package/scripts/gh/on-ship-update-issue.sh +42 -0
  117. package/scripts/headless/README.md +8 -0
  118. package/scripts/headless/call-llm.js +109 -0
  119. package/scripts/headless/run-phase.sh +99 -0
  120. package/scripts/help.sh +271 -0
  121. package/scripts/init-project.sh +976 -0
  122. package/scripts/kill-intent.sh +125 -0
  123. package/scripts/lib/common.sh +29 -0
  124. package/scripts/lib/intent.sh +61 -0
  125. package/scripts/lib/progress.sh +57 -0
  126. package/scripts/lib/suggest-next.sh +131 -0
  127. package/scripts/lib/validate-intents.sh +240 -0
  128. package/scripts/lib/verify-outputs.sh +55 -0
  129. package/scripts/lib/workflow_state.sh +201 -0
  130. package/scripts/new-intent.sh +271 -0
  131. package/scripts/publish-npm.sh +28 -0
  132. package/scripts/scope-project.sh +380 -0
  133. package/scripts/setup-worktrees.sh +125 -0
  134. package/scripts/status.sh +278 -0
  135. package/scripts/suggest.sh +173 -0
  136. package/scripts/test-headless.sh +47 -0
  137. package/scripts/test-shipit.sh +52 -0
  138. package/scripts/test-workflow-state.sh +49 -0
  139. package/scripts/usage-report.sh +47 -0
  140. package/scripts/usage.sh +58 -0
  141. package/scripts/validate-cursor.sh +151 -0
  142. package/scripts/validate-project.sh +71 -0
  143. package/scripts/validate-vscode.sh +146 -0
  144. package/scripts/verify.sh +153 -0
  145. package/scripts/workflow-orchestrator.sh +97 -0
  146. package/scripts/workflow-templates/01_analysis.md.tpl +25 -0
  147. package/scripts/workflow-templates/02_plan.md.tpl +30 -0
  148. package/scripts/workflow-templates/03_implementation.md.tpl +25 -0
  149. package/scripts/workflow-templates/04_verification.md.tpl +29 -0
  150. package/scripts/workflow-templates/05_release_notes.md.tpl +16 -0
  151. package/scripts/workflow-templates/05_verification_legacy.md.tpl +6 -0
  152. package/scripts/workflow-templates/active.md.tpl +18 -0
  153. package/scripts/workflow-templates/phases.yml +39 -0
  154. package/stryker.conf.json +8 -0
  155. package/work/intent/templates/api-endpoint.md +124 -0
  156. package/work/intent/templates/bugfix.md +116 -0
  157. package/work/intent/templates/frontend-feature.md +115 -0
  158. package/work/intent/templates/generic.md +122 -0
  159. package/work/intent/templates/infra-change.md +121 -0
  160. package/work/intent/templates/refactor.md +116 -0
@@ -0,0 +1,98 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Project Metadata Schema",
4
+ "description": "Schema for project.json metadata file",
5
+ "type": "object",
6
+ "required": ["name", "version", "techStack", "created"],
7
+ "properties": {
8
+ "name": {
9
+ "type": "string",
10
+ "description": "Project name (alphanumeric, hyphens, underscores)"
11
+ },
12
+ "description": {
13
+ "type": "string",
14
+ "description": "Project description"
15
+ },
16
+ "version": {
17
+ "type": "string",
18
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
19
+ "description": "Semantic version (e.g., 0.1.0)"
20
+ },
21
+ "techStack": {
22
+ "type": "string",
23
+ "enum": ["typescript-nodejs", "python", "other"],
24
+ "description": "Primary technology stack"
25
+ },
26
+ "created": {
27
+ "type": "string",
28
+ "format": "date-time",
29
+ "description": "ISO 8601 timestamp when project was created"
30
+ },
31
+ "highRiskDomains": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "string",
35
+ "enum": ["auth", "payments", "permissions", "infrastructure", "pii"]
36
+ },
37
+ "description": "High-risk domains requiring human approval"
38
+ },
39
+ "settings": {
40
+ "type": "object",
41
+ "properties": {
42
+ "humanResponseTime": {
43
+ "type": "string",
44
+ "enum": ["minutes", "hours", "days"],
45
+ "default": "minutes",
46
+ "description": "Expected human response time for interrupts"
47
+ },
48
+ "confidenceThreshold": {
49
+ "type": "number",
50
+ "minimum": 0,
51
+ "maximum": 1,
52
+ "default": 0.7,
53
+ "description": "Minimum confidence score to proceed without human interrupt"
54
+ },
55
+ "testCoverageMinimum": {
56
+ "type": "number",
57
+ "minimum": 0,
58
+ "maximum": 100,
59
+ "default": 80,
60
+ "description": "Minimum test coverage percentage"
61
+ }
62
+ },
63
+ "required": ["humanResponseTime", "confidenceThreshold", "testCoverageMinimum"]
64
+ },
65
+ "dependencies": {
66
+ "type": "object",
67
+ "description": "Project dependencies (runtime and dev)",
68
+ "properties": {
69
+ "runtime": {
70
+ "type": "array",
71
+ "items": { "type": "string" }
72
+ },
73
+ "dev": {
74
+ "type": "array",
75
+ "items": { "type": "string" }
76
+ }
77
+ }
78
+ },
79
+ "invariants": {
80
+ "type": "object",
81
+ "description": "Project-level invariants",
82
+ "properties": {
83
+ "performance": {
84
+ "type": "object",
85
+ "properties": {
86
+ "p95LatencyMs": { "type": "number" },
87
+ "p99LatencyMs": { "type": "number" },
88
+ "maxMemoryMb": { "type": "number" }
89
+ }
90
+ },
91
+ "security": {
92
+ "type": "array",
93
+ "items": { "type": "string" }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,68 @@
1
+ # Workflow State Layout
2
+
3
+ > **Authority:** This document defines how `work/workflow-state/` is structured. All scripts and features that read or write workflow state MUST follow this contract. See [CANON.md](./CANON.md) for directory boundaries.
4
+
5
+ ## Purpose
6
+
7
+ Workflow state holds phase outputs (analysis, plan, implementation, verification, release) and supporting artifacts (rollback plan, PR summary, active intent). This layout supports both **single active intent** (flat files) and **multiple active intents** (per-intent directories) so that parallel work does not collide.
8
+
9
+ ## Layouts
10
+
11
+ ### Flat layout (current / single active intent)
12
+
13
+ When only one intent is active, state lives at the top level of `work/workflow-state/`:
14
+
15
+ - `01_analysis.md`, `02_plan.md`, `03_implementation.md`, `04_verification.md`, `05_release_notes.md`
16
+ - `active.md` — current active intent id (or list; see below)
17
+ - `rollback.md` — rollback plan (output of /revert-plan)
18
+ - `pr.md` — PR summary (output of /pr)
19
+ - `assumptions.md`, `blocked.md`, etc.
20
+
21
+ All consumers (scripts, commands, dashboard export) that read these files use these paths when no per-intent directory exists for the intent in question.
22
+
23
+ ### Per-intent layout (multiple active intents)
24
+
25
+ When multiple intents are active (see Planning issue for parallel execution), each intent MAY have its own subdirectory:
26
+
27
+ - `work/workflow-state/<intent-id>/` — e.g. `work/workflow-state/F-001/`, `work/workflow-state/F-002/`
28
+ - Inside: `01_analysis.md`, `02_plan.md`, `03_implementation.md`, `04_verification.md`, `05_release_notes.md`, `rollback.md`, `pr.md` as needed.
29
+
30
+ `work/workflow-state/active.md` (flat only) lists active intent id(s) and optionally current phase per intent. It remains at the top level.
31
+
32
+ ### active.md format
33
+
34
+ - **Single active (legacy):** `**Intent ID:** F-001`, `**Status:** active`, `**Current Phase:** Planning`.
35
+ - **Multiple actives:** Same header block (first intent or "none"); plus a section:
36
+
37
+ ```markdown
38
+ ## Active intents
39
+
40
+ F-001 | Planning | active
41
+ F-002 | Implementation | active
42
+ ```
43
+
44
+ Scripts parse both the legacy **Intent ID:** line and the `## Active intents` block to list active ids. When multiple intents are active, pass `intent-id` explicitly to `/ship`, `/verify`, and scripts.
45
+
46
+ ## Contract: consumers MUST support both layouts
47
+
48
+ **Rule:** Any script or feature that reads or writes workflow state MUST resolve paths so that both layouts work:
49
+
50
+ 1. **When an intent-id is known:**
51
+ If `work/workflow-state/<intent-id>/` exists, read/write phase files and intent-specific artifacts (e.g. `rollback.md`, `pr.md`) under `work/workflow-state/<intent-id>/`.
52
+ Otherwise, use the flat paths under `work/workflow-state/` (e.g. `work/workflow-state/rollback.md`).
53
+
54
+ 2. **When aggregating (e.g. dashboard, status):**
55
+ If any subdirectories matching `work/workflow-state/[FBT]-[0-9]+/` exist, aggregate state from those directories (and optionally from flat files for backward compatibility).
56
+ Otherwise, read only from flat files.
57
+
58
+ 3. **Creation:**
59
+ New workflow state for an intent MAY be written to `work/workflow-state/<intent-id>/` when the workflow supports multiple active intents; otherwise write to flat paths. Do not mix: for a given intent, use either flat or per-intent, not both.
60
+
61
+ ## References
62
+
63
+ - **Parallel execution (per-intent dirs):** Implemented per the Planning issue for multiple active intents. This layout doc is the contract those changes and all consumers must follow.
64
+ - **Consumers:** Dashboard export (#62), rollback execution (#64), PR creation (#59), workflow-orchestrator, status, verify — all must resolve paths per this document.
65
+
66
+ ---
67
+
68
+ _Last updated: 2026-02-05_
@@ -0,0 +1,43 @@
1
+ # System State
2
+
3
+ **Generated:** 2026-02-04T18:38:19Z
4
+ **Project:** shipit
5
+
6
+ ## Global Summary
7
+
8
+ This file provides a global view of the system state for agents to maintain coherence.
9
+
10
+ ## Intent Status
11
+
12
+ - **Total:** 0
13
+ - **Active:** 0
14
+ - **Planned:** 0
15
+ - **Shipped:** 0
16
+
17
+ ## Current Work
18
+
19
+ - **Active Intent:** none
20
+ - **Recent Intents:**
21
+
22
+ ## System Health
23
+
24
+ - **Workflow State:** [Check work/workflow-state/active.md]
25
+ - **Drift Status:** [Check _system/drift/metrics.md]
26
+ - **Test Coverage:** [Run: pnpm test:coverage]
27
+
28
+ ## Key Decisions
29
+
30
+ [Recent architectural decisions]
31
+
32
+ ## Blockers
33
+
34
+ [Current blockers and dependencies]
35
+
36
+ ## Next Actions
37
+
38
+ [Planned next actions]
39
+
40
+ ---
41
+
42
+ _This file is auto-generated. Run `pnpm generate-system-state` to update._
43
+ _Agents should read this file first to understand global state._
@@ -0,0 +1,16 @@
1
+ {
2
+ "decisions": [
3
+ {
4
+ "id": "D-001",
5
+ "stated_confidence": null,
6
+ "actual_outcome": "success",
7
+ "notes": "Intent: F-DUMMY. Tests: pass, Mutation: pass, Audit: pass"
8
+ },
9
+ {
10
+ "id": "D-002",
11
+ "stated_confidence": null,
12
+ "actual_outcome": "success",
13
+ "notes": "Intent: F-DUMMY. Tests: pass, Mutation: pass, Audit: pass"
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,46 @@
1
+ # Feature Dependency Graph
2
+
3
+ **Generated:** 2026-02-09T20:10:22Z
4
+
5
+ ## Dependency Graph
6
+
7
+ ### F-DUMMY: F-DUMMY: Dummy intent for testing
8
+
9
+ (no dependencies)
10
+
11
+ ### F-001: F-001: Smoke API
12
+
13
+ (no dependencies)
14
+
15
+ ### infra-change: F-###: Title
16
+
17
+ └─> (Other intent IDs that must ship first)
18
+ └─> (Infra team or vendor dependencies)
19
+ └─> (Maintenance windows)
20
+
21
+ ### api-endpoint: F-###: Title
22
+
23
+ └─> (Other intent IDs that must ship first)
24
+ └─> (ADRs that must be approved)
25
+ └─> (External systems/APIs)
26
+
27
+ ### frontend-feature: F-###: Title
28
+
29
+ └─> (Other intent IDs that must ship first)
30
+ └─> (Design/UX sign-off if required)
31
+
32
+ ### refactor: F-###: Title
33
+
34
+ └─> (Other intent IDs that must ship first)
35
+ └─> (ADRs or design docs if refactor is architectural)
36
+
37
+ ### bugfix: F-###: Title
38
+
39
+ └─> (Other intent IDs that must ship first)
40
+ └─> (Blocking issues or environment requirements)
41
+
42
+ ### generic: F-###: Title
43
+
44
+ └─> (Other intent IDs that must ship first)
45
+ └─> (ADRs that must be approved)
46
+ └─> (External systems/APIs)
@@ -0,0 +1,179 @@
1
+ {
2
+ "version": "1.1.1",
3
+ "description": "Manifest of framework-owned files and directories that get copied during init/upgrade",
4
+ "userOverrides": {
5
+ "directory": ".override/",
6
+ "description": "User customizations that persist across upgrades. NEVER touched by framework.",
7
+ "neverTouched": true,
8
+ "subdirectories": [
9
+ ".override/rules/",
10
+ ".override/commands/",
11
+ ".override/scripts/",
12
+ ".override/config/"
13
+ ]
14
+ },
15
+ "backupStrategy": {
16
+ "directory": "._shipit_backup/",
17
+ "format": "<relative-path>/<filename>.<timestamp>",
18
+ "description": "Backups of modified framework files before upgrade replacement"
19
+ },
20
+ "frameworkOwned": {
21
+ "directories": [
22
+ ".cursor/commands",
23
+ ".cursor/rules",
24
+ "scripts",
25
+ "scripts/lib",
26
+ "scripts/workflow-templates",
27
+ "scripts/gh",
28
+ "_system/architecture",
29
+ "_system/do-not-repeat",
30
+ "_system/drift",
31
+ "_system/behaviors",
32
+ "_system/security",
33
+ "_system/artifacts",
34
+ "_system/golden-data",
35
+ "_system/reports",
36
+ "dashboard-app",
37
+ "work/intent/templates"
38
+ ],
39
+ "files": [
40
+ "project.json",
41
+ "AGENTS.md",
42
+ "stryker.conf.json",
43
+ "scripts/command-manifest.yml",
44
+ "scripts/export-dashboard-json.js",
45
+ "scripts/create-test-plan-issue.sh",
46
+ "_system/behaviors/WORK_TEST_PLAN_ISSUES.md",
47
+ ".github/workflows/ci.yml"
48
+ ],
49
+ "createdOnInit": {
50
+ "directories": [
51
+ "work/intent/features",
52
+ "work/intent/bugs",
53
+ "work/intent/tech-debt",
54
+ "work/workflow-state",
55
+ "work/roadmap",
56
+ "work/release",
57
+ "docs"
58
+ ],
59
+ "files": [
60
+ "work/intent/_TEMPLATE.md",
61
+ "work/workflow-state/active.md",
62
+ "work/workflow-state/blocked.md",
63
+ "work/workflow-state/validating.md",
64
+ "work/workflow-state/shipped.md",
65
+ "work/workflow-state/disagreements.md",
66
+ "work/workflow-state/assumptions.md",
67
+ "work/workflow-state/01_analysis.md",
68
+ "work/workflow-state/02_plan.md",
69
+ "work/workflow-state/03_implementation.md",
70
+ "work/workflow-state/04_verification.md",
71
+ "work/workflow-state/05_release_notes.md",
72
+ "work/roadmap/now.md",
73
+ "work/roadmap/next.md",
74
+ "work/roadmap/later.md",
75
+ "_system/architecture/CANON.md",
76
+ "_system/architecture/invariants.yml",
77
+ "_system/do-not-repeat/abandoned-designs.md",
78
+ "_system/do-not-repeat/failed-experiments.md",
79
+ "_system/do-not-repeat/bad-patterns.md",
80
+ "_system/do-not-repeat/rejected-libraries.md",
81
+ "_system/drift/baselines.md",
82
+ "_system/golden-data/.gitkeep",
83
+ "_system/golden-data/README.md",
84
+ "_system/artifacts/confidence-calibration.json",
85
+ "_system/artifacts/usage.json"
86
+ ]
87
+ }
88
+ },
89
+ "userOwned": {
90
+ "description": "Files/directories that should NEVER be overwritten by framework",
91
+ "directories": [
92
+ ".override",
93
+ "src",
94
+ "tests",
95
+ "work/intent/features",
96
+ "work/intent/bugs",
97
+ "work/intent/tech-debt",
98
+ "work/roadmap",
99
+ "work/release",
100
+ "work/workflow-state"
101
+ ],
102
+ "files": [
103
+ "README.md",
104
+ ".gitignore",
105
+ "tsconfig.json",
106
+ "tsconfig.eslint.json",
107
+ "vitest.config.ts",
108
+ ".eslintrc.json",
109
+ ".prettierrc",
110
+ ".npmrc",
111
+ ".shipitrc"
112
+ ],
113
+ "note": "package.json is user-owned but framework merges scripts/devDependencies. project.json is framework-owned but preserves user edits to name/description/version."
114
+ },
115
+ "stackSpecific": {
116
+ "typescript-nodejs": {
117
+ "files": [
118
+ "package.json",
119
+ "tsconfig.json",
120
+ "tsconfig.eslint.json",
121
+ ".eslintrc.json",
122
+ "vitest.config.ts",
123
+ "stryker.conf.json",
124
+ ".npmrc"
125
+ ],
126
+ "directories": [],
127
+ "description": "Only created for TypeScript/Node.js projects"
128
+ },
129
+ "python": {
130
+ "files": ["pyproject.toml", "requirements.txt"],
131
+ "directories": [],
132
+ "description": "Only created for Python projects (if not already exist)"
133
+ },
134
+ "other": {
135
+ "files": [],
136
+ "directories": [],
137
+ "description": "No stack-specific files created"
138
+ }
139
+ },
140
+ "neverCopied": {
141
+ "description": "Framework-only files that are NEVER copied to user projects",
142
+ "directories": ["tests"],
143
+ "files": [
144
+ "README.md",
145
+ "CHANGELOG.md",
146
+ "package.json",
147
+ "tsconfig.json",
148
+ ".eslintrc.json",
149
+ "vitest.config.ts",
150
+ "tests/TEST_PLAN.md",
151
+ "tests/ISSUES.md",
152
+ "tests/fixtures.json"
153
+ ],
154
+ "note": "tests/ directory contains framework test fixtures/templates, not user test structure. User projects have their own tests/ directory."
155
+ },
156
+ "mergeStrategy": {
157
+ "package.json": {
158
+ "action": "merge",
159
+ "description": "Merge ShipIt scripts into existing package.json scripts section, add devDependencies if missing",
160
+ "preserve": ["name", "version", "description", "dependencies", "existing scripts"]
161
+ },
162
+ "project.json": {
163
+ "action": "skipIfExists",
164
+ "description": "If project.json exists, skip creation (user may have customized it)"
165
+ },
166
+ ".gitignore": {
167
+ "action": "merge",
168
+ "description": "Append ShipIt patterns if not already present"
169
+ }
170
+ },
171
+ "detection": {
172
+ "shipitAlreadyInstalled": [
173
+ "project.json",
174
+ "_system/architecture/CANON.md",
175
+ "scripts/workflow-orchestrator.sh"
176
+ ],
177
+ "description": "If any of these exist, consider ShipIt already initialized"
178
+ }
179
+ }
@@ -0,0 +1 @@
1
+ { "entries": [] }