@infinitedusky/indusk-mcp 1.55.2 → 1.56.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 (67) hide show
  1. package/admin/.next/BUILD_ID +1 -1
  2. package/admin/.next/build-manifest.json +3 -3
  3. package/admin/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/admin/.next/fallback-build-manifest.json +3 -3
  5. package/admin/.next/server/app/_global-error.html +1 -1
  6. package/admin/.next/server/app/_global-error.rsc +1 -1
  7. package/admin/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/admin/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/admin/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/admin/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/admin/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/admin/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/admin/.next/server/app/p/[project]/page.js.nft.json +1 -1
  14. package/admin/.next/server/app/p/[project]/page_client-reference-manifest.js +1 -1
  15. package/admin/.next/server/app/p/[project]/plan/[name]/page.js +1 -1
  16. package/admin/.next/server/app/p/[project]/plan/[name]/page.js.nft.json +1 -1
  17. package/admin/.next/server/app/p/[project]/plan/[name]/page_client-reference-manifest.js +1 -1
  18. package/admin/.next/server/app/p/[project]/promises/page.js.nft.json +1 -1
  19. package/admin/.next/server/app/p/[project]/promises/page_client-reference-manifest.js +1 -1
  20. package/admin/.next/server/app/p/[project]/research/[slug]/page.js.nft.json +1 -1
  21. package/admin/.next/server/app/p/[project]/research/[slug]/page_client-reference-manifest.js +1 -1
  22. package/admin/.next/server/app/p/[project]/scorecards/page.js.nft.json +1 -1
  23. package/admin/.next/server/app/p/[project]/scorecards/page_client-reference-manifest.js +1 -1
  24. package/admin/.next/server/app/page.js.nft.json +1 -1
  25. package/admin/.next/server/app/page_client-reference-manifest.js +1 -1
  26. package/admin/.next/server/chunks/ssr/[root-of-the-server]__0h32kmi._.js +3 -3
  27. package/admin/.next/server/chunks/ssr/[root-of-the-server]__0h32kmi._.js.map +1 -1
  28. package/admin/.next/server/chunks/ssr/[root-of-the-server]__0wm9s16._.js +3 -3
  29. package/admin/.next/server/chunks/ssr/[root-of-the-server]__0wm9s16._.js.map +1 -1
  30. package/admin/.next/server/chunks/ssr/_0~nj8up._.js +3 -0
  31. package/admin/.next/server/chunks/ssr/_0~nj8up._.js.map +1 -0
  32. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_11nc926._.js +11 -0
  33. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_11nc926._.js.map +1 -0
  34. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_components_06ejza9._.js +3 -0
  35. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_components_06ejza9._.js.map +1 -0
  36. package/admin/.next/server/middleware-build-manifest.js +3 -3
  37. package/admin/.next/server/pages/500.html +1 -1
  38. package/admin/.next/static/chunks/03ct5acw3i_jz.js +1 -0
  39. package/admin/.next/static/chunks/0tvgw~87rz64x.js +1 -0
  40. package/admin/.next/static/chunks/0w368hkmrs32y.css +3 -0
  41. package/admin/.next/trace +1 -1
  42. package/admin/.next/trace-build +1 -1
  43. package/dist/lib/lifecycle.d.ts +45 -5
  44. package/dist/lib/lifecycle.js +113 -13
  45. package/dist/lib/plan-parser.d.ts +10 -0
  46. package/dist/lib/plan-parser.js +47 -8
  47. package/dist/lib/workflow-types.d.ts +67 -0
  48. package/dist/lib/workflow-types.js +108 -0
  49. package/dist/tools/plan-tools.js +18 -23
  50. package/package.json +5 -1
  51. package/skills/planner.md +3 -0
  52. package/templates/workflows/bugfix.md +3 -1
  53. package/templates/workflows/feature.md +2 -1
  54. package/templates/workflows/refactor.md +3 -1
  55. package/templates/workflows/spike.md +1 -0
  56. package/admin/.next/server/chunks/ssr/_0h.q2-q._.js +0 -3
  57. package/admin/.next/server/chunks/ssr/_0h.q2-q._.js.map +0 -1
  58. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_03_q0_m._.js +0 -11
  59. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_03_q0_m._.js.map +0 -1
  60. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_components_0_yz5rp._.js +0 -3
  61. package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_components_0_yz5rp._.js.map +0 -1
  62. package/admin/.next/static/chunks/0dby95xvpg21z.css +0 -3
  63. package/admin/.next/static/chunks/0k~j0gm._yo1s.js +0 -1
  64. package/admin/.next/static/chunks/0rr927qn8pws7.js +0 -1
  65. /package/admin/.next/static/{O9PN_FbSG2eZqctHnKE1Y → YrTIPpWD9rxuKwoMEeouq}/_buildManifest.js +0 -0
  66. /package/admin/.next/static/{O9PN_FbSG2eZqctHnKE1Y → YrTIPpWD9rxuKwoMEeouq}/_clientMiddlewareManifest.js +0 -0
  67. /package/admin/.next/static/{O9PN_FbSG2eZqctHnKE1Y → YrTIPpWD9rxuKwoMEeouq}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
- module.exports=[20858,22784,59942,a=>{"use strict";var b=a.i(44673);let c={passing:"bg-green-100 text-green-800 ring-green-600/20",blocked:"bg-red-100 text-red-800 ring-red-600/20",skipped:"bg-yellow-100 text-yellow-800 ring-yellow-600/20",planned:"bg-gray-100 text-gray-700 ring-gray-500/20",writable:"bg-gray-200 text-gray-800 ring-gray-500/20",written:"bg-blue-50 text-blue-700 ring-blue-600/20",unknown:"bg-gray-50 text-gray-500 ring-gray-400/20",neutral:"bg-gray-100 text-gray-700 ring-gray-500/20"};a.s(["Badge",0,function({variant:a="neutral",className:d="",children:e,...f}){let g=["inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium ring-1 ring-inset",c[a],d].filter(Boolean).join(" ");return(0,b.jsx)("span",{className:g,...f,children:e})}],20858);var d=a.i(2157),e=a.i(50227);let f=new Set(["fix-in-scope","spawn-plan","accept-finding"]);function g(a,b){let c=(0,e.join)(a,"falsification.md");if(!(0,d.existsSync)(c))return[];let g=(0,d.readFileSync)(c,"utf-8"),h=[],i=[...g.matchAll(/^##\s+(Hypothesis|Terminated)\s+(.+?)\s*$/gm)];for(let a=0;a<i.length;a++){let c=i[a],[,d,e]=c,j=(c.index??0)+c[0].length,k=a+1<i.length?i[a+1].index??g.length:g.length,l=g.slice(j,k).trim();if("Hypothesis"===d){let a=function(a,b){let c=a.match(/^\*\*Hypothesis:\*\*\s+(.+)$/m),d=a.match(/^\*\*Test:\*\*\s+(.+)$/m),e=a.match(/^\*\*Outcome:\*\*\s+([a-z-]+)$/m),g=a.match(/^\*\*Note:\*\*\s+(.+)$/m);if(!c||!e)return{lineNumber:0,content:a,reason:"Hypothesis entry missing required fields (hypothesis or outcome)"};let h=e[1];if(!f.has(h))return{lineNumber:0,content:a,reason:`Invalid outcome "${h}"; must be one of ${[...f].join(", ")}`};let i=d?.[1]?.trim()??"(not written)";return{kind:"hypothesis",hypothesis:c[1].trim(),testPath:"(not written)"===i?null:i,outcome:h,note:g?.[1]?.trim(),timestamp:b}}(l,e);"lineNumber"in a?b?.onMalformed?.(a):h.push(a)}else if("Terminated"===d){let a=function(a,b){let c=a.match(/^\*\*Reason:\*\*\s+(.+)$/m);return c?{kind:"terminator",reason:c[1].trim(),timestamp:b}:{lineNumber:0,content:a,reason:"Terminator entry missing required Reason field"}}(l,e);"lineNumber"in a?b?.onMalformed?.(a):h.push(a)}}return h}a.s(["isFalsificationComplete",0,function(a){let b=g(a);return 0!==b.length&&"terminator"===b[b.length-1].kind},"readFalsificationLog",0,g],22784);var h=a.i(28860);a.s(["isFalsificationSkipped",0,function(a){try{let{data:b}=(0,h.default)(a),c=b.falsification,d=b.falsification_reason;if("skipped"!==c||"string"!=typeof d)return{skipped:!1,reason:null};let e=d.trim();if(!e)return{skipped:!1,reason:null};return{skipped:!0,reason:e}}catch{return{skipped:!1,reason:null}}}],59942)},5467,a=>{"use strict";let b=String.raw`###\s+(?:Build\s+)?Phase`,c=RegExp(`^${b}\\s+(\\d+)[:\\s]+(.*)`),d=/^###\s+Test\s+Phase\s+(\d+)[:\s]+(.*)/;function e(a){let b=d.exec(a);if(b)return{kind:"test",number:Number.parseInt(b[1],10),name:b[2].trim()};let e=c.exec(a);return e?{kind:"build",number:Number.parseInt(e[1],10),name:e[2].trim()}:null}let f=/^\s*(Test\s+|Build\s+)?Phase\s+(\d+)\s*$/i,g=/^\s*(`{3,}|~{3,})(.*)$/;function h(a){let b=g.exec(a);return b?{char:b[1][0],length:b[1].length,info:b[2].trim()}:null}function i(a){let b=Array(a.length).fill(!1);for(let c=0;c<a.length;c++){let d=h(a[c]);if(!d)continue;let e=function(a,b,c){for(let d=b+1;d<a.length;d++){let b=h(a[d]);if(b&&b.char===c.char&&b.length>=c.length&&""===b.info)return d}return -1}(a,c,d);if(-1!==e){for(let a=c;a<=e;a++)b[a]=!0;c=e}}return b}a.s(["FORWARD_INTELLIGENCE_HEADING",0,/^####\s+(?:Test\s+|Build\s+)?Phase\s+\d+\s+Forward Intelligence\b/,"fencedLineMask",0,i,"gateHeading",0,function(a){return RegExp(`^####\\s+(?:Test\\s+|Build\\s+)?Phase\\s+(\\d+)\\s+${a}\\b`)},"parsePhaseHeading",0,e,"parsePhaseRef",0,function(a){let b=f.exec(a);return b?{kind:b[1]?.trim().toLowerCase()==="test"?"test":"build",number:Number.parseInt(b[2],10)}:null},"phaseExists",0,function(a,b){return"build"===a.kind&&0===a.number||b.some(b=>b.kind===a.kind&&b.number===a.number)},"phaseSequence",0,function(a){let b=a.split("\n"),c=i(b),d=[];for(let a=0;a<b.length;a++){if(c[a])continue;let f=e(b[a]);f&&d.push({kind:f.kind,number:f.number})}return d},"toPhaseRef",0,function(a){return"number"==typeof a?{kind:"build",number:a}:a}])},65409,a=>{"use strict";let b=["research","brief","test-plan","adr","impl-approved","executing","falsify","cleanup","retrospective","archived","monitor"],c=["research","brief","test-plan","adr","impl","retrospective"],d=["falsification","cleanup"],e=["Verification","OTel","Context","Document"],f={research:"research",brief:"brief","test-plan":"test-plan",adr:"adr",impl:"impl-approved",retrospective:"retrospective"},g=/\(\s*(?:none needed|not applicable)\b[^)]*asked:\s*"[^"]+"[^)]*user:\s*"[^"]+"/i,h={implementation:"implementing",Verification:"verifying",OTel:"instrumenting",Context:"capturing-context",Document:"documenting"},i={implementation:"implementation",verification:"Verification",otel:"OTel",context:"Context",document:"Document"};a.s(["DOCUMENT_POSITIONS",0,c,"PLAN_POSITIONS",0,b,"RITUAL_ORDER",0,d,"derivePhaseActivity",0,function(a,b){let c=new Map;for(let b of a.gates){let a=i[b.type];a&&c.set(a,[...c.get(a)??[],...b.items])}let f=[],j=!1,k="closed";for(let b of["implementation",...e]){let e,i=c.get(b);if(!i||0===i.length)continue;let l=i.filter(a=>a.checked).length,m=i.length,n=i.find(a=>a.checked&&g.test(a.text));m>0&&l===m?e=n?"opted-out":"done":j?e="pending":(e="active",j=!0,k=function(a,b){if("implementation"!==b)return h[b];if("test"===a.kind)return"authoring";let c=a.name.toLowerCase();return c.startsWith(d[0])?"falsifying":c.startsWith(d[1])?"cleaning-up":"implementing"}(a,b)),f.push({kind:b,state:e,checked:l,total:m,...n?{proof:n.text}:{}})}return{activity:k,stages:f,openedAt:b?.timestamp??null}},"derivePlanPosition",0,function(a){let{position:d,awaiting:e}=function(a){let{summary:b,impl:c,readiness:d,archived:e,afterClose:f}=a;if(e){if(f&&f.reopened.length>0)return{position:"executing",awaiting:`executing ${f.reopened[0]}`};if(f?.monitor){var g;let a;return{position:"monitor",awaiting:(g=f.monitor,a=`${Math.floor(g.elapsedDays)} of ${g.windowDays} days quiet`,g.restartedAt?`window restarted ${g.restartedAt.slice(0,10)} — ${a}`:a)}}return{position:"archived",awaiting:null}}let h=b.stage,i=b.stageStatus;if("retrospective"===h)return{position:"retrospective",awaiting:"retrospective written, awaiting archive"};if("impl"===h){if("completed"===i){if(null===d)return{position:"falsify",awaiting:"impl complete — readiness unknown (impl unreadable)"};let a=d.missing;if(a.includes("falsification"))return{position:"falsify",awaiting:"impl complete, awaiting /falsify"};if(a.includes("cleanup"))return{position:"cleanup",awaiting:"falsified, awaiting /cleanup"};if(a.includes("rows")){let a=d.nonTerminalRows.join(", ");return{position:"retrospective",awaiting:`rows not terminal — retrospective blocked${a?` (${a})`:""}`}}return{position:"retrospective",awaiting:"cleaned, awaiting /retrospective"}}return"in-progress"===i?{position:"executing",awaiting:null!==c&&c.phases.length>0&&c.phases.every(a=>a.gates.every(a=>a.items.every(a=>a.checked)))?"every item checked — impl status is still in-progress":null}:"approved"===i?{position:"impl-approved",awaiting:"impl approved, awaiting /work"}:{position:"impl-approved",awaiting:`impl ${i}, awaiting approval`}}if("research"===h||"brief"===h||"test-plan"===h||"adr"===h){let a="test-plan"===h?"test plan":"adr"===h?"ADR":h;return"accepted"===i||"complete"===i||"completed"===i?{position:h,awaiting:`${a} accepted, awaiting the next document`}:"proposed"===i||"draft"===i||"in-progress"===i?{position:h,awaiting:`${a} ${i}, awaiting acceptance`}:{position:h,awaiting:`${a} ${i}`}}return{position:"research",awaiting:`${h} — no lifecycle document yet`}}(a),g=b.indexOf(d),h=new Set(a.summary.documents),i={};for(let[a,e]of b.entries()){if(a>g){i[e]="pending";continue}if(a===g){i[e]="archived"===d?"done":"active";continue}let b=function(a){for(let b of c)if(f[b]===a)return b;return null}(e);i[e]=null===b||h.has(`${b}.md`)?"done":"skipped"}let j="monitor"===d?a.afterClose?.monitor:null;return{position:d,segments:i,awaiting:"archived"===d?null:e,...j?{monitor:j}:{}}}])},37539,25455,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(28860),e=a.i(22784),f=a.i(59942),g=a.i(5467),h=a.i(65409);let i=new Set(["passing","skipped","blocked"]),j=/^##\s+Test Trajectory\b/,k=/^###\s+Deferred Verification\b/,l=/^#{1,3}\s+/,m=new Set(["planned","writable","written","passing","blocked","skipped","unknown"]),n=new Set(["example","property","contract","approval","formal"]),o=new Set(["unit","integration","e2e"]);function p(a){let b=a.trim();return b.startsWith("|")&&b.endsWith("|")?b.slice(1,-1).split("|").map(a=>a.trim()):[]}function q(a){let b=a.toLowerCase().replace(/\s+/g," ").trim();return({id:"id",asserts:"asserts","writable at":"writableAt","passes at":"passesAt",state:"state",kind:"kind",scope:"scope"})[b]??b}function r(a){return(0,g.parsePhaseRef)(a)?.number??NaN}function s(a){return(0,g.parsePhaseRef)(a)?.kind??"build"}function t(a){let b=a.split("\n");if(!b.some(a=>j.test(a)))return{rows:[],deferred:[],present:!1};let{tableLines:c,deferredLines:d}=function(a){let b=!1,c=!1,d=[],e=[];for(let f of a){if(j.test(f)){b=!0,c=!1;continue}if(b){if(k.test(f)){c=!0;continue}if(l.test(f)&&!k.test(f)){let a=f.match(/^(#{1,6})/)?.[1].length??0;if(a<=2||3===a)break}c?e.push(f):d.push(f)}}return{tableLines:d,deferredLines:e}}(b);return{rows:function(a){let b=a.filter(a=>a.trim().startsWith("|"));if(b.length<2)return[];let c=p(b[0]);if(!p(b[1]).every(a=>/^:?-+:?$/.test(a)))return[];let d=c.map(q),e=[];for(let a=2;a<b.length;a++){let c=p(b[a]);if(c.length!==d.length)continue;let f={};for(let a=0;a<d.length;a++)f[d[a]]=c[a];let g=f.id?.trim(),h=f.asserts?.trim();g&&h&&e.push({id:g,asserts:h,writableAt:r(f.writableAt??""),passesAt:r(f.passesAt??""),writableAtKind:s(f.writableAt??""),passesAtKind:s(f.passesAt??""),state:function(a){let b=a.toLowerCase().trim();return m.has(b)?b:"unknown"}(f.state??""),kind:function(a){let b=a.toLowerCase().trim();if(b&&n.has(b))return b}(f.kind??""),scope:function(a){let b=a.toLowerCase().trim();if(b&&o.has(b))return b}(f.scope??""),test:function(a){let b=a.split(",").map(a=>a.trim().replace(/^`+|`+$/g,"").trim()).filter(a=>a.length>0);return b.length>0?b:void 0}(f.test??"")})}return e}(c),deferred:function(a){let b=[],c=null,d=()=>{c&&void 0!==c.name&&b.push({name:c.name,reason:c.reason??"",wouldRequire:c.wouldRequire??"",mitigation:c.mitigation??""}),c=null};for(let b of a){let a=b.replace(/\s+$/,""),e=a.match(/^-\s+\*\*(.+?)\*\*\s*(?:—\s*(.*))?$/);if(e){d(),c={name:e[1].trim()};let a=e[2];if(a){let b=a.match(/reason:\s*([^—]+?)(?:\s*—|$)/i),d=a.match(/would require:\s*([^—]+?)(?:\s*—|$)/i),e=a.match(/mitigation:\s*(.+)$/i);b&&(c.reason=b[1].trim()),d&&(c.wouldRequire=d[1].trim()),e&&(c.mitigation=e[1].trim())}continue}if(!c)continue;let f=a.match(/^\s+-\s+(reason|would require|mitigation):\s*(.*)$/i);if(f){let a=f[1].toLowerCase(),b=f[2].trim();"reason"===a?c.reason=b:"would require"===a?c.wouldRequire=b:"mitigation"===a&&(c.mitigation=b)}}return d(),b}(d),present:!0}}function u(a,b){let c=RegExp(`^${b}\\b`,"i"),d=a.split("\n"),e=!1,f=!1,h=0;for(let a of d){let b=(0,g.parsePhaseHeading)(a);if(b){c.test(b.name)?(e=!0,f=!0):e=!1;continue}if(e&&/^\s*-\s+\[[ xX]\]/.test(a)&&(h++,/^\s*-\s+\[ \]/.test(a)))return!1}return f&&h>0}a.s(["parseTrajectory",0,t],25455),a.s(["checkRetrospectiveReadiness",0,function(a,j){var k,l;let m,n,o=(0,e.isFalsificationComplete)(a)||(0,f.isFalsificationSkipped)(j).skipped||u(j,h.RITUAL_ORDER[0]),p=(l=a,m=(0,c.join)(l,"impl.md"),!!(0,b.existsSync)(m)&&u((0,b.readFileSync)(m,"utf-8"),h.RITUAL_ORDER[1])||function(a){try{let{data:b}=(0,d.default)(a);if("skipped"!==b.cleanup)return{skipped:!1,reason:null};let c=b.cleanup_reason;if("string"!=typeof c)return{skipped:!1,reason:null};let e=c.trim();if(!e)return{skipped:!1,reason:null};return{skipped:!0,reason:e}}catch{return{skipped:!1,reason:null}}}(j).skipped),q=(0,d.default)(j).content,r=(k=t(q),n=(0,g.phaseSequence)(q),k.rows.filter(a=>(0,g.phaseExists)({kind:a.passesAtKind,number:a.passesAt},n)&&!i.has(a.state)).map(a=>({row:a,message:`Row ${a.id} is still '${a.state}' although ${"test"===a.passesAtKind?"Test ":""}Phase ${a.passesAt} exists — a plan does not close with a row that never reached passing, skipped or blocked`}))).map(a=>a.row.id),s=0===r.length,v=[];return o||v.push("falsification"),p||v.push("cleanup"),s||v.push("rows"),{falsificationOk:o,cleanupOk:p,rowsOk:s,nonTerminalRows:r,passes:0===v.length,missing:v}}],37539)},77738,a=>{"use strict";var b=a.i(28860),c=a.i(5467);let d={Verification:"verification",OTel:"otel",Context:"context",Document:"document"};a.s(["findPhase",0,function(a,b){return a.phases.find(a=>a.kind===b.kind&&a.number===b.number)},"parseImplString",0,function(a){let{data:e,content:f}=a.startsWith("---")?(0,b.default)(a):{data:{},content:a},g=e.title??"",h=e.status??"",i=f.split("\n"),j=[],k=null,l="implementation",m=[],n=!1,o=[];function p(){if(!k)return;let a=function(a){let b=[];for(let c of a){let a=c.match(/^-\s+\[([ x])\]\s+(.*)/);a&&b.push({checked:"x"===a[1],text:a[2].trim()})}return b}(m);a.length>0&&k.gates.push({type:l,items:a}),m=[]}let q=(0,c.fencedLineMask)(i);for(let a=0;a<i.length;a++){let b=i[a];if(q[a])continue;let e=(0,c.parsePhaseHeading)(b);if(e){p(),k&&j.push(k),k={number:e.number,kind:e.kind,ordinal:j.length,name:e.name,gates:[],blocker:null,forwardIntelligence:null},l="implementation",m=[];continue}if(b.match(c.FORWARD_INTELLIGENCE_HEADING)){p(),n=!0,o=[];continue}let f=b.match((0,c.gateHeading)("(Verification|OTel|Context|Document)"));if(f){n&&k&&(k.forwardIntelligence=o.join("\n").trim()||null,n=!1),p(),l=d[f[2]];continue}if(k){let a=b.match(/^blocker:\s+(.*)/);if(a){k.blocker=a[1].trim();continue}}n?o.push(b):m.push(b)}return n&&k&&(k.forwardIntelligence=o.join("\n").trim()||null),p(),k&&j.push(k),{title:g,status:h,phases:j}}])},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},12057,(a,b,c)=>{b.exports=a.x("node:util",()=>require("node:util"))},30235,99141,55515,10404,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(28860);a.i(77487);var e=a.i(5467),f=a.i(65409),g=a.i(66680);let h=["draft","accepted","published"],i={malformed:0,draft:1,accepted:2,published:3};var j=a.i(82024);function k(a,b){let c=a[b];if(!Array.isArray(c))return[];let d=[];for(let a of c)"string"==typeof a&&(0,j.isCleanSegment)(a)&&(d.includes(a)||d.push(a));return d}function l(a){if(!(0,b.existsSync)(a))return null;try{return(0,d.default)((0,b.readFileSync)(a,"utf-8")).data}catch(c){let b=c instanceof Error?c.message:String(c);return process.stderr.write(`[plan-parser] master frontmatter unreadable in ${a}: ${b}
2
- `),null}}a.s(["parsePlan",0,function(a){var e,j;let k=a.split("/").pop()??"",l=(0,b.readdirSync)(a).filter(a=>a.endsWith(".md")),m=function(a,e){for(let g=f.DOCUMENT_POSITIONS.length-1;g>=0;g--){let h=f.DOCUMENT_POSITIONS[g],i=`${h}.md`;if(e.includes(i)){let e=function(a){if(!(0,b.existsSync)(a))return{frontmatter:null};let c=(0,b.readFileSync)(a,"utf-8");try{let{data:a}=(0,d.default)(c);return{frontmatter:{title:a.title??"",date:a.date??"",status:a.status??""}}}catch(c){let b=c instanceof Error?c.message:String(c);return process.stderr.write(`[plan-parser] frontmatter parse error in ${a}: ${b}
3
- `),{frontmatter:null,parseError:{file:a,message:b}}}}((0,c.join)(a,i));if(e.parseError)return{stage:"malformed",stageStatus:"parse-error",parseError:e.parseError};return{stage:h,stageStatus:e.frontmatter?.status??"unknown"}}}return{stage:"unknown",stageStatus:"unknown"}}(a,l),n=function(a){if(!(0,b.existsSync)(a))return[];let c=(0,b.readFileSync)(a,"utf-8").match(/## Depends On\s*\n([\s\S]*?)(?=\n## |\n$|$)/);if(!c)return[];let d=[];for(let a of c[1].split("\n")){let b=a.match(/^-\s+`?(?:\.indusk\/)?planning\/([^/`]+)\/?`?/);b&&d.push(b[1])}return d}((0,c.join)(a,"brief.md")),o=l.map(e=>(function(a,e){var f;let i,j=(0,b.readFileSync)((0,c.join)(a,e),"utf-8");try{i=(0,d.default)(j).data}catch{return null}if("paper"!==i.kind)return null;let k="string"==typeof(f=i.status)&&h.includes(f)?i.status:"malformed";return{file:e,title:"string"==typeof i.title?i.title:e,status:k,stale:function(a,b,c){let e;if("published"!==c)return!1;let f=null!==(e=b.published)&&"object"==typeof e?e:void 0,h="string"==typeof f?.hash?f.hash:null;return null===h||h!==function(a){let{data:b,content:c}=(0,d.default)(a),e={...b};return delete e.published,delete e.status,`sha256:${(0,g.createHash)("sha256").update(d.default.stringify(c,e)).digest("hex")}`}(a)}(j,i,k)}})(a,e)).filter(a=>null!==a),{stage:p,stageStatus:q,nextStep:r}=(e=m,j=o,"unknown"===e.stage&&j.length>0?{stage:"paper",stageStatus:j.reduce((a,b)=>i[b.status]<i[a]?b.status:a,"published"),nextStep:function(a){let b=a.find(a=>"malformed"===a.status);if(b)return`Fix paper status in ${b.file} (expected ${h.join(" | ")})`;let c=a.find(a=>"draft"===a.status);if(c)return`Review paper: ${c.file}`;let d=a.filter(a=>"accepted"===a.status||a.stale).length;return d>0?`Publish ${d} paper(s)`:"Done"}(j)}:{stage:e.stage,stageStatus:e.stageStatus,nextStep:function(a,b,c){if("malformed"===a&&c)return`Fix YAML frontmatter at ${c.file}: ${c.message}`;if("unknown"===a)return"Create a brief";let d=f.DOCUMENT_POSITIONS.indexOf(a);if("completed"===b||"accepted"===b){let a=f.DOCUMENT_POSITIONS[d+1];return a?`Create ${a}`:"Done"}return"in-progress"===b?`Continue ${a}`:`Review ${a} (status: ${b})`}(e.stage,e.stageStatus,e.parseError)});return{name:k,stage:p,stageStatus:q,nextStep:r,dependencies:n,documents:l,...o.length>0&&{papers:o},...m.parseError&&{parseError:m.parseError}}},"readPlanDeclarations",0,function(a){if(!(0,b.existsSync)(a))return{parents:[],roadmap:[],subplans:{}};let f=(0,c.join)(a,"master.md"),g=l(f),h=g?k(g,"parents"):[],i=g?k(g,"roadmap"):[],j=(0,b.existsSync)(f)?{name:"master",title:function(a,c){let f=c?.title;if("string"==typeof f&&""!==f.trim())return f.trim();try{let c=(0,b.readFileSync)(a,"utf-8"),f=(c.startsWith("---")?(0,d.default)(c).content:c).split("\n"),g=(0,e.fencedLineMask)(f);for(let[a,b]of f.entries()){if(g[a])continue;let c=b.match(/^#\s+(.+)$/);if(c)return c[1].trim()}}catch{}return"master"}(f,g)}:void 0,m=new Set(h);try{for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}))d.isDirectory()&&(0,b.existsSync)((0,c.join)(a,d.name,"master.md"))&&m.add(d.name)}catch{}let n={};for(let b of m){let d=l((0,c.join)(a,b,"master.md"));d&&(n[b]=k(d,"subplans"))}return{...j?{root:j}:{},parents:h,roadmap:i,subplans:n}}],30235);var m=a.i(8390),n=a.i(66450),o=a.i(77738);a.s(["afterClose",0,function(a,e,f,g=function(a){let b=(0,n.readPromises)(a);return b.ok?b.registry:"partial"in b?b.partial:null}(a),h=new Date){var i;let j,k=(j=(0,c.join)(f,"impl.md"),(0,b.existsSync)(j)?(i=(0,b.readFileSync)(j,"utf-8"),(0,o.parseImplString)(i).phases.filter(a=>a.name.startsWith("Maintenance — ")&&a.gates.some(a=>a.items.some(a=>!a.checked))).map(a=>a.name)):[]);return{reopened:k,monitor:k.length>0?null:function(a,e,f,g,h=new Date){if(!g)return null;let i=g.promises.filter(a=>a.owner===e&&"behaviour"===a.kind&&"retired"!==a.state);if(0===i.length)return null;let j=function(a){let e=(0,c.join)(a,"retrospective.md");if(!(0,b.existsSync)(e))return null;let f=(0,b.readFileSync)(e,"utf-8"),g=/Landed on main at[^\n]*?(\d{4}-\d{2}-\d{2})/.exec(f)?.[1];if(g)return new Date(`${g}T00:00:00Z`);let h=(0,d.default)(f).data.date,i=h instanceof Date?h:"string"==typeof h?new Date(h):null;return i&&!Number.isNaN(i.getTime())?i:null}(f);if(!j)return null;let k=new Set(i.map(a=>a.name)),l=null;for(let a of g.incidents){if(!k.has(a.promise))continue;let e=new Date(function(a){var c;let e=(0,d.default)((0,b.readFileSync)(a,"utf-8")).data,f=e.last_seen;return{traces:Array.isArray(c=e.traces)?c.map(String):[],lastSeen:f instanceof Date?f.toISOString().replace(/\.\d{3}Z$/,"Z"):"string"==typeof f?f:null}}((0,c.join)(g.dir,a.file)).lastSeen??a.date);Number.isNaN(e.getTime())||l&&!(e>l)||(l=e)}let n=null!==l&&l>j,o=n&&l?l:j,p=(0,m.getQuietWindowDays)(a),q=Math.max(0,(h.getTime()-o.getTime())/864e5);return q>=p?null:{windowDays:p,elapsedDays:Math.round(10*q)/10,restartedAt:n&&l?l.toISOString():null}}(a,e,f,g,h)}}],99141);var p=a.i(74533);let q=(0,a.i(12057).promisify)(p.execFile);async function r(a,...b){let{stdout:c}=await q("git",b,{cwd:a,maxBuffer:0x2000000});return c.trim()}async function s(a){return function(a){let b=[];for(let c of a.split(/\n\s*\n/)){let a=c.split("\n"),d=t(a,"worktree ");if(!d)continue;let e=t(a,"branch ");b.push({path:d,branch:e?e.replace(/^refs\/heads\//,""):null,main:0===b.length,prunable:a.some(a=>"prunable"===a||a.startsWith("prunable "))})}return b}(await r(a,"worktree","list","--porcelain"))}function t(a,b){return a.find(a=>a.startsWith(b))?.slice(b.length).trim()}a.s(["git",0,r,"listWorktrees",0,s],55515);var u=a.i(1930);class v extends Error{name="PlanWorktreeRefusal"}async function w(a){return function(a){let c,d;if(!(0,b.existsSync)(a))return{ok:!0,file:a,assignments:[]};try{c=(0,b.readFileSync)(a,"utf-8")}catch(b){return{ok:!1,file:a,problem:`unreadable (${b.message})`}}var e=c;try{d=JSON.parse(e)}catch(b){return{ok:!1,file:a,problem:`not valid JSON (${b.message})`}}if("object"!=typeof d||null===d)return{ok:!1,file:a,problem:"not an object"};let f=d;if(1!==f.version)return{ok:!1,file:a,problem:`version is ${JSON.stringify(f.version)}, expected 1`};if(!Array.isArray(f.assignments))return{ok:!1,file:a,problem:"assignments is not a list"};for(let b=0;b<f.assignments.length;b++){let c=function(a,b){if("object"!=typeof a||null===a)return`assignment ${b} is not an object`;for(let c of["plan","path","branch","at"])if("string"!=typeof a[c]||""===a[c].trim())return`assignment ${b} has no ${c}`;return(0,j.isUsableSegment)(a.plan)?a.path.startsWith("/")?null:`assignment ${b} has a relative path "${a.path}"`:`assignment ${b} names an unusable plan "${a.plan}"`}(f.assignments[b],b);if(c)return{ok:!1,file:a,problem:c}}return{ok:!0,file:a,assignments:f.assignments}}(function(a){let d=(0,u.gitCommonDirOf)(a);if(!d)throw new v(`${a} is not inside a git repository`);return(0,c.join)((0,b.realpathSync)(d),"indusk-plan-worktrees.json")}(a))}a.s(["readRecord",0,w],10404)},62947,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(82024);function e(a){let d=(0,c.join)(a,".indusk","config.json");if(!(0,b.existsSync)(d))return null;try{return JSON.parse((0,b.readFileSync)(d,"utf-8"))}catch{return null}}a.s(["isWorkbench",0,function(a){return e(a)?.worktree?.shape==="workbench"||function(a){let b=e(a)?.worktree;if(!b)return[];let c=Array.isArray(b.repos)?b.repos:"string"==typeof b.wrapped_repo?[{name:b.wrapped_repo}]:[],f=new Set,g=[];for(let a of c){if("object"!=typeof a||null===a)continue;let{name:b,remote:c}=a;if("string"!=typeof b||!(0,d.isCleanSegment)(b)||f.has(b))continue;f.add(b);let{path:e,worktrees:h}=a,i={name:b};"string"==typeof c&&""!==c.trim()&&(i.remote=c),"string"==typeof e&&(0,d.isUsableRelPath)(e)&&(i.path=e),"string"==typeof h&&(0,d.isUsableRelPath)(h)&&(i.worktrees=h),g.push(i)}return g}(a).length>0}])},42717,a=>{"use strict";var b=a.i(2157),c=a.i(12714),d=a.i(50227),e=a.i(37539),f=a.i(22784),g=a.i(77738),h=a.i(65409),i=a.i(30235),j=a.i(99141),k=a.i(25455),l=a.i(77487),m=a.i(55515),n=a.i(10404),o=a.i(62947);function p(a){try{return(0,b.realpathSync)(a)}catch{return(0,d.resolve)(a)}}function q(a,b){return{plan:b,root:a,dir:(0,d.join)((0,l.getPlanningDir)(a),b),source:"trunk"}}function r(a){let c=(0,l.getPlanningDir)(a);return(0,b.existsSync)(c)?(0,b.readdirSync)(c,{withFileTypes:!0}).filter(a=>a.isDirectory()&&"archive"!==a.name).map(a=>a.name).sort():[]}async function s(a){let c;try{let b=await (0,m.git)(a,"rev-parse","--show-toplevel");if(p(b)!==p(a))return null;c=await (0,m.listWorktrees)(a)}catch{return null}let d=c.find(a=>a.main);if(!d)return null;let e=new Map;for(let a of c){if(a.main||a.prunable||!(0,b.existsSync)(a.path))continue;let c=p(a.path);e.set(c,{path:c,branch:a.branch})}return{projectRoot:p(d.path),linked:e}}function t(a){return new Map(r(a).map(b=>[b,q(a,b)]))}async function u(a){let c=p(a);if((0,o.isWorkbench)(c))return{ok:!0,projectRoot:c,copies:t(c),unassigned:[]};let e=await s(c);if(!e)return{ok:!0,projectRoot:c,copies:t(c),unassigned:[]};let f=await (0,n.readRecord)(c);if(!f.ok)return{ok:!1,projectRoot:e.projectRoot,file:f.file,problem:f.problem};let g=new Map,h=new Set;for(let a of r(e.projectRoot)){let{copy:c,live:i}=function(a,c,e){let f=q(e.projectRoot,a),g=c.filter(b=>b.plan===a);if(0===g.length)return{copy:f,live:[]};let h=g.map(a=>p(a.path)).filter(a=>e.linked.has(a));if(1===h.length){let[c]=h,i=e.linked.get(c)?.branch??g[0].branch;return{copy:function(a,c,e,f){let g={name:(0,d.basename)(c),path:c,branch:e},h=(0,l.getPlanningDir)(c),i=(0,d.join)(h,a);if((0,b.existsSync)(i))return{plan:a,root:c,dir:i,source:"worktree",worktree:g};let j=(0,d.join)(h,"archive",a);return(0,b.existsSync)(j)?{plan:a,root:c,dir:j,source:"worktree",worktree:g,archivedInWorktree:!0}:{...f,problem:"missing",detail:`plan folder missing in worktree ${c} (neither ${i} nor ${j} exists)`}}(a,c,i,f),live:h}}return h.length>1?{copy:{...f,problem:"doubled",detail:`two live worktrees are assigned to ${a}: ${h.join(", ")}`},live:h}:{copy:{...f,problem:"gone",detail:`assigned worktree ${g.map(a=>a.path).join(", ")} no longer exists`},live:h}}(a,f.assignments,e);for(let b of(g.set(a,c),i))h.add(b)}let i=[...e.linked.values()].filter(a=>!h.has(a.path)).map(a=>({name:(0,d.basename)(a.path),path:a.path,branch:a.branch}));return{ok:!0,projectRoot:e.projectRoot,copies:g,unassigned:i}}var v=a.i(28860),w=a.i(47306);let x=".indusk/planning",y="archive",z=["research.md","brief.md","test-plan.md","adr.md","impl.md","falsification.md","retrospective.md"],A=/^---\n([\s\S]*?)\n---/;async function B(a,e){let f,g=(0,d.join)(a,e);if(!(0,b.existsSync)(g))return null;try{f=await (0,c.readFile)(g,"utf-8")}catch{return{malformed:!0,raw:""}}try{let a=(0,v.default)(f),b=a.data;if(0===Object.keys(b).length){let a=f.match(A);if(a){let b=a[1].replace(/^\s*#[^\n]*$/gm,"").trim();if(""!==b)return{malformed:!0,raw:f}}}return{frontmatter:b,content:a.content}}catch{return{malformed:!0,raw:f}}}function C(a){return null!==a&&"malformed"in a}async function D(a,c,l,m={records:[]},n){let o,p,q=await Promise.all(z.map(b=>B(a,b))),[r,s,t,u,v,w,x]=q,y=q.some(a=>C(a)),A={};for(let a=0;a<q.length;a++){let b=q[a];null!==b&&C(b)&&(A[z[a]]=b.raw)}if(null!==v&&!C(v)){let a=/^##\s+Test Trajectory\b/m.test(v.content)?(0,k.parseTrajectory)(v.content):void 0;o={...v,trajectory:a}}if(null!==w)try{let b=(0,f.readFalsificationLog)(a),c=(0,f.isFalsificationComplete)(a);p={entries:b,complete:c}}catch{}let F=(0,i.parsePlan)(a),G=F.papers?await E(a,F.papers):void 0,H=null===v||C(v)?null:(0,e.checkRetrospectiveReadiness)(a,(0,b.readFileSync)((0,d.join)(a,"impl.md"),"utf-8")),I=l&&n?(0,j.afterClose)(n,c,a):void 0,J=(0,h.derivePlanPosition)({summary:F,impl:o?(0,g.parseImplString)(o.content):null,readiness:H,archived:l,...I?{afterClose:I}:{}}),K="error"in m?{boundaryError:m.error}:{boundaries:m.records.filter(a=>a.plan===c)};return{name:c,status:o?.frontmatter.status??(null===s||C(s)?void 0:s.frontmatter.status)??("paper"===F.stage?F.stageStatus:void 0)??"unknown",position:J,...K,...G?{papers:G}:{},archived:l,research:null===r||C(r)?void 0:r,brief:null===s||C(s)?void 0:s,testPlan:null===t||C(t)?void 0:t,adr:null===u||C(u)?void 0:u,impl:o,falsification:p,retrospective:null===x||C(x)?void 0:x,...y?{malformed:!0,rawDocuments:A}:{}}}async function E(a,b){return Promise.all(b.map(async b=>({...b,content:(0,v.default)(await (0,c.readFile)((0,d.join)(a,b.file),"utf-8")).content})))}async function F(a){return(0,b.existsSync)(a)?(await (0,c.readdir)(a,{withFileTypes:!0})).filter(a=>a.isDirectory()&&a.name!==y).map(a=>a.name).sort():[]}async function G(a){let b=await u(a),c=b.projectRoot,e=await F((0,d.join)(c,x));if(!b.ok){let a={file:b.file,problem:b.problem};return e.map(b=>({name:b,status:"unknown",archived:!1,copyError:a}))}let f=new Map;return Promise.all(e.map(async a=>{var e;let g,h=b.copies.get(a)??{plan:a,root:c,dir:(0,d.join)(c,x,a),source:"trunk"};return{...await D(h.dir,a,!1,await (e=h.root,!(g=f.get(e))&&(g=(0,w.readProjectBoundaries)(e),f.set(e,g)),g)),...!h?{}:"worktree"===h.source?h.archivedInWorktree?{worktree:h.worktree,archivedInWorktree:!0}:{worktree:h.worktree}:"problem"in h?{copyProblem:{kind:h.problem,detail:h.detail}}:{}}}))}async function H(a){let b=await u(a);return b.ok?{ok:!0,unassigned:b.unassigned}:{ok:!1,file:b.file,problem:b.problem}}async function I(a){let e=(0,d.join)(a,x,y);if(!(0,b.existsSync)(e))return[];let f=(await (0,c.readdir)(e,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name).sort(),g=await (0,w.readProjectBoundaries)(a);return Promise.all(f.map(b=>D((0,d.join)(e,b),b,!0,g,a)))}async function J(a,b){let c=await B((0,d.join)(a,x,b),"master.md");return null===c||C(c)?null:c.content}async function K(a,e){let f=(0,d.join)(a,".indusk/eval/results.log");if(!(0,b.existsSync)(f))return[];let g=await (0,c.readFile)(f,"utf-8"),h=[];for(let a of g.split("\n")){let b=a.trim();if(b)try{let a=JSON.parse(b);if("string"!=typeof a.timestamp)continue;let c=new Date(a.timestamp);if(Number.isNaN(c.getTime()))continue;c>=e.from&&c<=e.to&&h.push(a)}catch{}}return h.sort((a,b)=>new Date(b.timestamp).getTime()-new Date(a.timestamp).getTime()),h}a.s(["readActivePlans",0,G,"readArchivedPlans",0,I,"readEvalScorecards",0,K,"readPlanHierarchy",0,function(a){return(0,i.readPlanDeclarations)((0,d.join)(a,x))},"readPlanMasterContent",0,J,"readProjectWorktrees",0,H],42717)}];
1
+ module.exports=[20858,22784,59942,a=>{"use strict";var b=a.i(44673);let c={passing:"bg-green-100 text-green-800 ring-green-600/20",blocked:"bg-red-100 text-red-800 ring-red-600/20",skipped:"bg-yellow-100 text-yellow-800 ring-yellow-600/20",planned:"bg-gray-100 text-gray-700 ring-gray-500/20",writable:"bg-gray-200 text-gray-800 ring-gray-500/20",written:"bg-blue-50 text-blue-700 ring-blue-600/20",unknown:"bg-gray-50 text-gray-500 ring-gray-400/20",neutral:"bg-gray-100 text-gray-700 ring-gray-500/20"};a.s(["Badge",0,function({variant:a="neutral",className:d="",children:e,...f}){let g=["inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium ring-1 ring-inset",c[a],d].filter(Boolean).join(" ");return(0,b.jsx)("span",{className:g,...f,children:e})}],20858);var d=a.i(2157),e=a.i(50227);let f=new Set(["fix-in-scope","spawn-plan","accept-finding"]);function g(a,b){let c=(0,e.join)(a,"falsification.md");if(!(0,d.existsSync)(c))return[];let g=(0,d.readFileSync)(c,"utf-8"),h=[],i=[...g.matchAll(/^##\s+(Hypothesis|Terminated)\s+(.+?)\s*$/gm)];for(let a=0;a<i.length;a++){let c=i[a],[,d,e]=c,j=(c.index??0)+c[0].length,k=a+1<i.length?i[a+1].index??g.length:g.length,l=g.slice(j,k).trim();if("Hypothesis"===d){let a=function(a,b){let c=a.match(/^\*\*Hypothesis:\*\*\s+(.+)$/m),d=a.match(/^\*\*Test:\*\*\s+(.+)$/m),e=a.match(/^\*\*Outcome:\*\*\s+([a-z-]+)$/m),g=a.match(/^\*\*Note:\*\*\s+(.+)$/m);if(!c||!e)return{lineNumber:0,content:a,reason:"Hypothesis entry missing required fields (hypothesis or outcome)"};let h=e[1];if(!f.has(h))return{lineNumber:0,content:a,reason:`Invalid outcome "${h}"; must be one of ${[...f].join(", ")}`};let i=d?.[1]?.trim()??"(not written)";return{kind:"hypothesis",hypothesis:c[1].trim(),testPath:"(not written)"===i?null:i,outcome:h,note:g?.[1]?.trim(),timestamp:b}}(l,e);"lineNumber"in a?b?.onMalformed?.(a):h.push(a)}else if("Terminated"===d){let a=function(a,b){let c=a.match(/^\*\*Reason:\*\*\s+(.+)$/m);return c?{kind:"terminator",reason:c[1].trim(),timestamp:b}:{lineNumber:0,content:a,reason:"Terminator entry missing required Reason field"}}(l,e);"lineNumber"in a?b?.onMalformed?.(a):h.push(a)}}return h}a.s(["isFalsificationComplete",0,function(a){let b=g(a);return 0!==b.length&&"terminator"===b[b.length-1].kind},"readFalsificationLog",0,g],22784);var h=a.i(28860);a.s(["isFalsificationSkipped",0,function(a){try{let{data:b}=(0,h.default)(a),c=b.falsification,d=b.falsification_reason;if("skipped"!==c||"string"!=typeof d)return{skipped:!1,reason:null};let e=d.trim();if(!e)return{skipped:!1,reason:null};return{skipped:!0,reason:e}}catch{return{skipped:!1,reason:null}}}],59942)},5467,a=>{"use strict";let b=String.raw`###\s+(?:Build\s+)?Phase`,c=RegExp(`^${b}\\s+(\\d+)[:\\s]+(.*)`),d=/^###\s+Test\s+Phase\s+(\d+)[:\s]+(.*)/;function e(a){let b=d.exec(a);if(b)return{kind:"test",number:Number.parseInt(b[1],10),name:b[2].trim()};let e=c.exec(a);return e?{kind:"build",number:Number.parseInt(e[1],10),name:e[2].trim()}:null}let f=/^\s*(Test\s+|Build\s+)?Phase\s+(\d+)\s*$/i,g=/^\s*(`{3,}|~{3,})(.*)$/;function h(a){let b=g.exec(a);return b?{char:b[1][0],length:b[1].length,info:b[2].trim()}:null}function i(a){let b=Array(a.length).fill(!1);for(let c=0;c<a.length;c++){let d=h(a[c]);if(!d)continue;let e=function(a,b,c){for(let d=b+1;d<a.length;d++){let b=h(a[d]);if(b&&b.char===c.char&&b.length>=c.length&&""===b.info)return d}return -1}(a,c,d);if(-1!==e){for(let a=c;a<=e;a++)b[a]=!0;c=e}}return b}a.s(["FORWARD_INTELLIGENCE_HEADING",0,/^####\s+(?:Test\s+|Build\s+)?Phase\s+\d+\s+Forward Intelligence\b/,"fencedLineMask",0,i,"gateHeading",0,function(a){return RegExp(`^####\\s+(?:Test\\s+|Build\\s+)?Phase\\s+(\\d+)\\s+${a}\\b`)},"parsePhaseHeading",0,e,"parsePhaseRef",0,function(a){let b=f.exec(a);return b?{kind:b[1]?.trim().toLowerCase()==="test"?"test":"build",number:Number.parseInt(b[2],10)}:null},"phaseExists",0,function(a,b){return"build"===a.kind&&0===a.number||b.some(b=>b.kind===a.kind&&b.number===a.number)},"phaseSequence",0,function(a){let b=a.split("\n"),c=i(b),d=[];for(let a=0;a<b.length;a++){if(c[a])continue;let f=e(b[a]);f&&d.push({kind:f.kind,number:f.number})}return d},"toPhaseRef",0,function(a){return"number"==typeof a?{kind:"build",number:a}:a}])},65409,12383,a=>{"use strict";let b=["feature","bugfix","refactor","spike"],c={feature:{purpose:"A new capability or a change to how the system works — the full lifecycle.",requires:["research","brief","test-plan","adr","impl","retrospective"],skips:[],why:"Nothing is skipped: the problem has to be explored, the direction proposed, the behaviour pinned down, and the decision recorded before code is written."},bugfix:{purpose:"Something is broken and the fix is known.",requires:["brief","test-plan","impl","retrospective"],skips:["research","adr"],why:"The problem is already understood, so there is nothing to research and no architecture to decide. The test plan stays: its first assertion is the failing test that proves the bug."},refactor:{purpose:"Existing code is restructured without changing what it does.",requires:["brief","test-plan","impl","retrospective"],skips:["research","adr"],why:"Behaviour does not change, so there is no problem space to research and no decision to record. The test plan stays — it is what proves the behaviour held — and the impl carries a boundary map."},spike:{purpose:"Pure exploration, with no commitment to build anything.",requires:["research"],skips:["brief","test-plan","adr","impl","retrospective"],why:"A spike ends in findings. If it leads to building something, that is a new plan with its own brief."}},d={research:"research",brief:"brief","test-plan":"test plan",adr:"ADR",impl:"impl",retrospective:"retrospective"};a.s(["DOCUMENT_LABELS",0,d,"WORKFLOW_DEFINITIONS",0,c,"absentDocumentNote",0,function(a,b,c,e=null){let f=d[a];return"missing"===b&&null!==c?`The ${f} is missing — a ${c} requires it.`:null!==e?`The ${f} is absent, and this plan declares "${e}", which is not a recognised type, so whether that matters cannot be judged.`:`The ${f} is absent, and this plan declares no type, so whether that matters cannot be judged.`},"readWorkflow",0,function(a,c=null){if(null==a)return{type:null,declared:null};if("string"!=typeof a)return{type:null,declared:c??JSON.stringify(a)};let d=a.trim();return""===d?{type:null,declared:null}:{type:b.includes(d)?d:null,declared:d}}],12383);let e=["research","brief","test-plan","adr","impl-approved","executing","falsify","cleanup","retrospective","archived","monitor"],f=["research","brief","test-plan","adr","impl","retrospective"];function g(a){return"accepted"===a||"complete"===a||"completed"===a}let h=["executing","falsify","cleanup"],i=["falsification","cleanup"],j=["Verification","OTel","Context","Document"],k={research:"research",brief:"brief","test-plan":"test-plan",adr:"adr",impl:"impl-approved",retrospective:"retrospective"};function l(a,b){let d=f.indexOf(a);return f.slice(d+1).find(a=>null===b||c[b].requires.includes(a))}function m(a){for(let b of f)if(k[b]===a)return b;return null}let n=/\(\s*(?:none needed|not applicable)\b[^)]*asked:\s*"[^"]+"[^)]*user:\s*"[^"]+"/i,o={implementation:"implementing",Verification:"verifying",OTel:"instrumenting",Context:"capturing-context",Document:"documenting"},p={implementation:"implementation",verification:"Verification",otel:"OTel",context:"Context",document:"Document"};a.s(["DOCUMENT_POSITIONS",0,f,"PLAN_POSITIONS",0,e,"RITUAL_ORDER",0,i,"derivePhaseActivity",0,function(a,b){let c=new Map;for(let b of a.gates){let a=p[b.type];a&&c.set(a,[...c.get(a)??[],...b.items])}let d=[],e=!1,f="closed";for(let b of["implementation",...j]){let g,h=c.get(b);if(!h||0===h.length)continue;let j=h.filter(a=>a.checked).length,k=h.length,l=h.find(a=>a.checked&&n.test(a.text));k>0&&j===k?g=l?"opted-out":"done":e?g="pending":(g="active",e=!0,f=function(a,b){if("implementation"!==b)return o[b];if("test"===a.kind)return"authoring";let c=a.name.toLowerCase();return c.startsWith(i[0])?"falsifying":c.startsWith(i[1])?"cleaning-up":"implementing"}(a,b)),d.push({kind:b,state:g,checked:j,total:k,...l?{proof:l.text}:{}})}return{activity:f,stages:d,openedAt:b?.timestamp??null}},"derivePlanPosition",0,function(a){let{position:b,awaiting:f}=function(a){let{summary:b,impl:c,readiness:e,archived:f,afterClose:h}=a;if(f){if(h&&h.reopened.length>0)return{position:"executing",awaiting:`executing ${h.reopened[0]}`};if(h?.monitor){var i;let a;return{position:"monitor",awaiting:(i=h.monitor,a=`${Math.floor(i.elapsedDays)} of ${i.windowDays} days quiet`,i.restartedAt?`window restarted ${i.restartedAt.slice(0,10)} — ${a}`:a)}}return{position:"archived",awaiting:null}}let j=b.stage,k=b.stageStatus;if("retrospective"===j)return{position:"retrospective",awaiting:"retrospective written, awaiting archive"};if("impl"===j){if("completed"===k){if(null===e)return{position:"falsify",awaiting:"impl complete — readiness unknown (impl unreadable)"};let a=e.missing;if(a.includes("falsification"))return{position:"falsify",awaiting:"impl complete, awaiting /falsify"};if(a.includes("cleanup"))return{position:"cleanup",awaiting:"falsified, awaiting /cleanup"};if(a.includes("rows")){let a=e.nonTerminalRows.join(", ");return{position:"retrospective",awaiting:`rows not terminal — retrospective blocked${a?` (${a})`:""}`}}return{position:"retrospective",awaiting:"cleaned, awaiting /retrospective"}}return"in-progress"===k?{position:"executing",awaiting:null!==c&&c.phases.length>0&&c.phases.every(a=>a.gates.every(a=>a.items.every(a=>a.checked)))?"every item checked — impl status is still in-progress":null}:"approved"===k?{position:"impl-approved",awaiting:"impl approved, awaiting /work"}:{position:"impl-approved",awaiting:`impl ${k}, awaiting approval`}}if("research"===j||"brief"===j||"test-plan"===j||"adr"===j){let a=d[j];if(g(k)){let c=b.workflow??null;return null!==c&&void 0===l(j,c)?{position:j,awaiting:`${a} finished — a ${c} ends here`}:{position:j,awaiting:`${a} accepted, awaiting the next document`}}return"proposed"===k||"draft"===k||"in-progress"===k?{position:j,awaiting:`${a} ${k}, awaiting acceptance`}:{position:j,awaiting:`${a} ${k}`}}return{position:"research",awaiting:`${j} — no lifecycle document yet`}}(a),i=e.indexOf(b),j=new Set(a.summary.documents),k=a.summary.workflow??null,n=null===k?null:new Set(c[k].requires),o={};for(let[a,c]of e.entries()){if(a===i){o[c]="archived"===b?"done":"active";continue}o[c]=function(a,b,c,d){var e,f,g;if(null!==d&&!d.has("impl")&&h.includes(a))return"skipped";let i=m(a);return null===i||c.has(`${i}.md`)?b?"done":"pending":(e=i,f=d,g=b,null===f?g?"unknown":"pending":f.has(e)?g?"missing":"pending":"skipped")}(c,a<i,j,n)}let p="monitor"===b?a.afterClose?.monitor:null;return{position:b,segments:o,awaiting:"archived"===b?null:f,...p?{monitor:p}:{}}},"documentFor",0,m,"isFinishedDocumentStatus",0,g,"nextRequiredDocument",0,l],65409)},37539,25455,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(28860),e=a.i(22784),f=a.i(59942),g=a.i(5467),h=a.i(65409);let i=new Set(["passing","skipped","blocked"]),j=/^##\s+Test Trajectory\b/,k=/^###\s+Deferred Verification\b/,l=/^#{1,3}\s+/,m=new Set(["planned","writable","written","passing","blocked","skipped","unknown"]),n=new Set(["example","property","contract","approval","formal"]),o=new Set(["unit","integration","e2e"]);function p(a){let b=a.trim();return b.startsWith("|")&&b.endsWith("|")?b.slice(1,-1).split("|").map(a=>a.trim()):[]}function q(a){let b=a.toLowerCase().replace(/\s+/g," ").trim();return({id:"id",asserts:"asserts","writable at":"writableAt","passes at":"passesAt",state:"state",kind:"kind",scope:"scope"})[b]??b}function r(a){return(0,g.parsePhaseRef)(a)?.number??NaN}function s(a){return(0,g.parsePhaseRef)(a)?.kind??"build"}function t(a){let b=a.split("\n");if(!b.some(a=>j.test(a)))return{rows:[],deferred:[],present:!1};let{tableLines:c,deferredLines:d}=function(a){let b=!1,c=!1,d=[],e=[];for(let f of a){if(j.test(f)){b=!0,c=!1;continue}if(b){if(k.test(f)){c=!0;continue}if(l.test(f)&&!k.test(f)){let a=f.match(/^(#{1,6})/)?.[1].length??0;if(a<=2||3===a)break}c?e.push(f):d.push(f)}}return{tableLines:d,deferredLines:e}}(b);return{rows:function(a){let b=a.filter(a=>a.trim().startsWith("|"));if(b.length<2)return[];let c=p(b[0]);if(!p(b[1]).every(a=>/^:?-+:?$/.test(a)))return[];let d=c.map(q),e=[];for(let a=2;a<b.length;a++){let c=p(b[a]);if(c.length!==d.length)continue;let f={};for(let a=0;a<d.length;a++)f[d[a]]=c[a];let g=f.id?.trim(),h=f.asserts?.trim();g&&h&&e.push({id:g,asserts:h,writableAt:r(f.writableAt??""),passesAt:r(f.passesAt??""),writableAtKind:s(f.writableAt??""),passesAtKind:s(f.passesAt??""),state:function(a){let b=a.toLowerCase().trim();return m.has(b)?b:"unknown"}(f.state??""),kind:function(a){let b=a.toLowerCase().trim();if(b&&n.has(b))return b}(f.kind??""),scope:function(a){let b=a.toLowerCase().trim();if(b&&o.has(b))return b}(f.scope??""),test:function(a){let b=a.split(",").map(a=>a.trim().replace(/^`+|`+$/g,"").trim()).filter(a=>a.length>0);return b.length>0?b:void 0}(f.test??"")})}return e}(c),deferred:function(a){let b=[],c=null,d=()=>{c&&void 0!==c.name&&b.push({name:c.name,reason:c.reason??"",wouldRequire:c.wouldRequire??"",mitigation:c.mitigation??""}),c=null};for(let b of a){let a=b.replace(/\s+$/,""),e=a.match(/^-\s+\*\*(.+?)\*\*\s*(?:—\s*(.*))?$/);if(e){d(),c={name:e[1].trim()};let a=e[2];if(a){let b=a.match(/reason:\s*([^—]+?)(?:\s*—|$)/i),d=a.match(/would require:\s*([^—]+?)(?:\s*—|$)/i),e=a.match(/mitigation:\s*(.+)$/i);b&&(c.reason=b[1].trim()),d&&(c.wouldRequire=d[1].trim()),e&&(c.mitigation=e[1].trim())}continue}if(!c)continue;let f=a.match(/^\s+-\s+(reason|would require|mitigation):\s*(.*)$/i);if(f){let a=f[1].toLowerCase(),b=f[2].trim();"reason"===a?c.reason=b:"would require"===a?c.wouldRequire=b:"mitigation"===a&&(c.mitigation=b)}}return d(),b}(d),present:!0}}function u(a,b){let c=RegExp(`^${b}\\b`,"i"),d=a.split("\n"),e=!1,f=!1,h=0;for(let a of d){let b=(0,g.parsePhaseHeading)(a);if(b){c.test(b.name)?(e=!0,f=!0):e=!1;continue}if(e&&/^\s*-\s+\[[ xX]\]/.test(a)&&(h++,/^\s*-\s+\[ \]/.test(a)))return!1}return f&&h>0}a.s(["parseTrajectory",0,t],25455),a.s(["checkRetrospectiveReadiness",0,function(a,j){var k,l;let m,n,o=(0,e.isFalsificationComplete)(a)||(0,f.isFalsificationSkipped)(j).skipped||u(j,h.RITUAL_ORDER[0]),p=(l=a,m=(0,c.join)(l,"impl.md"),!!(0,b.existsSync)(m)&&u((0,b.readFileSync)(m,"utf-8"),h.RITUAL_ORDER[1])||function(a){try{let{data:b}=(0,d.default)(a);if("skipped"!==b.cleanup)return{skipped:!1,reason:null};let c=b.cleanup_reason;if("string"!=typeof c)return{skipped:!1,reason:null};let e=c.trim();if(!e)return{skipped:!1,reason:null};return{skipped:!0,reason:e}}catch{return{skipped:!1,reason:null}}}(j).skipped),q=(0,d.default)(j).content,r=(k=t(q),n=(0,g.phaseSequence)(q),k.rows.filter(a=>(0,g.phaseExists)({kind:a.passesAtKind,number:a.passesAt},n)&&!i.has(a.state)).map(a=>({row:a,message:`Row ${a.id} is still '${a.state}' although ${"test"===a.passesAtKind?"Test ":""}Phase ${a.passesAt} exists — a plan does not close with a row that never reached passing, skipped or blocked`}))).map(a=>a.row.id),s=0===r.length,v=[];return o||v.push("falsification"),p||v.push("cleanup"),s||v.push("rows"),{falsificationOk:o,cleanupOk:p,rowsOk:s,nonTerminalRows:r,passes:0===v.length,missing:v}}],37539)},77738,a=>{"use strict";var b=a.i(28860),c=a.i(5467);let d={Verification:"verification",OTel:"otel",Context:"context",Document:"document"};a.s(["findPhase",0,function(a,b){return a.phases.find(a=>a.kind===b.kind&&a.number===b.number)},"parseImplString",0,function(a){let{data:e,content:f}=a.startsWith("---")?(0,b.default)(a):{data:{},content:a},g=e.title??"",h=e.status??"",i=f.split("\n"),j=[],k=null,l="implementation",m=[],n=!1,o=[];function p(){if(!k)return;let a=function(a){let b=[];for(let c of a){let a=c.match(/^-\s+\[([ x])\]\s+(.*)/);a&&b.push({checked:"x"===a[1],text:a[2].trim()})}return b}(m);a.length>0&&k.gates.push({type:l,items:a}),m=[]}let q=(0,c.fencedLineMask)(i);for(let a=0;a<i.length;a++){let b=i[a];if(q[a])continue;let e=(0,c.parsePhaseHeading)(b);if(e){p(),k&&j.push(k),k={number:e.number,kind:e.kind,ordinal:j.length,name:e.name,gates:[],blocker:null,forwardIntelligence:null},l="implementation",m=[];continue}if(b.match(c.FORWARD_INTELLIGENCE_HEADING)){p(),n=!0,o=[];continue}let f=b.match((0,c.gateHeading)("(Verification|OTel|Context|Document)"));if(f){n&&k&&(k.forwardIntelligence=o.join("\n").trim()||null,n=!1),p(),l=d[f[2]];continue}if(k){let a=b.match(/^blocker:\s+(.*)/);if(a){k.blocker=a[1].trim();continue}}n?o.push(b):m.push(b)}return n&&k&&(k.forwardIntelligence=o.join("\n").trim()||null),p(),k&&j.push(k),{title:g,status:h,phases:j}}])},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},12057,(a,b,c)=>{b.exports=a.x("node:util",()=>require("node:util"))},30235,99141,55515,10404,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(28860);a.i(77487);var e=a.i(5467),f=a.i(65409),g=a.i(66680);let h=["draft","accepted","published"],i={malformed:0,draft:1,accepted:2,published:3};var j=a.i(82024),k=a.i(12383);function l(a,b){let c=a[b];if(!Array.isArray(c))return[];let d=[];for(let a of c)"string"==typeof a&&(0,j.isCleanSegment)(a)&&(d.includes(a)||d.push(a));return d}function m(a){if(!(0,b.existsSync)(a))return null;try{return(0,d.default)((0,b.readFileSync)(a,"utf-8")).data}catch(c){let b=c instanceof Error?c.message:String(c);return process.stderr.write(`[plan-parser] master frontmatter unreadable in ${a}: ${b}
2
+ `),null}}a.s(["parsePlan",0,function(a){var e,j,l;let m=a.split("/").pop()??"",n=(0,b.readdirSync)(a).filter(a=>a.endsWith(".md")),o=function(a,e){for(let g=f.DOCUMENT_POSITIONS.length-1;g>=0;g--){let h=f.DOCUMENT_POSITIONS[g],i=`${h}.md`;if(e.includes(i)){let e=function(a){if(!(0,b.existsSync)(a))return{frontmatter:null};let c=(0,b.readFileSync)(a,"utf-8");try{let{data:a}=(0,d.default)(c);return{frontmatter:{title:a.title??"",date:a.date??"",status:a.status??""}}}catch(c){let b=c instanceof Error?c.message:String(c);return process.stderr.write(`[plan-parser] frontmatter parse error in ${a}: ${b}
3
+ `),{frontmatter:null,parseError:{file:a,message:b}}}}((0,c.join)(a,i));if(e.parseError)return{stage:"malformed",stageStatus:"parse-error",parseError:e.parseError};return{stage:h,stageStatus:e.frontmatter?.status??"unknown"}}}return{stage:"unknown",stageStatus:"unknown"}}(a,n),p=function(a){if(!(0,b.existsSync)(a))return[];let c=(0,b.readFileSync)(a,"utf-8").match(/## Depends On\s*\n([\s\S]*?)(?=\n## |\n$|$)/);if(!c)return[];let d=[];for(let a of c[1].split("\n")){let b=a.match(/^-\s+`?(?:\.indusk\/)?planning\/([^/`]+)\/?`?/);b&&d.push(b[1])}return d}((0,c.join)(a,"brief.md")),q=n.map(e=>(function(a,e){var f;let i,j=(0,b.readFileSync)((0,c.join)(a,e),"utf-8");try{i=(0,d.default)(j).data}catch{return null}if("paper"!==i.kind)return null;let k="string"==typeof(f=i.status)&&h.includes(f)?i.status:"malformed";return{file:e,title:"string"==typeof i.title?i.title:e,status:k,stale:function(a,b,c){let e;if("published"!==c)return!1;let f=null!==(e=b.published)&&"object"==typeof e?e:void 0,h="string"==typeof f?.hash?f.hash:null;return null===h||h!==function(a){let{data:b,content:c}=(0,d.default)(a),e={...b};return delete e.published,delete e.status,`sha256:${(0,g.createHash)("sha256").update(d.default.stringify(c,e)).digest("hex")}`}(a)}(j,i,k)}})(a,e)).filter(a=>null!==a),r=function(a,e){let f=e.includes("brief.md")?"brief.md":e.includes("research.md")?"research.md":null;if(null===f)return(0,k.readWorkflow)(void 0);try{var g;let e,h=(0,b.readFileSync)((0,c.join)(a,f),"utf-8");return(0,k.readWorkflow)((0,d.default)(h).data.workflow,(g=h,e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(g)?.[1],void 0===e?null:RegExp("^workflow:[ \\t]*(.*)$","m").exec(e)?.[1]?.trim()||null))}catch{return(0,k.readWorkflow)(void 0)}}(a,n),{stage:s,stageStatus:t,nextStep:u}=(e=o,j=q,l=r.type,"unknown"===e.stage&&j.length>0?{stage:"paper",stageStatus:j.reduce((a,b)=>i[b.status]<i[a]?b.status:a,"published"),nextStep:function(a){let b=a.find(a=>"malformed"===a.status);if(b)return`Fix paper status in ${b.file} (expected ${h.join(" | ")})`;let c=a.find(a=>"draft"===a.status);if(c)return`Review paper: ${c.file}`;let d=a.filter(a=>"accepted"===a.status||a.stale).length;return d>0?`Publish ${d} paper(s)`:"Done"}(j)}:{stage:e.stage,stageStatus:e.stageStatus,nextStep:function(a,b,c,d){if("malformed"===a&&d)return`Fix YAML frontmatter at ${d.file}: ${d.message}`;if("unknown"===a)return"Create a brief";if((0,f.isFinishedDocumentStatus)(b)){let b=(0,f.nextRequiredDocument)(a,c);return b?`Create ${b}`:"Done"}return"in-progress"===b?`Continue ${a}`:`Review ${a} (status: ${b})`}(e.stage,e.stageStatus,l,e.parseError)});return{name:m,stage:s,stageStatus:t,nextStep:u,dependencies:p,documents:n,...null!==r.type&&{workflow:r.type},...null===r.type&&null!==r.declared&&{workflowDeclared:r.declared},...q.length>0&&{papers:q},...o.parseError&&{parseError:o.parseError}}},"readPlanDeclarations",0,function(a){if(!(0,b.existsSync)(a))return{parents:[],roadmap:[],subplans:{}};let f=(0,c.join)(a,"master.md"),g=m(f),h=g?l(g,"parents"):[],i=g?l(g,"roadmap"):[],j=(0,b.existsSync)(f)?{name:"master",title:function(a,c){let f=c?.title;if("string"==typeof f&&""!==f.trim())return f.trim();try{let c=(0,b.readFileSync)(a,"utf-8"),f=(c.startsWith("---")?(0,d.default)(c).content:c).split("\n"),g=(0,e.fencedLineMask)(f);for(let[a,b]of f.entries()){if(g[a])continue;let c=b.match(/^#\s+(.+)$/);if(c)return c[1].trim()}}catch{}return"master"}(f,g)}:void 0,k=new Set(h);try{for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}))d.isDirectory()&&(0,b.existsSync)((0,c.join)(a,d.name,"master.md"))&&k.add(d.name)}catch{}let n={};for(let b of k){let d=m((0,c.join)(a,b,"master.md"));d&&(n[b]=l(d,"subplans"))}return{...j?{root:j}:{},parents:h,roadmap:i,subplans:n}}],30235);var n=a.i(8390),o=a.i(66450),p=a.i(77738);a.s(["afterClose",0,function(a,e,f,g=function(a){let b=(0,o.readPromises)(a);return b.ok?b.registry:"partial"in b?b.partial:null}(a),h=new Date){var i;let j,k=(j=(0,c.join)(f,"impl.md"),(0,b.existsSync)(j)?(i=(0,b.readFileSync)(j,"utf-8"),(0,p.parseImplString)(i).phases.filter(a=>a.name.startsWith("Maintenance — ")&&a.gates.some(a=>a.items.some(a=>!a.checked))).map(a=>a.name)):[]);return{reopened:k,monitor:k.length>0?null:function(a,e,f,g,h=new Date){if(!g)return null;let i=g.promises.filter(a=>a.owner===e&&"behaviour"===a.kind&&"retired"!==a.state);if(0===i.length)return null;let j=function(a){let e=(0,c.join)(a,"retrospective.md");if(!(0,b.existsSync)(e))return null;let f=(0,b.readFileSync)(e,"utf-8"),g=/Landed on main at[^\n]*?(\d{4}-\d{2}-\d{2})/.exec(f)?.[1];if(g)return new Date(`${g}T00:00:00Z`);let h=(0,d.default)(f).data.date,i=h instanceof Date?h:"string"==typeof h?new Date(h):null;return i&&!Number.isNaN(i.getTime())?i:null}(f);if(!j)return null;let k=new Set(i.map(a=>a.name)),l=null;for(let a of g.incidents){if(!k.has(a.promise))continue;let e=new Date(function(a){var c;let e=(0,d.default)((0,b.readFileSync)(a,"utf-8")).data,f=e.last_seen;return{traces:Array.isArray(c=e.traces)?c.map(String):[],lastSeen:f instanceof Date?f.toISOString().replace(/\.\d{3}Z$/,"Z"):"string"==typeof f?f:null}}((0,c.join)(g.dir,a.file)).lastSeen??a.date);Number.isNaN(e.getTime())||l&&!(e>l)||(l=e)}let m=null!==l&&l>j,o=m&&l?l:j,p=(0,n.getQuietWindowDays)(a),q=Math.max(0,(h.getTime()-o.getTime())/864e5);return q>=p?null:{windowDays:p,elapsedDays:Math.round(10*q)/10,restartedAt:m&&l?l.toISOString():null}}(a,e,f,g,h)}}],99141);var q=a.i(74533);let r=(0,a.i(12057).promisify)(q.execFile);async function s(a,...b){let{stdout:c}=await r("git",b,{cwd:a,maxBuffer:0x2000000});return c.trim()}async function t(a){return function(a){let b=[];for(let c of a.split(/\n\s*\n/)){let a=c.split("\n"),d=u(a,"worktree ");if(!d)continue;let e=u(a,"branch ");b.push({path:d,branch:e?e.replace(/^refs\/heads\//,""):null,main:0===b.length,prunable:a.some(a=>"prunable"===a||a.startsWith("prunable "))})}return b}(await s(a,"worktree","list","--porcelain"))}function u(a,b){return a.find(a=>a.startsWith(b))?.slice(b.length).trim()}a.s(["git",0,s,"listWorktrees",0,t],55515);var v=a.i(1930);class w extends Error{name="PlanWorktreeRefusal"}async function x(a){return function(a){let c,d;if(!(0,b.existsSync)(a))return{ok:!0,file:a,assignments:[]};try{c=(0,b.readFileSync)(a,"utf-8")}catch(b){return{ok:!1,file:a,problem:`unreadable (${b.message})`}}var e=c;try{d=JSON.parse(e)}catch(b){return{ok:!1,file:a,problem:`not valid JSON (${b.message})`}}if("object"!=typeof d||null===d)return{ok:!1,file:a,problem:"not an object"};let f=d;if(1!==f.version)return{ok:!1,file:a,problem:`version is ${JSON.stringify(f.version)}, expected 1`};if(!Array.isArray(f.assignments))return{ok:!1,file:a,problem:"assignments is not a list"};for(let b=0;b<f.assignments.length;b++){let c=function(a,b){if("object"!=typeof a||null===a)return`assignment ${b} is not an object`;for(let c of["plan","path","branch","at"])if("string"!=typeof a[c]||""===a[c].trim())return`assignment ${b} has no ${c}`;return(0,j.isUsableSegment)(a.plan)?a.path.startsWith("/")?null:`assignment ${b} has a relative path "${a.path}"`:`assignment ${b} names an unusable plan "${a.plan}"`}(f.assignments[b],b);if(c)return{ok:!1,file:a,problem:c}}return{ok:!0,file:a,assignments:f.assignments}}(function(a){let d=(0,v.gitCommonDirOf)(a);if(!d)throw new w(`${a} is not inside a git repository`);return(0,c.join)((0,b.realpathSync)(d),"indusk-plan-worktrees.json")}(a))}a.s(["readRecord",0,x],10404)},62947,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(82024);function e(a){let d=(0,c.join)(a,".indusk","config.json");if(!(0,b.existsSync)(d))return null;try{return JSON.parse((0,b.readFileSync)(d,"utf-8"))}catch{return null}}a.s(["isWorkbench",0,function(a){return e(a)?.worktree?.shape==="workbench"||function(a){let b=e(a)?.worktree;if(!b)return[];let c=Array.isArray(b.repos)?b.repos:"string"==typeof b.wrapped_repo?[{name:b.wrapped_repo}]:[],f=new Set,g=[];for(let a of c){if("object"!=typeof a||null===a)continue;let{name:b,remote:c}=a;if("string"!=typeof b||!(0,d.isCleanSegment)(b)||f.has(b))continue;f.add(b);let{path:e,worktrees:h}=a,i={name:b};"string"==typeof c&&""!==c.trim()&&(i.remote=c),"string"==typeof e&&(0,d.isUsableRelPath)(e)&&(i.path=e),"string"==typeof h&&(0,d.isUsableRelPath)(h)&&(i.worktrees=h),g.push(i)}return g}(a).length>0}])},42717,a=>{"use strict";var b=a.i(2157),c=a.i(12714),d=a.i(50227),e=a.i(37539),f=a.i(22784),g=a.i(77738),h=a.i(65409),i=a.i(30235),j=a.i(99141),k=a.i(25455),l=a.i(77487),m=a.i(55515),n=a.i(10404),o=a.i(62947);function p(a){try{return(0,b.realpathSync)(a)}catch{return(0,d.resolve)(a)}}function q(a,b){return{plan:b,root:a,dir:(0,d.join)((0,l.getPlanningDir)(a),b),source:"trunk"}}function r(a){let c=(0,l.getPlanningDir)(a);return(0,b.existsSync)(c)?(0,b.readdirSync)(c,{withFileTypes:!0}).filter(a=>a.isDirectory()&&"archive"!==a.name).map(a=>a.name).sort():[]}async function s(a){let c;try{let b=await (0,m.git)(a,"rev-parse","--show-toplevel");if(p(b)!==p(a))return null;c=await (0,m.listWorktrees)(a)}catch{return null}let d=c.find(a=>a.main);if(!d)return null;let e=new Map;for(let a of c){if(a.main||a.prunable||!(0,b.existsSync)(a.path))continue;let c=p(a.path);e.set(c,{path:c,branch:a.branch})}return{projectRoot:p(d.path),linked:e}}function t(a){return new Map(r(a).map(b=>[b,q(a,b)]))}async function u(a){let c=p(a);if((0,o.isWorkbench)(c))return{ok:!0,projectRoot:c,copies:t(c),unassigned:[]};let e=await s(c);if(!e)return{ok:!0,projectRoot:c,copies:t(c),unassigned:[]};let f=await (0,n.readRecord)(c);if(!f.ok)return{ok:!1,projectRoot:e.projectRoot,file:f.file,problem:f.problem};let g=new Map,h=new Set;for(let a of r(e.projectRoot)){let{copy:c,live:i}=function(a,c,e){let f=q(e.projectRoot,a),g=c.filter(b=>b.plan===a);if(0===g.length)return{copy:f,live:[]};let h=g.map(a=>p(a.path)).filter(a=>e.linked.has(a));if(1===h.length){let[c]=h,i=e.linked.get(c)?.branch??g[0].branch;return{copy:function(a,c,e,f){let g={name:(0,d.basename)(c),path:c,branch:e},h=(0,l.getPlanningDir)(c),i=(0,d.join)(h,a);if((0,b.existsSync)(i))return{plan:a,root:c,dir:i,source:"worktree",worktree:g};let j=(0,d.join)(h,"archive",a);return(0,b.existsSync)(j)?{plan:a,root:c,dir:j,source:"worktree",worktree:g,archivedInWorktree:!0}:{...f,problem:"missing",detail:`plan folder missing in worktree ${c} (neither ${i} nor ${j} exists)`}}(a,c,i,f),live:h}}return h.length>1?{copy:{...f,problem:"doubled",detail:`two live worktrees are assigned to ${a}: ${h.join(", ")}`},live:h}:{copy:{...f,problem:"gone",detail:`assigned worktree ${g.map(a=>a.path).join(", ")} no longer exists`},live:h}}(a,f.assignments,e);for(let b of(g.set(a,c),i))h.add(b)}let i=[...e.linked.values()].filter(a=>!h.has(a.path)).map(a=>({name:(0,d.basename)(a.path),path:a.path,branch:a.branch}));return{ok:!0,projectRoot:e.projectRoot,copies:g,unassigned:i}}var v=a.i(28860),w=a.i(47306);let x=".indusk/planning",y="archive",z=["research.md","brief.md","test-plan.md","adr.md","impl.md","falsification.md","retrospective.md"],A=/^---\n([\s\S]*?)\n---/;async function B(a,e){let f,g=(0,d.join)(a,e);if(!(0,b.existsSync)(g))return null;try{f=await (0,c.readFile)(g,"utf-8")}catch{return{malformed:!0,raw:""}}try{let a=(0,v.default)(f),b=a.data;if(0===Object.keys(b).length){let a=f.match(A);if(a){let b=a[1].replace(/^\s*#[^\n]*$/gm,"").trim();if(""!==b)return{malformed:!0,raw:f}}}return{frontmatter:b,content:a.content}}catch{return{malformed:!0,raw:f}}}function C(a){return null!==a&&"malformed"in a}async function D(a,c,l,m={records:[]},n){let o,p,q=await Promise.all(z.map(b=>B(a,b))),[r,s,t,u,v,w,x]=q,y=q.some(a=>C(a)),A={};for(let a=0;a<q.length;a++){let b=q[a];null!==b&&C(b)&&(A[z[a]]=b.raw)}if(null!==v&&!C(v)){let a=/^##\s+Test Trajectory\b/m.test(v.content)?(0,k.parseTrajectory)(v.content):void 0;o={...v,trajectory:a}}if(null!==w)try{let b=(0,f.readFalsificationLog)(a),c=(0,f.isFalsificationComplete)(a);p={entries:b,complete:c}}catch{}let F=(0,i.parsePlan)(a),G=F.papers?await E(a,F.papers):void 0,H=null===v||C(v)?null:(0,e.checkRetrospectiveReadiness)(a,(0,b.readFileSync)((0,d.join)(a,"impl.md"),"utf-8")),I=l&&n?(0,j.afterClose)(n,c,a):void 0,J=(0,h.derivePlanPosition)({summary:F,impl:o?(0,g.parseImplString)(o.content):null,readiness:H,archived:l,...I?{afterClose:I}:{}}),K="error"in m?{boundaryError:m.error}:{boundaries:m.records.filter(a=>a.plan===c)};return{name:c,status:o?.frontmatter.status??(null===s||C(s)?void 0:s.frontmatter.status)??("paper"===F.stage?F.stageStatus:void 0)??"unknown",position:J,workflow:F.workflow??null,...F.workflowDeclared?{workflowDeclared:F.workflowDeclared}:{},...K,...G?{papers:G}:{},archived:l,research:null===r||C(r)?void 0:r,brief:null===s||C(s)?void 0:s,testPlan:null===t||C(t)?void 0:t,adr:null===u||C(u)?void 0:u,impl:o,falsification:p,retrospective:null===x||C(x)?void 0:x,...y?{malformed:!0,rawDocuments:A}:{}}}async function E(a,b){return Promise.all(b.map(async b=>({...b,content:(0,v.default)(await (0,c.readFile)((0,d.join)(a,b.file),"utf-8")).content})))}async function F(a){return(0,b.existsSync)(a)?(await (0,c.readdir)(a,{withFileTypes:!0})).filter(a=>a.isDirectory()&&a.name!==y).map(a=>a.name).sort():[]}async function G(a){let b=await u(a),c=b.projectRoot,e=await F((0,d.join)(c,x));if(!b.ok){let a={file:b.file,problem:b.problem};return e.map(b=>({name:b,status:"unknown",archived:!1,copyError:a}))}let f=new Map;return Promise.all(e.map(async a=>{var e;let g,h=b.copies.get(a)??{plan:a,root:c,dir:(0,d.join)(c,x,a),source:"trunk"};return{...await D(h.dir,a,!1,await (e=h.root,!(g=f.get(e))&&(g=(0,w.readProjectBoundaries)(e),f.set(e,g)),g)),...!h?{}:"worktree"===h.source?h.archivedInWorktree?{worktree:h.worktree,archivedInWorktree:!0}:{worktree:h.worktree}:"problem"in h?{copyProblem:{kind:h.problem,detail:h.detail}}:{}}}))}async function H(a){let b=await u(a);return b.ok?{ok:!0,unassigned:b.unassigned}:{ok:!1,file:b.file,problem:b.problem}}async function I(a){let e=(0,d.join)(a,x,y);if(!(0,b.existsSync)(e))return[];let f=(await (0,c.readdir)(e,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name).sort(),g=await (0,w.readProjectBoundaries)(a);return Promise.all(f.map(b=>D((0,d.join)(e,b),b,!0,g,a)))}async function J(a,b){let c=await B((0,d.join)(a,x,b),"master.md");return null===c||C(c)?null:c.content}async function K(a,e){let f=(0,d.join)(a,".indusk/eval/results.log");if(!(0,b.existsSync)(f))return[];let g=await (0,c.readFile)(f,"utf-8"),h=[];for(let a of g.split("\n")){let b=a.trim();if(b)try{let a=JSON.parse(b);if("string"!=typeof a.timestamp)continue;let c=new Date(a.timestamp);if(Number.isNaN(c.getTime()))continue;c>=e.from&&c<=e.to&&h.push(a)}catch{}}return h.sort((a,b)=>new Date(b.timestamp).getTime()-new Date(a.timestamp).getTime()),h}a.s(["readActivePlans",0,G,"readArchivedPlans",0,I,"readEvalScorecards",0,K,"readPlanHierarchy",0,function(a){return(0,i.readPlanDeclarations)((0,d.join)(a,x))},"readPlanMasterContent",0,J,"readProjectWorktrees",0,H],42717)}];
4
4
 
5
5
  //# sourceMappingURL=%5Broot-of-the-server%5D__0wm9s16._.js.map