halfcycle 0.9.0 → 0.11.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.
@@ -49,7 +49,7 @@
49
49
  * SHIPS TO CLIENT DISK inside the CLI: every string here is a sentence a person reads,
50
50
  * and no comment sits beside an object member.
51
51
  */
52
- import { PHASE_LIMIT_FILENAME, RELAYED_CHOICES_FILENAME, type PhaseExpected, type PhaseWork, unfinishedStepLine, type AcceptanceOutcome, type OwnerWaitDeclaration, type ObserveRunResult, type OpenReviewAnswer, type TimeRunResult, type TimeSummary, type WorkCall } from '@halfcycle/events';
52
+ import { PHASE_LIMIT_FILENAME, RELAYED_CHOICES_FILENAME, type PhaseExpected, type PhaseWork, unfinishedStepLine, type AcceptanceOutcome, type OwnerWaitDeclaration, type ObserveRunResult, type OpenReviewAnswer, type TimeRunResult, type TimeSummary, type TimeSummaryShare, type WorkCall } from '@halfcycle/events';
53
53
  import type { RepoCredential } from './open-phase.js';
54
54
  /**
55
55
  * Whether the commit this phase closed at could be read, and if so the full hash
@@ -186,7 +186,7 @@ export declare function readTimeLine(stdout: string): TimeRunResult;
186
186
  * answers, the open goes ahead; nothing is printed about it.
187
187
  *
188
188
  * It is the CLOSING send, so it passes `--final` (`time-and-usage-record` AC5): only
189
- * this send settles a builder's held tokens on a task by the closing rules, and what it
189
+ * this send settles a builder's held tokens on a task by the closing terms, and what it
190
190
  * settles stays settled even if the close is then refused. `pace` and the turn-end send
191
191
  * never pass it.
192
192
  */
@@ -272,7 +272,7 @@ export declare function reviewOpenUrl(credential: RepoCredential, phase: string)
272
272
  *
273
273
  * @throws CloseRequestInvalid before anything is sent — no count, no time and no open — when the
274
274
  * request fails the shared schema or the phase is not a phase name (the one
275
- * rule, `phaseNameSchema`); nothing else is thrown — every answer is an outcome.
275
+ * check, `phaseNameSchema`); nothing else is thrown — every answer is an outcome.
276
276
  */
277
277
  export declare function openPhaseReview(credential: RepoCredential, phase: string, request: CloseStepRequest, observe: () => Promise<ObserveRunResult>, repoRoot?: string, sendTime?: () => Promise<TimeRunResult>): Promise<ReviewOpenAttempt>;
278
278
  /** CL1 — the review is open. */
@@ -350,10 +350,13 @@ export declare function readTimeTotalsUrl(credential: RepoCredential, phase: str
350
350
  */
351
351
  export declare function readCloseTimeSummary(credential: RepoCredential, phase: string): Promise<TimeSummary | null>;
352
352
  /**
353
- * T1–T4 and U1–U4 for the phase, then one line per task in graph order, then T5 last
354
- * when the time tied to no task has anything to show (`timeUntiedHasFigures`, the same
355
- * gate the console applies) — or, with nothing to read (`summary` is `null`, or
356
- * `timeSummaryIsEmpty`), T1 then T6, exactly as the console shows the same case.
353
+ * The eight rows in two figures, then the lines under them, usage, reviews and kinds
354
+ * (time-totals AC7): T1, one `{row} {clock} · agents {agent}` line per row in
355
+ * `TIME_ROW_KEYS` order, T8, T3, T4, T9, U5–U7 or U3, A1, then B1–B2 when there are
356
+ * kinds. Then one line per task in graph order (its non-zero rows and T10), then T5, the
357
+ * "Not tied to a task" row, when it has figures. Every word comes from `packages/events`.
358
+ * With nothing to read (`summary` is `null`, or `timeSummaryIsEmpty`) it prints T1 then
359
+ * T6, exactly as the console shows the same case.
357
360
  *
358
361
  * Each task row prints `{task id} {title}` (coordinator ruling on issue #2061):
359
362
  * `title` is attached by control's `readTimeSummary`, from the SAME stored graph the
@@ -362,7 +365,7 @@ export declare function readCloseTimeSummary(credential: RepoCredential, phase:
362
365
  * `title` (the field is declared-optional on the wire): that row prints the task id
363
366
  * alone rather than a missing word.
364
367
  */
365
- export declare function timeTotalsLines(summary: TimeSummary | null): string[];
368
+ export declare function timeTotalsLines(summary: TimeSummary | null, details?: boolean): string[];
366
369
  /**
367
370
  * The address of a phase's declarations, this cycle only: `close-phase`'s own read
368
371
  * (`fixed-list-and-one-sitting`, Component design, *Control*), the engagement
@@ -414,7 +417,7 @@ export declare function readPhaseExpected(engagementId: string, phase: string, h
414
417
  * from Codex as relayed is not here (CX1 lists it). No file is the none-case of C1; a
415
418
  * file that cannot be read or is another phase's prints nothing. Nothing is sent.
416
419
  */
417
- export declare function phaseLimitLines(engagementId: string, phase: string, home?: string): string[];
420
+ export declare function phaseLimitLines(engagementId: string, phase: string, home?: string, share?: TimeSummaryShare | null, details?: boolean): string[];
418
421
  /**
419
422
  * One CX1 for each choice Codex relayed that let the phase use more, in the order they
420
423
  * happened, from the relayed list on this machine. It reads nothing of the limit file, so
@@ -437,5 +440,5 @@ export declare function readPhaseModels(engagementId: string, phase: string, ope
437
440
  * prints no Z1 and no Z3, a missing limit file the third Z2, an unreadable summary no
438
441
  * Z2, and a missing tally no Z3. Nothing here stops the close.
439
442
  */
440
- export declare function tierFigureLines(work: PhaseWork | null, expected: PhaseExpected | null, summary: TimeSummary | null, models: Readonly<Record<string, Readonly<Record<string, number>>>> | null): string[];
443
+ export declare function tierFigureLines(work: PhaseWork | null, expected: PhaseExpected | null, summary: TimeSummary | null, models: Readonly<Record<string, Readonly<Record<string, number>>>> | null, details?: boolean): string[];
441
444
  //# sourceMappingURL=close-phase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"close-phase.d.ts","sourceRoot":"","sources":["../src/close-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"close-phase.d.ts","sourceRoot":"","sources":["../src/close-phase.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1230,6 +1230,15 @@ var BUILD_TASK_BUDGET_MAX_MINUTES = 10080;
1230
1230
  var BUILD_TASK_NOTE_MAX = 240;
1231
1231
  var BUILD_TASK_CLEAR_COMMAND_MAX = 240;
1232
1232
  var buildTaskKindSchema = z8.enum(["build", "review", "spec", "walk", "check"]);
1233
+ var BUILD_TASK_KIND_LABEL = Object.freeze({
1234
+ build: "Build",
1235
+ review: "Review",
1236
+ spec: "Spec",
1237
+ walk: "Walk",
1238
+ check: "Check"
1239
+ });
1240
+ var buildTaskShipsSchema = z8.enum(["deploy", "release"]);
1241
+ var BUILD_TASK_SHIPPED_MAX = 64;
1233
1242
  var buildTaskIdSchema = z8.string().min(1).max(64);
1234
1243
  var buildTaskSchema = z8.object({
1235
1244
  // The task's own id, as the coordinator's graph names it.
@@ -1282,7 +1291,19 @@ var buildTaskSchema = z8.object({
1282
1291
  clearCommand: descriptionText(BUILD_TASK_CLEAR_COMMAND_MAX).optional(),
1283
1292
  // On a task held for a person, the crew member ready to take it on once it is
1284
1293
  // cleared, by callsign. Absent when nobody is standing by.
1285
- standingBy: agentNameSchema.optional()
1294
+ standingBy: agentNameSchema.optional(),
1295
+ // The batch this task was started in, counted from 0. A record of when it ran,
1296
+ // sent only once it has run; absent on a task not started yet.
1297
+ wave: z8.number().int().min(0).max(BUILD_SNAPSHOT_TASK_LIMIT).optional(),
1298
+ // True when the task is a check of the whole project rather than of one piece of
1299
+ // work. Absent otherwise; never false.
1300
+ wholeProject: z8.literal(true).optional(),
1301
+ // How the task ships what was built: deployed, or released. Absent on a task that
1302
+ // ships nothing.
1303
+ ships: buildTaskShipsSchema.optional(),
1304
+ // The commit or version the task reported when it shipped, exactly as reported, as
1305
+ // one word with no spaces. Absent until it has shipped, or when it reported none.
1306
+ shipped: z8.string().min(1).max(BUILD_TASK_SHIPPED_MAX).regex(/^[^\s\x00-\x1f\x7f-\x9f]*$/, { message: "must be one word, with no spaces or control characters" }).optional()
1286
1307
  }).strict().superRefine((task, ctx) => {
1287
1308
  if (task.reviews !== void 0 && task.reviews === task.id) {
1288
1309
  ctx.addIssue({
@@ -2492,6 +2513,35 @@ var CREW_ROSTER = [
2492
2513
  ];
2493
2514
  var CREW_ROSTER_SIZE = CREW_ROSTER.length;
2494
2515
  var CREW_CALLSIGNS = CREW_ROSTER.map((member) => member.callsign);
2516
+ function crewMemberOf(callsign) {
2517
+ return CREW_ROSTER.find((member) => member.callsign === callsign);
2518
+ }
2519
+ var CREW_ROLE_SINGULAR = {
2520
+ "business-analyst": "business analyst",
2521
+ architect: "architect",
2522
+ "spec-writer": "spec writer",
2523
+ builder: "builder",
2524
+ "context-docs": "context and docs writer",
2525
+ "spec-reviewer": "spec reviewer",
2526
+ "code-test-reviewer": "code and test reviewer",
2527
+ "delivery-lead": "delivery lead",
2528
+ "quality-lead": "quality lead"
2529
+ };
2530
+ function crewNameWordsOf(name) {
2531
+ const member = crewMemberOf(name);
2532
+ return member === void 0 ? name : `${member.callsign}, ${CREW_ROLE_SINGULAR[member.role]}`;
2533
+ }
2534
+ var SMALL_CREW = Object.freeze([
2535
+ "SOFIA",
2536
+ "WREN",
2537
+ "ADA",
2538
+ "MILO",
2539
+ "IRIS",
2540
+ "LEX",
2541
+ "VERA",
2542
+ "CASS",
2543
+ "ATLAS"
2544
+ ]);
2495
2545
  var crewLayerSchema = methodLayerSchema.extract(["l0", "l1", "l2", "l3", "l4", "l5"]);
2496
2546
  var crewRoleLayersSchema = z15.object({
2497
2547
  leads: z15.array(crewLayerSchema),
@@ -3189,7 +3239,36 @@ var phaseRecordResponseSchema = z22.discriminatedUnion("outcome", [
3189
3239
  ]);
3190
3240
 
3191
3241
  // ../events/dist/owner-waits.js
3242
+ import { z as z24 } from "zod";
3243
+
3244
+ // ../events/dist/owner-wait-answer.js
3192
3245
  import { z as z23 } from "zod";
3246
+ var ownerWaitShortIdSchema = z23.string().regex(/^[0-9a-f]{8}$/);
3247
+ var OWNER_WAIT_ANSWER_ACTS = ["approve", "decline"];
3248
+ var ownerWaitAnswerActSchema = z23.enum(OWNER_WAIT_ANSWER_ACTS);
3249
+ var ownerWaitChatRequestSchema = z23.discriminatedUnion("act", [
3250
+ z23.object({ act: z23.literal("approve"), wait: ownerWaitShortIdSchema }).strict(),
3251
+ z23.object({ act: z23.literal("decline"), wait: ownerWaitShortIdSchema, note: scopeNoteWireSchema }).strict()
3252
+ ]);
3253
+ function bareOutcome(outcome) {
3254
+ return z23.object({ outcome: z23.literal(outcome) }).strict();
3255
+ }
3256
+ var ownerWaitChatResultSchema = z23.discriminatedUnion("outcome", [
3257
+ z23.object({
3258
+ outcome: z23.literal("recorded"),
3259
+ act: ownerWaitAnswerActSchema,
3260
+ question: z23.string().min(1)
3261
+ }).strict(),
3262
+ z23.object({ outcome: z23.literal("refused"), problems: z23.array(systemDescriptionProblemSchema).min(1) }).strict(),
3263
+ bareOutcome("not-owner"),
3264
+ bareOutcome("no-owner"),
3265
+ bareOutcome("not-found"),
3266
+ bareOutcome("ambiguous"),
3267
+ bareOutcome("not-offered"),
3268
+ bareOutcome("unavailable")
3269
+ ]);
3270
+
3271
+ // ../events/dist/owner-waits.js
3193
3272
  var OWNER_WAIT_ITEMS = Object.freeze([
3194
3273
  Object.freeze({ id: "delete-users-data", words: "Deleting or replacing data people already have." }),
3195
3274
  Object.freeze({
@@ -3202,27 +3281,27 @@ var OWNER_WAIT_ITEMS = Object.freeze([
3202
3281
  Object.freeze({ id: "change-standing-rule", words: "Changing a standing rule." })
3203
3282
  ]);
3204
3283
  var OWNER_WAIT_ITEM_IDS = Object.freeze(OWNER_WAIT_ITEMS.map((item) => item.id));
3205
- var ownerWaitItemIdSchema = z23.enum(OWNER_WAIT_ITEM_IDS);
3284
+ var ownerWaitItemIdSchema = z24.enum(OWNER_WAIT_ITEM_IDS);
3206
3285
  var OWNER_WAIT_FIXED_COUNT = OWNER_WAIT_ITEMS.length;
3207
3286
  var OWNER_WAIT_ADDITIONS_MAX = 20;
3208
3287
  var OWNER_WAIT_TEXT_MAX = 240;
3209
- var ownerWaitItemRefSchema = z23.union([
3210
- z23.number().int().min(1),
3211
- z23.string().uuid({ message: "must be a number from 1 to 6, or the id shown beside an added item" })
3288
+ var ownerWaitItemRefSchema = z24.union([
3289
+ z24.number().int().min(1),
3290
+ z24.string().uuid({ message: "must be a number from 1 to 6, or the id shown beside an added item" })
3212
3291
  ]);
3213
3292
  var ownerWaitText = descriptionText(OWNER_WAIT_TEXT_MAX);
3214
- var ownerWaitAddRequestSchema = z23.object({
3215
- engagementId: z23.string().min(1),
3293
+ var ownerWaitAddRequestSchema = z24.object({
3294
+ engagementId: z24.string().min(1),
3216
3295
  text: ownerWaitText,
3217
3296
  reason: ownerWaitText
3218
3297
  }).strict();
3219
- var ownerWaitAddResultSchema = z23.discriminatedUnion("outcome", [
3220
- z23.object({ outcome: z23.literal("added"), id: z23.string().uuid(), addedAt: utcIso8601 }).strict(),
3221
- z23.object({ outcome: z23.literal("refused"), reason: z23.literal("too-many") }).strict()
3298
+ var ownerWaitAddResultSchema = z24.discriminatedUnion("outcome", [
3299
+ z24.object({ outcome: z24.literal("added"), id: z24.string().uuid(), addedAt: utcIso8601 }).strict(),
3300
+ z24.object({ outcome: z24.literal("refused"), reason: z24.literal("too-many") }).strict()
3222
3301
  ]);
3223
- var ownerWaitUndoableSchema = z23.enum(["yes", "no"]);
3224
- var ownerWaitDeclareRequestSchema = z23.object({
3225
- engagementId: z23.string().min(1),
3302
+ var ownerWaitUndoableSchema = z24.enum(["yes", "no"]);
3303
+ var ownerWaitDeclareRequestSchema = z24.object({
3304
+ engagementId: z24.string().min(1),
3226
3305
  item: ownerWaitItemRefSchema,
3227
3306
  question: ownerWaitText,
3228
3307
  recommendation: ownerWaitText,
@@ -3235,68 +3314,49 @@ var ownerWaitDeclareRequestSchema = z23.object({
3235
3314
  path: ["how"]
3236
3315
  });
3237
3316
  var OWNER_WAIT_DECLARE_REFUSALS = ["no-open-phase", "unknown-item", "say-if-undoable"];
3238
- var ownerWaitDeclareResultSchema = z23.discriminatedUnion("outcome", [
3239
- z23.object({ outcome: z23.literal("recorded"), id: z23.string().uuid(), say: z23.string().min(1) }).strict(),
3240
- z23.object({
3241
- outcome: z23.literal("go-ahead"),
3242
- id: z23.string().uuid(),
3243
- callId: z23.number().int().positive(),
3244
- say: z23.string().min(1)
3317
+ var ownerWaitDeclareResultSchema = z24.discriminatedUnion("outcome", [
3318
+ z24.object({ outcome: z24.literal("recorded"), id: z24.string().uuid(), say: z24.string().min(1) }).strict(),
3319
+ z24.object({
3320
+ outcome: z24.literal("go-ahead"),
3321
+ id: z24.string().uuid(),
3322
+ callId: z24.number().int().positive(),
3323
+ say: z24.string().min(1)
3245
3324
  }).strict(),
3246
- z23.object({ outcome: z23.literal("refused"), reason: z23.enum(OWNER_WAIT_DECLARE_REFUSALS) }).strict()
3325
+ z24.object({ outcome: z24.literal("refused"), reason: z24.enum(OWNER_WAIT_DECLARE_REFUSALS) }).strict()
3247
3326
  ]);
3248
- var ownerWaitAddedItemSchema = z23.object({
3249
- id: z23.string().uuid(),
3250
- words: z23.string().min(1),
3251
- reason: z23.string().min(1),
3327
+ var ownerWaitAddedItemSchema = z24.object({
3328
+ id: z24.string().uuid(),
3329
+ words: z24.string().min(1),
3330
+ reason: z24.string().min(1),
3252
3331
  addedAt: utcIso8601
3253
3332
  }).strict();
3254
- var ownerWaitListSchema = z23.object({
3255
- fixed: z23.array(z23.object({ id: ownerWaitItemIdSchema, words: z23.string().min(1) }).strict()).length(OWNER_WAIT_FIXED_COUNT),
3256
- added: z23.array(ownerWaitAddedItemSchema).max(OWNER_WAIT_ADDITIONS_MAX)
3333
+ var ownerWaitListSchema = z24.object({
3334
+ fixed: z24.array(z24.object({ id: ownerWaitItemIdSchema, words: z24.string().min(1) }).strict()).length(OWNER_WAIT_FIXED_COUNT),
3335
+ added: z24.array(ownerWaitAddedItemSchema).max(OWNER_WAIT_ADDITIONS_MAX)
3257
3336
  }).strict();
3258
- var ownerWaitDeclarationSchema = z23.object({
3259
- id: z23.string().uuid(),
3337
+ var ownerWaitDeclarationSchema = z24.object({
3338
+ id: z24.string().uuid(),
3260
3339
  fixedItem: ownerWaitItemIdSchema.nullable(),
3261
- addition: z23.object({ id: z23.string().uuid(), words: z23.string().min(1) }).strict().nullable(),
3262
- question: z23.string().min(1),
3263
- recommendation: z23.string().min(1),
3340
+ addition: z24.object({ id: z24.string().uuid(), words: z24.string().min(1) }).strict().nullable(),
3341
+ question: z24.string().min(1),
3342
+ recommendation: z24.string().min(1),
3264
3343
  task: buildTaskIdSchema.nullable(),
3265
3344
  declaredAt: utcIso8601
3266
3345
  }).strict().refine((d) => d.fixedItem === null !== (d.addition === null), {
3267
3346
  message: "names exactly one item: a fixed one or an added one",
3268
3347
  path: ["fixedItem"]
3269
3348
  });
3270
- var ownerWaitDeclarationsSchema = z23.object({ declarations: z23.array(ownerWaitDeclarationSchema) }).strict();
3349
+ var ownerWaitDeclarationsSchema = z24.object({ declarations: z24.array(ownerWaitDeclarationSchema) }).strict();
3350
+ var ownerWaitOpenSchema = z24.object({
3351
+ wait: ownerWaitShortIdSchema,
3352
+ task: buildTaskIdSchema.nullable(),
3353
+ question: z24.string().min(1),
3354
+ recommendation: z24.string().min(1),
3355
+ declaredAt: utcIso8601
3356
+ }).strict();
3357
+ var ownerWaitsOpenSchema = z24.object({ waits: z24.array(ownerWaitOpenSchema) }).strict();
3271
3358
  var OWNER_WAIT_TOO_MANY = `This project already has ${String(OWNER_WAIT_ADDITIONS_MAX)} things added to what waits for the owner. Ask the owner to take one off on their settings page in the console first; it cannot be done by typing in chat.`;
3272
3359
 
3273
- // ../events/dist/owner-wait-answer.js
3274
- import { z as z24 } from "zod";
3275
- var ownerWaitShortIdSchema = z24.string().regex(/^[0-9a-f]{8}$/);
3276
- var OWNER_WAIT_ANSWER_ACTS = ["approve", "decline"];
3277
- var ownerWaitAnswerActSchema = z24.enum(OWNER_WAIT_ANSWER_ACTS);
3278
- var ownerWaitChatRequestSchema = z24.discriminatedUnion("act", [
3279
- z24.object({ act: z24.literal("approve"), wait: ownerWaitShortIdSchema }).strict(),
3280
- z24.object({ act: z24.literal("decline"), wait: ownerWaitShortIdSchema, note: scopeNoteWireSchema }).strict()
3281
- ]);
3282
- function bareOutcome(outcome) {
3283
- return z24.object({ outcome: z24.literal(outcome) }).strict();
3284
- }
3285
- var ownerWaitChatResultSchema = z24.discriminatedUnion("outcome", [
3286
- z24.object({
3287
- outcome: z24.literal("recorded"),
3288
- act: ownerWaitAnswerActSchema,
3289
- question: z24.string().min(1)
3290
- }).strict(),
3291
- z24.object({ outcome: z24.literal("refused"), problems: z24.array(systemDescriptionProblemSchema).min(1) }).strict(),
3292
- bareOutcome("not-owner"),
3293
- bareOutcome("no-owner"),
3294
- bareOutcome("not-found"),
3295
- bareOutcome("ambiguous"),
3296
- bareOutcome("not-offered"),
3297
- bareOutcome("unavailable")
3298
- ]);
3299
-
3300
3360
  // ../events/dist/autonomy.js
3301
3361
  import { z as z25 } from "zod";
3302
3362
  var AUTONOMY_CHANGED_IN = ["console", "chat"];
@@ -3469,10 +3529,17 @@ function autonomyC8(agent, question, chose) {
3469
3529
  var CALLS_HEADING = "Calls made without asking you";
3470
3530
  var CALLS_EXPLAINED = "These are the decisions the agents recorded taking on their own, each against a stated default. Halfcycle lists what they recorded; it cannot see a call an agent did not record.";
3471
3531
  function callMadeLine(call) {
3472
- return `${call.by} decided "${call.question}": chose "${call.chose}". The stated default was "${call.statedDefault}".`;
3532
+ return `${crewNameWordsOf(call.by)} decided "${call.question}": chose "${call.chose}". The stated default was "${call.statedDefault}".`;
3533
+ }
3534
+ function listedCallLine(call) {
3535
+ return autonomyC8(crewNameWordsOf(call.by), call.question, call.chose);
3536
+ }
3537
+ function callHeadLineOf(call) {
3538
+ return call.kind === "listed" ? listedCallLine(call) : callMadeLine(call);
3473
3539
  }
3474
3540
  function callUndoLine(call) {
3475
- return call.undoable === "yes" ? `${call.by} says this can be undone: "${call.how ?? ""}"` : `${call.by} says this cannot be undone.`;
3541
+ const by = crewNameWordsOf(call.by);
3542
+ return call.undoable === "yes" ? `${by} says this can be undone: "${call.how ?? ""}"` : `${by} says this cannot be undone.`;
3476
3543
  }
3477
3544
  var NO_CALLS_LINE = "No agent recorded a call made without asking in this phase.";
3478
3545
  var UNCHECKED_CLAIMS_HEADING = "Checks nobody ran";
@@ -6049,8 +6116,8 @@ ${GENERATED_USER_PROMPT_SCOPE_HEADER} the Halfcycle installer, now also for the
6049
6116
  # number ("allow 2"), as the whole prompt, and change
6050
6117
  # how a build is paced, by typing "faster", "run 5 agents", "keep 30% free" or
6051
6118
  # "use up to 70%" as the whole prompt, and answer a phase's usage limit by
6052
- # typing "keep going", "stop", "limit it to 1.5 times" or "limit it to 300
6053
- # million" as the whole prompt.
6119
+ # typing "keep going", "stop", "limit it to 1.5 times" or "limit it to 10% of
6120
+ # the week" as the whole prompt.
6054
6121
  #
6055
6122
  # AN ORDINARY PROMPT STARTS NOTHING. This script reads the hook input once and
6056
6123
  # looks only at the start of the prompt's value. Unless the prompt begins, after
@@ -6085,7 +6152,7 @@ IFS= read -r -d '' HC_INPUT || true
6085
6152
  # \\u escape, or as the UTF-8 bytes of a Unicode space. Compared byte for byte.
6086
6153
  HC_LEAD='[[:space:]]|\\\\[nrtf]|\\\\u(000[9a-d]|0020|00a0|1680|200[0-9a]|202[89f]|205f|3000|feff)'
6087
6154
  HC_LEAD="$HC_LEAD|"$'\\xc2\\xa0|\\xe1\\x9a\\x80|\\xe2\\x80[\\x80-\\x8a\\xa8\\xa9\\xaf]|\\xe2\\x81\\x9f|\\xe3\\x80\\x80|\\xef\\xbb\\xbf'
6088
- if ! printf '%s' "$HC_INPUT" | LC_ALL=C grep -Eiq "\\"prompt\\"[[:space:]]*:[[:space:]]*\\"($HC_LEAD)*((approve|send back|accept|question|carry|drop|reject|autonomy|decline) |allow( +[0-9]{1,4})?($HC_LEAD)*\\"|(faster|go faster|run [0-9]{1,3} agents?|keep [0-9]{1,3}% free|use up to [0-9]{1,3}%|keep going|stop|stop here|limit it to [0-9]{1,9}(\\.[0-9]{1,2})? (times|million|billion|million tokens|billion tokens))($HC_LEAD)*\\")"; then
6155
+ if ! printf '%s' "$HC_INPUT" | LC_ALL=C grep -Eiq "\\"prompt\\"[[:space:]]*:[[:space:]]*\\"($HC_LEAD)*((approve|send back|accept|question|carry|drop|reject|autonomy|decline) |allow( +[0-9]{1,4})?($HC_LEAD)*\\"|(faster|go faster|run [0-9]{1,3} agents?|keep [0-9]{1,3}% free|use up to [0-9]{1,3}%|keep going|stop|stop here|limit it to [0-9]{1,9}(\\.[0-9]{1,2})? (times|million|billion|million tokens|billion tokens)|limit it to [0-9]{1,3}% of the week)($HC_LEAD)*\\")"; then
6089
6156
  exit 0
6090
6157
  fi
6091
6158
 
@@ -6525,7 +6592,9 @@ var REQUIRED_GITIGNORE_ENTRIES = [
6525
6592
  ".halfcycle/state.json",
6526
6593
  `${ZONE_B_DIR}/`,
6527
6594
  ".claude/worktrees/",
6528
- ".halfcycle/context-budget.json"
6595
+ ".halfcycle/context-budget.json",
6596
+ ".claude/settings.local.json",
6597
+ ".halfcycle/local-allow.json"
6529
6598
  ];
6530
6599
  var GITIGNORE_HEADER = "# Halfcycle \u2014 machine-local secrets/state and Zone-B (never push to client remote)";
6531
6600
  function adoptBlockUnderHeader(before, header, claimable) {
@@ -8389,9 +8458,14 @@ function renderCalls(calls, p) {
8389
8458
  if (calls.length === 0)
8390
8459
  return [`## ${CALLS_HEADING}`, NO_CALLS_LINE];
8391
8460
  const lines = calls.flatMap((c) => {
8392
- const by = p.itemStart(c.by);
8393
8461
  const undo = ` - ${callUndoLine({ by: p.text(c.by), undoable: c.undoable, how: c.how === null ? null : p.text(c.how) })}`;
8394
- const head = c.kind === "listed" ? autonomyC8(by, p.text(c.question), p.text(c.chose)) : callMadeLine({ by, question: p.text(c.question), chose: p.text(c.chose), statedDefault: p.text(c.statedDefault) });
8462
+ const head = callHeadLineOf({
8463
+ kind: c.kind,
8464
+ by: p.itemStart(c.by),
8465
+ question: p.text(c.question),
8466
+ chose: p.text(c.chose),
8467
+ statedDefault: p.text(c.statedDefault)
8468
+ });
8395
8469
  return [`- ${head}`, undo];
8396
8470
  });
8397
8471
  return [`## ${CALLS_HEADING}`, CALLS_EXPLAINED, lines.join("\n")];
@@ -8690,6 +8764,12 @@ var REVIEW_USAGE = `${HALFCYCLE_COMMAND} review <phase> (--show | --answer <part
8690
8764
  var RV9_LINE = `halfcycle review: this project is not signed in on this computer. ${HOOK_REMEDY}`;
8691
8765
 
8692
8766
  // dist/open-phase.js
8767
+ var OPEN_FROM_SIZE_REFUSALS = Object.freeze({
8768
+ "unknown-size": "That size id is not this project's. Use the id `size sort` printed. Nothing was opened.",
8769
+ "not-small": "Only a small project is opened from its size. Nothing was opened.",
8770
+ "size-used": "That size has already opened a phase. Nothing was opened.",
8771
+ "only-up": "A project never moves to a smaller size. Nothing was opened."
8772
+ });
8693
8773
  function writePhaseStamp(engagementId, phase, home) {
8694
8774
  if (!isEngagementId(engagementId)) {
8695
8775
  return { path: "(none \u2014 no valid project id)", reason: new InvalidEngagementIdError(engagementId).message };