Skip to content

Replace compaction prompt with structured template - #16

Merged
yogthos merged 1 commit into
mainfrom
feature/structured-compaction
May 19, 2026
Merged

Replace compaction prompt with structured template#16
yogthos merged 1 commit into
mainfrom
feature/structured-compaction

Conversation

@yogthos

@yogthos yogthos commented May 19, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Rewrites COMPACTION_PROMPT to emit a fixed structure: Goal / Progress / Key Decisions / Next Steps / Relevant Files / Critical Context. Iteration-friendly (previous summary + instructions template variables preserved).
  • Unit tests assert required sections and template variables are present.

Stacked on #15.

Test plan

  • cargo build
  • Prompt structure tests
  • Manual: /compress produces a summary with all six sections

@yogthos
yogthos force-pushed the feature/background-tasks branch from e271452 to 5412462 Compare May 19, 2026 16:46
@yogthos
yogthos force-pushed the feature/structured-compaction branch from 971a477 to 6a03f52 Compare May 19, 2026 16:46
@yogthos
yogthos changed the base branch from feature/background-tasks to main May 19, 2026 17:02
Structured sections: Goal, Progress (Done/In Progress/Blocked), Key Decisions,
Next Steps, Relevant Files, Critical Context.
Tests verify all required sections and template variables are present.
@yogthos
yogthos force-pushed the feature/structured-compaction branch from 6a03f52 to cc50628 Compare May 19, 2026 17:15
@yogthos
yogthos merged commit 8dee46f into main May 19, 2026
1 check passed
@yogthos
yogthos deleted the feature/structured-compaction branch May 19, 2026 17:16
yogthos added a commit that referenced this pull request May 21, 2026
Track F-MEDIUM #16 (load order) and #17 (context mutability).

## F16 — Multi-file plugin load order

Behavior was lexicographic but undocumented. Authors who renamed
files (or added files with unexpected prefixes like
`init.janet` thinking it would sort first) hit silent ordering
changes. Adds an explicit doc note in `docs/PLUGINS.md`
recommending the `NN-prefix` convention (`00-`, `01-`, …).

## F17 — `harness/mutate-input` / `replace-result` chain across hooks

The dispatch loop in `Plugin::dispatch_tool_hook` clears mutation
slots once at the START of dispatch, then each hook sees whatever
the prior hook wrote (last-write-wins). This is INTENTIONAL — it
lets refining plugins (e.g. one normalizes the args, another adds
guardrails) compose — but was undocumented. Adds a note clarifying
how it differs from `harness/block` (first-wins) and how to gate
mutations with a sentinel if isolation is desired.

No code changes. 678 pass.

Co-authored-by: Yogthos <yogthos@gmail.com>
yogthos added a commit that referenced this pull request May 21, 2026
Follow-up to PR #111. Tier-2 items from the 23-bug audit batch:
docs corrections and two small correctness/UX fixes.

## Docs

- **#12 temperature** — CONFIG.md claimed "parsed but not
  currently applied". Actually applied since PR #105 with a
  clamp warning. Rewrote the cell.
- **#13 --api-key** — flag existed but neither README nor
  CONFIG.md mentioned it. Added a Quick-start example noting
  the process-list visibility caveat.
- **#14 acp_host/acp_port** — CONFIG.md documented both keys
  but the CLI flags were intentionally removed (stdio-only
  transport). Removed both from the keys table + ACP section.
- **#6 tools** — `Config::tools` (per-tool enable map) was
  fully wired in code but undocumented. Added a row to the
  keys table covering `tools.websearch` and `tools.webfetch`.
- **#21 find_callers** — README claimed "word-boundary regex"
  but the impl uses the tree-sitter symbol index. Updated to
  reflect actual behavior; the user-visible word-boundary
  semantics are preserved.

## Code

- **#16 semantic index skip_dir** — `SymbolIndex::find_callers`
  filter had its own hardcoded `matches!(name, "node_modules"
  | "target" | ".git" | "__pycache__")` while the rest of
  the codebase uses `agent::tools::is_skip_dir`. Switched to
  the shared helper so future additions stay in lockstep.

- **#18 context::load_file** — silently swallowed
  `read_to_string` errors via `.ok()`. A permission-denied
  AGENTS.md looked identical to a missing file. Now emits a
  stderr warning naming the path + reason; still returns None
  so callers' behavior is unchanged.

725 plugin / 599 default pass. All build profiles clean.

## Remaining audit items (deferred to feature work)

- **#8 LSP no crash restart**: needs broken-pipe IO error
  handling + exponential backoff. Touches manager state
  machine.
- **#10 task tool fire-and-forget**: needs timeout + cleanup
  coordination via JoinHandle tracking.
- **#25 MCP no reconnection**: similar architectural concern
  to #8.
- **#27 LSP didClose**: client lifecycle hook missing.
- **#29 token estimation len/4**: needs per-provider usage
  extraction (Phase 6 work).
- **#5 MCP shutdown**: rmcp Drop semantics need verification.
- **#38/39/40 semantic test gaps**: get_symbol_body untested,
  list_symbols kind_filter untested, find_definition test
  vacuous. Sat down to add but each requires a fixture build.

Together with PR #111 (10 code fixes), 17 of the 23 verified
items are now shipped. Remaining 6 are architectural or
test-infrastructure work better tackled as discrete PRs.

Co-authored-by: Yogthos <yogthos@gmail.com>
allen-munsch pushed a commit to allen-munsch/dirge that referenced this pull request Jun 3, 2026
…irge-code#89)

Track F-MEDIUM dirge-code#16 (load order) and dirge-code#17 (context mutability).

## F16 — Multi-file plugin load order

Behavior was lexicographic but undocumented. Authors who renamed
files (or added files with unexpected prefixes like
`init.janet` thinking it would sort first) hit silent ordering
changes. Adds an explicit doc note in `docs/PLUGINS.md`
recommending the `NN-prefix` convention (`00-`, `01-`, …).

## F17 — `harness/mutate-input` / `replace-result` chain across hooks

The dispatch loop in `Plugin::dispatch_tool_hook` clears mutation
slots once at the START of dispatch, then each hook sees whatever
the prior hook wrote (last-write-wins). This is INTENTIONAL — it
lets refining plugins (e.g. one normalizes the args, another adds
guardrails) compose — but was undocumented. Adds a note clarifying
how it differs from `harness/block` (first-wins) and how to gate
mutations with a sentinel if isolation is desired.

No code changes. 678 pass.

Co-authored-by: Yogthos <yogthos@gmail.com>
allen-munsch pushed a commit to allen-munsch/dirge that referenced this pull request Jun 3, 2026
…de#112)

Follow-up to PR dirge-code#111. Tier-2 items from the 23-bug audit batch:
docs corrections and two small correctness/UX fixes.

## Docs

- **dirge-code#12 temperature** — CONFIG.md claimed "parsed but not
  currently applied". Actually applied since PR dirge-code#105 with a
  clamp warning. Rewrote the cell.
- **dirge-code#13 --api-key** — flag existed but neither README nor
  CONFIG.md mentioned it. Added a Quick-start example noting
  the process-list visibility caveat.
- **dirge-code#14 acp_host/acp_port** — CONFIG.md documented both keys
  but the CLI flags were intentionally removed (stdio-only
  transport). Removed both from the keys table + ACP section.
- **dirge-code#6 tools** — `Config::tools` (per-tool enable map) was
  fully wired in code but undocumented. Added a row to the
  keys table covering `tools.websearch` and `tools.webfetch`.
- **dirge-code#21 find_callers** — README claimed "word-boundary regex"
  but the impl uses the tree-sitter symbol index. Updated to
  reflect actual behavior; the user-visible word-boundary
  semantics are preserved.

## Code

- **dirge-code#16 semantic index skip_dir** — `SymbolIndex::find_callers`
  filter had its own hardcoded `matches!(name, "node_modules"
  | "target" | ".git" | "__pycache__")` while the rest of
  the codebase uses `agent::tools::is_skip_dir`. Switched to
  the shared helper so future additions stay in lockstep.

- **dirge-code#18 context::load_file** — silently swallowed
  `read_to_string` errors via `.ok()`. A permission-denied
  AGENTS.md looked identical to a missing file. Now emits a
  stderr warning naming the path + reason; still returns None
  so callers' behavior is unchanged.

725 plugin / 599 default pass. All build profiles clean.

## Remaining audit items (deferred to feature work)

- **dirge-code#8 LSP no crash restart**: needs broken-pipe IO error
  handling + exponential backoff. Touches manager state
  machine.
- **dirge-code#10 task tool fire-and-forget**: needs timeout + cleanup
  coordination via JoinHandle tracking.
- **dirge-code#25 MCP no reconnection**: similar architectural concern
  to dirge-code#8.
- **dirge-code#27 LSP didClose**: client lifecycle hook missing.
- **dirge-code#29 token estimation len/4**: needs per-provider usage
  extraction (Phase 6 work).
- **dirge-code#5 MCP shutdown**: rmcp Drop semantics need verification.
- **dirge-code#38/39/40 semantic test gaps**: get_symbol_body untested,
  list_symbols kind_filter untested, find_definition test
  vacuous. Sat down to add but each requires a fixture build.

Together with PR dirge-code#111 (10 code fixes), 17 of the 23 verified
items are now shipped. Remaining 6 are architectural or
test-infrastructure work better tackled as discrete PRs.

Co-authored-by: Yogthos <yogthos@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant