Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
13e0580
feat(completeness): module + NoGoal/ClosedNoOutcome rules
Shahinyanm Jun 11, 2026
7ba6f9f
feat(completeness): decision-no-evidence + suggested-unconfirmed rules
Shahinyanm Jun 11, 2026
144eab5
feat(completeness): pending-leak rule
Shahinyanm Jun 11, 2026
20334cb
feat(completeness): best-effort pending_count fs helper
Shahinyanm Jun 11, 2026
418705a
feat(completeness): render section + pack integration
Shahinyanm Jun 11, 2026
f0162a3
chore(completeness): version bump + CHANGELOG
Shahinyanm Jun 11, 2026
e85bb1c
feat(dream): add Source::Dream event provenance
Shahinyanm Jun 11, 2026
3fe8bd6
feat(dream): backend trait, backfill IO types, mock backend
Shahinyanm Jun 11, 2026
2fd339d
feat(dream): Pass A prompt builder
Shahinyanm Jun 11, 2026
0fb636e
feat(dream): Anthropic HTTP backend for Pass A
Shahinyanm Jun 11, 2026
ea40310
feat(dream): dream_state watermark migration + accessors
Shahinyanm Jun 11, 2026
1f8843e
feat(dream): session scope resolution (since + limit)
Shahinyanm Jun 11, 2026
3428ad8
feat(dream): dedup-guard via token Jaccard similarity
Shahinyanm Jun 11, 2026
037ac62
feat(dream): stamp dream provenance on backfilled events
Shahinyanm Jun 11, 2026
3b9b592
feat(dream): run_dream orchestration with dry-run + indexing
Shahinyanm Jun 11, 2026
c55ffec
feat(dream): CLI dream subcommand with --dry-run/--since/--task/--limit
Shahinyanm Jun 11, 2026
b391382
feat(dream): tested session→task mapping + transcript flattening
Shahinyanm Jun 11, 2026
a1932e7
docs(dream): add dream backfill entry under 0.12.0 CHANGELOG
Shahinyanm Jun 11, 2026
a02f7c4
feat(hierarchy): add tasks.parent_id column + index
Shahinyanm Jun 11, 2026
0c8c88a
feat(hierarchy): persist parent_id from open event meta
Shahinyanm Jun 11, 2026
9fbf1ed
feat(hierarchy): children_of + parent_of queries
Shahinyanm Jun 11, 2026
78652a5
feat(hierarchy): would_create_cycle guard
Shahinyanm Jun 11, 2026
09e521b
feat(hierarchy): cascade pack-cache invalidation to parent
Shahinyanm Jun 11, 2026
2b842a4
feat(hierarchy): roll up direct children in parent pack
Shahinyanm Jun 11, 2026
a71646a
feat(hierarchy): CLI create --parent with validation
Shahinyanm Jun 11, 2026
4e675da
feat(hierarchy): MCP task_create parent param
Shahinyanm Jun 11, 2026
4463fb4
feat(hierarchy): warn on closing a task with open subtasks
Shahinyanm Jun 11, 2026
ff275ea
feat(hierarchy): CLI list --tree
Shahinyanm Jun 11, 2026
2693de2
chore(hierarchy): CHANGELOG entry for subtask hierarchy
Shahinyanm Jun 11, 2026
6854bf9
feat(close-gate): CLI close prints completeness gaps (non-blocking)
Shahinyanm Jun 11, 2026
221bacd
feat(close-gate): MCP task_close returns completeness_gaps
Shahinyanm Jun 11, 2026
70cf92a
chore(close-gate): CHANGELOG entry
Shahinyanm Jun 11, 2026
055bf9f
feat(recall): pure relevant_recall engine for proactive recall
Shahinyanm Jun 11, 2026
85bf17e
feat(recall): PostToolUse hook surfaces prior rejections via addition…
Shahinyanm Jun 11, 2026
7648fe6
chore(recall): CHANGELOG entry for push-recall
Shahinyanm Jun 11, 2026
7908f08
feat(push-recall): MCP PostToolUse prepends recall banner via updated…
Shahinyanm Jun 11, 2026
b63161c
docs(push-recall): CHANGELOG entry for updatedMCPToolOutput recall
Shahinyanm Jun 11, 2026
f6084de
feat(core): migration v7 + project decision alternatives column
Shahinyanm Jun 11, 2026
1936673
feat(pack): render structured decision alternatives
Shahinyanm Jun 11, 2026
d51fe7a
feat(mcp): event_add alternatives param (decision-only)
Shahinyanm Jun 11, 2026
6417112
docs(changelog): structured decision alternatives under 0.12.0
Shahinyanm Jun 11, 2026
36c9988
feat(constraint-context): add TaskContext.constraints field (additive)
Shahinyanm Jun 11, 2026
80b8544
feat(constraint-context): render Known constraints block in classifie…
Shahinyanm Jun 11, 2026
b5b3ffe
feat(constraint-context): gather task constraints into recent_task_co…
Shahinyanm Jun 11, 2026
acf6ac8
chore(constraint-context): CHANGELOG entry under 0.12.0
Shahinyanm Jun 11, 2026
0f79d6e
feat(reminder): pure active_task_reminder builder in tj-core
Shahinyanm Jun 11, 2026
7f5cca3
feat(reminder): SessionStart source=compact re-injects active task
Shahinyanm Jun 11, 2026
f90b359
docs(reminder): CHANGELOG entry under 0.12.0
Shahinyanm Jun 11, 2026
e05eb7b
feat(memory-export): pure frontmatter::render_memory renderer
Shahinyanm Jun 11, 2026
c184eb6
feat(memory-export): export-memory CLI writes Claude-memory frontmatt…
Shahinyanm Jun 11, 2026
8f9b50d
docs(memory-export): CHANGELOG entry for export-memory under 0.12.0
Shahinyanm Jun 11, 2026
1f64017
chore: gitignore .docs/ (local specs + plans)
Shahinyanm Jun 11, 2026
17a0e19
style: cargo fmt --all across new feature code
Shahinyanm Jun 11, 2026
cc0ff89
fix(ci): cargo fmt --all + serialize XDG-mutating MCP test
Shahinyanm Jun 11, 2026
0056c9e
fix(ci): clear clippy warnings (-D warnings)
Shahinyanm Jun 11, 2026
ec28ad7
Merge remote-tracking branch 'origin/main' into worktree-dream-backfill
Shahinyanm Jun 11, 2026
2956a80
fix(ci): cross-platform export-memory test + restore MSRV toolchain pin
Shahinyanm Jun 11, 2026
e74dd25
fix(ci): escape <id> in rustdoc comments (invalid-html-tags -D warnings)
Shahinyanm Jun 11, 2026
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
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ jobs:
- uses: actions/checkout@v4

- name: Install Rust 1.88
uses: dtolnay/rust-toolchain@1.100
# The action tag IS the toolchain version installed; @1.88 pins MSRV.
# (Dependabot bumped this to @1.100 in #17, which tries to install a
# non-existent rust 1.100.0 — revert to the real MSRV.)
uses: dtolnay/rust-toolchain@1.88

- name: Cache cargo
uses: Swatinem/rust-cache@v2
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@
# Token Pilot local cache
.token-pilot/
.token-pilot-fingerprint.json

# Local design specs & plans (not versioned)
.docs/
66 changes: 66 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,72 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.12.0]

### Added
- `export-memory` command: distills a task's goal, outcome, and key
decisions/constraints into a Claude-memory frontmatter file under
`~/.claude/projects/<encoded>/memory/tj-<id>-<slug>.md`, feeding Claude's
native long-term memory + dream. Scope: `--task <id>`, `--all-closed`
(default = all closed tasks); `--dry-run` prints without writing.
One-directional and idempotent; never reads Claude's memory or mutates the
append-only JSONL.
- Active-task reminder after compaction: when Claude Code reconstructs context
via a SessionStart with `source="compact"`, the journal now prepends the
most-recent open task's title + goal + up to 3 in-force `constraint` texts to
`additionalContext` — so the post-compaction agent doesn't lose what it was
doing or its hard constraints. Pure, read-only, best-effort (never breaks the
hook). New `tj_core::reminder::active_task_reminder`. Copies the mechanic of
the experimental `criticalSystemReminder` without depending on that unstable
field.
- Constraint-as-context: the event classifier now sees each active task's most
recent `constraint` events (≤ 5) in its prompt, under a "Known constraints for
<task>" block, with an instruction to prefer `rejection`/`correction` when a
chunk violates a constraint. Additive — tasks without constraints get the exact
prior prompt.
- Push-recall: after a tool call, the PostToolUse hook surfaces a relevant prior
`rejection`/`decision` via `additionalContext` ("⚠ recall: in task X you
previously rejected …"), so the agent doesn't re-walk a ruled-out path.
Conservative (≤2 hits above a relevance threshold), read-only, best-effort
(errors never break the hook). New `tj_core::recall::relevant_recall` engine.
Disable with `TJ_PUSH_RECALL=0`.
- Push-recall via `updatedMCPToolOutput`: when Claude calls an **MCP** tool whose
input echoes a prior rejection/decision (same `recall::relevant_recall` engine),
the PostToolUse hook prepends a `⚠` recall banner to what Claude sees of that
tool's output. MCP tools only — complements the `additionalContext` path above,
which skips `mcp__` tools, so a recall is never double-surfaced. The real output
is preserved below the banner; any miss or error passes it through unchanged.
Read-only, best-effort; also gated by `TJ_PUSH_RECALL=0`.
- Close gate: closing a task now surfaces its completeness gaps (from
`completeness::assess`) — CLI prints them to stderr, MCP `task_close` returns
them in a new `completeness_gaps` field. Non-blocking: the close always
succeeds.
- Capture-completeness flagging: a task's resume-pack now shows a `Completeness`
section listing structural gaps (closed without outcome, decisions without
evidence, unconfirmed suggested events, missing goal, unclassified pending
entries) — shown only when gaps exist. Read-only; reusable
`completeness::assess` API for the upcoming close-gate.
- `task-journal dream` — offline memory backfill (Pass A). Re-reads session
transcripts and appends significant typed events the realtime classifier
missed, stamped `source=dream`, `status=suggested` (visible, prunable).
Manual trigger; `--dry-run`, `--since`, `--task`, `--limit`. Reuses the
Anthropic HTTP backend via `TJ_DREAM_MODEL` / `TJ_DREAM_MAX_TOKENS`.
Additive — the JSONL source of truth is never mutated.
- Subtask hierarchy: tasks can have a `parent_id`. Set at creation via
`task-journal create --parent <id>` or the MCP `task_create` `parent` param
(validated: parent must exist, no cycles). A parent's resume-pack rolls up its
direct children (status, id, title). `list --tree` renders the hierarchy.
Closing a parent with open children warns but proceeds. Additive — existing
flat tasks are unaffected (`parent_id` NULL).
- Structured decision alternatives: a `decision` event can now carry
`meta.alternatives` — a JSON array of `{option, chosen, rationale}` making the
options considered and the final choice explicit instead of implicit in the
hypothesis+rejection chain. Set via the MCP `event_add` `alternatives` param
(decision-only — rejected with an error on any other event type). Projected to
a new `decisions.alternatives` column (migration v7) and rendered under each
entry in the resume-pack's Active decisions section. MCP-only for v1; additive
— the JSONL source of truth is untouched and existing decisions stay NULL.

## [0.11.1] - 2026-06-08

**Fix: `pack` panicked on multibyte UTF-8.** Pack truncation sliced the
Expand Down
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ members = [
]

[workspace.package]
version = "0.11.1"
version = "0.12.0"
edition = "2021"
rust-version = "1.88"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion crates/tj-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ name = "task-journal"
path = "src/main.rs"

[dependencies]
tj-core = { package = "task-journal-core", version = "0.11.1", path = "../tj-core" }
tj-core = { package = "task-journal-core", version = "0.12.0", path = "../tj-core" }
anyhow = { workspace = true }
clap = { workspace = true }
tracing = { workspace = true }
Expand Down
Loading
Loading