feat(ledger): mechanical proposer — every refresh proposes instances against canon and groups derive-first candidates; agents confirm in batches (#2792, milestone 294 step 6)
CI & Build / Python lint (push) Successful in 5s
CI & Build / Plugin hooks (push) Successful in 13s
CI & Build / integration (push) Failing after 34s
CI & Build / TypeScript typecheck (push) Successful in 35s
CI & Build / Python tests (push) Successful in 1m17s
CI & Build / Build & push image (push) Successful in 48s
CI & Build / Python lint (push) Successful in 5s
CI & Build / Plugin hooks (push) Successful in 13s
CI & Build / integration (push) Failing after 34s
CI & Build / TypeScript typecheck (push) Successful in 35s
CI & Build / Python tests (push) Successful in 1m17s
CI & Build / Build & push image (push) Successful in 48s
Shapes now carry a content fingerprint (signature + whitespace/comment- insensitive body_sha; migration 0080) and the proposer runs inside the coverage refresh, the one moment bodies exist: symbol elsewhere → textual containment → body references the canon → signature resemblance → semantic (capped per refresh, unreached rows stay unexamined for the next). A hit is a proposal on the row (proposed_snippet_id/basis/score), never a classification; rows with no canon hit group by the derive-first rule (identical body in ≥2 places, same name in ≥3 files) as proposal_basis= derive + a group key. list_shapes(proposal=any|canon|derive|<basis>) is the queue; confirm_shape_proposals(project_id, snippet_id|path|basis) confirms in batches as agent instances; any classify_shapes/hook stamp retires the proposal. Readout carries proposed + derive_groups (line, payload, card). Plugin 0.1.35 (skill: the machine proposes, judgment classifies). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "scribe",
|
||||
"description": "Scribe system-of-record for Claude Code: MCP tools over your notes/tasks/projects/rules, a session-start push channel that surfaces your always-on rules + active-project context, process-skills (writing-plans, systematic-debugging, verification, brainstorming, reusing-code), and your saved Scribe Processes auto-surfaced as skills (/scribe:sync). Replaces superpowers + file-memory with one app-backed plugin.",
|
||||
"version": "0.1.34",
|
||||
"version": "0.1.35",
|
||||
"author": { "name": "Bryan Van Deusen" },
|
||||
"mcpServers": {
|
||||
"scribe": {
|
||||
|
||||
@@ -51,6 +51,27 @@ need a hand judgment:
|
||||
judgment: it never overrides a classification you made, and a
|
||||
`classify_shapes` call overrides it.
|
||||
|
||||
## The machine proposes, judgment classifies
|
||||
|
||||
Every coverage refresh runs the **mechanical proposer** over the unclassified
|
||||
rows: same symbol as a canon elsewhere → textual containment → body
|
||||
references a canon → signature resemblance → semantic (capped per refresh). A hit
|
||||
is a *proposal* on the row, never a classification. Work the queue in bulk:
|
||||
|
||||
1. `list_shapes(project_id, proposal="canon", snippet_id=N)` or
|
||||
`path="dir"` — read the page; `proposal` carries snippet_id, basis, score.
|
||||
2. `confirm_shape_proposals(project_id, snippet_id=N)` (or `path=`,
|
||||
`basis=`) for the ones that hold — hundreds at a time; `symbol` and
|
||||
`reference` proposals are near-certain, `semantic` deserves a look.
|
||||
3. `classify_shapes` the rest — variant, exempt, or instance of a different
|
||||
snippet. Any judgment retires the proposal.
|
||||
|
||||
`list_shapes(project_id, proposal="derive")` lists the **derive-first
|
||||
candidates** — the same body in ≥2 places or the same name defined in ≥3
|
||||
files, with no canon at all (`proposal.group` names the family; the coverage
|
||||
payload's `derive_groups` ranks the biggest). That is the consolidation
|
||||
queue, not a classification queue: see below.
|
||||
|
||||
## The derive-first rule
|
||||
|
||||
N same-shaped occurrences matching **no** recorded canon is never N loose
|
||||
|
||||
Reference in New Issue
Block a user