@kici-dev/engine 0.10.0 → 0.12.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 (32) hide show
  1. package/dist/audit/access-log-policy.d.ts +2 -2
  2. package/dist/audit/access-log-policy.js +2 -2
  3. package/dist/audit/activity.d.ts +1 -2
  4. package/dist/audit/activity.js +1 -2
  5. package/dist/audit/retention-policy.d.ts +1 -3
  6. package/dist/audit/retention-policy.js +1 -1
  7. package/dist/context/hold-reason.d.ts +3 -5
  8. package/dist/labels.d.ts +1 -1
  9. package/dist/labels.js +1 -1
  10. package/dist/mcp/tool-schemas.d.ts +1 -1
  11. package/dist/mcp/tool-schemas.js +1 -1
  12. package/dist/metrics/catalog-policy.d.ts +1 -2
  13. package/dist/metrics/catalog-policy.js +1 -2
  14. package/dist/protocol/dashboard-global-workflows.d.ts +1 -1
  15. package/dist/protocol/dashboard-write-operations.d.ts +6 -1
  16. package/dist/protocol/dashboard-write-operations.js +2 -2
  17. package/dist/protocol/messages/common.d.ts +0 -1
  18. package/dist/protocol/messages/common.js +0 -1
  19. package/dist/protocol/messages/dashboard.d.ts +1 -1
  20. package/dist/protocol/messages/dashboard.js +4 -4
  21. package/dist/protocol/messages/orchestrator-agent.d.ts +0 -1
  22. package/dist/protocol/messages/orchestrator-agent.js +0 -1
  23. package/dist/protocol/messages/peer.js +1 -1
  24. package/dist/protocol/messages/platform-orchestrator.d.ts +6 -6
  25. package/dist/protocol/messages/platform-orchestrator.js +6 -6
  26. package/dist/registration/registerable-trigger-type.d.ts +1 -1
  27. package/dist/registration/registerable-trigger-type.js +1 -1
  28. package/dist/trigger/decision-trace.d.ts +3 -3
  29. package/dist/trigger/decision-trace.js +3 -3
  30. package/dist/trigger/types.d.ts +8 -2
  31. package/package.json +1 -1
  32. package/sbom.spdx.json +5 -5
@@ -48,8 +48,8 @@ export interface AccessLogRateLimiter {
48
48
  permit(action: AccessLogAction, actorKey: string, perMinute: number): boolean;
49
49
  }
50
50
  /**
51
- * Policy table mirroring research-doc §2 verdicts (with the user's
52
- * §7 platform-operator override applied separately in `shouldRecordAccess`).
51
+ * Per-action recording policy (the platform-operator override is applied
52
+ * separately in `shouldRecordAccess`).
53
53
  *
54
54
  * Exhaustive over `AccessLogAction.options` — TypeScript catches additions.
55
55
  */
@@ -32,8 +32,8 @@ const AccessLogPolicyKind = z.enum([
32
32
  "rate_limit"
33
33
  ]);
34
34
  /**
35
- * Policy table mirroring research-doc §2 verdicts (with the user's
36
- * §7 platform-operator override applied separately in `shouldRecordAccess`).
35
+ * Per-action recording policy (the platform-operator override is applied
36
+ * separately in `shouldRecordAccess`).
37
37
  *
38
38
  * Exhaustive over `AccessLogAction.options` — TypeScript catches additions.
39
39
  */
@@ -2,8 +2,7 @@
2
2
  * Unified Activity row + filter schemas for the dashboard's federated
3
3
  * "Activity" view. Federates Platform `audit_log` (mutation events,
4
4
  * free-form target_type) with orchestrator `access_log` (reads + admin
5
- * mutations, strict-enum target_type) at the query layer — see plan
6
- * `~/.claude/plans/ui-audit-logs-page-sleepy-wave.md`.
5
+ * mutations, strict-enum target_type) at the query layer.
7
6
  *
8
7
  * The `source` discriminator on each row tells the UI whether to render
9
8
  * the audit_log or access_log column set. Fields unique to access_log
@@ -7,8 +7,7 @@ import { z } from "zod";
7
7
  * Unified Activity row + filter schemas for the dashboard's federated
8
8
  * "Activity" view. Federates Platform `audit_log` (mutation events,
9
9
  * free-form target_type) with orchestrator `access_log` (reads + admin
10
- * mutations, strict-enum target_type) at the query layer — see plan
11
- * `~/.claude/plans/ui-audit-logs-page-sleepy-wave.md`.
10
+ * mutations, strict-enum target_type) at the query layer.
12
11
  *
13
12
  * The `source` discriminator on each row tells the UI whether to render
14
13
  * the audit_log or access_log column set. Fields unique to access_log
@@ -8,9 +8,7 @@
8
8
  * `./access-log-policy.ts`; both modules classify by the same action
9
9
  * dimension, just for different downstream decisions.
10
10
  *
11
- * The classification table came from research-doc §5
12
- * and the user's
13
- * `## Decisions` section. Two override layers apply uniformly:
11
+ * Two override layers apply uniformly:
14
12
  *
15
13
  * 1. `outcome` is `denied` or `error` → retain 180d (forensic value).
16
14
  * 2. `actor.type === 'platform_operator'` → retain 365d
@@ -100,7 +100,7 @@ const FORENSIC_OUTCOME_DAYS = 180;
100
100
  const PLATFORM_OPERATOR_DAYS = 365;
101
101
  /**
102
102
  * Default warm TTL for action strings outside `AccessLogAction.options`. Hit
103
- * by E2E synthetic action names and would-be-future enum additions on a
103
+ * by synthetic test action names and would-be-future enum additions on a
104
104
  * rolling deploy. Matches the conservative `180d` mutations bucket so
105
105
  * unknown rows are never archived sooner than a tenant-plane mutation.
106
106
  */
@@ -4,16 +4,14 @@
4
4
  * `minimumTrust`.
5
5
  *
6
6
  * Single source of truth for the sentence: the orchestrator's trust gate emits
7
- * it, the ci-security DB fixture seeds it, and the unit and E2E assertions
8
- * compare against it. One copy means a copy edit moves every site at once
9
- * (`.claude/rules/code-style.md` § "Enums over hardcoded strings").
7
+ * it, and test fixtures and assertions compare against it. One copy means a
8
+ * copy edit moves every site at once.
10
9
  *
11
10
  * `held_runs.reason` is a free-text column, so this is a function rather than
12
11
  * an enum: the sentence carries the context name, which is per-hold data.
13
12
  *
14
13
  * Carries no runtime import on purpose — this module reaches the browser
15
- * through the engine barrel, which must pull in no Node built-ins
16
- * (`.claude/rules/engine.md` § "Browser-safe barrel export"). The one import
14
+ * through the engine barrel, which must pull in no Node built-ins. The one import
17
15
  * below is type-only and is erased at compile time.
18
16
  */
19
17
  import type { TrustTier } from './types.js';
package/dist/labels.d.ts CHANGED
@@ -13,7 +13,7 @@ import { z } from 'zod';
13
13
  * kici:os: — operating system (kici:os:linux, kici:os:macos, kici:os:windows)
14
14
  * kici:arch: — CPU architecture (kici:arch:x64, kici:arch:amd64, kici:arch:arm64)
15
15
  * kici:agent: — scaler/execution backend type (kici:agent:container, kici:agent:bare-metal, kici:agent:firecracker)
16
- * kici:scaler: — scaler backend name (kici:scaler:stg-container, kici:scaler:prod-firecracker)
16
+ * kici:scaler: — scaler backend name (kici:scaler:linux-container, kici:scaler:prod-firecracker)
17
17
  * kici:host: — hostname of the machine running the agent (kici:host:<hostname>)
18
18
  * kici:role: — agent role (kici:role:builder, kici:role:init-runner)
19
19
  *
package/dist/labels.js CHANGED
@@ -15,7 +15,7 @@ import { z } from "zod";
15
15
  * kici:os: — operating system (kici:os:linux, kici:os:macos, kici:os:windows)
16
16
  * kici:arch: — CPU architecture (kici:arch:x64, kici:arch:amd64, kici:arch:arm64)
17
17
  * kici:agent: — scaler/execution backend type (kici:agent:container, kici:agent:bare-metal, kici:agent:firecracker)
18
- * kici:scaler: — scaler backend name (kici:scaler:stg-container, kici:scaler:prod-firecracker)
18
+ * kici:scaler: — scaler backend name (kici:scaler:linux-container, kici:scaler:prod-firecracker)
19
19
  * kici:host: — hostname of the machine running the agent (kici:host:<hostname>)
20
20
  * kici:role: — agent role (kici:role:builder, kici:role:init-runner)
21
21
  *
@@ -4,7 +4,7 @@
4
4
  * Browser-safe (zod only) so they live in the shared engine barrel. Each export
5
5
  * is a Zod *raw shape* (a plain object of Zod fields) so it can be passed
6
6
  * directly as an MCP tool `inputSchema`. The Platform-hosted developer MCP
7
- * server (packages/platform/src/mcp/server.ts) is the consumer.
7
+ * server is the consumer.
8
8
  */
9
9
  import { z } from 'zod';
10
10
  export declare const listRunsToolSchema: {
@@ -7,7 +7,7 @@ import { z } from "zod";
7
7
  * Browser-safe (zod only) so they live in the shared engine barrel. Each export
8
8
  * is a Zod *raw shape* (a plain object of Zod fields) so it can be passed
9
9
  * directly as an MCP tool `inputSchema`. The Platform-hosted developer MCP
10
- * server (packages/platform/src/mcp/server.ts) is the consumer.
10
+ * server is the consumer.
11
11
  */
12
12
  /**
13
13
  * Optional organization id. When the calling user belongs to exactly one org
@@ -2,8 +2,7 @@
2
2
  * Hand-maintained label-value policy on top of the auto-generated
3
3
  * `MetricLabels` / `MetricKind` allow-list in
4
4
  * `./metric-catalog.generated.ts`. Consumed by the Platform's
5
- * orchestrator-metrics filter (`packages/platform/src/ws/metrics-filter.ts`)
6
- * to harden the WS `orch.metrics` push path against pollution of the
5
+ * orchestrator-metrics filter to harden the WS `orch.metrics` push path against pollution of the
7
6
  * monitoring system.
8
7
  *
9
8
  * Three layers compose:
@@ -7,8 +7,7 @@ import { MetricNames, MetricService } from "./metric-catalog.generated.js";
7
7
  * Hand-maintained label-value policy on top of the auto-generated
8
8
  * `MetricLabels` / `MetricKind` allow-list in
9
9
  * `./metric-catalog.generated.ts`. Consumed by the Platform's
10
- * orchestrator-metrics filter (`packages/platform/src/ws/metrics-filter.ts`)
11
- * to harden the WS `orch.metrics` push path against pollution of the
10
+ * orchestrator-metrics filter to harden the WS `orch.metrics` push path against pollution of the
12
11
  * monitoring system.
13
12
  *
14
13
  * Three layers compose:
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Consumers import from `@kici-dev/engine/protocol/dashboard-global-workflows`.
5
5
  * This file is intentionally kept out of the engine barrel so it remains a
6
- * server-only surface (see `.claude/rules/engine.md`).
6
+ * server-only surface: the barrel must stay browser-safe.
7
7
  */
8
8
  export * from './messages/dashboard-global-workflows.js';
9
9
  //# sourceMappingURL=dashboard-global-workflows.d.ts.map
@@ -86,7 +86,12 @@ export interface DashboardWriteOperationDescriptor {
86
86
  readonly label: string;
87
87
  /** Threat-model bucket — used by docs + the --sensitivity CLI sugar. */
88
88
  readonly sensitivity: DashboardWriteSensitivity;
89
- /** kici-admin invocation hint shown in the CLI snippet copied from the UI. */
89
+ /**
90
+ * kici-admin invocation hint shown in the CLI snippet copied from the UI.
91
+ * It names a real command path; `--flags` and `<arg>` / `[arg]` placeholders
92
+ * must exist on that command. The orchestrator's cli-equivalents test
93
+ * resolves every entry against the `kici-admin` command tree.
94
+ */
90
95
  readonly cliEquivalent: string;
91
96
  }
92
97
  export declare const DASHBOARD_WRITE_OPERATIONS: readonly DashboardWriteOperationDescriptor[];
@@ -272,7 +272,7 @@ const DASHBOARD_WRITE_OPERATIONS = Object.freeze([
272
272
  category: "Topology",
273
273
  label: "Update global workflow policy",
274
274
  sensitivity: "dispatch",
275
- cliEquivalent: "kici-admin org-settings global-workflows set"
275
+ cliEquivalent: "kici-admin org-settings global-workflows"
276
276
  },
277
277
  {
278
278
  name: "backends.sync",
@@ -288,7 +288,7 @@ const DASHBOARD_WRITE_OPERATIONS = Object.freeze([
288
288
  category: "Topology",
289
289
  label: "Sync one scaler backend",
290
290
  sensitivity: "dispatch",
291
- cliEquivalent: "kici-admin backend sync --one"
291
+ cliEquivalent: "kici-admin backend sync <name>"
292
292
  },
293
293
  {
294
294
  name: "backends.test",
@@ -24,7 +24,6 @@ export declare const WS_MAX_PAYLOAD_BYTES: number;
24
24
  * FAST-PATHED: A manual validator exists in
25
25
  * packages/orchestrator/src/ws/agent-handler.ts (isValidHeartbeat).
26
26
  * If you change this schema, update the manual validator in the same commit.
27
- * See CLAUDE.md rule: "Zod fast-path sync invariant".
28
27
  */
29
28
  export declare const heartbeatSchema: z.ZodObject<{
30
29
  type: z.ZodLiteral<"heartbeat">;
@@ -26,7 +26,6 @@ const WS_MAX_PAYLOAD_BYTES = 26214400;
26
26
  * FAST-PATHED: A manual validator exists in
27
27
  * packages/orchestrator/src/ws/agent-handler.ts (isValidHeartbeat).
28
28
  * If you change this schema, update the manual validator in the same commit.
29
- * See CLAUDE.md rule: "Zod fast-path sync invariant".
30
29
  */
31
30
  const heartbeatSchema = z.object({
32
31
  type: z.literal("heartbeat"),
@@ -34,7 +34,7 @@ export declare const dashboardRunDetailRequestSchema: z.ZodObject<{
34
34
  /**
35
35
  * Request the machine-first, provenance-tagged structured run result from the
36
36
  * orchestrator (user-plane equivalent of the orchestrator-admin
37
- * `/runs/:id/structured` endpoint). Reuses the Phase-1 `AgentRunResult` shape.
37
+ * `/runs/:id/structured` endpoint). Reuses the `AgentRunResult` shape.
38
38
  */
39
39
  export declare const dashboardRunStructuredRequestSchema: z.ZodObject<{
40
40
  type: z.ZodLiteral<"dashboard.run.structured">;
@@ -33,7 +33,7 @@ const dashboardRunDetailRequestSchema = z.object({
33
33
  /**
34
34
  * Request the machine-first, provenance-tagged structured run result from the
35
35
  * orchestrator (user-plane equivalent of the orchestrator-admin
36
- * `/runs/:id/structured` endpoint). Reuses the Phase-1 `AgentRunResult` shape.
36
+ * `/runs/:id/structured` endpoint). Reuses the `AgentRunResult` shape.
37
37
  */
38
38
  const dashboardRunStructuredRequestSchema = z.object({
39
39
  type: z.literal("dashboard.run.structured"),
@@ -605,7 +605,7 @@ const runRerunRequestSchema = z.object({
605
605
  actor: actorPrincipalSchema,
606
606
  runId: z.string(),
607
607
  /**
608
- * Phase F — Platform forwards the original run's `routing_key` so the
608
+ * The Platform forwards the original run's `routing_key` so the
609
609
  * orchestrator can probe its cold-store under the right tenant prefix
610
610
  * when the run is missing from PG. Optional for backwards compatibility
611
611
  * with older Platform versions in mixed deploys; if absent, the
@@ -747,7 +747,7 @@ const dashboardEventLogDetailRequestSchema = z.object({
747
747
  orgId: z.string(),
748
748
  deliveryId: z.string(),
749
749
  /**
750
- * Phase E cold-store hint: when the Platform side has resurrected the
750
+ * Cold-store hint: when the Platform side has resurrected the
751
751
  * archived `event_log` row, it forwards the `routing_key` so the
752
752
  * orchestrator can scope its own cold-store fetch to a single tenant
753
753
  * prefix instead of scanning every routing_key for the org.
@@ -831,7 +831,7 @@ const dashboardEventLogPayloadStreamRequestSchema = z.object({
831
831
  orgId: z.string(),
832
832
  deliveryId: z.string(),
833
833
  /**
834
- * Phase E cold-store hint: when Platform has resurrected the archived
834
+ * Cold-store hint: when Platform has resurrected the archived
835
835
  * `event_log` row, it forwards `routing_key` so the orchestrator can scope
836
836
  * its own cold-store fetch to a single tenant prefix instead of scanning
837
837
  * every routing_key for the org. Mirrors `dashboardEventLogDetailRequestSchema`.
@@ -378,7 +378,6 @@ export declare const jobAckSchema: z.ZodObject<{
378
378
  * FAST-PATHED: A manual validator exists in
379
379
  * packages/orchestrator/src/ws/agent-handler.ts (isValidLogChunk).
380
380
  * If you change this schema, update the manual validator in the same commit.
381
- * See CLAUDE.md rule: "Zod fast-path sync invariant".
382
381
  */
383
382
  export declare const agentLogChunkSchema: z.ZodObject<{
384
383
  type: z.ZodLiteral<"log.chunk">;
@@ -442,7 +442,6 @@ const jobAckSchema = z.object({
442
442
  * FAST-PATHED: A manual validator exists in
443
443
  * packages/orchestrator/src/ws/agent-handler.ts (isValidLogChunk).
444
444
  * If you change this schema, update the manual validator in the same commit.
445
- * See CLAUDE.md rule: "Zod fast-path sync invariant".
446
445
  */
447
446
  const agentLogChunkSchema = z.object({
448
447
  type: z.literal("log.chunk"),
@@ -41,7 +41,7 @@ const peerCapabilitiesSchema = z.object({
41
41
  * version-skew signal rather than something to ignore.
42
42
  */
43
43
  const scalerCapacitySummarySchema = z.object({
44
- /** Scaler backend name (e.g. "stg-worker-bare-metal") */
44
+ /** Scaler backend name (e.g. "worker-bare-metal") */
45
45
  name: z.string().optional(),
46
46
  /** Scaler backend type (e.g. "bare-metal", "container") */
47
47
  type: z.string().optional(),
@@ -143,12 +143,12 @@ export type TrustPolicyUpdate = z.infer<typeof trustPolicyUpdateSchema>;
143
143
  *
144
144
  * NOT a wire-parseable schema: this shape is intentionally absent from the
145
145
  * `platformToOrchestratorMessageSchema` discriminated union so that a rogue
146
- * or compromised Platform process (A10) cannot fabricate one and bypass the
146
+ * or compromised Platform process cannot fabricate one and bypass the
147
147
  * on-orchestrator HMAC verification gate. The only legitimate construction
148
148
  * site is `completeChunkedRelay` in `packages/orchestrator/src/ws/platform-client.ts`,
149
149
  * which synthesizes this shape AFTER `onVerifyInbound` returns `'accepted'`.
150
150
  *
151
- * Migration `packages/platform/src/db/migrations/012_drop_webhook_secret_columns.ts`
151
+ * The Platform migration that dropped the webhook secret columns
152
152
  * makes the orch-side `verifyInboundWebhook` (called from `onVerifyInbound` on
153
153
  * the chunked relay path `webhook.relay.start` / `webhook.relay.chunk`) the
154
154
  * sole trust boundary against a malicious Platform; keeping this schema OUT
@@ -310,7 +310,7 @@ export type PlatformCapabilitiesMessage = z.infer<typeof platformCapabilitiesMes
310
310
  * Platform's monitoring system: a malformed or hostile push fails Zod
311
311
  * parse at the WS edge and never reaches the aggregator or the Mimir
312
312
  * relay. The content-level allow-list (catalog) is enforced one step
313
- * deeper — see `packages/platform/src/ws/metrics-filter.ts`.
313
+ * deeper, in the Platform's orchestrator-metrics filter.
314
314
  *
315
315
  * Caps:
316
316
  * - 2000 metric data points per push (one orch ships ~60 today)
@@ -552,10 +552,10 @@ export type OrchCapabilitiesUpdate = z.infer<typeof orchCapabilitiesUpdateSchema
552
552
  * The single-frame `webhookRelaySchema` is intentionally NOT a member of this
553
553
  * union: that shape carries an attacker-controlled `payload` and pre-existed
554
554
  * the chunked relay's on-orch HMAC verification, so accepting it on the wire
555
- * would let a compromised Platform (A10) fabricate webhook deliveries that
555
+ * would let a compromised Platform fabricate webhook deliveries that
556
556
  * bypass the only trust boundary against a malicious Platform (see the
557
- * docblock on `webhookRelaySchema` above and migration
558
- * `packages/platform/src/db/migrations/012_drop_webhook_secret_columns.ts`).
557
+ * docblock on `webhookRelaySchema` above and the Platform migration that
558
+ * dropped the webhook secret columns).
559
559
  * The chunked path `webhook.relay.start` + `webhook.relay.chunk` is the sole
560
560
  * legitimate route from Platform to `onWebhookRelay`. */
561
561
  export declare const platformToOrchestratorMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -173,12 +173,12 @@ const trustPolicyUpdateSchema = z.object({
173
173
  *
174
174
  * NOT a wire-parseable schema: this shape is intentionally absent from the
175
175
  * `platformToOrchestratorMessageSchema` discriminated union so that a rogue
176
- * or compromised Platform process (A10) cannot fabricate one and bypass the
176
+ * or compromised Platform process cannot fabricate one and bypass the
177
177
  * on-orchestrator HMAC verification gate. The only legitimate construction
178
178
  * site is `completeChunkedRelay` in `packages/orchestrator/src/ws/platform-client.ts`,
179
179
  * which synthesizes this shape AFTER `onVerifyInbound` returns `'accepted'`.
180
180
  *
181
- * Migration `packages/platform/src/db/migrations/012_drop_webhook_secret_columns.ts`
181
+ * The Platform migration that dropped the webhook secret columns
182
182
  * makes the orch-side `verifyInboundWebhook` (called from `onVerifyInbound` on
183
183
  * the chunked relay path `webhook.relay.start` / `webhook.relay.chunk`) the
184
184
  * sole trust boundary against a malicious Platform; keeping this schema OUT
@@ -363,7 +363,7 @@ const platformCapabilitiesMessageSchema = z.object({
363
363
  * Platform's monitoring system: a malformed or hostile push fails Zod
364
364
  * parse at the WS edge and never reaches the aggregator or the Mimir
365
365
  * relay. The content-level allow-list (catalog) is enforced one step
366
- * deeper — see `packages/platform/src/ws/metrics-filter.ts`.
366
+ * deeper, in the Platform's orchestrator-metrics filter.
367
367
  *
368
368
  * Caps:
369
369
  * - 2000 metric data points per push (one orch ships ~60 today)
@@ -543,10 +543,10 @@ const orchCapabilitiesUpdateSchema = z.object({
543
543
  * The single-frame `webhookRelaySchema` is intentionally NOT a member of this
544
544
  * union: that shape carries an attacker-controlled `payload` and pre-existed
545
545
  * the chunked relay's on-orch HMAC verification, so accepting it on the wire
546
- * would let a compromised Platform (A10) fabricate webhook deliveries that
546
+ * would let a compromised Platform fabricate webhook deliveries that
547
547
  * bypass the only trust boundary against a malicious Platform (see the
548
- * docblock on `webhookRelaySchema` above and migration
549
- * `packages/platform/src/db/migrations/012_drop_webhook_secret_columns.ts`).
548
+ * docblock on `webhookRelaySchema` above and the Platform migration that
549
+ * dropped the webhook secret columns).
550
550
  * The chunked path `webhook.relay.start` + `webhook.relay.chunk` is the sole
551
551
  * legitimate route from Platform to `onWebhookRelay`. */
552
552
  const platformToOrchestratorMessageSchema = z.discriminatedUnion("type", [
@@ -14,7 +14,7 @@ import { z } from 'zod';
14
14
  * matched via the per-event lock file pipeline on the same-source path
15
15
  * (e.g. a real GitHub push webhook). Registering them in addition is
16
16
  * what makes cross-source dispatch work for a generic webhook that
17
- * targets an externally-hosted repo (phase 28.5): the cross-source
17
+ * targets an externally-hosted repo: the cross-source
18
18
  * branch looks up `(customer_id, repo_identifier)` and reuses the
19
19
  * stored `provider_context` (installation id, app id, …) to mint
20
20
  * credentials for the actual provider bundle that owns the repo.
@@ -16,7 +16,7 @@ import { z } from "zod";
16
16
  * matched via the per-event lock file pipeline on the same-source path
17
17
  * (e.g. a real GitHub push webhook). Registering them in addition is
18
18
  * what makes cross-source dispatch work for a generic webhook that
19
- * targets an externally-hosted repo (phase 28.5): the cross-source
19
+ * targets an externally-hosted repo: the cross-source
20
20
  * branch looks up `(customer_id, repo_identifier)` and reuses the
21
21
  * stored `provider_context` (installation id, app id, …) to mint
22
22
  * credentials for the actual provider bundle that owns the repo.
@@ -159,9 +159,9 @@ export declare function createCommitMessageTraceEntry(args: {
159
159
  * What a withheld trace field is replaced with when the reader does not hold
160
160
  * `event_log:read_payload`.
161
161
  *
162
- * Lives here rather than beside the Platform's redactor because three packages
163
- * read it: the Platform writes it, the dashboard renders it, and the E2E suite
164
- * asserts the permission boundary against it. A literal repeated at each site
162
+ * Lives here rather than beside the Platform's redactor because it crosses
163
+ * packages: the Platform writes it, the dashboard renders it, and tests assert
164
+ * the permission boundary against it. A literal repeated at each site
165
165
  * would drift into a marker one of them no longer recognizes.
166
166
  */
167
167
  export declare const REDACTED_TRACE_FIELD = "[redacted \u2014 requires event_log:read_payload]";
@@ -145,9 +145,9 @@ function createCommitMessageTraceEntry(args) {
145
145
  * What a withheld trace field is replaced with when the reader does not hold
146
146
  * `event_log:read_payload`.
147
147
  *
148
- * Lives here rather than beside the Platform's redactor because three packages
149
- * read it: the Platform writes it, the dashboard renders it, and the E2E suite
150
- * asserts the permission boundary against it. A literal repeated at each site
148
+ * Lives here rather than beside the Platform's redactor because it crosses
149
+ * packages: the Platform writes it, the dashboard renders it, and tests assert
150
+ * the permission boundary against it. A literal repeated at each site
151
151
  * would drift into a marker one of them no longer recognizes.
152
152
  */
153
153
  const REDACTED_TRACE_FIELD = "[redacted — requires event_log:read_payload]";
@@ -732,9 +732,15 @@ export interface ResolvedSandboxGrant {
732
732
  capabilities?: string[];
733
733
  /** Network override; when set it wins over the config network mode. */
734
734
  network?: SandboxNetworkMode;
735
- /** Force a read-only rootfs (operator-config path only in Phase 2). */
735
+ /**
736
+ * Force a read-only rootfs. The orchestrator does not grant it; the agent's
737
+ * own config sets it.
738
+ */
736
739
  readonlyRootfs?: boolean;
737
- /** Run the container as this user (operator-config path only in Phase 2). */
740
+ /**
741
+ * Run the container as this user. The orchestrator does not grant it; the
742
+ * agent's own config sets it.
743
+ */
738
744
  user?: string;
739
745
  }
740
746
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kici-dev/engine",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Shared business logic for the KiCI CI/CD stack: protocol, triggers, state machine, and provider interfaces used by the Platform relay, orchestrator, and compiler.",
5
5
  "keywords": [
6
6
  "ci",
package/sbom.spdx.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "@kici-dev/engine@0.10.0",
6
- "documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fengine/0.10.0/500f319e-27da-47e9-bc66-2d93e21e2c04",
5
+ "name": "@kici-dev/engine@0.12.0",
6
+ "documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fengine/0.12.0/26df8fdf-b46b-49db-86d9-b586bd3124fa",
7
7
  "creationInfo": {
8
- "created": "2026-09-25T03:03:09Z",
8
+ "created": "2026-09-28T05:10:36Z",
9
9
  "creators": [
10
10
  "Tool: kici-sbom-generator"
11
11
  ]
@@ -54,7 +54,7 @@
54
54
  {
55
55
  "SPDXID": "SPDXRef-RootPackage",
56
56
  "name": "@kici-dev/engine",
57
- "versionInfo": "0.10.0",
57
+ "versionInfo": "0.12.0",
58
58
  "downloadLocation": "NOASSERTION",
59
59
  "filesAnalyzed": false,
60
60
  "licenseConcluded": "NOASSERTION",
@@ -65,7 +65,7 @@
65
65
  {
66
66
  "referenceCategory": "PACKAGE-MANAGER",
67
67
  "referenceType": "purl",
68
- "referenceLocator": "pkg:npm/%40kici-dev/engine@0.10.0"
68
+ "referenceLocator": "pkg:npm/%40kici-dev/engine@0.12.0"
69
69
  }
70
70
  ],
71
71
  "description": "Shared business logic for the KiCI CI/CD stack: protocol, triggers, state machine, and provider interfaces used by the Platform relay, orchestrator, and compiler.",