halfcycle 0.3.28 → 0.3.30

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "halfcycle",
3
- "version": "0.3.28",
3
+ "version": "0.3.30",
4
4
  "description": "Halfcycle Method bundle — resolution-stub slash commands, remote method-delivery registration, and governance-hook wiring for a Halfcycle engagement repo. It ships NO worker role files: a project's roles are authored from that project's own recorded decisions at orchestration kickoff (FX-2, W3-F-27).",
5
5
  "commands": [
6
6
  {
@@ -14530,7 +14530,7 @@ config(en_default());
14530
14530
 
14531
14531
  // ../core/dist/guard-record.js
14532
14532
  var severitySchema = external_exports.enum(["info", "warn", "block"]);
14533
- var channelSchema = external_exports.enum(["stable", "candidate", "rented"]);
14533
+ var channelSchema = external_exports.enum(["stable", "candidate", "rented", "withdrawn"]);
14534
14534
  var matcherKindSchema = external_exports.enum(["grep", "ast", "integrationTest", "llm"]);
14535
14535
  var matcherConfigSchema = external_exports.record(external_exports.string(), external_exports.unknown());
14536
14536
  var grepMatcherSchema = external_exports.object({ kind: external_exports.literal("grep"), config: matcherConfigSchema }).strict();
@@ -2,10 +2,10 @@
2
2
  description: Take a plan that already exists and drive ALL of it through to done across several workers at once, rather than handing out the pieces one at a time
3
3
  ---
4
4
 
5
- Resolve `/agent-teams-orchestration` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/agent-teams-orchestration` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/agent-teams-orchestration`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Check a drafted feature spec against the invariants and its adjacent specs, from a session that did not write it
3
3
  ---
4
4
 
5
- Resolve `/consistency-check` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/consistency-check` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/consistency-check`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Route recent changes into the repo's context surfaces
3
3
  ---
4
4
 
5
- Resolve `/context-update` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/context-update` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/context-update`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Work out what the product is — the design journey to a PRD and phases
3
3
  ---
4
4
 
5
- Resolve `/halfcycle-design` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/halfcycle-design` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/halfcycle-design`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Set up a repository for a Halfcycle engagement
3
3
  ---
4
4
 
5
- Resolve `/halfcycle-setup` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/halfcycle-setup` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/halfcycle-setup`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Verify a phase's assembled stack comes up end to end
3
3
  ---
4
4
 
5
- Resolve `/stack-assembly-worker` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/stack-assembly-worker` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/stack-assembly-worker`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Do ONE piece of the planned work, on its own — not the whole plan
3
3
  ---
4
4
 
5
- Resolve `/task-execution` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/task-execution` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/task-execution`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Break the next chunk of work into ordered pieces that can be handed out — what has to happen before what, and who could take each
3
3
  ---
4
4
 
5
- Resolve `/task-graph` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/task-graph` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/task-graph`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
@@ -2,10 +2,10 @@
2
2
  description: Draft a Layer 4 feature spec
3
3
  ---
4
4
 
5
- Resolve `/write-spec` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Build that address from the project id this install already records rather than from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
5
+ Resolve `/write-spec` for this engagement's current state, execute what comes back, report that the step ran, and resolve again — repeating until the response says there is nothing left (`hasNextStep` false); pausing for a human answer is not the end of the run. Do not improvise the procedure. Say where things stand at the boundaries of the run — when it starts, when it moves to a new layer, and when it ends — rather than on every turn, and pause only where a step asks you to. At one of those boundaries, and at most once per run, point them at this project's own page on the web and say what is there: how the project is going, the agents working on it once there are any, and their other projects alongside it. Use the address this install already records for the project's page rather than building one from an example, and give them the address itself — a page they are told about but cannot reach is worse than not mentioning it. Some steps of the Halfcycle method are judged by Halfcycle rather than by this session, or need a person to do something outside this session, so a quiet run is not a claim that nothing was due — say so when a run ends. Everything you say to the person is in plain words. Name the Halfcycle method the first time and say what it is in the same breath — the process that will guide the two of you through building this — because bare "the method" means nothing to someone who has not met it. After that, talk about their product and never about how any of this works underneath: no paths or files of ours, no hooks, settings, commands, layers or step names, and never Halfcycle's own machinery as the subject of a sentence. Say what now exists, what it is for, and what you need from them, in their terms. The one thing you never soften and never leave out is what did NOT happen — say that plainly too. If you are asked to jump ahead: when that is what comes next anyway, just do it; when Halfcycle refuses, relay its reason word for word and invent no procedure of your own; when it can be served but skips something, do it and say what is being skipped and what that costs. Coming back later is fine — a fresh session re-orients from what this project has recorded, so ask to carry on in plain words and you get the right next step and where things stand.
6
6
 
7
7
  If resolution fails, report exactly this and stop:
8
8
 
9
9
  > Halfcycle didn't answer for `/write-spec`. **Nothing has run.**
10
- > If you were asked to allow a Halfcycle tool and declined, allow it and run this
11
- > again — nothing can run without it. Otherwise retry when you're back online.
10
+ > Allow any Halfcycle tool you declined. If Claude Code does not trust this folder yet, open
11
+ > it there and accept the workspace-trust prompt. Then run this again, or retry once online.
package/dist/bin.js CHANGED
@@ -18,7 +18,7 @@ import { z as z2 } from "zod";
18
18
  // ../core/dist/guard-record.js
19
19
  import { z } from "zod";
20
20
  var severitySchema = z.enum(["info", "warn", "block"]);
21
- var channelSchema = z.enum(["stable", "candidate", "rented"]);
21
+ var channelSchema = z.enum(["stable", "candidate", "rented", "withdrawn"]);
22
22
  var matcherKindSchema = z.enum(["grep", "ast", "integrationTest", "llm"]);
23
23
  var matcherConfigSchema = z.record(z.string(), z.unknown());
24
24
  var grepMatcherSchema = z.object({ kind: z.literal("grep"), config: matcherConfigSchema }).strict();
@@ -336,6 +336,20 @@ var coeFindingResponseSchema = z4.object({
336
336
  mappedPatternRef: z4.string().nullable(),
337
337
  createdAt: utcIso86012
338
338
  }).strict();
339
+ var operatorFindingResponseSchema = z4.object({
340
+ // The finding just recorded.
341
+ finding: coeFindingResponseSchema,
342
+ // Every finding recorded for that phase, oldest first, including this one.
343
+ phaseFindings: z4.array(coeFindingResponseSchema),
344
+ // Whether the phase's finding rate was recalculated to include this finding.
345
+ figuresRecomputed: z4.boolean()
346
+ }).strict();
347
+ var phaseNotOnRecordRefusalSchema = wireErrorSchema.extend({
348
+ // Always this value for this refusal.
349
+ error: z4.literal("PhaseNotOnRecord"),
350
+ // The phases that can take a finding, sorted.
351
+ phases: z4.array(z4.string())
352
+ }).strict();
339
353
  var phaseEntryDecisionSchema = z4.discriminatedUnion("decision", [
340
354
  z4.object({
341
355
  decision: z4.literal("entry-condition-met"),
@@ -1507,6 +1521,11 @@ function mcpEndpointUrl(origin) {
1507
1521
  return `${origin.trim().replace(/\/+$/, "")}${MCP_ENDPOINT_PATH}`;
1508
1522
  }
1509
1523
 
1524
+ // dist/project-page.js
1525
+ function projectPageUrl(engagementId) {
1526
+ return isEngagementId(engagementId) ? `${DASHBOARD_URL}/${encodeURIComponent(engagementId)}` : void 0;
1527
+ }
1528
+
1510
1529
  // dist/merge-settings.js
1511
1530
  function isHalfcycleEntry(entry, halfcycleCommands) {
1512
1531
  return entry.hooks.some((h) => halfcycleCommands.has(h.command));
@@ -2521,12 +2540,14 @@ function writeBundlePin(targetRepoRoot, version, engagementId, engagementType, a
2521
2540
  const previous = previousPinForEngagement(targetRepoRoot, engagementId);
2522
2541
  const carried = nonEmpty(accountId) ?? nonEmpty(previous?.accountId);
2523
2542
  const installedAt = nonEmpty(previous?.installedAt) ?? (/* @__PURE__ */ new Date()).toISOString();
2543
+ const projectPage = projectPageUrl(engagementId);
2524
2544
  const pin = {
2525
2545
  version,
2526
2546
  engagementId,
2527
2547
  engagementType,
2528
2548
  installedAt,
2529
- ...carried !== void 0 ? { accountId: carried } : {}
2549
+ ...carried !== void 0 ? { accountId: carried } : {},
2550
+ ...projectPage !== void 0 ? { projectPage } : {}
2530
2551
  };
2531
2552
  const pinPath = join5(targetRepoRoot, BUNDLE_PIN_REL);
2532
2553
  writeAllowlisted(pinPath, targetRepoRoot, JSON.stringify(pin, null, 2) + "\n", writtenPaths);
@@ -2856,11 +2877,9 @@ var LOOPBACK_PORT_ENV = "HALFCYCLE_LOOPBACK_PORT";
2856
2877
  var DEFAULT_STILL_WAITING_MS = 15e3;
2857
2878
  var COMPLETION_REDIRECT_SECONDS = 2;
2858
2879
  function onwardTarget(engagementId) {
2859
- if (isEngagementId(engagementId)) {
2860
- return {
2861
- href: `${DASHBOARD_URL}/${encodeURIComponent(engagementId)}`,
2862
- label: "Go to your project's page"
2863
- };
2880
+ const projectPage = projectPageUrl(engagementId);
2881
+ if (projectPage !== void 0) {
2882
+ return { href: projectPage, label: "Go to your project's page" };
2864
2883
  }
2865
2884
  return { href: DASHBOARD_URL, label: "Go to your projects" };
2866
2885
  }
@@ -3460,10 +3479,15 @@ async function switchAccount(serviceUrl, opts = {}) {
3460
3479
  forgetStoredCredential(serviceUrl, opts.home);
3461
3480
  return signInAndStore(serviceUrl, opts);
3462
3481
  }
3482
+ function writeToStdout(text) {
3483
+ process.stdout.write(text);
3484
+ }
3463
3485
  async function replaceRefusedCredential(serviceUrl, refused, opts = {}) {
3464
3486
  if (refused.source !== "stored")
3465
3487
  return null;
3466
3488
  forgetStoredCredential(serviceUrl, opts.home);
3489
+ (opts.write ?? writeToStdout)(`[halfcycle] Your saved Halfcycle sign-in was refused \u2014 signing you in again.
3490
+ `);
3467
3491
  return signInAndStore(serviceUrl, opts);
3468
3492
  }
3469
3493
  function refusedCredentialRemedy(source) {
@@ -3799,6 +3823,12 @@ function onlyDate(iso) {
3799
3823
  function actClause(act) {
3800
3824
  return act.kind === "create" ? `create a NEW project for that account, and install into ${act.targetRepo}` : `join the project this repository is pinned to (${act.engagementId}) as that account, and install into ${act.targetRepo}`;
3801
3825
  }
3826
+ function wrongAccountConsequence(act) {
3827
+ return act.kind === "create" ? "the project will belong to it and not to you" : "it can join this project only if the project is its own \u2014 otherwise it is refused, and nothing here is checked";
3828
+ }
3829
+ function wrongAccountVisibility(act) {
3830
+ return act.kind === "create" ? "you would not see the project in your own Halfcycle" : void 0;
3831
+ }
3802
3832
  async function defaultAsk(question2) {
3803
3833
  const rl = createInterface({ input: process.stdin, output: process.stdout });
3804
3834
  try {
@@ -3842,7 +3872,7 @@ function armScript(credential, act, label, plainLabel, home) {
3842
3872
  preamble: `[halfcycle] HALFCYCLE_TOKEN is set in this environment, and this install will use it.
3843
3873
  [halfcycle] Account: ${label}
3844
3874
  [halfcycle] About to ${actClause(act)}
3845
- [halfcycle] A variable exported by a shell profile is not a choice about this run \u2014 if that is not your account, the project will belong to it and not to you.
3875
+ [halfcycle] A variable exported by a shell profile is not a choice about this run \u2014 if that is not your account, ${wrongAccountConsequence(act)}.
3846
3876
  `,
3847
3877
  asks: true,
3848
3878
  // Deliberately nothing. This is the arm's DESIGNED case — a run with no browser
@@ -3865,7 +3895,7 @@ function armScript(credential, act, label, plainLabel, home) {
3865
3895
  [halfcycle] Account: ${label}
3866
3896
  ` + (savedOn !== void 0 ? `[halfcycle] Saved on this machine: ${savedOn}
3867
3897
  ` : "") + `[halfcycle] About to ${actClause(act)}
3868
- [halfcycle] If that is not your account, the project will belong to it and not to you \u2014 you would not see the project in your own Halfcycle.
3898
+ [halfcycle] If that is not your account, ${wrongAccountConsequence(act)}${wrongAccountVisibility(act) === void 0 ? "" : ` \u2014 ${wrongAccountVisibility(act)}`}.
3869
3899
  `,
3870
3900
  asks: true,
3871
3901
  // Not a question nobody will read — a record of what happened, the two ways to
@@ -3973,8 +4003,6 @@ async function createOwnedEngagement(serviceUrl, targetRepo, deps = {}) {
3973
4003
  if (replacement === null) {
3974
4004
  throw new SignInRefused(`create-${err.status}`, `${err.serverMessage} ${refusedCredentialRemedy(credential.source)} No engagement was created.`);
3975
4005
  }
3976
- process.stdout.write(`[halfcycle] Your saved Halfcycle sign-in was refused \u2014 signing you in again.
3977
- `);
3978
4006
  credential = replacement;
3979
4007
  }
3980
4008
  }
@@ -4019,8 +4047,6 @@ async function joinPinnedEngagement(serviceUrl, engagementId, targetRepo, deps =
4019
4047
  if (replacement === null) {
4020
4048
  throw new SignInRefused(`join-${err.status}`, `${err.serverMessage} ${refusedCredentialRemedy(credential.source)} No credential was minted and nothing was written.`);
4021
4049
  }
4022
- process.stdout.write(`[halfcycle] Your saved Halfcycle sign-in was refused \u2014 signing you in again.
4023
- `);
4024
4050
  credential = replacement;
4025
4051
  }
4026
4052
  }