halfcycle 0.3.28 → 0.3.29

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.29",
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();
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
  }