Skip to content

chore(skills): resync vendored skill mirror - #194

Merged
vraspar merged 1 commit into
mainfrom
bot/skill-resync
Aug 21, 2026
Merged

chore(skills): resync vendored skill mirror#194
vraspar merged 1 commit into
mainfrom
bot/skill-resync

Conversation

@x402r-release-bot

Copy link
Copy Markdown
Contributor

Auto-opened by the daily skill-drift workflow: the vendored skills/tenjin/SKILL.md no
longer matches its canonical source, https://tenjin.blog/skills.md. The commit is
pnpm sync:skill output.

  • Mirror diff: +5 / -4 lines
  • Frontmatter: unchanged

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.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@vraspar
vraspar merged commit 94c43b8 into main Aug 21, 2026
3 checks passed
@vraspar
vraspar deleted the bot/skill-resync branch August 21, 2026 03:58
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>
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