9.7 KiB
spec, created, status
| spec | created | status |
|---|---|---|
| docs/specs/tasks/requirements/mcp-task-agent-profile-default.md | 2026-08-12 | complete |
Implementation Plan: Creator-Session Task Inheritance
Overview
Replace task-origin profile inheritance with verified creator-session
inheritance for session-bound create_task_kandev calls. First add a typed
initial-session runtime seed. Then carry trusted session identity through the MCP
transport and apply the seed during profile resolution. Update the visible
setting, tool contract, public docs, and existing desktop/mobile E2E coverage.
Backend
Initial-session runtime seed
- Add a task metadata key in
apps/backend/internal/task/models/models.gofor the initial session runtime configuration. - Add a model helper that resolves one effective
SessionRuntimeConfigfrom a task session. Start withAgentProfileSnapshot, then applyruntime_config,session_mode, andruntime_config_overridesin precedence order. Clone option maps so source and target metadata never alias. - In
apps/backend/internal/orchestrator/executor/executor_execute.go, map the task launch seed toSessionMetaKeyRuntimeConfigOverridesonly whenPrepareSessioncreates the task's initial session. Remove the launch-only key from the session metadata copy. - Cover profile-only state, live runtime updates, explicit overrides, option replacement, and initial-versus-later session preparation.
Trusted creator context
- In
apps/backend/internal/mcp/server/handlers.go, add the server's ownsessionIDto the create-task backend payload assource_session_id. Keep it absent in external mode. - In
apps/backend/internal/mcp/handlers/handlers.go, parse the internal field and load it throughtaskSvc.GetTaskSession. Require the session'sTaskIDto equalsource_task_idbefore using any profile or runtime data. - Refactor
resolveMCPAutoStartConfigWithErrorto return profile, executor, and optional initial runtime seed. Incurrent_taskmode, a verified creator session wins over parent/source task profile metadata for both top-level tasks and subtasks. - Preserve the existing executor chain. A subtask still inherits executor state from its parent. A top-level task still inherits it from its source task.
- Persist the runtime seed beside the resolved task launch profile before
CreateTask, including whenstart_agent=false. - Suppress the seed when
agent_profile_idis explicit, when a workflow launch profile wins, or when the user selectedworkspace_default. - Fail before task persistence when supplied session context cannot be verified. Calls with no session context retain the current parent/source compatibility fallback.
MCP contract text
- Update
apps/backend/internal/mcp/server/server.goso task-mode descriptions name the creating session and its effective configuration. - Keep external-mode descriptions explicit that there is no creating session
and that
current_taskfalls back to the parent task. - Add focused schema/description and forwarded-payload tests in
apps/backend/internal/mcp/server/handlers_test.goandserver_test.go.
Frontend
Task Actions setting
- Change the visible
current_tasklabel to Creating session profile inapps/web/src/locales/en/settings.jsonand every locale catalog. - Rewrite the setting description and option help in
apps/web/components/settings/mcp-task-agent-profile-default-settings.tsx. State the affected tool, effective model/options behavior, precedence, cost risk, external fallback, and exclusions without relying on hover help. - Update the component test to prove that the saved enum remains
current_taskand that the new explanation is visible.
Mobile uses the existing Task Behavior page and radio-card layout. The nearest
mobile exemplar is the shipped settings card in
mobile-mcp-task-agent-profile-default.spec.ts. The page remains the single
scroll owner. Radio rows retain 44px touch targets, and all explanatory text
wraps inside the card without horizontal overflow.
Public documentation
- Update the explanation section in
docs/public/tasks-and-workflows.md. This page remains an explanation page with a short configuration procedure. - Explain that
current_taskfollows the creating session for live task-mode calls, including model and reasoning changes. Document the external fallback and the cases that prevent runtime inheritance.
Tests
- What: effective creator configuration merges profile snapshot, provider
state, session mode, and explicit overrides.
File:
apps/backend/internal/task/models/session_runtime_config_test.go. How: table-driven unit tests with cloned-map assertions. - What: only the initial task session receives the persisted runtime seed.
File:
apps/backend/internal/orchestrator/executor/executor_test.go. How: prepare two sessions and inspect their persisted metadata. - What: the MCP server forwards its bound session identity and external mode
does not invent one.
File:
apps/backend/internal/mcp/server/handlers_test.go. How: focused handler payload tests. - What: a verified non-primary session wins task profile resolution for a
subtask and a top-level task, while executor inheritance remains unchanged.
File:
apps/backend/internal/mcp/handlers/create_task_creator_session_test.go. How: service-backed handler tests with two source-task sessions. - What: explicit, workflow, and workspace-default profiles suppress copied
runtime values. Mismatched session identity fails before persistence.
File:
apps/backend/internal/mcp/handlers/create_task_creator_session_test.go. How: table-driven handler and resolver tests. - What: the renamed setting retains the
current_taskwire value and shows the precedence contract. File:apps/web/components/settings/mcp-task-agent-profile-default-settings.test.tsx. How: rendered component assertions and save-payload assertion.
E2E Tests
- Scenario: a second session uses another profile and changes model/options,
then creates a subtask and a top-level task.
File:
apps/web/e2e/tests/task/subtask.spec.ts. What to verify: both created initial sessions use the creator profile and effective runtime values. The subtask keeps the parent executor profile. - Scenario: workspace-default policy prevents creator-session inheritance.
File:
apps/web/e2e/tests/task/mcp-task-agent-profile-default.spec.ts. What to verify: the created session uses the target workspace profile and does not contain the creator runtime seed. - Scenario: the revised setting is touch-readable and viewport-safe.
File:
apps/web/e2e/tests/task/mobile-mcp-task-agent-profile-default.spec.ts. What to verify: the new label and explanation are visible, the option persists, each choice remains touch-usable, and no horizontal overflow occurs.
Verification Results
All implementation waves are complete. The focused backend, frontend, i18n, documentation, and managed E2E checks pass:
rtk go test ./internal/mcp/server ./internal/mcp/handlers ./internal/task/models ./internal/task/service ./internal/orchestrator/executor -count=1 PASS
rtk go test ./internal/task/repository/sqlite -run TestCreateTaskSessionWithInitialRuntimeSeedConsumesOnceAcrossConcurrentAndReplacementSessions -count=1 PASS
GOCACHE=/tmp/kandev-go-build GOLANGCI_LINT_CACHE=/tmp/kandev-golangci-lint make lint PASS
pnpm --filter @kandev/web test -- components/settings/mcp-task-agent-profile-default-settings.test.tsx PASS (4 tests)
pnpm --filter @kandev/web typecheck PASS
pnpm --filter @kandev/web i18n:check PASS (existing locale parity/orphan advisories only)
node --test scripts/validate-public-docs.test.mjs PASS (60 tests)
node scripts/validate-public-docs.mjs PASS (41 public pages)
pnpm e2e:run --no-build tests/task/subtask.spec.ts PASS (15 tests)
pnpm e2e:run --no-build tests/task/mcp-task-agent-profile-default.spec.ts PASS (1 test)
pnpm e2e:run --no-build --project mobile-chrome tests/task/mobile-mcp-task-agent-profile-default.spec.ts PASS (1 test)
The PR capture run also passed and produced validated, compressed desktop and
mobile settings screenshots in the ignored .pr-assets directory.
Review follow-up added the repository-level persistence guarantee for the
launch-only seed. Session creation now reads and removes the seed in the same
transaction as the first-session insert, and the SQLite regression covers
concurrent launches plus deletion and replacement of the seed-bearing session.
The MCP server also omits source_session_id unless its bound task context is
present.
Implementation Waves And Parallel Candidates
The default is sequential execution in the primary conversation. These waves do not authorize subagents.
Wave 1:
Wave 2:
Wave 3:
Wave 4:
Risks
- Task metadata is copied into every prepared session today. The executor must translate the launch-only seed only for the initial session and must not leak the task-only key into session metadata.
- Runtime options are provider-specific. Copy them only with the verified creator profile. Never mix them into another resolved profile.
- Workflow profile precedence is subtle. Tests must cover a pinned step, an unpinned step with a workflow default, and a stepless workflow.
source_session_idis trusted attribution. It must stay server-injected and must be checked againstsource_task_idbefore use.