The CLI sends every positional text as `texts` and never `text`; help says each
is a topic and the lists are fused. Daemon and CLI deploy together. Cut
gamecult-chat:cut_spec:cut-source-query-texts.r1, commit 4.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
SourceQuery gains `texts` (one to eight, SOURCE_TEXTS_MAX) beside the
transitional `text`; check() refuses neither, both, more than eight and blank
entries, naming `texts`. SourceHit.score documents cosine versus reciprocal-rank
sum. Published request and response schemas regenerated. Cut
gamecult-chat:cut_spec:cut-source-query-texts.r1, commit 1.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
desk_door.rs owns who may speak, the socket's life and the frame bounds; Daemon::handle_desk owns which Mind method answers (Answer via desk_answer, the replay flag gating index.committed; Forks and Fork refused Unavailable until desk-door-reads). startup returns Started; run takes the door; its five callers pass it or None. desk_wire::answer_ref is the one spelling of a stored answer's ref.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
PipelineFacts::DeskAnswer gains counts, derived through counted_answer over the
read's Docs::at(image, as_of); the stored outcome name stays the write-time record.
DeskOutcome::Refused carries the retraction target as sent; the record's choice is a
Short kept as sent (a choice_invalid choice is no label), and an illegal retraction
form keeps its choice and note. body_sha256 form unchanged. Schemas regenerated.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Rules 3-8, R1, R2, R4 of the binding spec; counted_answer derives which answer
counts; Door::Desk is the only door that may write a desk_answer, so Admit,
import and derivation refuse it. options_hash sits behind one seam, failing
closed until the bytes are filled; tests use a named fixture hash.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
SourceQuery gains `front` (serde default false, so an old client's request
decodes as before). The one owner of the list is sources::FRONT_PAGE_FILES;
the Qdrant filter matches `path` against it with MatchAny on the existing
keyword index, composed with the `repo` condition. The CLI prints the
citation line range as before.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A follow-up the receiver wrote natively, closed, and a later batch replays is inert to the
daemon now and refused as an identity collision when the batch arrives.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
inert_in_window covered FollowUp and Idea only, so a receiver's own resolution
of such a record, admitted after the import began, refused the rerun in both
the tool (resume/window_writes) and the daemon (root_holds_native_write).
A Resolution whose subject is a follow-up or idea the plan does not replay
touches nothing planned and now stays beside the replay. One predicate, both
callers; the resolution of a replayed follow-up, or of any other kind, still
refuses.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul F1: the window left open by `inert_in_window` let a later imported record
withdraw or cite the receiver's native follow-up. Admission now refuses an
imported document that cites or resolves a native document of its own root
(another root's native documents are cited as ever). Stale docs and the import
help name the amended rule.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Nibu's stopped import of aetheria-release was refused twice over for her own
run's follow-up chat-s4606-4606: by the verb's resume (a record under the root
not imported from the source) and, had that passed, by admission
(ImportOutsideCampaign, a native write under the root). Both now leave a native
FollowUp or Idea alone when it was admitted after the root's first imported
document, share one predicate (`inert_in_window`), and the verb names what it
left in place and leaves it out of the final verification walk. Every other
native kind (a question, a resolution, a ruling, a target) can answer or
resolve a replayed document and still refuses; a collision on a planned key
still refuses. No evict verb: a receipt cannot be unwritten.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The verb walks the giver (Query only), plans with huginn_mind::plan, walks her own root to
resume by what she holds, admits one batch per source receipt with imported_from, and ends
with a verification walk. Settings::source builds the giver's client from explicit flags.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The giver: (Campaign, Moved) joins the matrix; a Moved to this mind refuses MoveToSelf and a withdrawn Moved MoveIsFinal; any staged document rooted at a moved campaign, derived ones included, refuses CampaignMoved; Docs::closing_resolution reads every other document under the root closed by the Moved, and the image fans status_changed out so an earlier as_of still reads in force. The oracle derives the same fallback independently.
The receiver: PipelineProvenance.imported_from (optional, absent from every other receipt and from the digest) names the source receipt and the externals the batch cites. An import derives nothing, refuses its own instance, a Moved outcome, and an external this mind holds; a listed external stands in for an absent referent. mind-body persona.rs gains one outcome_words arm for the new variant.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cut huginn-admit-hold r2. admit decodes, then asks near::neighbours (the one
neighbour query, for admit now and recall dispatch next) for the nearest
in-force rulings and questions to each of the batch's first three titled
rulings or questions, minus the batch's own ids, the question a ruling answers
and the subject of a Superseded resolution. A neighbour left holds the batch:
exit 6, the neighbours and a token (16 hex of sha256 over the decoded batch and
the agent) printed, nothing sent. The same command with --seen <token> admits
it; any other token is InvalidInput. A trouble during the check prints a note on
stderr and the admission proceeds.
PipelineDocumentSummary::of is public so the neighbours print as header lines.
sha2 joins eureka-state (already in the lock).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
persona get prints the stored gamecult.persona_state.v0 document, then its
updatedAt and receipt (absent, exit 1, until the first put). persona put reads
the whole document from a file or stdin and prints Committed <receipt>, or the
refusal (a stale put names the stored updatedAt), exit 1; a document that is
not one JSON object is a usage error and sends nothing. Provenance tool is huginn.
The eureka-state MCP's last unique capability is now in the CLI.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
address.rs is the one rule for whether a delivery is for a Mind (tag, or a name as a whole word, a listed name exactly as written and a derived or her own in any case); heartbeat's addresses and names_whole_word move into it, the Persona's to_you and own stagger rank call it. eureka-pipeline PipelineStewardship gains names (absent when empty); facts, schemas and golden follow.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
PipelineThought epiphany.pipeline.thought.v2, instance-rooted, validated as
its chosen candidate; ForeignInstance refusal, Answered-by-FollowUp or Recorded
resolutions, facts, a reads citation role, text index. Schemas, golden sample,
huginn schema list regenerated.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Documents decode one by one through serde_path_to_error, so the refusal says
documents[i].path and what is wrong, in the schema's words: a field name, the
allowed variants, the expected type. Serde's own text quotes the input, so it
is not passed through.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The strict decode that refuses unknown keys by path moves from the huginn
binary to eureka_state::door; the CLI re-exports it and the MCP admit takes
documents as a Value (schema still Vec<PipelineDocument>) and decodes through
it, answering InvalidInput before any call. A research note with extra keys is
refused by path and nothing is stored.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
epiphany.pipeline.research.v2 (one claim, typed sources, no status) and
epiphany.pipeline.idea.v2 (what could be, rests_on / toward), campaign-rooted
as <campaign>:research|idea:<pass>.<label>. Resolutions are the matrix alone;
lineage is Global; roles serves, sources, rests_on, toward; alias pass; index
text without a version bump. No faculty is told to use them yet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Source refresh now upserts a repo's new chunks first and deletes what is
left in scope under another commit afterwards, so a failed embed never
removes indexed content (embed-outage-empties-repo). The cursor is still
dropped before the first write.
The pool's reserve endpoints use EmbedBounds::RESERVE (30 s a text, 60 s
floor) instead of the GPU default (reserve-bounded-like-a-gpu).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>