You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maka.apache.org by as...@apache.org on 2026/08/21 18:34:12 UTC
(maka) 08/08: refactor: delete the permission-mode declarations nothing consumes
This is an automated email from the ASF dual-hosted git repository.
Astro-Han pushed a commit to branch refactor/permission-single-authority
in repository https://gitbox.apache.org/repos/asf/maka.git
commit 708f976d0a80f19695aa8a9a56394c36bef3f776
Author: AstroHan <le...@outlook.com>
AuthorDate: Sat Aug 22 02:31:46 2026 +0800
refactor: delete the permission-mode declarations nothing consumes
Two more places declared a permission mode that no production code reads.
`SubagentSessionRuntime.permissionCeiling` was documented as decode-only and
had no reader, yet `isSubagentSessionRuntime` still validated it with strict
`isPermissionMode` — so a child Session written before a mode was retired was
rejected as malformed and became unopenable. The field leaves the type; the
guard tolerates the key on stored records instead of validating it, which is
what keeps those records readable without pretending the value means anything.
`packages/core/src/workspace.ts` declared `defaults.permissionMode` on a
`WorkspaceConfig` with no references anywhere in the repository and no entry in
the package exports. The whole file goes.
Refs #3385
Generated-by: Claude Code
---
packages/cli/src/__tests__/pi-tui-runner.test.ts | 1 -
.../src/__tests__/subagent-session-parent.test.ts | 28 ++++++++++++++++++++++
packages/core/src/session.ts | 27 +++++++++++++++++----
packages/core/src/workspace.ts | 20 ----------------
.../src/__tests__/execution-composition.test.ts | 1 -
.../src/__tests__/fixtures/execution-host-suite.ts | 1 -
.../runtime/src/__tests__/session-manager.test.ts | 4 ----
.../sqlite-session-metadata-store.test.ts | 3 ---
8 files changed, 50 insertions(+), 35 deletions(-)
diff --git a/packages/cli/src/__tests__/pi-tui-runner.test.ts b/packages/cli/src/__tests__/pi-tui-runner.test.ts
index 0414e7c6e..5f6d95c41 100644
--- a/packages/cli/src/__tests__/pi-tui-runner.test.ts
+++ b/packages/cli/src/__tests__/pi-tui-runner.test.ts
@@ -3042,7 +3042,6 @@ describe('Maka Pi TUI runner', () => {
agentName: 'Local Read',
profile: 'local_read',
toolNames: ['Read', 'Glob', 'Grep'],
- permissionCeiling: 'ask' as const,
},
};
const driver = new SlashCommandDriver([parent, child]);
diff --git a/packages/core/src/__tests__/subagent-session-parent.test.ts b/packages/core/src/__tests__/subagent-session-parent.test.ts
index 972325d91..2772848a6 100644
--- a/packages/core/src/__tests__/subagent-session-parent.test.ts
+++ b/packages/core/src/__tests__/subagent-session-parent.test.ts
@@ -185,3 +185,31 @@ function summary(id: string, overrides: Partial<SessionSummary> = {}): SessionSu
...overrides,
};
}
+
+describe('legacy child execution snapshots', () => {
+ const runtime = {
+ schemaVersion: 1,
+ definitionVersion: 1,
+ agentId: 'agent-1',
+ agentName: 'Reader',
+ profile: 'local_read',
+ systemPrompt: 'Read only.',
+ toolNames: ['Read'],
+ categoryPolicy: { read: 'allow' },
+ } as const;
+
+ test('accepts a snapshot carrying a retired key', () => {
+ // Written before `permissionCeiling` was dropped. Rejecting it would make
+ // the whole child Session unreadable, and nothing reads the value.
+ assert.equal(isSubagentSessionRuntime({ ...runtime, permissionCeiling: 'execute' }), true);
+ assert.equal(isSubagentSessionRuntime({ ...runtime, permissionCeiling: 'ask' }), true);
+ });
+
+ test('accepts a current snapshot without the key', () => {
+ assert.equal(isSubagentSessionRuntime(runtime), true);
+ });
+
+ test('still rejects a key that was never part of the shape', () => {
+ assert.equal(isSubagentSessionRuntime({ ...runtime, notAField: 'x' }), false);
+ });
+});
diff --git a/packages/core/src/session.ts b/packages/core/src/session.ts
index 3711a2063..1f84d1fdd 100644
--- a/packages/core/src/session.ts
+++ b/packages/core/src/session.ts
@@ -107,8 +107,6 @@ export interface SubagentSessionRuntime {
systemPrompt: string;
toolNames: string[];
categoryPolicy: Partial<Record<ToolCategory, PolicyDecision>>;
- /** Legacy decode-only metadata. Current child sessions do not write it. */
- permissionCeiling?: PermissionMode;
}
/**
@@ -409,8 +407,18 @@ const SUBAGENT_SESSION_RUNTIME_SHAPE = defineObjectShape<SubagentSessionRuntime>
'toolNames',
'categoryPolicy',
],
- ['permissionCeiling', 'presetId'],
+ ['presetId'],
);
+
+/**
+ * Keys older child sessions wrote that this type no longer has.
+ *
+ * `hasExactShape` rejects unknown keys, so without this a record written before
+ * the key was dropped would fail validation and make the whole child Session
+ * unreadable. Nothing reads the values, and they stay in the stored JSON as
+ * written — this only stops their presence from being treated as corruption.
+ */
+const RETIRED_SUBAGENT_RUNTIME_KEYS: readonly string[] = ['permissionCeiling'];
const SUBAGENT_SESSION_SPAWN_IDENTITY_SHAPE = defineObjectShape<SubagentSessionSpawn>()(
['schemaVersion', 'requestFingerprint', 'initialTurnId', 'initialRunId'],
[],
@@ -458,11 +466,20 @@ export function isSubagentSessionParent(value: unknown): value is SubagentSessio
return swarmValid && graphValid && !(value.swarm && value.graph);
}
+function withoutRetiredSubagentRuntimeKeys(
+ value: Record<string, unknown>,
+): Record<string, unknown> {
+ if (!RETIRED_SUBAGENT_RUNTIME_KEYS.some((key) => Object.hasOwn(value, key))) return value;
+ return Object.fromEntries(
+ Object.entries(value).filter(([key]) => !RETIRED_SUBAGENT_RUNTIME_KEYS.includes(key)),
+ );
+}
+
/** Strict decoder guard for the persisted child execution snapshot. */
export function isSubagentSessionRuntime(value: unknown): value is SubagentSessionRuntime {
if (
!isRecord(value) ||
- !hasExactShape(value, SUBAGENT_SESSION_RUNTIME_SHAPE) ||
+ !hasExactShape(withoutRetiredSubagentRuntimeKeys(value), SUBAGENT_SESSION_RUNTIME_SHAPE) ||
value.schemaVersion !== SUBAGENT_SESSION_RUNTIME_SCHEMA_VERSION ||
!Number.isSafeInteger(value.definitionVersion) ||
(value.definitionVersion as number) < 1 ||
@@ -485,7 +502,7 @@ export function isSubagentSessionRuntime(value: unknown): value is SubagentSessi
) {
return false;
}
- return value.permissionCeiling === undefined || isPermissionMode(value.permissionCeiling);
+ return true;
}
/** Strict decoder guard for durable child-spawn idempotency metadata. */
diff --git a/packages/core/src/workspace.ts b/packages/core/src/workspace.ts
deleted file mode 100644
index a7b9f82cf..000000000
--- a/packages/core/src/workspace.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Workspace config types.
- */
-
-import type { PersistedBackendKind } from './session.js';
-import type { PermissionMode } from './permission.js';
-
-export interface WorkspaceConfig {
- id: string;
- name: string;
- /** Absolute path: ~/.maka/workspaces/{id}/ */
- rootPath: string;
- createdAt: number;
- defaults: {
- permissionMode: PermissionMode;
- backend: PersistedBackendKind;
- llmConnectionSlug?: string;
- model?: string;
- };
-}
diff --git a/packages/runtime-host/src/__tests__/execution-composition.test.ts b/packages/runtime-host/src/__tests__/execution-composition.test.ts
index 6e474e8c6..887673912 100644
--- a/packages/runtime-host/src/__tests__/execution-composition.test.ts
+++ b/packages/runtime-host/src/__tests__/execution-composition.test.ts
@@ -981,7 +981,6 @@ async function createClaimedGraphChild(input: {
systemPrompt: LOCAL_READ_AGENT_DEFINITION.systemPrompt,
toolNames: [...LOCAL_READ_AGENT_DEFINITION.tools],
categoryPolicy: {},
- permissionCeiling: 'ask',
},
subagentSpawn: {
schemaVersion: 1,
diff --git a/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts b/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts
index 88289e779..32d75f45c 100644
--- a/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts
+++ b/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts
@@ -498,7 +498,6 @@ export class ExecutionFixture {
systemPrompt: 'Read the assigned workspace task.',
toolNames: ['Read', 'Glob', 'Grep'],
categoryPolicy: { read: 'allow' },
- permissionCeiling: 'ask',
},
subagentSpawn: {
schemaVersion: 1,
diff --git a/packages/runtime/src/__tests__/session-manager.test.ts b/packages/runtime/src/__tests__/session-manager.test.ts
index 38d90174d..0dd5d30f4 100644
--- a/packages/runtime/src/__tests__/session-manager.test.ts
+++ b/packages/runtime/src/__tests__/session-manager.test.ts
@@ -3153,7 +3153,6 @@ describe('SessionManager child-session runtime primitive', () => {
systemPrompt: LOCAL_READ_AGENT_DEFINITION.systemPrompt,
toolNames: [...LOCAL_READ_AGENT_DEFINITION.tools],
categoryPolicy: {},
- permissionCeiling: 'ask',
},
subagentSpawn: {
schemaVersion: 1,
@@ -3476,7 +3475,6 @@ describe('SessionManager child-session runtime primitive', () => {
systemPrompt: LOCAL_READ_AGENT_DEFINITION.systemPrompt,
toolNames: [...LOCAL_READ_AGENT_DEFINITION.tools],
categoryPolicy: {},
- permissionCeiling: 'ask',
},
subagentSpawn: {
schemaVersion: 1,
@@ -3749,7 +3747,6 @@ describe('SessionManager child-session runtime primitive', () => {
systemPrompt: LOCAL_READ_AGENT_DEFINITION.systemPrompt,
toolNames: ['Read', 'Glob', 'Grep'],
categoryPolicy: { read: 'allow' },
- permissionCeiling: 'ask',
},
subagentSpawn: {
schemaVersion: 1,
@@ -18358,7 +18355,6 @@ function createGraphOperatorSession(
systemPrompt: LOCAL_READ_AGENT_DEFINITION.systemPrompt,
toolNames: [...LOCAL_READ_AGENT_DEFINITION.tools],
categoryPolicy: {},
- permissionCeiling: 'ask',
},
}),
);
diff --git a/packages/storage/src/__tests__/sqlite-session-metadata-store.test.ts b/packages/storage/src/__tests__/sqlite-session-metadata-store.test.ts
index d8bccad8b..6b1d013f9 100644
--- a/packages/storage/src/__tests__/sqlite-session-metadata-store.test.ts
+++ b/packages/storage/src/__tests__/sqlite-session-metadata-store.test.ts
@@ -1855,7 +1855,6 @@ describe('SqliteSessionMetadataStore', () => {
systemPrompt: 'Read the assigned workspace task.',
toolNames: ['Read', 'Glob', 'Grep'],
categoryPolicy: { read: 'allow' as const },
- permissionCeiling: 'ask' as const,
};
const subagentSpawn = {
schemaVersion: 1 as const,
@@ -1954,7 +1953,6 @@ describe('SqliteSessionMetadataStore', () => {
systemPrompt: 'Original durable prompt.',
toolNames: ['Read'],
categoryPolicy: { read: 'allow' as const },
- permissionCeiling: 'ask' as const,
};
const childHeader = (overrides: Partial<SessionHeader>): SessionHeader =>
fullHeader({
@@ -3067,7 +3065,6 @@ function graphChildHeader(overrides: Partial<SessionHeader> = {}): SessionHeader
systemPrompt: 'Read only.',
toolNames: ['Read'],
categoryPolicy: { read: 'allow' },
- permissionCeiling: 'ask',
},
subagentSpawn: {
schemaVersion: 1,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@maka.apache.org
For additional commands, e-mail: commits-help@maka.apache.org