Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,19 @@ for tagged releases.

## [Unreleased]

No unreleased changes.
### Changed

- DTM task guidance treats normal sharing, sending, handover, and publication as part of completing work unless a separate follow-up is requested.

## [2026-09-29]

### Added

- Provider-neutral `no-llm`, `routine`, `balanced`, and `strong` task profiles, plus versioned task and completion envelopes with dependency-free packet validation. The contracts retain the existing DTM hand-off and Daily Note authority boundary without selecting models or dispatching workers.

### Changed

- Daily Note guidance now classifies tasks by whether they are work for the user's employer, while treating extracurricular work as personal and using contextual judgement for ambiguous cases.

## [2026-09-21]

Expand Down
10 changes: 10 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ Run `python3 tools/contracts.py lint` after changing the inventory. The
validator is deliberately dependency-free so it can run in ordinary Python
environments and in framework CI.

`contracts/task-profiles.json` defines the provider-neutral `no-llm`,
`routine`, `balanced`, and `strong` capability profiles. A task packet declares
the task class, context and risk level, allowed paths, write authority, tools,
validation, acceptance checks, and escalation conditions. Its completion packet
records outcomes, artefacts, verification, uncertainty, blockers, follow-up,
and Daily Note implications. `tools/task_envelopes.py` validates both contracts
and individual packets. These contracts do not select a model or dispatch work;
harness adapters retain that responsibility, and non-DTM hand-offs retain the
existing Daily Note boundary.

## Role boundary

The Knowledge Agent owns systematic source ingestion and wiki maintenance. An
Expand Down
5 changes: 5 additions & 0 deletions docs/operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ captures decisions, and maintains project continuity. Durable knowledge can
graduate to the wiki while remaining clearly distinguished from externally
sourced evidence.

Completing work includes its normal delivery: sharing, sending, handing over,
or publishing an output does not need a separate follow-up task unless the user
asks for one. When a hand-off confirms delivery is complete, do not create or
carry a delivery task; correct any stale Daily Note entry.

Specialised work can run in separate non-DTM threads. Those threads must not
edit Daily Notes directly; they use `dtm-handoff` to send completed outcomes,
new tasks, blockers, decisions, findings, and follow-up context to the active
Expand Down
9 changes: 7 additions & 2 deletions framework/DTM.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,10 +278,16 @@ references according to the normal Daily Note rules.
## Tasks

- Put personal and professional tasks in their respective Daily Note sections.
- Classify Daily Note tasks by whether they are Codi work: **professional** means work for Codi, and **personal** means work outside the day job. Extracurricular work can look professional but remains personal when it is outside Codi duties; an internal Codi adaptation and the Housing Technology presentation are professional, while the separate 45-minute Practical Delegation Test talk is personal. Use context and best judgement for work that blurs the boundary, and accept the user's correction.
- Use Obsidian task syntax: `- [ ] Action` and `- [x] Completed action`.
- Treat the Daily Note `Focus` section as the morning commitment for the day, not a live next-action list. After the day has started, do not rewrite `Focus` to reflect progress, newly discovered details, or the next task unless the user explicitly asks to correct the focus wording itself. Track completion and changing operational state in to-do items, `Notes & Activity`, and linked project or working notes.
- Make tasks concrete and outcome-oriented. Link the relevant project when one
exists.
- Treat normal delivery of an output as part of completing its task: sharing,
sending, handing over, or publishing the result does not need a separate
follow-up task unless the user explicitly asks to track that action. When a
completed-work hand-off confirms that delivery has already happened, do not
create or carry a delivery task; correct any stale Daily Note entry instead.
- In the current Daily Note, preserve visible completion by checking completed
items off instead of removing them. Do not silently delete completed tasks
from today's note unless the user explicitly asks for cleanup or removal.
Expand Down Expand Up @@ -333,8 +339,7 @@ entry.

## References and questions

- `References` contains only documents created or updated by the DTM that day.
Do not list Knowledge-Agent-only changes.
- `References` contains documents created or updated by the DTM that day, including documents created in delegated work threads and handed off to the DTM. Do not list Knowledge-Agent-only changes.
- Add a reference once, with a short description of the change.
- `Open Questions` contains active uncertainties as plain bullets. Carry them
forward until resolved. When answered, remove the question from the current
Expand Down
25 changes: 24 additions & 1 deletion framework/contracts/behaviour-inventory.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 1,
"updated": "2026-09-21",
"updated": "2026-09-29",
"description": "Machine-readable inventory of SecondBrain behaviours that should be tracked as explicit contracts, deterministic checks, fixtures, or harness-specific adapters.",
"behaviours": [
{
Expand Down Expand Up @@ -343,6 +343,29 @@
}
]
},
{
"id": "task-profiles-and-completion-envelopes",
"title": "Provider-neutral task profiles and completion envelopes",
"owner": "shared",
"workspaces": ["contracts", "tools", "skills"],
"summary": "Classify bounded work by provider-neutral capability profile and require an explicit task packet and completion packet before any future routing or automated dispatch.",
"current_specification": ["contracts/task-profiles.json", "contracts/task-envelope-contract.json", "skills/dtm-handoff/SKILL.md"],
"current_enforcement": ["tools/task_envelopes.py lint", "tools/task_envelopes.py validate-task", "tools/task_envelopes.py validate-completion", "Unit tests"],
"severity": "high",
"portability_class": "portable-domain",
"prompt_debt_signals": ["model-name-coupling", "implicit-handoff", "routing-judgement"],
"candidate_tests": [
{
"id": "task-envelope-authority-validation",
"title": "Task packets enforce declared profile and path authority",
"type": "deterministic-unit",
"priority": "near-term",
"description": "Validate a bounded routine task and reject a non-DTM packet that declares Daily Note paths.",
"deterministic_checks": ["Declared capability profile exists", "Path is vault-relative", "daily/** requires dtm-session-only authority", "Completion packet carries DTM hand-off fields"],
"semantic_checks": ["The router selects a profile only after the later dry-run routing experiment"]
}
]
},
{
"id": "harness-adapters",
"title": "Harness adapter assumptions",
Expand Down
25 changes: 25 additions & 0 deletions framework/contracts/task-envelope-contract.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"version": 1,
"updated": "2026-09-29",
"description": "Versioned provider-neutral task and completion envelope contract. It defines bounded work and return information; it does not dispatch workers, select models, or grant filesystem authority.",
"task_packet": {
"required_fields": ["version", "task_id", "objective", "task_class", "capability_profile", "context_volume", "risk", "allowed_paths", "write_authority", "required_tools", "validation", "acceptance_criteria", "escalate_when", "return_schema"],
"context_volume_values": ["none", "small", "bounded", "large"],
"risk_values": ["low", "moderate", "high", "consequential"],
"write_authority_values": ["none", "declared-paths", "dtm-session-only"],
"return_schema_values": ["completion-packet-v1"],
"path_rules": ["Paths are vault-relative, non-empty, and may not contain '..'.", "daily/** requires write_authority 'dtm-session-only'.", "A task with write_authority 'none' must not declare writable paths."],
"manual_transport": "A non-DTM worker uses the DTM Hand-Off skill to transport a completion packet to the active DTM thread; the packet does not authorise a Daily Note write."
},
"completion_packet": {
"required_fields": ["version", "task_id", "status", "outcomes", "artifacts", "verification", "uncertainty", "blockers", "follow_up", "daily_note_implications"],
"status_values": ["completed", "partial", "blocked", "failed"],
"dtm_handoff_projection": {
"outcomes": "Outcomes",
"daily_note_implications": "Daily Note implications for you to assess",
"verification": "Verification",
"blockers": "Open points"
},
"manual_transport": "When hand-off is required, send one concise DTM Hand-Off containing these fields and preserve the originating-thread checkpoint after delivery."
}
}
43 changes: 43 additions & 0 deletions framework/contracts/task-profiles.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"version": 1,
"updated": "2026-09-29",
"description": "Provider-neutral capability profiles for SecondBrain task routing. Profile names describe the capability needed; harness adapters may map them to current models and reasoning settings.",
"profiles": [
{
"id": "no-llm",
"title": "No language model",
"description": "A deterministic command, transformation, or inspection can complete the request without semantic judgement.",
"semantic_judgement": "none",
"context_volume": "none",
"risk_ceiling": "low",
"escalate_when": ["The request needs interpretation, synthesis, or ambiguous policy judgement."]
},
{
"id": "routine",
"title": "Routine",
"description": "A bounded, low-ambiguity task with clear inputs, outputs, authority, and inexpensive validation.",
"semantic_judgement": "limited",
"context_volume": "small",
"risk_ceiling": "moderate",
"escalate_when": ["Required context is unavailable or exceeds the packet.", "The task reveals material ambiguity, consequential risk, or a missing acceptance check."]
},
{
"id": "balanced",
"title": "Balanced",
"description": "Bounded implementation, analysis, or synthesis that needs considered judgement but has explicit ownership and acceptance checks.",
"semantic_judgement": "moderate",
"context_volume": "bounded",
"risk_ceiling": "high",
"escalate_when": ["The work becomes cross-domain, materially ambiguous, or consequential beyond the declared acceptance checks.", "A required validator, authority, or source is missing."]
},
{
"id": "strong",
"title": "Strong",
"description": "Difficult synthesis, consequential ambiguity, or high-value judgement where lower profiles would create avoidable correction or escalation risk.",
"semantic_judgement": "high",
"context_volume": "large",
"risk_ceiling": "consequential",
"escalate_when": ["The user must make a decision outside the packet's delegated authority.", "Evidence is insufficient for a consequential recommendation."]
}
]
}
2 changes: 1 addition & 1 deletion framework/defaults/dtm/recurring-tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"id": "monday-review-wiki-blog-post",
"task": "Review the generated weekly wiki blog draft",
"area": "personal",
"enabled": true,
"enabled": false,
"schedule": {
"frequency": "weekly",
"weekdays": ["Monday"]
Expand Down
1 change: 1 addition & 0 deletions framework/publication-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
{"source": "tools/dtm.py", "destination": "framework/tools/dtm.py"},
{"source": "tools/workspaces.py", "destination": "framework/tools/workspaces.py"},
{"source": "tools/contracts.py", "destination": "framework/tools/contracts.py"},
{"source": "tools/task_envelopes.py", "destination": "framework/tools/task_envelopes.py"},
{"source": "tools/behavioural_fixtures.py", "destination": "framework/tools/behavioural_fixtures.py"},
{"source": "tools/documents.py", "destination": "framework/tools/documents.py"},
{"source": "tools/document_deliverables.py", "destination": "framework/tools/document_deliverables.py"},
Expand Down
Loading
Loading