docs(6204): shipped instruction text describes the product, not this instance's records
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 15s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m10s
CI & Build / Python tests (push) Successful in 1m55s
CI & Build / Build & push image (push) Successful in 39s
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 15s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m10s
CI & Build / Python tests (push) Successful in 1m55s
CI & Build / Build & push image (push) Successful in 39s
MCP tool docstrings and comments, the server's orientation notes, the plugin skills, every hook script and the plugin README/PACKAGING drop record ids, milestone numbers, dates and incident stories, and state each non-obvious why as a present-tense fact. History stays in the task logs. Corrections found on the way: - plugin README/PACKAGING said every hook is a GET; moment, rule-opened and reply-rules POST, so the plugin's key needs write scope. Both now say so, name Settings -> MCP Access, and list every wired hook and endpoint. - the contract-change hint printed "(lesson #4207)", this instance's record, to every install. It no longer cites a record. - tasks.py claimed there is no delete_task; there is. - rulebooks.py cited delete_event and a design spec that no longer exist. - scribe_after_write.sh carried an always-empty etag_q; removed. - test_write_path_trigger pinned "| tac | scribe_defs | head -1", text that existed only in a comment about the old code; it now pins the real tail -1 pipeline. - docs/development.md: CI runs on Gitea Actions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# Scribe plugin — PreCompact: tell the summarizer what must survive (#3680).
|
||||
# Scribe plugin — PreCompact: tell the summarizer what must survive.
|
||||
#
|
||||
# WHAT THIS HOOK ACTUALLY DOES, and why it is not what the design first assumed.
|
||||
#
|
||||
# Spike #3680 asked whether a PreCompact hook can reach the model, and note
|
||||
# #3679 assumed the channel would be `hookSpecificOutput.additionalContext`
|
||||
# plus a block. Both halves of that are wrong, read out of the installed build
|
||||
# (Claude Code 2.1.273):
|
||||
# HOW A PRECOMPACT HOOK REACHES THE MODEL (as read out of Claude Code 2.1.273):
|
||||
#
|
||||
# * `additionalContext` is NEVER read on PreCompact. The hook-output schema
|
||||
# has no PreCompact variant at all; the field is honoured for SessionStart,
|
||||
@@ -18,8 +13,8 @@
|
||||
# operator typed after `/compact` and passed into the prompt that writes
|
||||
# the summary. Every path does this — manual, auto and partial compaction.
|
||||
#
|
||||
# So there IS a model-reaching channel, and it is better than the one designed:
|
||||
# we do not interrupt the compaction, we steer the summary it produces. The
|
||||
# So the channel is the summary itself: we do not interrupt the compaction, we
|
||||
# steer the summary it produces. The
|
||||
# summary is what the next turn reads, so text that survives into it survives
|
||||
# the compaction.
|
||||
#
|
||||
@@ -27,8 +22,7 @@
|
||||
# `{"decision":"block"}`) does not pause for the model and cannot tell it
|
||||
# anything — the compaction is SKIPPED, a warning goes to the operator's
|
||||
# screen, and the session continues uncompacted toward its context limit with
|
||||
# no summary at all. That failure is silent from the model's side, which is
|
||||
# exactly the outcome #3680 existed to avoid shipping. This hook exits 0 on
|
||||
# no summary at all, silently from the model's side. This hook exits 0 on
|
||||
# every path.
|
||||
#
|
||||
# SCOPE: in a subagent the handler discards hook stdout and keeps only a block,
|
||||
@@ -49,11 +43,9 @@ set -uo pipefail
|
||||
# shellcheck source=plugin/hooks/scribe_defs.sh
|
||||
. "$(dirname "${BASH_SOURCE[0]}")/scribe_defs.sh"
|
||||
|
||||
# THE EVENT IS NOW READ, where it used to be drained. The old comment here said
|
||||
# nothing in it changes what we emit, and that was true while every line was
|
||||
# static. It stopped being true at #4216: the slippage readout below is
|
||||
# specific to THIS session, and `session_id` is the key to the ledgers that
|
||||
# hold it. The instruction is still the same whether the operator typed
|
||||
# THE EVENT IS READ for `session_id`: the slippage readout below is specific
|
||||
# to THIS session, and the id is the key to the ledgers that hold it. The
|
||||
# instruction is still the same whether the operator typed
|
||||
# `/compact` or the session hit its limit — what varies is the measurement
|
||||
# appended to it.
|
||||
event=$(cat 2>/dev/null || true)
|
||||
@@ -83,7 +75,7 @@ Everything else here can be recovered from the repository or from Scribe. These
|
||||
cannot: they are this session's only copy.
|
||||
EOF
|
||||
|
||||
# ── The slippage readout (#4216, milestone 419) ───────────────────────────
|
||||
# ── The slippage readout ─────────────────────────────────────────────────
|
||||
#
|
||||
# WHY IT BELONGS HERE RATHER THAN IN A REPLY. A rule read and left unresolved
|
||||
# is invisible by construction: it looks exactly like a rule that worked. The
|
||||
|
||||
Reference in New Issue
Block a user