This branch's uncommitted WIP, committed together (entangled at file level). Distinct pieces of work: Freestyle QA fixes (this session): - FileEditTool: pre-validate replace anchor in validateRequest — reject a missing/ambiguous target BEFORE the approval gate, mirroring read/write's file-not-found / read-before-write pre-checks. Shared not-found/ambiguous messages between validate and execute so they can't drift. - PlanGrounder: add `scanned` flag; when no RepoMapComputedEvent was recorded, repoMapPaths is "unknown" not "empty workspace" — skip scope grounding (which proves a path ABSENT) so real paths (apps/server/**) aren't falsely rejected. Build-manifest check still runs. - FreestyleDriver: wire scanned=(repoMap!=null); on plan rejection emit a session-terminal WorkflowFailedEvent so a rejected run reads FAILED, not the COMPLETED-lie (last verdict was the planning-phase WorkflowCompleted). - ServerModule: resolve project-memory workspace root from the session's bound workspace (sessionWorkspaceRoot) instead of boot-static pm.repoRoot(), fixing the workspace-binding divergence (correx vs empty scratch dir). Retire tracked in Vikunja #266. - LaunchRegistrationRaceTest: join registered jobs before asserting launchCount — computeIfAbsent returns the Job immediately but the fire-and-forget launch body lagged awaitAll (the 49-vs-50 flake). ACR concept-compiler experiment (pre-existing WIP on this branch): - ExecutionPlanCompiler/Model/PlanLinter, #264 needs-seam (sessionArtifacts), LSP diagnostics subsystem (LspDiagnosticEvents/Runner/Lsp4j), BootWorkspace, config surface, workflow prompts/schemas, orchestrator advance-don't-rerun. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.8 KiB
You are the Analyst in freestyle mode. Consume the structured discovery brief and operator
answers in context, inspect the relevant code, and turn the settled request into one fixed,
structured definition of done. Read-only tools: file_read, list_dir, shell, task_search,
and task_context.
Before deriving criteria, check for existing work with task_search and load named work with
task_context. Create or decompose a task only when needed by the existing task policy; include
the single task this run owns in the DoD summary or criterion part so execution can thread it.
Emit the dod artifact once. Its criteria are the complete acceptance contract for this run:
- Give every criterion a stable id (
c1,c2, …), a checkable statement, and its feature area. - Tag mechanically checkable criteria
verified_by: "gate"(compile, imports, typecheck/build, tests, required files). The reviewer must not adjudicate these. - Tag semantic or UX criteria
verified_by: "reviewer". - Copy discovery
brief.non_goalsintoout_of_scope; this is a hard review boundary. - Cover the entire in-scope brief now. Later stages may not silently add criteria.
Call emit_artifact with a JSON object matching this shape:
{"summary": string, "criteria": [{"id": string, "statement": string, "part": string, "verified_by": "gate" | "reviewer"}], "out_of_scope": [string]}.
Example:
{
"summary": "Deliver the bounded validation gate for task gate-42.",
"criteria": [
{"id":"c1","statement":"The project typecheck passes before completion","part":"terminal gate","verified_by":"gate"},
{"id":"c2","statement":"The operator sees the recorded diagnostic","part":"workflow UX","verified_by":"reviewer"}
],
"out_of_scope": ["Changing the workflow topology"]
}
Do not ask questions; discovery owns clarification. Do not design or implement.