chore(skills): resync vendored skill mirror - #194
Merged
Conversation
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
vraspar
approved these changes
Aug 21, 2026
vraspar
added a commit
that referenced
this pull request
Aug 21, 2026
Upstream moved again since #194: the paywall marker now documents its block-level placement and says the publish still succeeds with a warning, and the card section records that cacheEligible, cacheEligibleMissing and schemaVersion are server-computed and ignored on a write. Regenerated with `pnpm sync:skill`, no hand edits. Clean origin/main produces the identical diff, so this is upstream drift rather than anything this branch did. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
vraspar
added a commit
that referenced
this pull request
Aug 22, 2026
* feat(publish): let one piece claim every search it answered `tenjin publish --search-id` repeats, up to ten per piece. A research thread fans out into many searchIds, and until now the piece published back against one while the siblings were closed as `regenerated` — false twice over, and it counted every sibling of a converting loop as a MISS. Each id closes its own local loop with publish attribution (relinking one an `outcome` already closed, exactly as a single id does today), and the JSON envelope reports per id under `searches`, so an id this machine never recorded warns for itself instead of costing the others their close. A lone id keeps the flat `search` field. On the wire, one id stays the bare string it has always been and several become an array, so a single-search publish is byte-identical against a server that predates the array. Closes #167. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(publish): warn on unrecorded search ids before signing, pin the array contract The server matches every named id against a recorded search and refuses the whole batch if one misses, so a stale id took down the publish after the wallet had signed with nothing said first. The local store keeps 50 entries against a 90-day server sweep, which makes "mine, not theirs" ordinary rather than exotic. Ids this machine has no record of are now named on stderr before the wallet is touched, and the batch semantics are stated in the flag help, the MCP description and the command reference. It stays a warning: an id recorded on another machine is absent here and valid there. The fixture's PostCreate/PostUpdate searchId nodes are updated from the live spec, which declares the union, and contract.test.ts pins both branches plus minItems/maxItems, so SEARCH_ID_MAX is guarded rather than asserted in a comment. Also: SEARCH_ID_MAX now says which cap it mirrors (the server's is a lifetime bound across updates, not a per-request one), the changeset names the shipped state rather than a pending dependency, and the prefill comment describes the mechanism it actually has. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * chore(skills): resync vendored mirror from tenjin.blog/skills.md Upstream moved again since #194: the paywall marker now documents its block-level placement and says the publish still succeeds with a warning, and the card section records that cacheEligible, cacheEligibleMissing and schemaVersion are server-computed and ignored on a write. Regenerated with `pnpm sync:skill`, no hand edits. Clean origin/main produces the identical diff, so this is upstream drift rather than anything this branch did. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(publish): fold searchId case before dedupe, and close the review's minors The wire regex accepts mixed-case hex while the dedupe Set compared exact strings, so two spellings of one uuid survived as two entries: a spurious "not in this machine's store" warning for the second, and both elements on the wire claiming a single search. normalizeSearchIds now lowercases before deduping, which is what Postgres does with a uuid column anyway; the store lookup is keyed the same way so an entry recorded in another spelling is still found, and the ledger write uses the record's own spelling because the store matches ids exactly. Also from review: a 400 whose message names searchId now says a deployment predating the array-accepting post-create is the likely cause, since that refusal lands after the signature; the MCP tool labels edge errors `searchId` rather than a flag it has no way to pass; the envelope duality (`search` for one id, `searches` always) is documented where agents read; and publish.test.ts's duplicate bodyServer copies are gone. Tests: case-folding through the builder and through a real publish, exactly SEARCH_ID_MAX ids accepted, the rollout hint present on a searchId 400 and absent otherwise, and an MCP array publish asserting the wire array, both ledger closes, and the missing flat key. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Auto-opened by the daily
skill-driftworkflow: the vendoredskills/tenjin/SKILL.mdnolonger matches its canonical source, https://tenjin.blog/skills.md. The commit is
pnpm sync:skilloutput.No step in this path has read the new wording, so that is what the merge is for:
check the content diff, confirm it is what you want agents to follow, then merge.
Automation opens and refreshes this PR; it never merges it.
Drifting again on a later day refreshes this block in place. Notes outside it are
left alone.