issue-flow 0.7.7 → 0.8.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 (68) hide show
  1. package/dist/{analyze-2RVGY5OK.js → analyze-RBNKXWL5.js} +6 -6
  2. package/dist/{chunk-6L2BPOE3.js → chunk-36ECROTC.js} +7 -7
  3. package/dist/{chunk-EOTULFWV.js → chunk-A4M6AKIK.js} +6 -6
  4. package/dist/{chunk-RUTDK6ZF.js → chunk-BASRRXAM.js} +2 -2
  5. package/dist/{chunk-WO6ERABE.js → chunk-BH7DYADV.js} +10 -1
  6. package/dist/chunk-BH7DYADV.js.map +1 -0
  7. package/dist/{chunk-JOK7VXRV.js → chunk-F52S6ZGF.js} +3 -3
  8. package/dist/{chunk-EYVXLRRD.js → chunk-HSGTZ3CT.js} +3 -3
  9. package/dist/{chunk-XPW46TI5.js → chunk-J3PJBZXJ.js} +3 -3
  10. package/dist/{chunk-6UTVPKNF.js → chunk-J4SICTAN.js} +7 -7
  11. package/dist/{chunk-KHTLN54U.js → chunk-JWZKV3CL.js} +2 -2
  12. package/dist/{chunk-3E6KASSE.js → chunk-MK43N4X3.js} +7 -7
  13. package/dist/{chunk-ZYBYMEWG.js → chunk-QO2MWMAZ.js} +2 -2
  14. package/dist/{chunk-OPIDR2DC.js → chunk-RQW5W4XC.js} +2 -2
  15. package/dist/{chunk-WGDLUPSF.js → chunk-TGP6WK65.js} +5 -5
  16. package/dist/{chunk-G37JNQKB.js → chunk-VPDWTZ3F.js} +2 -2
  17. package/dist/{chunk-6IOPYFUM.js → chunk-VSF2CR3G.js} +6 -6
  18. package/dist/cli.js +15 -15
  19. package/dist/{config-OAZG7KIK.js → config-R7O5YC65.js} +3 -3
  20. package/dist/execute-LU3HWA54.js +14 -0
  21. package/dist/{generate-BEJF3SVJ.js → generate-TGJQLGMV.js} +6 -6
  22. package/dist/init-WP7Z2LFQ.js +9 -0
  23. package/dist/plan-2MWMCKRY.js +16 -0
  24. package/dist/pr-XVQDEQ7B.js +16 -0
  25. package/dist/pr-review-VO6ZXAFM.js +16 -0
  26. package/dist/prd-FPZAHQEO.js +16 -0
  27. package/dist/review-AHALLMXO.js +14 -0
  28. package/dist/{run-SEB6F3W4.js → run-2CXVR3VZ.js} +16 -16
  29. package/dist/{web-3SBYL7QJ.js → web-JVPK2PIF.js} +4 -4
  30. package/package.json +1 -1
  31. package/web/CLAUDE.md +48 -0
  32. package/web/public/app.css +266 -0
  33. package/web/public/app.js +237 -0
  34. package/web/public/index.html +26 -0
  35. package/dist/chunk-WO6ERABE.js.map +0 -1
  36. package/dist/execute-AOEM52CD.js +0 -14
  37. package/dist/init-TBC3WI74.js +0 -9
  38. package/dist/plan-YDZYB2BO.js +0 -16
  39. package/dist/pr-SIXMJIZF.js +0 -16
  40. package/dist/pr-review-AY56ZPJR.js +0 -16
  41. package/dist/prd-MBSSBLGO.js +0 -16
  42. package/dist/review-2MDDHZ4X.js +0 -14
  43. /package/dist/{analyze-2RVGY5OK.js.map → analyze-RBNKXWL5.js.map} +0 -0
  44. /package/dist/{chunk-6L2BPOE3.js.map → chunk-36ECROTC.js.map} +0 -0
  45. /package/dist/{chunk-EOTULFWV.js.map → chunk-A4M6AKIK.js.map} +0 -0
  46. /package/dist/{chunk-RUTDK6ZF.js.map → chunk-BASRRXAM.js.map} +0 -0
  47. /package/dist/{chunk-JOK7VXRV.js.map → chunk-F52S6ZGF.js.map} +0 -0
  48. /package/dist/{chunk-EYVXLRRD.js.map → chunk-HSGTZ3CT.js.map} +0 -0
  49. /package/dist/{chunk-XPW46TI5.js.map → chunk-J3PJBZXJ.js.map} +0 -0
  50. /package/dist/{chunk-6UTVPKNF.js.map → chunk-J4SICTAN.js.map} +0 -0
  51. /package/dist/{chunk-KHTLN54U.js.map → chunk-JWZKV3CL.js.map} +0 -0
  52. /package/dist/{chunk-3E6KASSE.js.map → chunk-MK43N4X3.js.map} +0 -0
  53. /package/dist/{chunk-ZYBYMEWG.js.map → chunk-QO2MWMAZ.js.map} +0 -0
  54. /package/dist/{chunk-OPIDR2DC.js.map → chunk-RQW5W4XC.js.map} +0 -0
  55. /package/dist/{chunk-WGDLUPSF.js.map → chunk-TGP6WK65.js.map} +0 -0
  56. /package/dist/{chunk-G37JNQKB.js.map → chunk-VPDWTZ3F.js.map} +0 -0
  57. /package/dist/{chunk-6IOPYFUM.js.map → chunk-VSF2CR3G.js.map} +0 -0
  58. /package/dist/{config-OAZG7KIK.js.map → config-R7O5YC65.js.map} +0 -0
  59. /package/dist/{execute-AOEM52CD.js.map → execute-LU3HWA54.js.map} +0 -0
  60. /package/dist/{generate-BEJF3SVJ.js.map → generate-TGJQLGMV.js.map} +0 -0
  61. /package/dist/{init-TBC3WI74.js.map → init-WP7Z2LFQ.js.map} +0 -0
  62. /package/dist/{plan-YDZYB2BO.js.map → plan-2MWMCKRY.js.map} +0 -0
  63. /package/dist/{pr-SIXMJIZF.js.map → pr-XVQDEQ7B.js.map} +0 -0
  64. /package/dist/{pr-review-AY56ZPJR.js.map → pr-review-VO6ZXAFM.js.map} +0 -0
  65. /package/dist/{prd-MBSSBLGO.js.map → prd-FPZAHQEO.js.map} +0 -0
  66. /package/dist/{review-2MDDHZ4X.js.map → review-AHALLMXO.js.map} +0 -0
  67. /package/dist/{run-SEB6F3W4.js.map → run-2CXVR3VZ.js.map} +0 -0
  68. /package/dist/{web-3SBYL7QJ.js.map → web-JVPK2PIF.js.map} +0 -0
@@ -6,14 +6,14 @@ import {
6
6
  } from "./chunk-HDV3YDTG.js";
7
7
  import {
8
8
  publishGitState
9
- } from "./chunk-XPW46TI5.js";
9
+ } from "./chunk-J3PJBZXJ.js";
10
10
  import {
11
11
  EXECUTE_PHASE,
12
12
  elapsedSecondsSince,
13
13
  getPhaseUsageTotals,
14
14
  publishIterationMetrics,
15
15
  publishStoryMetrics
16
- } from "./chunk-ZYBYMEWG.js";
16
+ } from "./chunk-QO2MWMAZ.js";
17
17
  import {
18
18
  applyPlaceholders,
19
19
  loadPrompt
@@ -22,7 +22,7 @@ import {
22
22
  createConfig,
23
23
  resolvePaths,
24
24
  validateDependencies
25
- } from "./chunk-RUTDK6ZF.js";
25
+ } from "./chunk-BASRRXAM.js";
26
26
  import {
27
27
  allStoriesPass,
28
28
  applyStoryMetrics,
@@ -53,7 +53,7 @@ import {
53
53
  trimErrorMessage,
54
54
  useColor,
55
55
  useUnicode
56
- } from "./chunk-WO6ERABE.js";
56
+ } from "./chunk-BH7DYADV.js";
57
57
 
58
58
  // src/core/engine.ts
59
59
  import { existsSync } from "fs";
@@ -610,4 +610,4 @@ export {
610
610
  printRunSummary,
611
611
  runExecute
612
612
  };
613
- //# sourceMappingURL=chunk-WGDLUPSF.js.map
613
+ //# sourceMappingURL=chunk-TGP6WK65.js.map
@@ -4,7 +4,7 @@ import {
4
4
  printInfo,
5
5
  printSuccess,
6
6
  printWarning
7
- } from "./chunk-WO6ERABE.js";
7
+ } from "./chunk-BH7DYADV.js";
8
8
 
9
9
  // src/commands/init.ts
10
10
  import { execa } from "execa";
@@ -132,4 +132,4 @@ async function runInit(source = "github") {
132
132
  export {
133
133
  runInit
134
134
  };
135
- //# sourceMappingURL=chunk-G37JNQKB.js.map
135
+ //# sourceMappingURL=chunk-VPDWTZ3F.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  listPullRequests
4
- } from "./chunk-XPW46TI5.js";
4
+ } from "./chunk-J3PJBZXJ.js";
5
5
  import {
6
6
  runHeadless
7
- } from "./chunk-KHTLN54U.js";
7
+ } from "./chunk-JWZKV3CL.js";
8
8
  import {
9
9
  publishPhaseMetrics
10
- } from "./chunk-ZYBYMEWG.js";
10
+ } from "./chunk-QO2MWMAZ.js";
11
11
  import {
12
12
  applyPlaceholders,
13
13
  loadPrompt
@@ -17,7 +17,7 @@ import {
17
17
  loadPrReviewConfig,
18
18
  resolveIssuePaths,
19
19
  run
20
- } from "./chunk-RUTDK6ZF.js";
20
+ } from "./chunk-BASRRXAM.js";
21
21
  import {
22
22
  getGlobalTimeout,
23
23
  getSessionPublisher,
@@ -29,7 +29,7 @@ import {
29
29
  printWarning,
30
30
  saveTaskPlan,
31
31
  writeFileAtomic
32
- } from "./chunk-WO6ERABE.js";
32
+ } from "./chunk-BH7DYADV.js";
33
33
 
34
34
  // src/commands/pr-review.ts
35
35
  import { join as join3 } from "path";
@@ -733,4 +733,4 @@ export {
733
733
  exitCodeFor,
734
734
  runPrReview
735
735
  };
736
- //# sourceMappingURL=chunk-6IOPYFUM.js.map
736
+ //# sourceMappingURL=chunk-VSF2CR3G.js.map
package/dist/cli.js CHANGED
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  setIssuesCliOverrides,
4
4
  setWebCliOverrides
5
- } from "./chunk-RUTDK6ZF.js";
5
+ } from "./chunk-BASRRXAM.js";
6
6
  import {
7
7
  printError,
8
8
  setGlobalTimeout,
9
9
  setVerbose
10
- } from "./chunk-WO6ERABE.js";
10
+ } from "./chunk-BH7DYADV.js";
11
11
 
12
12
  // src/cli.ts
13
13
  import { createRequire } from "module";
@@ -159,8 +159,8 @@ withIssueOptions(
159
159
  program.command("init").description("Verify that all prerequisites (claude, gh, git) are met")
160
160
  )
161
161
  ).action(async () => {
162
- const { loadIssuesConfig } = await import("./config-OAZG7KIK.js");
163
- const { runInit } = await import("./init-TBC3WI74.js");
162
+ const { loadIssuesConfig } = await import("./config-R7O5YC65.js");
163
+ const { runInit } = await import("./init-WP7Z2LFQ.js");
164
164
  const { preferredProvider } = await loadIssuesConfig();
165
165
  const code = await runInit(preferredProvider);
166
166
  process.exit(code);
@@ -178,7 +178,7 @@ withGlobalOptions(
178
178
  }
179
179
  throw error;
180
180
  }
181
- const { runGenerate } = await import("./generate-BEJF3SVJ.js");
181
+ const { runGenerate } = await import("./generate-TGJQLGMV.js");
182
182
  const code = await runGenerate(options.prompt, target);
183
183
  process.exit(code);
184
184
  });
@@ -202,7 +202,7 @@ withWebOptions(
202
202
  }
203
203
  throw error;
204
204
  }
205
- const { runPipeline } = await import("./run-SEB6F3W4.js");
205
+ const { runPipeline } = await import("./run-2CXVR3VZ.js");
206
206
  const code = await runPipeline(
207
207
  issue,
208
208
  options.mode,
@@ -218,7 +218,7 @@ withIssueOptions(
218
218
  program.command("analyze").description("Analyze an issue via Claude Code Headless").argument("<issue>", "Issue number")
219
219
  )
220
220
  ).action(async (issue) => {
221
- const { runAnalyze } = await import("./analyze-2RVGY5OK.js");
221
+ const { runAnalyze } = await import("./analyze-RBNKXWL5.js");
222
222
  const code = await runAnalyze(issue);
223
223
  process.exit(code);
224
224
  });
@@ -227,7 +227,7 @@ withIssueOptions(
227
227
  program.command("prd").description("Generate a PRD from an analyzed issue via Claude Code Headless").argument("<issue>", "Issue number")
228
228
  )
229
229
  ).action(async (issue) => {
230
- const { runPrd } = await import("./prd-MBSSBLGO.js");
230
+ const { runPrd } = await import("./prd-FPZAHQEO.js");
231
231
  const code = await runPrd(issue);
232
232
  process.exit(code);
233
233
  });
@@ -236,7 +236,7 @@ withIssueOptions(
236
236
  program.command("plan").description("Convert a PRD to a tasks.json task plan via Claude Code Headless").argument("<issue>", "Issue number")
237
237
  )
238
238
  ).action(async (issue) => {
239
- const { runPlan } = await import("./plan-YDZYB2BO.js");
239
+ const { runPlan } = await import("./plan-2MWMCKRY.js");
240
240
  const code = await runPlan(issue);
241
241
  process.exit(code);
242
242
  });
@@ -255,7 +255,7 @@ withWebOptions(
255
255
  ).action(
256
256
  async (positionalMaxIter, options) => {
257
257
  try {
258
- const { runExecute } = await import("./execute-AOEM52CD.js");
258
+ const { runExecute } = await import("./execute-LU3HWA54.js");
259
259
  const code = await runExecute(positionalMaxIter, options);
260
260
  process.exit(code);
261
261
  } catch (error) {
@@ -269,7 +269,7 @@ withIssueOptions(
269
269
  program.command("review").description("Validate an issue resolution via Claude Code Headless").argument("<issue>", "Issue number")
270
270
  )
271
271
  ).action(async (issue) => {
272
- const { runReview } = await import("./review-2MDDHZ4X.js");
272
+ const { runReview } = await import("./review-AHALLMXO.js");
273
273
  const code = await runReview(issue);
274
274
  process.exit(code);
275
275
  });
@@ -278,7 +278,7 @@ withIssueOptions(
278
278
  program.command("pr").description("Create a pull request via Claude Code Headless").argument("<issue>", "Issue number")
279
279
  )
280
280
  ).action(async (issue) => {
281
- const { runPr } = await import("./pr-SIXMJIZF.js");
281
+ const { runPr } = await import("./pr-XVQDEQ7B.js");
282
282
  const code = await runPr(issue);
283
283
  process.exit(code);
284
284
  });
@@ -286,14 +286,14 @@ var webCommand = program.command("web").description("Manage the web monitoring s
286
286
  webCommand.command("serve").description(
287
287
  "Run the web monitor server in the foreground (internal \u2014 spawned detached by --web)"
288
288
  ).option("--port <n>", "Web server port (default: 3737)", parseInteger).option("--host <h>", "Web server host (default: 0.0.0.0)").option("--refresh <s>", "Suggested UI polling interval in seconds", parseInteger).action(async (options) => {
289
- const { runWebServe } = await import("./web-3SBYL7QJ.js");
289
+ const { runWebServe } = await import("./web-JVPK2PIF.js");
290
290
  const code = await runWebServe(options);
291
291
  if (code !== 0) {
292
292
  process.exit(code);
293
293
  }
294
294
  });
295
295
  webCommand.command("stop").description("Stop the running web monitor server").action(async () => {
296
- const { runWebStop } = await import("./web-3SBYL7QJ.js");
296
+ const { runWebStop } = await import("./web-JVPK2PIF.js");
297
297
  const code = await runWebStop();
298
298
  process.exit(code);
299
299
  });
@@ -304,7 +304,7 @@ withGlobalOptions(
304
304
  )
305
305
  ).action(
306
306
  async (pr, options) => {
307
- const { runPrReview } = await import("./pr-review-AY56ZPJR.js");
307
+ const { runPrReview } = await import("./pr-review-VO6ZXAFM.js");
308
308
  const code = await runPrReview(pr, options);
309
309
  process.exit(code);
310
310
  }
@@ -15,8 +15,8 @@ import {
15
15
  setIssuesCliOverrides,
16
16
  setWebCliOverrides,
17
17
  validateDependencies
18
- } from "./chunk-RUTDK6ZF.js";
19
- import "./chunk-WO6ERABE.js";
18
+ } from "./chunk-BASRRXAM.js";
19
+ import "./chunk-BH7DYADV.js";
20
20
  export {
21
21
  DEFAULTS,
22
22
  GLOBAL_CONFIG_FILENAME,
@@ -34,4 +34,4 @@ export {
34
34
  setWebCliOverrides,
35
35
  validateDependencies
36
36
  };
37
- //# sourceMappingURL=config-OAZG7KIK.js.map
37
+ //# sourceMappingURL=config-R7O5YC65.js.map
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runExecute
4
+ } from "./chunk-TGP6WK65.js";
5
+ import "./chunk-HDV3YDTG.js";
6
+ import "./chunk-J3PJBZXJ.js";
7
+ import "./chunk-QO2MWMAZ.js";
8
+ import "./chunk-SLHZPB3C.js";
9
+ import "./chunk-BASRRXAM.js";
10
+ import "./chunk-BH7DYADV.js";
11
+ export {
12
+ runExecute
13
+ };
14
+ //# sourceMappingURL=execute-LU3HWA54.js.map
@@ -3,13 +3,13 @@ import {
3
3
  ensureProvidersRegistered,
4
4
  getProvider,
5
5
  localIssueRef
6
- } from "./chunk-EYVXLRRD.js";
6
+ } from "./chunk-HSGTZ3CT.js";
7
7
  import {
8
8
  runHeadless
9
- } from "./chunk-KHTLN54U.js";
9
+ } from "./chunk-JWZKV3CL.js";
10
10
  import {
11
11
  publishPhaseMetrics
12
- } from "./chunk-ZYBYMEWG.js";
12
+ } from "./chunk-QO2MWMAZ.js";
13
13
  import {
14
14
  applyPlaceholders,
15
15
  loadPrompt
@@ -17,13 +17,13 @@ import {
17
17
  import {
18
18
  loadIssuesConfig,
19
19
  resolveProjectPaths
20
- } from "./chunk-RUTDK6ZF.js";
20
+ } from "./chunk-BASRRXAM.js";
21
21
  import {
22
22
  getGlobalTimeout,
23
23
  isoNow,
24
24
  printError,
25
25
  printSuccess
26
- } from "./chunk-WO6ERABE.js";
26
+ } from "./chunk-BH7DYADV.js";
27
27
 
28
28
  // src/issues/draft.ts
29
29
  var DRAFT_TAG = "issue-draft";
@@ -153,4 +153,4 @@ async function runGenerate(promptText, target) {
153
153
  export {
154
154
  runGenerate
155
155
  };
156
- //# sourceMappingURL=generate-BEJF3SVJ.js.map
156
+ //# sourceMappingURL=generate-TGJQLGMV.js.map
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runInit
4
+ } from "./chunk-VPDWTZ3F.js";
5
+ import "./chunk-BH7DYADV.js";
6
+ export {
7
+ runInit
8
+ };
9
+ //# sourceMappingURL=init-WP7Z2LFQ.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runPlan
4
+ } from "./chunk-MK43N4X3.js";
5
+ import "./chunk-RQW5W4XC.js";
6
+ import "./chunk-HSGTZ3CT.js";
7
+ import "./chunk-HDV3YDTG.js";
8
+ import "./chunk-JWZKV3CL.js";
9
+ import "./chunk-QO2MWMAZ.js";
10
+ import "./chunk-SLHZPB3C.js";
11
+ import "./chunk-BASRRXAM.js";
12
+ import "./chunk-BH7DYADV.js";
13
+ export {
14
+ runPlan
15
+ };
16
+ //# sourceMappingURL=plan-2MWMCKRY.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runPr
4
+ } from "./chunk-J4SICTAN.js";
5
+ import "./chunk-RQW5W4XC.js";
6
+ import "./chunk-HSGTZ3CT.js";
7
+ import "./chunk-HDV3YDTG.js";
8
+ import "./chunk-JWZKV3CL.js";
9
+ import "./chunk-QO2MWMAZ.js";
10
+ import "./chunk-SLHZPB3C.js";
11
+ import "./chunk-BASRRXAM.js";
12
+ import "./chunk-BH7DYADV.js";
13
+ export {
14
+ runPr
15
+ };
16
+ //# sourceMappingURL=pr-XVQDEQ7B.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ exitCodeFor,
4
+ runPrReview
5
+ } from "./chunk-VSF2CR3G.js";
6
+ import "./chunk-J3PJBZXJ.js";
7
+ import "./chunk-JWZKV3CL.js";
8
+ import "./chunk-QO2MWMAZ.js";
9
+ import "./chunk-SLHZPB3C.js";
10
+ import "./chunk-BASRRXAM.js";
11
+ import "./chunk-BH7DYADV.js";
12
+ export {
13
+ exitCodeFor,
14
+ runPrReview
15
+ };
16
+ //# sourceMappingURL=pr-review-VO6ZXAFM.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runPrd
4
+ } from "./chunk-36ECROTC.js";
5
+ import "./chunk-RQW5W4XC.js";
6
+ import "./chunk-HSGTZ3CT.js";
7
+ import "./chunk-HDV3YDTG.js";
8
+ import "./chunk-JWZKV3CL.js";
9
+ import "./chunk-QO2MWMAZ.js";
10
+ import "./chunk-SLHZPB3C.js";
11
+ import "./chunk-BASRRXAM.js";
12
+ import "./chunk-BH7DYADV.js";
13
+ export {
14
+ runPrd
15
+ };
16
+ //# sourceMappingURL=prd-FPZAHQEO.js.map
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runReview
4
+ } from "./chunk-A4M6AKIK.js";
5
+ import "./chunk-HSGTZ3CT.js";
6
+ import "./chunk-JWZKV3CL.js";
7
+ import "./chunk-QO2MWMAZ.js";
8
+ import "./chunk-SLHZPB3C.js";
9
+ import "./chunk-BASRRXAM.js";
10
+ import "./chunk-BH7DYADV.js";
11
+ export {
12
+ runReview
13
+ };
14
+ //# sourceMappingURL=review-AHALLMXO.js.map
@@ -1,52 +1,52 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runPrd
4
- } from "./chunk-6L2BPOE3.js";
4
+ } from "./chunk-36ECROTC.js";
5
5
  import {
6
6
  runReview
7
- } from "./chunk-EOTULFWV.js";
7
+ } from "./chunk-A4M6AKIK.js";
8
8
  import {
9
9
  ensureWebMonitor
10
- } from "./chunk-JOK7VXRV.js";
10
+ } from "./chunk-F52S6ZGF.js";
11
11
  import {
12
12
  runInit
13
- } from "./chunk-G37JNQKB.js";
13
+ } from "./chunk-VPDWTZ3F.js";
14
14
  import {
15
15
  printRunSummary,
16
16
  runExecute
17
- } from "./chunk-WGDLUPSF.js";
17
+ } from "./chunk-TGP6WK65.js";
18
18
  import {
19
19
  runPlan
20
- } from "./chunk-3E6KASSE.js";
20
+ } from "./chunk-MK43N4X3.js";
21
21
  import {
22
22
  runPr
23
- } from "./chunk-6UTVPKNF.js";
24
- import "./chunk-OPIDR2DC.js";
23
+ } from "./chunk-J4SICTAN.js";
24
+ import "./chunk-RQW5W4XC.js";
25
25
  import {
26
26
  getProvider,
27
27
  resolveCommandIssue
28
- } from "./chunk-EYVXLRRD.js";
28
+ } from "./chunk-HSGTZ3CT.js";
29
29
  import "./chunk-HDV3YDTG.js";
30
30
  import {
31
31
  mostRecent,
32
32
  prReviewDir,
33
33
  readPrReviewIndex,
34
34
  runPrReview
35
- } from "./chunk-6IOPYFUM.js";
35
+ } from "./chunk-VSF2CR3G.js";
36
36
  import {
37
37
  listPullRequests,
38
38
  publishGitState
39
- } from "./chunk-XPW46TI5.js";
40
- import "./chunk-KHTLN54U.js";
39
+ } from "./chunk-J3PJBZXJ.js";
40
+ import "./chunk-JWZKV3CL.js";
41
41
  import {
42
42
  getRunUsageTotals
43
- } from "./chunk-ZYBYMEWG.js";
43
+ } from "./chunk-QO2MWMAZ.js";
44
44
  import "./chunk-SLHZPB3C.js";
45
45
  import {
46
46
  loadIssuesConfig,
47
47
  loadWebConfig,
48
48
  resolveIssuePaths
49
- } from "./chunk-RUTDK6ZF.js";
49
+ } from "./chunk-BASRRXAM.js";
50
50
  import {
51
51
  FilePublisher,
52
52
  NullPublisher,
@@ -60,7 +60,7 @@ import {
60
60
  setOutputCallback,
61
61
  setSessionPublisher,
62
62
  setStoryUpdateCallback
63
- } from "./chunk-WO6ERABE.js";
63
+ } from "./chunk-BH7DYADV.js";
64
64
 
65
65
  // src/commands/run.ts
66
66
  import { randomUUID } from "crypto";
@@ -730,4 +730,4 @@ export {
730
730
  publishStorySeed,
731
731
  runPipeline
732
732
  };
733
- //# sourceMappingURL=run-SEB6F3W4.js.map
733
+ //# sourceMappingURL=run-2CXVR3VZ.js.map
@@ -4,20 +4,20 @@ import {
4
4
  getWebLockFile,
5
5
  readWebLock,
6
6
  removeWebLock
7
- } from "./chunk-JOK7VXRV.js";
7
+ } from "./chunk-F52S6ZGF.js";
8
8
  import "./chunk-SLHZPB3C.js";
9
9
  import {
10
10
  ISSUES_DIR_NAME,
11
11
  PROJECTS_DIR_NAME,
12
12
  getGlobalRoot,
13
13
  loadWebConfig
14
- } from "./chunk-RUTDK6ZF.js";
14
+ } from "./chunk-BASRRXAM.js";
15
15
  import {
16
16
  printError,
17
17
  printInfo,
18
18
  printWarning,
19
19
  sessionSnapshotSchema
20
- } from "./chunk-WO6ERABE.js";
20
+ } from "./chunk-BH7DYADV.js";
21
21
 
22
22
  // src/web/session-directory.ts
23
23
  import { readdir, readFile, stat as statFile } from "fs/promises";
@@ -185,4 +185,4 @@ export {
185
185
  runWebServe,
186
186
  runWebStop
187
187
  };
188
- //# sourceMappingURL=web-3SBYL7QJ.js.map
188
+ //# sourceMappingURL=web-JVPK2PIF.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "issue-flow",
3
- "version": "0.7.7",
3
+ "version": "0.8.0",
4
4
  "description": "Unified CLI for orchestrating the full issue-flow pipeline via Claude Code Headless",
5
5
  "type": "module",
6
6
  "bin": {
package/web/CLAUDE.md CHANGED
@@ -20,6 +20,54 @@ zero é um valor legítimo.
20
20
  Texto dinâmico sempre via `textContent`/`el()`; nunca `innerHTML` com dados
21
21
  do snapshot.
22
22
 
23
+ ## Abas, Kanban e drawer
24
+
25
+ O painel tem duas abas ("Execução" e "Kanban") e um drawer de detalhes por
26
+ story. Três regras seguram esse conjunto:
27
+
28
+ - **Acesso a story sempre por `getStoryById()` / `getStories()`.** Elas são a
29
+ camada de leitura: normalizam num lugar só o que pode faltar num
30
+ `session.json` antigo (`status` → `'backlog'`, `dependencies`/
31
+ `acceptanceCriteria` → `[]`, `description` → `''`) e são o ponto onde uma
32
+ futura camada de escrita entra. Nenhum consumidor varre `snapshot.stories`
33
+ por conta própria, ou a normalização se espalha.
34
+ - **Estado de UI vive em `state`** (`activeTab`, `selectedStoryId`), junto de
35
+ `logFilter`, nunca em variável solta ou em referência a nó do DOM. O drawer
36
+ guarda o **id** da story, não o card: `render()` recria o Kanban a cada poll,
37
+ então uma referência guardada na abertura apontaria para um nó fora do
38
+ documento. Pelo mesmo motivo o foco volta ao card via
39
+ `[data-story-id="…"]` no momento de fechar.
40
+ - **`renderKanban()` e `renderDrawer()` são chamadas incondicionalmente** dentro
41
+ de `render()`, não ao trocar de aba. Uma aba inativa não pode ficar defasada,
42
+ e é o `renderDrawer()` de cada poll que mantém o drawer aberto em dia (e o
43
+ fecha quando a story some do plano).
44
+
45
+ Cada card do Kanban é um `<button>` — Enter/Espaço e foco saem de graça. Como
46
+ `<button>` só aceita *phrasing content*, todo o conteúdo interno é `<span>` com
47
+ `display: block`/`flex` no CSS; `<p>` ou `<div>` ali dentro é HTML inválido.
48
+
49
+ Detalhes cosméticos que não são cosméticos: `.tab-panel[hidden]` e
50
+ `.drawer[hidden]` precisam de `display: none` explícito, senão o `display:
51
+ grid`/`flex` da regra base vence o atributo `hidden`. E o overlay/drawer ficam
52
+ em `z-index` 20/21 para cobrir o `.banner` de desconexão, que é `sticky` com
53
+ `z-index: 10`.
54
+
55
+ ## Escrita: o que ainda não existe
56
+
57
+ A interface é somente leitura por contrato (`snapshot.readOnly === true`,
58
+ `capabilities: []`), e o servidor não registra nenhuma rota de escrita — o
59
+ comentário em `src/web/server.ts` reserva `POST /api/control/*` para isso. O
60
+ Kanban e o drawer foram desenhados para que a escrita caiba depois sem
61
+ redesenhar a interação: o drawer já é o lugar onde uma story é inspecionada por
62
+ id, e `getStoryById()` já é o único ponto por onde ela é lida.
63
+
64
+ Quando essa etapa chegar, o contrato esperado é: as rotas de escrita passam a
65
+ ser anunciadas em `capabilities` (o client decide o que renderizar a partir
66
+ disso, nunca da versão do servidor), `readOnly` passa a `false`, e cada
67
+ mutação responde com o snapshot atualizado para que a UI não precise adivinhar
68
+ o efeito nem esperar o próximo poll. Enquanto `capabilities` estiver vazio,
69
+ nenhum controle de escrita deve aparecer na tela.
70
+
23
71
  ## Métricas (tokens e custo)
24
72
 
25
73
  `formatUsage()` espelha `formatTokens()` de `src/core/metrics.ts` — mesma