@planu/cli 5.3.59 → 5.3.61

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 CHANGED
@@ -1,3 +1,34 @@
1
+ ## [5.3.61] - 2026-08-26
2
+
3
+ ### Refactoring
4
+ - refactor(SPEC-1636): remove two unenforced agent rules and migrate their conventions
5
+ - refactor(SPEC-1638): delete orphaned config assets and dead type modules
6
+
7
+ ### Chores
8
+ - chore(SPEC-1636): close spec with dual-provider implementation review evidence
9
+ - chore(SPEC-1636): approve after five-round dual-provider review
10
+ - chore(SPEC-1638): record done-state lifecycle artifacts
11
+ - chore(SPEC-1638): qualify the ios template path in canonical scope
12
+ - chore(SPEC-1638): declare executable scenarios for the compliance runner
13
+ - chore(SPEC-1638): mark acceptance criteria done after verified implementation
14
+
15
+
16
+ ## [5.3.60] - 2026-08-26
17
+
18
+ ### Bug Fixes
19
+ - fix(SPEC-1634): normalize scenario test-link descriptions across colon spacing
20
+ - fix(SPEC-1634): accept path-shaped colon forms in scenario tests entries
21
+ - fix(SPEC-1633): point the documented human validation gate at validate:full
22
+
23
+ ### Refactoring
24
+ - refactor(SPEC-1633): dedupe validate against check:strict in the release plan
25
+
26
+ ### Chores
27
+ - chore(planu): close SPEC-1633 and SPEC-1634
28
+ - chore(SPEC-1633,SPEC-1634): normalize file ownership and risk sections for the handoff gate
29
+ - chore(SPEC-1633,SPEC-1634): approve both specs with challenge resolution
30
+
31
+
1
32
  ## [5.3.59] - 2026-08-26
2
33
 
3
34
  ### Bug Fixes
package/README.md CHANGED
@@ -114,9 +114,9 @@ planu/ # Portable, version-controlled project contract
114
114
 
115
115
  ```bash
116
116
  pnpm install # Install dependencies
117
- pnpm build # Compile TS + Build Rust bridge
117
+ pnpm build # Compile TypeScript
118
118
  pnpm dev # Watch mode
119
- pnpm validate # Canonical local validation contract
119
+ pnpm validate:full # Build plus every static gate plus the full suite
120
120
  pnpm check:strict # Extended local quality gates
121
121
  pnpm test # Run the full test suite
122
122
  pnpm release:local # Local-first release flow when shipping
@@ -1 +1 @@
1
- {"schemaVersion":1,"commit":"8ad23a1b29d2ffe8c44122aba263f9a6e9577d80"}
1
+ {"schemaVersion":1,"commit":"6e2fa966b00066e50f9458f35dc2716e3780763f"}
@@ -5,6 +5,7 @@ export interface ScenarioTestLink {
5
5
  line?: number;
6
6
  runner?: string;
7
7
  config?: string;
8
+ description?: string;
8
9
  }
9
10
  export interface ScenarioStep {
10
11
  keyword: string;
@@ -17,6 +17,35 @@ export class ComplianceCommandTerminalError extends Error {
17
17
  this.name = 'ComplianceCommandTerminalError';
18
18
  }
19
19
  }
20
+ const WINDOWS_DRIVE_PATH = /^[A-Za-z]:[\\/]/;
21
+ const PATH_SHAPED = /[/\\]/;
22
+ const FILE_EXTENSION = /\.[A-Za-z0-9]+$/;
23
+ function isPathShapedSegment(segment) {
24
+ return segment.length > 0 && (PATH_SHAPED.test(segment) || FILE_EXTENSION.test(segment));
25
+ }
26
+ function parseTestLinkString(raw) {
27
+ if (WINDOWS_DRIVE_PATH.test(raw)) {
28
+ return { path: raw };
29
+ }
30
+ const colonIndex = raw.indexOf(':');
31
+ if (colonIndex === -1) {
32
+ return { path: raw };
33
+ }
34
+ const path = raw.slice(0, colonIndex);
35
+ if (!isPathShapedSegment(path)) {
36
+ return null;
37
+ }
38
+ const remainder = raw.slice(colonIndex + 1);
39
+ const remainderColonIndex = remainder.indexOf(':');
40
+ const linePart = remainderColonIndex === -1 ? remainder : remainder.slice(0, remainderColonIndex);
41
+ if (/^\d+$/.test(linePart)) {
42
+ const description = remainderColonIndex === -1 ? undefined : remainder.slice(remainderColonIndex + 1).trim();
43
+ const line = Number.parseInt(linePart, 10);
44
+ return description ? { path, line, description } : { path, line };
45
+ }
46
+ const description = remainder.trim();
47
+ return description ? { path, description } : { path };
48
+ }
20
49
  // eslint-disable-next-line complexity, max-lines-per-function -- parses the supported scenario YAML subset without executing it
21
50
  export function parseFrontmatterScenarios(raw) {
22
51
  const match = /^---\n([\s\S]*?)\n---\n/.exec(raw);
@@ -105,9 +134,10 @@ export function parseFrontmatterScenarios(raw) {
105
134
  continue;
106
135
  }
107
136
  const stringMatch = /^\s+-\s+["']?([^'":\s][^'"]*?)["']?\s*$/.exec(trimmed);
108
- if (stringMatch?.[1] && !stringMatch[1].includes(':')) {
137
+ const testLink = stringMatch?.[1] ? parseTestLinkString(stringMatch[1]) : null;
138
+ if (testLink) {
109
139
  currentScenario.tests ??= [];
110
- currentScenario.tests.push({ path: stringMatch[1] });
140
+ currentScenario.tests.push(testLink);
111
141
  continue;
112
142
  }
113
143
  const metadataMatch = /^\s+(line|runner|config):\s*["']?(.+?)["']?\s*$/.exec(trimmed);
@@ -170,7 +170,6 @@ export * from './spec-lock-v2.js';
170
170
  export * from './diagram.js';
171
171
  export * from './browser-validator.js';
172
172
  export * from './build-freshness.js';
173
- export * from './google-workspace.js';
174
173
  export * from './skill-eval.js';
175
174
  export * from './spec-marketplace.js';
176
175
  export * from './spec-quality.js';
@@ -206,11 +205,9 @@ export * from './code-graph-integration.js';
206
205
  export * from './e2e-test-generator.js';
207
206
  export * from './drift-watcher.js';
208
207
  export * from './audit.js';
209
- export * from './multi-repo.js';
210
208
  export * from './compliance-tests.js';
211
209
  export * from './auto-promoter.js';
212
210
  export * from './cost-guardrails.js';
213
- export * from './mcp-gateway.js';
214
211
  export * from './health.js';
215
212
  export * from './context-profile.js';
216
213
  export * from './ears.js';
@@ -230,7 +227,6 @@ export * from './compliance-gate.js';
230
227
  export * from './schema-parity.js';
231
228
  export * from './auto-update.js';
232
229
  export * from './tdd-enforcement.js';
233
- export * from './agent-guarantees.js';
234
230
  export * from './clarification.js';
235
231
  export * from './spec-format.js';
236
232
  export * from './elicit-schema.js';
@@ -167,7 +167,6 @@ export * from './spec-lock-v2.js';
167
167
  export * from './diagram.js';
168
168
  export * from './browser-validator.js';
169
169
  export * from './build-freshness.js';
170
- export * from './google-workspace.js';
171
170
  export * from './skill-eval.js';
172
171
  export * from './spec-marketplace.js';
173
172
  export * from './spec-quality.js';
@@ -203,11 +202,9 @@ export * from './code-graph-integration.js';
203
202
  export * from './e2e-test-generator.js';
204
203
  export * from './drift-watcher.js';
205
204
  export * from './audit.js';
206
- export * from './multi-repo.js';
207
205
  export * from './compliance-tests.js';
208
206
  export * from './auto-promoter.js';
209
207
  export * from './cost-guardrails.js';
210
- export * from './mcp-gateway.js';
211
208
  export * from './health.js';
212
209
  export * from './context-profile.js';
213
210
  export * from './ears.js';
@@ -227,7 +224,6 @@ export * from './compliance-gate.js';
227
224
  export * from './schema-parity.js';
228
225
  export * from './auto-update.js';
229
226
  export * from './tdd-enforcement.js';
230
- export * from './agent-guarantees.js';
231
227
  export * from './clarification.js';
232
228
  export * from './spec-format.js';
233
229
  export * from './elicit-schema.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "5.3.59",
3
+ "version": "5.3.61",
4
4
  "description": "Planu — MCP Server for Spec Driven Development. Cross-platform (Linux/macOS/Windows, x64/arm64).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -29,7 +29,7 @@
29
29
  "generate:host-tool-registry": "node scripts/generate-host-tool-registry.mjs",
30
30
  "release:local": "bash scripts/release-local.sh",
31
31
  "release:publish": "bash scripts/release-local.sh --publish",
32
- "build": "pnpm clean && pnpm build:ts",
32
+ "build": "pnpm build:ts",
33
33
  "build:ts": "pnpm clean && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node scripts/copy-runtime-assets.mjs",
34
34
  "build:obfuscated": "pnpm build && node scripts/obfuscate.mjs",
35
35
  "dev": "tsc --watch",
@@ -86,7 +86,8 @@
86
86
  "prepublishOnly": "bash scripts/prepublish-guard.sh",
87
87
  "prepack": "pnpm build:ts && pnpm package:size",
88
88
  "test:debug": "vitest run --inspect-brk --single-thread",
89
- "validate": "pnpm build && pnpm typecheck && pnpm verify:typescript-migration && pnpm lint:gate && pnpm format:check && pnpm test:release-gate",
89
+ "validate": "pnpm build && pnpm verify:typescript-migration",
90
+ "validate:full": "pnpm build && pnpm typecheck && pnpm verify:typescript-migration && pnpm lint:gate && pnpm format:check && pnpm test:coverage",
90
91
  "docker:build": "docker build -t planu .",
91
92
  "docker:run": "docker compose up",
92
93
  "publish:blog": "node scripts/publish-blog.mjs",
package/planu-plugin.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dev.planu.cli",
3
3
  "displayName": "Planu — Spec Driven Development",
4
4
  "description": "Manage software specs, estimations, and autonomous SDD workflows. Language-agnostic MCP server for Claude Code.",
5
- "version": "5.3.59",
5
+ "version": "5.3.61",
6
6
  "icon": "assets/plugin/icon.svg",
7
7
  "command": ["npx", "@planu/cli@latest"],
8
8
  "packageName": "@planu/cli",
@@ -1,149 +0,0 @@
1
- name: Android CI/CD
2
-
3
- on:
4
- push:
5
- branches: [main, develop]
6
- pull_request:
7
- branches: [main, develop]
8
- workflow_dispatch:
9
-
10
- jobs:
11
-
12
- android-test:
13
- name: Android — Gradle Unit Tests
14
- runs-on: ubuntu-latest
15
- steps:
16
- - name: Checkout code
17
- uses: actions/checkout@v4
18
-
19
- - name: Setup JDK
20
- uses: actions/setup-java@v4
21
- with:
22
- java-version: '17'
23
- distribution: temurin
24
-
25
- - name: Cache Gradle packages
26
- uses: actions/cache@v4
27
- with:
28
- path: |
29
- ~/.gradle/caches
30
- ~/.gradle/wrapper
31
- key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
32
- restore-keys: ${{ runner.os }}-gradle-
33
-
34
- - name: Grant Gradle execute permission
35
- run: chmod +x gradlew
36
-
37
- - name: Run unit tests
38
- run: ./gradlew :{{module}}:testDebugUnitTest
39
-
40
- - name: Upload test reports
41
- uses: actions/upload-artifact@v4
42
- with:
43
- name: test-results
44
- path: '{{module}}/build/reports/tests/'
45
- if-no-files-found: warn
46
-
47
- android-sign:
48
- name: Android — Sign Release AAB
49
- runs-on: ubuntu-latest
50
- needs: android-test
51
- if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main'
52
- env:
53
- KEYSTORE_FILE: ${{ secrets.KEYSTORE_FILE }}
54
- KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
55
- KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
56
- KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
57
- steps:
58
- - name: Checkout code
59
- uses: actions/checkout@v4
60
-
61
- - name: Setup JDK
62
- uses: actions/setup-java@v4
63
- with:
64
- java-version: '17'
65
- distribution: temurin
66
-
67
- - name: Cache Gradle packages
68
- uses: actions/cache@v4
69
- with:
70
- path: |
71
- ~/.gradle/caches
72
- ~/.gradle/wrapper
73
- key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
74
- restore-keys: ${{ runner.os }}-gradle-
75
-
76
- - name: Grant Gradle execute permission
77
- run: chmod +x gradlew
78
-
79
- - name: Decode keystore
80
- run: echo "$KEYSTORE_FILE" | base64 --decode > keystore.jks
81
- env:
82
- KEYSTORE_FILE: ${{ secrets.KEYSTORE_FILE }}
83
-
84
- - name: Build signed release AAB
85
- run: |
86
- ./gradlew :{{module}}:bundleRelease \
87
- -Pandroid.injected.signing.store.file=$(pwd)/keystore.jks \
88
- -Pandroid.injected.signing.store.password="$KEYSTORE_PASSWORD" \
89
- -Pandroid.injected.signing.key.alias="$KEY_ALIAS" \
90
- -Pandroid.injected.signing.key.password="$KEY_PASSWORD"
91
- env:
92
- KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
93
- KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
94
- KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
95
-
96
- - name: Upload signed AAB
97
- uses: actions/upload-artifact@v4
98
- with:
99
- name: release-aab
100
- path: '{{module}}/build/outputs/bundle/release/*.aab'
101
-
102
- android-deploy:
103
- name: Android — Play Console Deploy
104
- runs-on: ubuntu-latest
105
- needs: android-sign
106
- if: github.ref == 'refs/heads/main'
107
- env:
108
- PLAY_STORE_JSON_KEY: ${{ secrets.PLAY_STORE_JSON_KEY }}
109
- steps:
110
- - name: Checkout code
111
- uses: actions/checkout@v4
112
-
113
- - name: Download signed AAB
114
- uses: actions/download-artifact@v4
115
- with:
116
- name: release-aab
117
- path: ./release
118
-
119
- - name: Setup Ruby for Fastlane
120
- uses: ruby/setup-ruby@v1
121
- with:
122
- ruby-version: 'bundler-cache: true'
123
-
124
- - name: Install Fastlane
125
- run: gem install fastlane --no-document
126
-
127
- - name: Decode Play Store JSON key
128
- run: echo "$PLAY_STORE_JSON_KEY" > play-store-key.json
129
- env:
130
- PLAY_STORE_JSON_KEY: ${{ secrets.PLAY_STORE_JSON_KEY }}
131
-
132
- - name: Upload to Play Console (internal track)
133
- run: |
134
- fastlane supply \
135
- --aab ./release/{{module}}/build/outputs/bundle/release/*.aab \
136
- --package_name "{{bundleId}}" \
137
- --track internal \
138
- --json_key ./play-store-key.json
139
-
140
- # Required GitHub Secrets:
141
- # KEYSTORE_FILE — Base64-encoded .jks keystore file
142
- # KEYSTORE_PASSWORD — Password for the keystore file
143
- # KEY_ALIAS — Alias of the signing key in the keystore
144
- # KEY_PASSWORD — Password for the signing key
145
- # PLAY_STORE_JSON_KEY — JSON content of the Google Play service account key
146
- #
147
- # Placeholders:
148
- # {{module}} — Gradle module name (e.g. app)
149
- # {{bundleId}} — Android application ID (e.g. com.example.myapp)
@@ -1,120 +0,0 @@
1
- name: iOS CI/CD
2
-
3
- on:
4
- push:
5
- branches: [main, develop]
6
- pull_request:
7
- branches: [main, develop]
8
- workflow_dispatch:
9
-
10
- jobs:
11
-
12
- ios-test:
13
- name: iOS — Xcode Build & Test
14
- runs-on: macos-latest
15
- env:
16
- APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
17
- APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
18
- APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
19
- steps:
20
- - name: Checkout code
21
- uses: actions/checkout@v4
22
-
23
- - name: Select Xcode version
24
- run: sudo xcode-select -s /Applications/Xcode.app
25
-
26
- - name: Build and test (Xcode)
27
- run: |
28
- xcodebuild clean build test \
29
- -scheme "{{scheme}}" \
30
- -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' \
31
- CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO \
32
- | xcpretty && exit "${PIPESTATUS[0]}"
33
-
34
- ios-testflight:
35
- name: iOS — TestFlight Upload
36
- runs-on: macos-latest
37
- needs: ios-test
38
- if: github.ref == 'refs/heads/develop'
39
- env:
40
- APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
41
- APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
42
- APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
43
- MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
44
- steps:
45
- - name: Checkout code
46
- uses: actions/checkout@v4
47
-
48
- - name: Select Xcode version
49
- run: sudo xcode-select -s /Applications/Xcode.app
50
-
51
- - name: Setup Ruby for Fastlane
52
- uses: ruby/setup-ruby@v1
53
- with:
54
- ruby-version: 'bundler-cache: true'
55
-
56
- - name: Install Fastlane
57
- run: gem install fastlane --no-document
58
-
59
- - name: Build IPA
60
- run: |
61
- fastlane gym \
62
- --scheme "{{scheme}}" \
63
- --export_method app-store \
64
- --output_directory ./build
65
- env:
66
- MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
67
-
68
- - name: Upload to TestFlight
69
- run: fastlane pilot upload --ipa ./build/*.ipa --skip_waiting_for_build_processing true
70
-
71
- ios-appstore:
72
- name: iOS — App Store Submission
73
- runs-on: macos-latest
74
- needs: ios-test
75
- if: github.ref == 'refs/heads/main'
76
- env:
77
- APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
78
- APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
79
- APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
80
- MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
81
- steps:
82
- - name: Checkout code
83
- uses: actions/checkout@v4
84
-
85
- - name: Select Xcode version
86
- run: sudo xcode-select -s /Applications/Xcode.app
87
-
88
- - name: Setup Ruby for Fastlane
89
- uses: ruby/setup-ruby@v1
90
- with:
91
- ruby-version: 'bundler-cache: true'
92
-
93
- - name: Install Fastlane
94
- run: gem install fastlane --no-document
95
-
96
- - name: Build IPA (production)
97
- run: |
98
- fastlane gym \
99
- --scheme "{{scheme}}" \
100
- --configuration Release \
101
- --export_method app-store \
102
- --output_directory ./build
103
- env:
104
- MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
105
-
106
- - name: Submit to App Store
107
- run: |
108
- fastlane deliver \
109
- --ipa ./build/*.ipa \
110
- --submit_for_review false \
111
- --automatic_release false
112
-
113
- # Required GitHub Secrets:
114
- # APPLE_API_KEY — Base64-encoded .p8 private key from App Store Connect
115
- # APPLE_API_ISSUER_ID — Issuer ID from App Store Connect API keys page
116
- # APPLE_API_KEY_ID — Key ID from App Store Connect API keys page
117
- # MATCH_PASSWORD — Encryption passphrase for Fastlane Match certificates
118
- #
119
- # Placeholders:
120
- # {{scheme}} — Replace with your Xcode scheme name (e.g. MyApp)
@@ -1,125 +0,0 @@
1
- {
2
- "huTemplates": {
3
- "feature": {
4
- "descriptionFormat": "As a {role}, I want {goal}, so that {benefit}.",
5
- "sections": ["Description", "Acceptance Criteria", "Out of Scope", "Dependencies", "Tags"]
6
- },
7
- "bugfix": {
8
- "descriptionFormat": "Bug: {description}.\n\n**Expected behavior:** {expected}\n\n**Actual behavior:** {actual}\n\n**Steps to reproduce:**\n1. {steps}",
9
- "sections": [
10
- "Bug Description",
11
- "Steps to Reproduce",
12
- "Expected vs Actual",
13
- "Root Cause Analysis",
14
- "Fix Criteria",
15
- "Regression Tests",
16
- "Dependencies",
17
- "Tags"
18
- ]
19
- },
20
- "refactor": {
21
- "descriptionFormat": "Refactoring: {what}.\n\nMotivation: {motivation}\n\nExpected improvements: {improvements}",
22
- "sections": [
23
- "Refactoring Description",
24
- "Motivation",
25
- "Current State",
26
- "Target State",
27
- "Acceptance Criteria",
28
- "Migration Plan",
29
- "Dependencies",
30
- "Tags"
31
- ]
32
- },
33
- "infra": {
34
- "descriptionFormat": "Infrastructure change: {description}.\n\nEnvironments affected: {environments}\n\nRollback plan: {rollback}",
35
- "sections": [
36
- "Infrastructure Description",
37
- "Environments Affected",
38
- "Schema Changes",
39
- "Acceptance Criteria",
40
- "Rollback Plan",
41
- "Dependencies",
42
- "Tags"
43
- ]
44
- },
45
- "docs": {
46
- "descriptionFormat": "Documentation: {description}.\n\nTarget audience: {audience}\n\nFormat: {format}",
47
- "sections": [
48
- "Documentation Description",
49
- "Target Audience",
50
- "Content Outline",
51
- "Acceptance Criteria",
52
- "Dependencies",
53
- "Tags"
54
- ]
55
- },
56
- "project": {
57
- "descriptionFormat": "Project: {description}.\n\nObjective: {objective}\n\nTimeline: {timeline}",
58
- "sections": ["Description", "Objective", "Acceptance Criteria", "Dependencies", "Tags"]
59
- }
60
- },
61
- "fichaTemplates": {
62
- "trivial": {
63
- "sections": ["Metadata", "Estimation", "Files", "Verification"],
64
- "excludeSections": ["DataFlow", "Interfaces", "Behavior"]
65
- },
66
- "feature": {
67
- "sections": [
68
- "Metadata",
69
- "Estimation",
70
- "Interfaces",
71
- "Behavior",
72
- "DataFlow",
73
- "Files",
74
- "Verification",
75
- "TechnicalNotes",
76
- "PostImplementation"
77
- ],
78
- "excludeSections": []
79
- },
80
- "cross-module": {
81
- "sections": [
82
- "Metadata",
83
- "Estimation",
84
- "AffectedModules",
85
- "Interfaces",
86
- "Behavior",
87
- "DataFlow",
88
- "Files",
89
- "Verification",
90
- "TechnicalNotes",
91
- "PostImplementation"
92
- ],
93
- "excludeSections": []
94
- },
95
- "architectural": {
96
- "sections": [
97
- "Metadata",
98
- "Estimation",
99
- "ArchitecturalImpact",
100
- "AffectedModules",
101
- "Interfaces",
102
- "Behavior",
103
- "DataFlow",
104
- "Files",
105
- "Verification",
106
- "TechnicalNotes",
107
- "PostImplementation"
108
- ],
109
- "excludeSections": []
110
- }
111
- },
112
- "stackTerminology": {
113
- "typescript": { "types": "Interfaces/Types", "models": "Interfaces", "structLabel": "TypeScript Interfaces" },
114
- "javascript": { "types": "Types/JSDoc", "models": "Schemas", "structLabel": "JavaScript Schemas" },
115
- "python": { "types": "Models/Types", "models": "Models", "structLabel": "Python Models" },
116
- "go": { "types": "Structs", "models": "Structs", "structLabel": "Go Structs" },
117
- "rust": { "types": "Structs/Enums", "models": "Structs", "structLabel": "Rust Structs" },
118
- "java": { "types": "Classes/Interfaces", "models": "POJOs", "structLabel": "Java Classes" },
119
- "kotlin": { "types": "Data Classes/Interfaces", "models": "Data Classes", "structLabel": "Kotlin Data Classes" },
120
- "swift": { "types": "Structs/Protocols", "models": "Structs", "structLabel": "Swift Structs" },
121
- "csharp": { "types": "Classes/Interfaces", "models": "Models", "structLabel": "C# Classes" },
122
- "ruby": { "types": "Classes/Modules", "models": "Models", "structLabel": "Ruby Classes" },
123
- "php": { "types": "Classes/Interfaces", "models": "Models", "structLabel": "PHP Classes" }
124
- }
125
- }
@@ -1,73 +0,0 @@
1
- export type AgentLifecycleState = 'spawned' | 'running' | 'completed' | 'failed' | 'timed_out' | 'stalled';
2
- export interface TrackedAgent {
3
- id: string;
4
- taskDescription: string;
5
- spawnedAt: string;
6
- lastHeartbeat: string | null;
7
- state: AgentLifecycleState;
8
- timeoutMs: number;
9
- retryCount: number;
10
- maxRetries: number;
11
- expectedDeliverables: string[];
12
- actualDeliverables: string[];
13
- completionScore: number;
14
- error: string | null;
15
- parentAgentId: string | null;
16
- }
17
- export interface AgentCompletionReport {
18
- sessionId: string;
19
- timestamp: string;
20
- totalAgents: number;
21
- completed: number;
22
- failed: number;
23
- stalled: number;
24
- timedOut: number;
25
- partial: number;
26
- agents: TrackedAgent[];
27
- overallScore: number;
28
- }
29
- export interface AgentGuaranteeConfig {
30
- defaultTimeoutMs: number;
31
- heartbeatIntervalMs: number;
32
- maxRetries: number;
33
- stallThresholdMs: number;
34
- blockSessionEnd: boolean;
35
- autoRetryOnStall: boolean;
36
- autoRetryOnFailure: boolean;
37
- }
38
- export type AgentLifecycleEventName = 'agent:spawned' | 'agent:heartbeat' | 'agent:completed' | 'agent:failed' | 'agent:stalled' | 'agent:timed_out' | 'agent:retry';
39
- export interface AgentLifecycleEvent {
40
- name: AgentLifecycleEventName;
41
- agentId: string;
42
- timestamp: string;
43
- data?: Record<string, unknown>;
44
- }
45
- export interface TrackAgentOptions {
46
- timeoutMs?: number;
47
- maxRetries?: number;
48
- expectedDeliverables?: string[];
49
- parentAgentId?: string | null;
50
- }
51
- export interface RecoveryAction {
52
- action: 'retry' | 'abandon' | 'notify';
53
- reason: string;
54
- agentId: string;
55
- }
56
- export interface GuaranteeData {
57
- version: string;
58
- config: AgentGuaranteeConfig;
59
- history: AgentCompletionReport[];
60
- updatedAt: string;
61
- }
62
- export interface GuaranteeAgentCompletionInput {
63
- projectPath: string;
64
- }
65
- export interface AgentCompletionReportInput {
66
- projectPath: string;
67
- sessionId?: string;
68
- }
69
- export interface ConfigureAgentGuaranteesInput {
70
- projectPath: string;
71
- config: Partial<AgentGuaranteeConfig>;
72
- }
73
- //# sourceMappingURL=agent-guarantees.d.ts.map
@@ -1,3 +0,0 @@
1
- // types/agent-guarantees.ts — SPEC-453 Agent Completion Guarantees
2
- export {};
3
- //# sourceMappingURL=agent-guarantees.js.map
@@ -1,39 +0,0 @@
1
- /** A spec entry for CSV/sheet export. */
2
- export interface SpecSheetEntry {
3
- id: string;
4
- title: string;
5
- status: string;
6
- estimate?: string;
7
- risk?: string;
8
- }
9
- /** Result of a Google Workspace export operation. */
10
- export interface GoogleWorkspaceExportResult {
11
- /** Spec ID that was exported. */
12
- specId: string;
13
- /** Formatted content ready for Google Docs. */
14
- formattedContent: string;
15
- /** Google Apps Script for creating the Doc. */
16
- appsScript: string;
17
- }
18
- /** Result of a Google Workspace sheet generation. */
19
- export interface GoogleWorkspaceSheetResult {
20
- /** CSV content ready for Google Sheets import. */
21
- csv: string;
22
- /** Number of specs included. */
23
- specCount: number;
24
- }
25
- /** Result of a Google Workspace import operation. */
26
- export interface GoogleWorkspaceImportResult {
27
- /** Converted spec content. */
28
- specContent: string;
29
- /** Whether the import was successful. */
30
- success: boolean;
31
- }
32
- /** Result of generating a Google Apps Script for live sync. */
33
- export interface GoogleWorkspaceScriptResult {
34
- /** Complete Apps Script code. */
35
- script: string;
36
- /** Instructions for setting up the script. */
37
- instructions: string;
38
- }
39
- //# sourceMappingURL=google-workspace.d.ts.map
@@ -1,3 +0,0 @@
1
- // types/google-workspace.ts — SPEC-310: Google Workspace Sync domain types
2
- export {};
3
- //# sourceMappingURL=google-workspace.js.map
@@ -1,34 +0,0 @@
1
- /** The manifest returned by a /.well-known/mcp endpoint. */
2
- export interface McpGatewayManifest {
3
- name?: string;
4
- version?: string;
5
- tools?: string[];
6
- resources?: string[];
7
- planuCompatible?: boolean;
8
- }
9
- /** A gateway discovered (or previously known) via auto-discovery. */
10
- export interface DiscoveredGateway {
11
- url: string;
12
- name: string;
13
- discoveredAt: string;
14
- lastSeenAt: string;
15
- planuCompatible: boolean;
16
- tools: string[];
17
- status: 'active' | 'unreachable' | 'incompatible';
18
- }
19
- /** Persisted registry of all known gateways. */
20
- export interface GatewayRegistry {
21
- gateways: DiscoveredGateway[];
22
- lastDiscoveryAt?: string;
23
- }
24
- /** Input for discover_mcp_gateways tool. */
25
- export interface DiscoverMcpGatewaysInput {
26
- projectPath: string;
27
- urls?: string[];
28
- includeLocalhost?: boolean;
29
- }
30
- /** Input for federation_discovery_status tool. */
31
- export interface FederationDiscoveryStatusInput {
32
- projectPath: string;
33
- }
34
- //# sourceMappingURL=mcp-gateway.d.ts.map
@@ -1,3 +0,0 @@
1
- // types/mcp-gateway.ts — SPEC-392: MCP Gateway Auto-Discovery types
2
- export {};
3
- //# sourceMappingURL=mcp-gateway.js.map
@@ -1,39 +0,0 @@
1
- export interface RefactorSession {
2
- id: string;
3
- sourceSpecId: string;
4
- sourceProjectPath: string;
5
- affectedSymbols: string[];
6
- consumerProjects: ConsumerProject[];
7
- startedAt: string;
8
- status: 'scanning' | 'companion-specs-created' | 'in-progress' | 'completed';
9
- }
10
- export interface ConsumerProject {
11
- projectPath: string;
12
- projectId: string;
13
- usageLocations: string[];
14
- companionSpecId?: string;
15
- status: 'pending' | 'spec-created' | 'implementing' | 'done';
16
- }
17
- export interface CoordinateRefactorInput {
18
- projectPath: string;
19
- specId: string;
20
- affectedSymbols: string[];
21
- }
22
- export interface SyncRefactorStatusInput {
23
- projectPath: string;
24
- refactorId: string;
25
- }
26
- export interface RefactorRegistry {
27
- sessions: RefactorSession[];
28
- updatedAt: string;
29
- }
30
- export interface RefactorStatusReport {
31
- refactorId: string;
32
- sourceSpec: string;
33
- totalConsumers: number;
34
- completed: number;
35
- inProgress: number;
36
- pending: number;
37
- overallProgress: number;
38
- }
39
- //# sourceMappingURL=multi-repo.d.ts.map
@@ -1,5 +0,0 @@
1
- // types/multi-repo.ts — SPEC-389: Multi-Repo Refactoring Coordination types
2
- // NOTE: RefactorRegistry is an internal storage shape, kept here to satisfy the
3
- // no-restricted-syntax rule that forbids type/interface declarations in src/storage/.
4
- export {};
5
- //# sourceMappingURL=multi-repo.js.map