@cluesmith/codev 3.1.4 → 3.1.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 (86) hide show
  1. package/dashboard-dist/assets/{index-DSENHqFj.js → index-CaJH8x6Z.js} +24 -24
  2. package/dashboard-dist/assets/index-CaJH8x6Z.js.map +1 -0
  3. package/dashboard-dist/assets/{index-Cl5tt1AP.css → index-DB1KBSNE.css} +1 -1
  4. package/dashboard-dist/index.html +2 -2
  5. package/dist/agent-farm/commands/spawn-worktree.d.ts +8 -2
  6. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  7. package/dist/agent-farm/commands/spawn-worktree.js +53 -9
  8. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  9. package/dist/agent-farm/lib/tunnel-client.d.ts +4 -0
  10. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  11. package/dist/agent-farm/lib/tunnel-client.js +12 -5
  12. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  13. package/dist/agent-farm/servers/overview.d.ts +23 -131
  14. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  15. package/dist/agent-farm/servers/overview.js +52 -31
  16. package/dist/agent-farm/servers/overview.js.map +1 -1
  17. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  18. package/dist/agent-farm/servers/tower-routes.js +79 -1
  19. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  20. package/dist/agent-farm/types.d.ts +13 -3
  21. package/dist/agent-farm/types.d.ts.map +1 -1
  22. package/dist/commands/adopt.js +2 -1
  23. package/dist/commands/adopt.js.map +1 -1
  24. package/dist/commands/consult/index.d.ts +7 -1
  25. package/dist/commands/consult/index.d.ts.map +1 -1
  26. package/dist/commands/consult/index.js +2 -2
  27. package/dist/commands/consult/index.js.map +1 -1
  28. package/dist/commands/consult/usage-extractor.d.ts.map +1 -1
  29. package/dist/commands/consult/usage-extractor.js +1 -0
  30. package/dist/commands/consult/usage-extractor.js.map +1 -1
  31. package/dist/commands/doctor.d.ts.map +1 -1
  32. package/dist/commands/doctor.js +22 -0
  33. package/dist/commands/doctor.js.map +1 -1
  34. package/dist/commands/init.js +2 -1
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/porch/index.d.ts.map +1 -1
  37. package/dist/commands/porch/index.js +15 -17
  38. package/dist/commands/porch/index.js.map +1 -1
  39. package/dist/commands/porch/next.d.ts.map +1 -1
  40. package/dist/commands/porch/next.js +5 -20
  41. package/dist/commands/porch/next.js.map +1 -1
  42. package/dist/commands/porch/protocol.d.ts +8 -13
  43. package/dist/commands/porch/protocol.d.ts.map +1 -1
  44. package/dist/commands/porch/protocol.js +9 -27
  45. package/dist/commands/porch/protocol.js.map +1 -1
  46. package/dist/commands/porch/types.d.ts +4 -18
  47. package/dist/commands/porch/types.d.ts.map +1 -1
  48. package/dist/commands/update.d.ts +4 -0
  49. package/dist/commands/update.d.ts.map +1 -1
  50. package/dist/commands/update.js +41 -2
  51. package/dist/commands/update.js.map +1 -1
  52. package/dist/lib/forge-contracts.d.ts +7 -0
  53. package/dist/lib/forge-contracts.d.ts.map +1 -1
  54. package/dist/lib/forge-contracts.js.map +1 -1
  55. package/dist/lib/forge.js +1 -1
  56. package/dist/lib/forge.js.map +1 -1
  57. package/dist/lib/github.d.ts +32 -0
  58. package/dist/lib/github.d.ts.map +1 -1
  59. package/dist/lib/github.js +45 -0
  60. package/dist/lib/github.js.map +1 -1
  61. package/dist/lib/gitignore.d.ts +60 -0
  62. package/dist/lib/gitignore.d.ts.map +1 -0
  63. package/dist/lib/gitignore.js +114 -0
  64. package/dist/lib/gitignore.js.map +1 -0
  65. package/dist/lib/pr-gate-audit.d.ts +54 -0
  66. package/dist/lib/pr-gate-audit.d.ts.map +1 -0
  67. package/dist/lib/pr-gate-audit.js +106 -0
  68. package/dist/lib/pr-gate-audit.js.map +1 -0
  69. package/dist/lib/scaffold.d.ts +4 -23
  70. package/dist/lib/scaffold.d.ts.map +1 -1
  71. package/dist/lib/scaffold.js +4 -49
  72. package/dist/lib/scaffold.js.map +1 -1
  73. package/package.json +4 -4
  74. package/scripts/forge/gitea/issue-search.sh +28 -0
  75. package/scripts/forge/github/issue-search.sh +13 -0
  76. package/scripts/forge/gitlab/issue-search.sh +19 -0
  77. package/scripts/forge/linear/issue-search.sh +49 -0
  78. package/skeleton/.claude/skills/update-arch-docs/SKILL.md +1 -1
  79. package/skeleton/protocols/aspir/protocol.json +5 -5
  80. package/skeleton/protocols/bugfix/prompts/pr.md +5 -2
  81. package/skeleton/protocols/bugfix/protocol.json +2 -1
  82. package/skeleton/protocols/spir/protocol.json +5 -5
  83. package/skeleton/roles/architect.md +27 -0
  84. package/skeleton/templates/AGENTS.md +22 -0
  85. package/skeleton/templates/CLAUDE.md +22 -0
  86. package/dashboard-dist/assets/index-DSENHqFj.js.map +0 -1
@@ -0,0 +1,54 @@
1
+ /**
2
+ * PR-gate audit (#943) — guardrail enforcing #927's universal `pr` gate contract.
3
+ *
4
+ * #927 made Needs Attention surface PRs via the universal `pr` gate: porch
5
+ * requests the `pr` gate when a protocol's PR-creating phase completes
6
+ * (`isPrCreatingPhase`, i.e. `phase.gate === 'pr'`), and the dashboard / VSCode
7
+ * surface the PR from that pending gate (`derivePrReady`). A PR-producing
8
+ * protocol whose resolved definition carries NO `pr` gate is therefore never
9
+ * requested, and its PRs silently vanish from Needs Attention.
10
+ *
11
+ * `codev update` deliberately preserves user-modified files as local overrides
12
+ * (tier-1 `.codev/` / tier-2 `codev/`), so a customized override that predates
13
+ * #927 — and lacks a `pr` gate — keeps winning the 4-tier resolution while
14
+ * silently breaking surfacing. This module detects exactly that case so doctor
15
+ * and update can turn the silent breakage into an actionable migration prompt.
16
+ */
17
+ /**
18
+ * Bundled PR-producing protocols — the set whose PR-creating phase carries a
19
+ * `pr` gate in the stock skeleton (mirrors `derivePrReady`'s documented set in
20
+ * overview.ts). experiment/maintain are NOT PR-producing (their completion
21
+ * gates are `experiment-complete` / `maintain-complete`, not `pr`) and are
22
+ * excluded by design. A new PR-producing protocol must be added here.
23
+ */
24
+ export declare const PR_PRODUCING_PROTOCOLS: readonly ["bugfix", "air", "spir", "aspir", "pir"];
25
+ /** Resolution tier the offending protocol.json was resolved from. */
26
+ export type PrGateSource = 'override' | 'cache' | 'skeleton';
27
+ export interface PrGateWarning {
28
+ /** Protocol name (e.g. "bugfix"). */
29
+ protocol: string;
30
+ /** Absolute path to the resolved protocol.json. */
31
+ resolvedPath: string;
32
+ /** Path relative to the workspace root, for display. */
33
+ displayPath: string;
34
+ /** Which resolution tier the offending file came from. */
35
+ source: PrGateSource;
36
+ }
37
+ /**
38
+ * Audit the bundled PR-producing protocols for a missing `pr` gate.
39
+ *
40
+ * Each protocol is resolved through the 4-tier resolver (local overrides win),
41
+ * and any whose resolved definition has no phase gated `pr` is flagged. Returns
42
+ * one entry per offending protocol; an empty array means every PR-producing
43
+ * protocol is correctly gated.
44
+ *
45
+ * Protocols that don't resolve at all, or whose override is unparseable, are
46
+ * skipped — neither is the "lost pr gate" condition this guardrail targets.
47
+ */
48
+ export declare function auditPrGates(workspaceRoot?: string): PrGateWarning[];
49
+ /**
50
+ * Format a PR-gate warning into a single loud, actionable line (no icon/indent
51
+ * — callers add those). Shared by doctor and update so the wording stays in sync.
52
+ */
53
+ export declare function formatPrGateWarning(w: PrGateWarning): string;
54
+ //# sourceMappingURL=pr-gate-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-gate-audit.d.ts","sourceRoot":"","sources":["../../src/lib/pr-gate-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,oDAAqD,CAAC;AAEzF,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,MAAM,EAAE,YAAY,CAAC;CACtB;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CA2BpE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAU5D"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * PR-gate audit (#943) — guardrail enforcing #927's universal `pr` gate contract.
3
+ *
4
+ * #927 made Needs Attention surface PRs via the universal `pr` gate: porch
5
+ * requests the `pr` gate when a protocol's PR-creating phase completes
6
+ * (`isPrCreatingPhase`, i.e. `phase.gate === 'pr'`), and the dashboard / VSCode
7
+ * surface the PR from that pending gate (`derivePrReady`). A PR-producing
8
+ * protocol whose resolved definition carries NO `pr` gate is therefore never
9
+ * requested, and its PRs silently vanish from Needs Attention.
10
+ *
11
+ * `codev update` deliberately preserves user-modified files as local overrides
12
+ * (tier-1 `.codev/` / tier-2 `codev/`), so a customized override that predates
13
+ * #927 — and lacks a `pr` gate — keeps winning the 4-tier resolution while
14
+ * silently breaking surfacing. This module detects exactly that case so doctor
15
+ * and update can turn the silent breakage into an actionable migration prompt.
16
+ */
17
+ import * as fs from 'node:fs';
18
+ import * as path from 'node:path';
19
+ import { resolveCodevFile, findWorkspaceRoot } from './skeleton.js';
20
+ /**
21
+ * Bundled PR-producing protocols — the set whose PR-creating phase carries a
22
+ * `pr` gate in the stock skeleton (mirrors `derivePrReady`'s documented set in
23
+ * overview.ts). experiment/maintain are NOT PR-producing (their completion
24
+ * gates are `experiment-complete` / `maintain-complete`, not `pr`) and are
25
+ * excluded by design. A new PR-producing protocol must be added here.
26
+ */
27
+ export const PR_PRODUCING_PROTOCOLS = ['bugfix', 'air', 'spir', 'aspir', 'pir'];
28
+ /**
29
+ * Extract a phase's gate name, accepting both the string form (`"gate": "pr"`)
30
+ * and the object form (`"gate": { "name": "pr", ... }`). Mirrors the gate
31
+ * parsing in porch's `normalizePhase` (commands/porch/protocol.ts) so this
32
+ * check stays faithful to how porch actually reads gates.
33
+ */
34
+ function gateName(phase) {
35
+ if (!phase || typeof phase !== 'object')
36
+ return undefined;
37
+ const gate = phase.gate;
38
+ if (typeof gate === 'string')
39
+ return gate;
40
+ if (gate && typeof gate === 'object') {
41
+ const name = gate.name;
42
+ return typeof name === 'string' ? name : undefined;
43
+ }
44
+ return undefined;
45
+ }
46
+ /** Classify which resolution tier a resolved path belongs to. */
47
+ function classifySource(root, resolvedPath) {
48
+ const dotCodev = path.join(root, '.codev') + path.sep;
49
+ const localCodev = path.join(root, 'codev') + path.sep;
50
+ if (resolvedPath.startsWith(dotCodev) || resolvedPath.startsWith(localCodev)) {
51
+ return 'override';
52
+ }
53
+ if (resolvedPath.includes(`${path.sep}skeleton${path.sep}`))
54
+ return 'skeleton';
55
+ return 'cache';
56
+ }
57
+ /**
58
+ * Audit the bundled PR-producing protocols for a missing `pr` gate.
59
+ *
60
+ * Each protocol is resolved through the 4-tier resolver (local overrides win),
61
+ * and any whose resolved definition has no phase gated `pr` is flagged. Returns
62
+ * one entry per offending protocol; an empty array means every PR-producing
63
+ * protocol is correctly gated.
64
+ *
65
+ * Protocols that don't resolve at all, or whose override is unparseable, are
66
+ * skipped — neither is the "lost pr gate" condition this guardrail targets.
67
+ */
68
+ export function auditPrGates(workspaceRoot) {
69
+ const root = workspaceRoot || findWorkspaceRoot();
70
+ const warnings = [];
71
+ for (const protocol of PR_PRODUCING_PROTOCOLS) {
72
+ const resolvedPath = resolveCodevFile(`protocols/${protocol}/protocol.json`, root);
73
+ if (!resolvedPath)
74
+ continue;
75
+ let phases;
76
+ try {
77
+ const json = JSON.parse(fs.readFileSync(resolvedPath, 'utf-8'));
78
+ phases = Array.isArray(json?.phases) ? json.phases : [];
79
+ }
80
+ catch {
81
+ continue; // Unparseable override — out of scope for the pr-gate check.
82
+ }
83
+ if (phases.some(p => gateName(p) === 'pr'))
84
+ continue;
85
+ warnings.push({
86
+ protocol,
87
+ resolvedPath,
88
+ displayPath: path.relative(root, resolvedPath) || resolvedPath,
89
+ source: classifySource(root, resolvedPath),
90
+ });
91
+ }
92
+ return warnings;
93
+ }
94
+ /**
95
+ * Format a PR-gate warning into a single loud, actionable line (no icon/indent
96
+ * — callers add those). Shared by doctor and update so the wording stays in sync.
97
+ */
98
+ export function formatPrGateWarning(w) {
99
+ const where = w.source === 'override'
100
+ ? `local override at \`${w.displayPath}\``
101
+ : `resolved from ${w.source} at \`${w.displayPath}\``;
102
+ return (`Protocol \`${w.protocol}\` (${where}) has no \`pr\` gate on its PR-creating phase. ` +
103
+ `Its PRs will not surface in Needs Attention (Codev ≥ 3.1.5). ` +
104
+ `Add \`"gate": "pr"\` to that phase, or remove the override to use the stock pr-gated protocol.`);
105
+ }
106
+ //# sourceMappingURL=pr-gate-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-gate-audit.js","sourceRoot":"","sources":["../../src/lib/pr-gate-audit.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,9 @@
1
1
  /**
2
- * Scaffold utilities for codev init and adopt commands
3
- * Extracted to eliminate duplication (Maintenance Run 0004)
2
+ * Scaffold utilities shared across codev init / adopt / update.
3
+ *
4
+ * Directory creation, skeleton copying, and root-file templating. Gitignore
5
+ * management lives in `./gitignore.ts` (extracted in issue #882).
4
6
  */
5
- /**
6
- * Standard gitignore entries for codev projects
7
- */
8
- export declare const CODEV_GITIGNORE_ENTRIES = "# Codev\n.agent-farm/\n.consult/\ncodev/.update-hashes.json\n.builders/\n";
9
- /**
10
- * Full gitignore content for new projects
11
- */
12
- export declare const FULL_GITIGNORE_CONTENT = "# Codev\n.agent-farm/\n.consult/\ncodev/.update-hashes.json\n.builders/\n\n# Dependencies\nnode_modules/\n\n# Build output\ndist/\n\n# OS files\n.DS_Store\n*.swp\n*.swo\n";
13
7
  interface CreateUserDirsOptions {
14
8
  skipExisting?: boolean;
15
9
  }
@@ -56,19 +50,6 @@ interface CopyRootFilesResult {
56
50
  * Copy root files (CLAUDE.md, AGENTS.md) with project name substitution
57
51
  */
58
52
  export declare function copyRootFiles(targetDir: string, skeletonDir: string, projectName: string, options?: CopyRootFilesOptions): CopyRootFilesResult;
59
- /**
60
- * Create a new .gitignore file with full content (for init)
61
- */
62
- export declare function createGitignore(targetDir: string): void;
63
- interface UpdateGitignoreResult {
64
- updated: boolean;
65
- created: boolean;
66
- alreadyPresent: boolean;
67
- }
68
- /**
69
- * Update existing .gitignore or create if not exists (for adopt)
70
- */
71
- export declare function updateGitignore(targetDir: string): UpdateGitignoreResult;
72
53
  interface CreateProjectsDirOptions {
73
54
  skipExisting?: boolean;
74
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,11 @@
1
1
  /**
2
- * Scaffold utilities for codev init and adopt commands
3
- * Extracted to eliminate duplication (Maintenance Run 0004)
2
+ * Scaffold utilities shared across codev init / adopt / update.
3
+ *
4
+ * Directory creation, skeleton copying, and root-file templating. Gitignore
5
+ * management lives in `./gitignore.ts` (extracted in issue #882).
4
6
  */
5
7
  import * as fs from 'node:fs';
6
8
  import * as path from 'node:path';
7
- /**
8
- * Standard gitignore entries for codev projects
9
- */
10
- export const CODEV_GITIGNORE_ENTRIES = `# Codev
11
- .agent-farm/
12
- .consult/
13
- codev/.update-hashes.json
14
- .builders/
15
- `;
16
- /**
17
- * Full gitignore content for new projects
18
- */
19
- export const FULL_GITIGNORE_CONTENT = `${CODEV_GITIGNORE_ENTRIES}
20
- # Dependencies
21
- node_modules/
22
-
23
- # Build output
24
- dist/
25
-
26
- # OS files
27
- .DS_Store
28
- *.swp
29
- *.swo
30
- `;
31
9
  /**
32
10
  * Create user data directories (specs, plans, reviews) with .gitkeep files
33
11
  */
@@ -140,29 +118,6 @@ export function copyRootFiles(targetDir, skeletonDir, projectName, options = {})
140
118
  }
141
119
  return { copied, conflicts };
142
120
  }
143
- /**
144
- * Create a new .gitignore file with full content (for init)
145
- */
146
- export function createGitignore(targetDir) {
147
- const gitignorePath = path.join(targetDir, '.gitignore');
148
- fs.writeFileSync(gitignorePath, FULL_GITIGNORE_CONTENT);
149
- }
150
- /**
151
- * Update existing .gitignore or create if not exists (for adopt)
152
- */
153
- export function updateGitignore(targetDir) {
154
- const gitignorePath = path.join(targetDir, '.gitignore');
155
- if (!fs.existsSync(gitignorePath)) {
156
- fs.writeFileSync(gitignorePath, CODEV_GITIGNORE_ENTRIES.trim() + '\n');
157
- return { updated: false, created: true, alreadyPresent: false };
158
- }
159
- const existing = fs.readFileSync(gitignorePath, 'utf-8');
160
- if (existing.includes('.agent-farm/')) {
161
- return { updated: false, created: false, alreadyPresent: true };
162
- }
163
- fs.appendFileSync(gitignorePath, '\n' + CODEV_GITIGNORE_ENTRIES);
164
- return { updated: true, created: false, alreadyPresent: false };
165
- }
166
121
  /**
167
122
  * Create codev/projects/ directory for porch state files
168
123
  */
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cluesmith/codev",
3
- "version": "3.1.4",
3
+ "version": "3.1.7",
4
4
  "description": "Codev CLI - AI-assisted software development framework",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,7 +33,7 @@
33
33
  "open": "^10.1.0",
34
34
  "tree-kill": "^1.2.2",
35
35
  "ws": "^8.18.0",
36
- "@cluesmith/codev-core": "3.1.4"
36
+ "@cluesmith/codev-core": "3.1.7"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@playwright/test": "^1.58.0",
@@ -48,8 +48,8 @@
48
48
  "tsx": "^4.19.2",
49
49
  "typescript": "^5.7.2",
50
50
  "vitest": "^4.0.15",
51
- "@cluesmith/codev-dashboard": "0.0.0",
52
- "@cluesmith/codev-types": "3.1.4"
51
+ "@cluesmith/codev-types": "3.1.7",
52
+ "@cluesmith/codev-dashboard": "0.0.0"
53
53
  },
54
54
  "engines": {
55
55
  "node": ">=20.0.0"
@@ -0,0 +1,28 @@
1
+ #!/bin/sh
2
+ # Forge concept: issue-search (Gitea via tea CLI)
3
+ #
4
+ # ⚠️ UNVERIFIED — mirrors gitea/issue-list.sh with `body` added to --fields,
5
+ # a --state parameter, and `body` mapped in the jq normalization. `tea` is
6
+ # not available in the authoring environment (#920); smoke-test before
7
+ # relying on it. Confirm: tea's `--state` accepts open|closed|all and the
8
+ # issue body field is named `body`.
9
+ #
10
+ # Input (optional): CODEV_ISSUE_STATE — open|closed|all (default: open)
11
+ # Output: JSON [{number, title, url, labels, createdAt, author, assignees, body}]
12
+ exec tea issues list --limit 200 \
13
+ --state "${CODEV_ISSUE_STATE:-open}" \
14
+ --fields index,title,state,author,url,created,labels,assignees,body \
15
+ --output json \
16
+ | jq '[.[] | {
17
+ number: (.index | tonumber),
18
+ title,
19
+ state,
20
+ url,
21
+ createdAt: .created,
22
+ author: {login: .author},
23
+ labels: (if (.labels // "") == "" then []
24
+ else (.labels | split(",") | map({name: ltrimstr(" ")})) end),
25
+ assignees: (if (.assignees // "") == "" then []
26
+ else (.assignees | split(",") | map({login: ltrimstr(" ")})) end),
27
+ body: (.body // "")
28
+ }]'
@@ -0,0 +1,13 @@
1
+ #!/bin/sh
2
+ # Forge concept: issue-search (GitHub via gh CLI)
3
+ #
4
+ # Like issue-list, but purpose-built for the backlog-search webview (#920):
5
+ # always includes `body` (so search can match descriptions) and honors a
6
+ # requested state. issue-list stays lean for the always-on sidebar / overview.
7
+ #
8
+ # Input (optional): CODEV_ISSUE_STATE — open|closed|all (default: open)
9
+ # Output: JSON [{number, title, url, labels, createdAt, author, assignees, body}]
10
+ exec gh issue list \
11
+ --limit 200 \
12
+ --state "${CODEV_ISSUE_STATE:-open}" \
13
+ --json number,title,url,labels,createdAt,author,assignees,body
@@ -0,0 +1,19 @@
1
+ #!/bin/sh
2
+ # Forge concept: issue-search (GitLab via glab CLI)
3
+ #
4
+ # ⚠️ UNVERIFIED — mirrors gitlab/issue-list.sh (raw `glab ... --output json`,
5
+ # no field normalization) plus a state flag and a `body` field surfaced from
6
+ # glab's `description`. `glab` is not available in the authoring environment
7
+ # (#920); smoke-test before relying on it. Confirm: glab's closed/all flags
8
+ # (`--closed` / `--all`) and that the body lives in `.description`.
9
+ #
10
+ # Input (optional): CODEV_ISSUE_STATE — open|closed|all (default: open)
11
+ # Output: JSON [{... glab issue fields ..., body}]
12
+ case "${CODEV_ISSUE_STATE:-open}" in
13
+ closed) STATE_FLAG="--closed" ;;
14
+ all) STATE_FLAG="--all" ;;
15
+ *) STATE_FLAG="" ;;
16
+ esac
17
+ # shellcheck disable=SC2086
18
+ exec glab issue list --per-page 200 $STATE_FLAG --output json \
19
+ | jq '[.[] | . + { body: (.description // .body // "") }]'
@@ -0,0 +1,49 @@
1
+ #!/bin/sh
2
+ # Forge concept: issue-search (Linear via GraphQL API)
3
+ #
4
+ # ⚠️ UNVERIFIED — mirrors linear/issue-list.sh with `description` added to the
5
+ # query (mapped to `body`) and the state filter parameterized. No Linear
6
+ # credentials in the authoring environment (#920); smoke-test before relying
7
+ # on it. Confirm the completed/canceled state-type mapping matches the
8
+ # workspace's workflow.
9
+ #
10
+ # Input (optional): CODEV_ISSUE_STATE — open|closed|all (default: open)
11
+ # CODEV_LINEAR_TEAM — team key (e.g. "ENG")
12
+ # Output: JSON [{number, title, url, labels, createdAt, author, assignees, body}]
13
+ set -e
14
+
15
+ if [ -z "$LINEAR_API_KEY" ]; then
16
+ echo "LINEAR_API_KEY is not set" >&2
17
+ exit 1
18
+ fi
19
+
20
+ case "${CODEV_ISSUE_STATE:-open}" in
21
+ closed) STATE_FILTER='{ "state": { "type": { "in": ["completed", "canceled"] } } }' ;;
22
+ all) STATE_FILTER='{}' ;;
23
+ *) STATE_FILTER='{ "state": { "type": { "nin": ["completed", "canceled"] } } }' ;;
24
+ esac
25
+
26
+ if [ -n "$CODEV_LINEAR_TEAM" ]; then
27
+ FILTER="$(jq -n --arg team "$CODEV_LINEAR_TEAM" --argjson st "$STATE_FILTER" \
28
+ '{ team: { key: { eq: $team } } } + $st')"
29
+ else
30
+ FILTER="$STATE_FILTER"
31
+ fi
32
+
33
+ curl -sf -X POST https://api.linear.app/graphql \
34
+ -H "Content-Type: application/json" \
35
+ -H "Authorization: $LINEAR_API_KEY" \
36
+ -d "$(jq -n --argjson filter "$FILTER" '{
37
+ query: "query($filter: IssueFilter) { issues(filter: $filter, first: 200) { nodes { identifier title url description labels { nodes { name } } createdAt assignee { displayName } creator { displayName } } } }",
38
+ variables: { filter: $filter }
39
+ }')" \
40
+ | jq '[.data.issues.nodes[] | {
41
+ number: .identifier,
42
+ title: .title,
43
+ url: .url,
44
+ labels: [.labels.nodes[] | { name: .name }],
45
+ createdAt: .createdAt,
46
+ author: (if .creator then { login: .creator.displayName } else null end),
47
+ assignees: (if .assignee then [{ login: .assignee.displayName }] else [] end),
48
+ body: (.description // "")
49
+ }]'
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: update-arch-docs
3
- description: Audit, prune, and update the project's architecture documentation — `codev/resources/arch.md` and `codev/resources/lessons-learned.md`. Use this skill when running MAINTAIN's arch-doc step, or when asked to update / audit / prune `codev/resources/arch.md` or `codev/resources/lessons-learned.md`. The skill is opinionated about what NOT to include in these files (per-spec changelogs, exhaustive enumerations, aspirational state, duplicate meta-spec content) and ships two operating modes: diff-mode (apply a specific change) and audit-mode (propose cuts with reasons). It edits files directly via normal file-edit tooling and does not invoke destructive shell commands.
3
+ description: "Audit, prune, and update the project's architecture documentation — `codev/resources/arch.md` and `codev/resources/lessons-learned.md`. Use this skill when running MAINTAIN's arch-doc step, or when asked to update / audit / prune `codev/resources/arch.md` or `codev/resources/lessons-learned.md`. The skill is opinionated about what NOT to include in these files (per-spec changelogs, exhaustive enumerations, aspirational state, duplicate meta-spec content) and ships two operating modes: diff-mode (apply a specific change) and audit-mode (propose cuts with reasons). It edits files directly via normal file-edit tooling and does not invoke destructive shell commands."
4
4
  ---
5
5
 
6
6
  # update-arch-docs
@@ -23,7 +23,7 @@
23
23
  "models": ["gemini", "codex", "claude"],
24
24
  "parallel": true
25
25
  },
26
- "max_iterations": 8,
26
+ "max_iterations": 3,
27
27
  "on_complete": {
28
28
  "commit": true,
29
29
  "push": true
@@ -44,7 +44,7 @@
44
44
  "models": ["gemini", "codex", "claude"],
45
45
  "parallel": true
46
46
  },
47
- "max_iterations": 8,
47
+ "max_iterations": 3,
48
48
  "on_complete": {
49
49
  "commit": true,
50
50
  "push": true
@@ -70,7 +70,7 @@
70
70
  "models": ["gemini", "codex", "claude"],
71
71
  "parallel": true
72
72
  },
73
- "max_iterations": 8,
73
+ "max_iterations": 3,
74
74
  "on_complete": {
75
75
  "commit": true,
76
76
  "push": true
@@ -107,7 +107,7 @@
107
107
  "models": ["gemini", "codex", "claude"],
108
108
  "parallel": true
109
109
  },
110
- "max_iterations": 8,
110
+ "max_iterations": 3,
111
111
  "on_complete": {
112
112
  "commit": true,
113
113
  "push": true
@@ -160,7 +160,7 @@
160
160
  },
161
161
  "defaults": {
162
162
  "mode": "strict",
163
- "max_iterations": 8,
163
+ "max_iterations": 3,
164
164
  "verify": {
165
165
  "models": ["gemini", "codex", "claude"],
166
166
  "parallel": true
@@ -89,8 +89,11 @@ Send a **single** notification that includes the PR link and each model's verdic
89
89
  afx send architect "PR #<number> ready for review (fixes issue #{{issue.number}}). CMAP: gemini=<APPROVE|REQUEST_CHANGES>, codex=<APPROVE|REQUEST_CHANGES>, claude=<APPROVE|REQUEST_CHANGES>"
90
90
  ```
91
91
 
92
- **This is the only notification you send.** After this, your work is done — the architect
93
- takes it from here (reviews, merges, cleans up).
92
+ Then run `porch done <project-id>` to auto-request the `pr` gate. The PR surfaces
93
+ in Needs Attention from this point; **STOP and wait** for the architect to call
94
+ `porch approve <project-id> pr`. After gate approval, porch will emit a merge task
95
+ (via the next `porch next` call) — follow it to merge the PR and advance to
96
+ `verified`.
94
97
 
95
98
  ## Signals
96
99
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "../../protocol-schema.json",
3
3
  "name": "bugfix",
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "description": "Lightweight protocol for minor bugfixes using GitHub Issues",
6
6
  "input": {
7
7
  "type": "github-issue",
@@ -80,6 +80,7 @@
80
80
  "parallel": true,
81
81
  "max_rounds": 1
82
82
  },
83
+ "gate": "pr",
83
84
  "transition": {
84
85
  "on_complete": null
85
86
  }
@@ -24,7 +24,7 @@
24
24
  "models": ["gemini", "codex", "claude"],
25
25
  "parallel": true
26
26
  },
27
- "max_iterations": 8,
27
+ "max_iterations": 3,
28
28
  "on_complete": {
29
29
  "commit": true,
30
30
  "push": true
@@ -46,7 +46,7 @@
46
46
  "models": ["gemini", "codex", "claude"],
47
47
  "parallel": true
48
48
  },
49
- "max_iterations": 8,
49
+ "max_iterations": 3,
50
50
  "on_complete": {
51
51
  "commit": true,
52
52
  "push": true
@@ -73,7 +73,7 @@
73
73
  "models": ["gemini", "codex", "claude"],
74
74
  "parallel": true
75
75
  },
76
- "max_iterations": 8,
76
+ "max_iterations": 3,
77
77
  "on_complete": {
78
78
  "commit": true,
79
79
  "push": true
@@ -110,7 +110,7 @@
110
110
  "models": ["gemini", "codex", "claude"],
111
111
  "parallel": true
112
112
  },
113
- "max_iterations": 8,
113
+ "max_iterations": 3,
114
114
  "on_complete": {
115
115
  "commit": true,
116
116
  "push": true
@@ -163,7 +163,7 @@
163
163
  },
164
164
  "defaults": {
165
165
  "mode": "strict",
166
- "max_iterations": 8,
166
+ "max_iterations": 3,
167
167
  "verify": {
168
168
  "models": ["gemini", "codex", "claude"],
169
169
  "parallel": true