Task 1
Submit a source
Create SourceContent with its origin and retention context before deriving any DecisionCandidates.
Permission boundary
sources.submit.workspaceSteps
- 1Choose the target Organization and Workspace before submission.
- 2Record origin metadata that lets a reviewer identify where the content came from.
- 3Retain only content permitted by the Organization's source and retention policy.
Supported surfaces
GraphQL mutation: submitSource
pnpm decision-log sources submit
MCP tool: decision_log.submit_sourceSource submission is audited. Later reads remain subject to source permissions and retention.
Task 2
Review a source
Inspect retained evidence without bypassing Organization, Workspace, or retention boundaries.
Permission boundary
sources.read.workspaceSteps
- 1List sources using bounded excerpts to find the relevant evidence.
- 2Retrieve one source only when its detail is needed for candidate or Decision review.
- 3Treat null retained-content fields as authoritative redaction; never infer hidden content.
Supported surfaces
GraphQL queries: sources, source
pnpm decision-log sources list
pnpm decision-log sources get {sourceId}
MCP tool: decision_log.list_sources
MCP tool: decision_log.get_sourceGraphQL, the repository-local CLI, and MCP share one retention-safe projection. Redacted or purged content is not serialized.
Task 3
Run extraction
Request extraction for an existing source and track the run without silently activating proposed Decisions.
Permission boundary
extractions.manage.workspaceSteps
- 1Confirm the source is readable and retained.
- 2Start an ExtractionRun for the source.
- 3Observe completion or failure, then inspect the resulting DecisionCandidates.
Supported surfaces
GraphQL mutation: extractSource
pnpm decision-log sources extract {sourceId}Provider-backed extraction has its own readiness gate. A request must not imply that a provider completed successfully.
Task 4
Review candidates
Approve, reject, or convert proposed meaning only after checking provenance, confidence, and current Decision context.
Permission boundary
Read: candidates.read.workspace. Approve: candidates.approve.workspace + decisions.create.workspace. Reject: candidates.reject.workspace. Convert: candidates.read.workspace + decisions.supersede.workspace.Steps
- 1Review the candidate's source, proposed Decision text, rationale, and confidence.
- 2Check whether a current Decision with the same stable key already exists.
- 3Choose one terminal action: approve a new immutable Decision, reject the candidate, or convert it into an explicit supersession.
- 4Re-read the candidate after resolving it, then use Organization audit history to confirm the recorded mutation.
Read and resolution entry points
GraphQL queries: candidates, candidate
GraphQL mutations: approveCandidate, rejectCandidate, candidateToSupersession
pnpm decision-log candidates list
pnpm decision-log candidates get {candidateId}
pnpm decision-log candidates approve {candidateId}
pnpm decision-log candidates reject {candidateId} --reason "..."
pnpm decision-log candidates convert-to-supersession {candidateId} --replaces {decisionId} --reason "..."
MCP tool: decision_log.list_candidates
MCP tool: decision_log.get_candidate
MCP tool: decision_log.resolve_candidate {candidateId, resolution: approve|reject}
MCP tool: decision_log.convert_candidate_to_supersession {candidateId, replacesDecisionId, reason?}
MCP app: decision_log.render_candidate_reviewThese writes are terminal and audited: inspect the candidate and retrieve the current Decision before acting, then do not retry after an ambiguous result until both records are re-read. MCP resolution and candidate-to-supersession conversion are destructive and non-idempotent.
