Repository navigation
Releases: JHSeo-git/openwiki-skill
Release list
v0.7.2
- Upstream sync: bump pin
0db6dcf→27b3c76(upstream v0.7.2); reviewed all 10 commits and 62 changed files, with runtime-only changes documented in UPSTREAM.md. - Preserve original personal-wiki pages and pending retry markers when translation is empty or hits the output-token limit (#1008; thanks @xpeng5278-web).
- Preserve retrieval's collision-safe
sectionalias for the first symbol-only heading without changing Markdown link validation (#1001; thanks @Yashwanth-Kumar-Kotla). - Treat host-exposed Bedrock throttling signals as rate limits, restoring and deferring the page without immediate retry (#1011; thanks @xpeng5278-web).
v0.7.1
- Upstream sync: bump pin
c0173dc→0db6dcf(upstream v0.7.1); reviewed all 15 commits and 54 changed files, with runtime-only changes documented in UPSTREAM.md. - Scope explicitly targeted repository updates to requested pages/files and affected navigation (#865; thanks @HwangJohn), and retry unfinished pages once from their original snapshot before skipping (#913; thanks @sloemo01).
- Ignore code examples during link validation (#957; thanks @breken-ai), tolerate malformed percent escapes (#980; thanks @Zhuoxi2000), and accept GitHub line anchors on Markdown targets (#986; thanks @drakeo338).
- Preserve compact YAML sequences during metadata edits (#969; thanks @Yi-111-a), stable workspace ID precedence (#955; thanks @Yashwanth-Kumar-Kotla), and collision-free retrieval anchors (#929; thanks @c020627).
- Preserve literal prompt values (#958; thanks @breken-ai) and serialize same-file wiki operations through host-side ordering (#979; thanks @SammyTourani).
v0.7.0
- Upstream sync: bump pin
86f46f8→c0173dc(upstream v0.7.0); reviewed all 16 commits and 86 changed files. Prompts, Claims, generation, retrieval, OKF, bundled skills, and automation examples are unchanged. - Recognize GitHub Copilot CLI's
copilotprovenance actor in repository and personal wiki output (#966; thanks @waseem-k-08), preserving existing authorship on unchanged pages. - Refresh version references and document exclusions: native Copilot installation (#966), Entra ID gateway authentication (#975), LangSmith run-thread grouping and trace names (#972), runtime dependency/security updates, generated-wiki refreshes, and release chores.
v0.6.1
- Upstream sync: bump pin
7557f9e→86f46f8(upstream v0.6.1); reviewed all 17 commits. Provider, diagnostics, telemetry, installer/runtime packaging, generated-wiki updates, and release chores remain out of scope. - Stop creating missing CLAUDE.md files (#933), preserve refresh rules for existing files, and conditionally stage CLAUDE.md in all four CI recipes.
- Require relative repository Markdown links and flag root-absolute hrefs (#901); retain personal-wiki root-relative links and teach Q&A to read introduction results by their exact H1 anchor (#952).
- Require atomic
.last-update.jsonreplacement for repository and personal runs, including no-op and failure paths (#840); preserve the first accepted plan after a conflicting submission (#906). - Report repository pages with code-derived front matter or missing descriptions without failing validation (#902), refresh rechecked evidence line ranges (#936), and recognize the
piprovenance actor (#897). - Apply repository shell restrictions to research and Q&A (#888), retaining explicitly scoped host-side lifecycle bookkeeping as an adaptation and updating unattended-run guidance.
v0.6.0
- Upstream sync: bump pin
fd8794b→7557f9e(upstream v0.6.0); reviewed all 17 commits, including the newsrc/retrieval/andsrc/linking/modules. Provider streaming (#932), visualizer URL decoding (#917), installer runtime, upstream wiki updates, and release chores remain out of scope. - Port repository retrieval and linked-workspace Q&A (#905): optional
openwiki_search/openwiki_read, explicit ambiguous-workspace selection, exact section reads with wiki identity, and local Markdown fallback; update the managed AGENTS.md snippet to use retrieval only when needed. The MCP server, ranking engine, and workspace registry remain upstream-owned. - Port the personal-mode shell boundary (
d3e5f21) through generation, Q&A, source wiring, and scheduled-run guidance: read-only source tools replace CLI/Git/shell ingestion, connector-relative paths replace host raw-file reads, and native file snapshots/clock tools replace shell bookkeeping. Also remove two stale annotations that contradicted the existing every-run metadata refresh rule. - Adopt upstream's exact legacy OpenWiki-section migration (#914), preserving fenced examples and user-edited lines, removing duplicate legacy sections before marker validation, and retaining import-only CLAUDE.md files after migration.
- Document native parallel-worker semantics (#903) while retaining upstream's sequential host-agent contract; add
ompandantigravityprovenance actors (#893/#922), and generated-PR notices in both GitHub Actions examples (#911).
v0.5.2
-
Upstream sync: bump pin
3bc038d→fd8794b(upstream v0.5.2). Twenty-one commits, six of which touch behavior this port mirrors — including the first prompt-source change since 0.5.0 and the arrival of the Claude-Code-specific fix flagged in the 0.5.1 notes. Out of scope: provider and transport plumbing (#856 Vertex Grok routing, #861/#862 OpenAI-compatible stream normalization and roleless worker messages, #864 OpenRouter 404 retries, #788/#801 reasoning-effort mapping, #847 managed env keys, #869 model-list entries), thebobprovider runtime (#780 — only its host-registry actor is in scope here), credential-diagnostics redaction (#885), the current-Node requirement (#863), the Windows ctime fingerprint fix (#859 — this port has no fingerprint), upstream's own wiki updates (#854/#873/#880), and the version-packages chore (#860). -
The CLAUDE.md managed block now carries a real import, and the reason is about this host specifically (#777) —
skills/openwiki/SKILL.mdStep 0. The block has saidSee [AGENTS.md](AGENTS.md)since 0.3.3, and upstream found that this was inert: Claude Code expands only its own@pathsyntax, and it falls back to reading AGENTS.md by itself only when no CLAUDE.md sits beside it — which, once code-mode setup has run, is never. So for two minor releases the OpenWiki instructions reached Codex through AGENTS.md and never reached the host CLAUDE.md exists for. The snippet is now@AGENTS.md, ported byte-identical. The same PR adds a case this port states explicitly: when CLAUDE.md and AGENTS.md are the same file on disk (symlink or hard link, compared byino+devwith inode 0 treated as unknown for Windows filesystems that report it for everything), that file gets the full AGENTS.md block rather than the pointer, because an import would otherwise point the file at itself. It also settles last release's narrowing of #841 in a satisfying way: the managed block's whole content is now@AGENTS.md, so skipping a file that already consists of exactly that line is obviously safe rather than merely defensible. -
The planner prompt gained a line against conversational output (#872) —
references/prompt-planner.md. Upstream's opening paragraph now reads "Do not write documentation, do not delegate work, and do not emit narrative or conversational text. Invoke submit_plan directly", after planners were answering in prose instead of submitting. Ported verbatim, with one sentence of gloss on the no-tool adaptation: this port produces the plan payload as a record rather than a tool call, and having no tool does not exempt it from the rule the line encodes — go from research straight to the payload, without a preamble narrating what you are about to plan. -
Manifest entries stopped lying about pages a run never touched (#848) —
skills/openwiki/SKILL.mdStep 1. Until 0.5.2 the finish rewrite stamped every surviving page with the finishing run's checkpoint, so a page that run never regenerated claimed to be verified as of the newest commit. Upstream now restamps only the pages it actually regenerated, keyed bycompletedRunId; every other tracked page keeps its priorgitHeadandsourceFingerprint(withpageVersionstill refreshed when the deterministic passes rewrote its bytes), a formally skipped page keeps its exact prior entry, and an untouched page with no prior coverage is seeded best-effort or left uncovered for full review rather than failing the run. This port writes no manifest, but it reads each entry'sgitHeadas that page's update baseline — so this is the fix that makes the port's read sound rather than optimistic, since a window computed from an inflated head skips real changes in the unsafe direction. Step 1 now records both the new rule and the consequence: treat a manifest left by a pre-0.5.2 native run as possibly optimistic, and fall back to the full-review cohort when an entry's head is in doubt. -
Symlinked claim evidence is unresolved rather than fatal — and that is now upstream's rule, not this port's deviation (#881) —
skills/openwiki/SKILL.mdStep 1. This port has long said "do not fail the run; treat it as unresolved and name the page and resource", on the grounds that the user asked for a wiki update rather than a diagnosis. Upstream arrived at the same call for a sharper reason: a containment refusal is permanent for the cited resource rather than operational, so it belongs in reconciliation rather than in an abort. The annotation flips accordingly, with the boundary stated precisely, because the fix is narrower than it first reads — onlyEvidenceSecurityErrorwas downgraded, so a resource excluded by.openwikiignorestill throwsEvidenceResourceErrorand still aborts upstream, and treating that half as unresolved remains this port's[adapted]choice. Second sync running where upstream adopted a port-original judgment (#841 was the first), so the next-sync note now says to check for it deliberately: once upstream agrees, a divergence note is wrong rather than merely stale. -
Smaller ports, and a fix to the sync procedure itself.
bob(#780) andkiro(#870) joinclaude-code/codex/opencode/cursorin both wiki skills' provenance-actor list. Findingkirotook the full commit log rather than the scoped one, becausesrc/integrations/install/registry.ts— the file UPSTREAM.md names as the source of truth for that list — was never in the step-2 path list it tells you to run. Both are fixed: the path is in the command now, and step 3 records the lesson, since a host missing from the actor list is exactly what that scoped log exists to catch.
v0.5.1
-
Upstream sync: bump pin
64903f9→3bc038d(upstream v0.5.1). A patch release, and only two of its twenty-two commits touch mapped paths. Every prompt source and every lifecycle module this port maps is byte-identical to 0.5.0 — checked file by file rather than inferred from the commit list. Out of scope: the broad dependency modernization (#810/#783/#808/#784),.envvalue unescaping (#794), both visualizer fixes (#796/#806), the debug diagnostics stack panel (#832), openai-compatible stream chunks and top-level model-request rendering (#817/#846 — provider and stream plumbing this port has no runtime for), MCP connector env resolution (#838), the release-workflow fix (#851), upstream's own wiki updates (#798/#805/#814/#816/#825/#843), and the version-packages chore (#852). -
A CLAUDE.md that only imports AGENTS.md is now left alone upstream too, and this port's rule narrows to match (#841) —
skills/openwiki/SKILL.mdStep 0. This port has carried an[adapted]exception here since before upstream had an opinion: a CLAUDE.md that pulls in AGENTS.md needs no OpenWiki pointer block, because the import already does the pointer's job. Upstream now agrees, with a stricter condition — the file's entire trimmed content must be exactly@AGENTS.md, and then it is not written at all, not even to normalize a trailing newline. So the port drops its broader "an@AGENTS.mdline anywhere counts" reading and follows upstream: a CLAUDE.md carrying the import plus other content gets the managed pointer block appended like any other file. That is a real behavior change for exactly one shape of file, and it is the right trade — the block is marker-managed and idempotent, so the redundancy costs nothing, while divergence would cost byte-identical setup against the native CLI. (The narrow case is not hypothetical: this repository's ownCLAUDE.mdis that one line.) -
Upstream's auto-merge CI recipe is ported, with the one gate it needs here and does not need there (#842) —
references/automation.md§3. Upstream added a second GitHub Actions example that requests GitHub auto-merge on the docs PR after a successful run, plus the README setup prose that makes it safe (allow auto-merge, protect the branch, and a dedicatedOPENWIKI_PR_TOKEN— because a PR opened with the defaultGITHUB_TOKENdoes not start mostpull_requestworkflows, so the checks meant to gate the merge may never run). All of that is ported. The adaptation is the gate, and checking upstream's exit path turned it from a port workaround into a real fix: upstream arms auto-merge on the job's outcome, which catches a hard failure but not a finalized partial run — a skipped page or mid-run source drift finishes the run, soopenwiki code --updateexits 0 while writingstatus: "interrupted"into its own metadata, because the CLI maps a successful run straight to exit 0 and never reads that status back.claude -pdoes the same. So the hole is upstream's too, not this port's, and unattended it means a partial wiki merges itself while its rewoundgitHeadsilently becomes the baseline. So the port's recipe reads the real signal SKILL.md Step 6 writes,openwiki/.last-update.json'sstatus, and arms auto-merge only for a run that finished what it planned; anything it cannot read counts as not-complete, and the disable arm is widened to clear a pending auto-merge on a partial run. Two smaller deltas are recorded in place: upstream'sExclude workflow changesstep has nothing to do here (this port never writes CI files andadd-pathsalready excludes them — and auto-merging an executable workflow file is precisely what an unattended job must not do), and upstream's own two examples disagree on thecreate-pull-requestpin, which the port mirrors rather than silently unifying. -
The pin is deliberately the tag, not upstream HEAD, and one pending commit is worth knowing about:
cf0700f(#777) replaces the CLAUDE.md block'sSee [AGENTS.md](AGENTS.md)link with an@AGENTS.mdimport, having found that Claude Code expands only its own@pathsyntax — so the pointer upstream has shipped since 0.3.3 reached Codex and never reached the host it was written for. It lands in the next release andUPSTREAM.md's next-sync note carries the details, including why it does not collide with #841.
v0.5.0
-
Upstream sync: bump pin
5020dbb→64903f9(upstream v0.5.0). One minor release with a real architectural addition and two behavior reversals worth reading carefully. Out of scope: provider and transport plumbing (#743 BedrockmaxTokens, #744 forced Copilot streaming, #416 OpenRouter debug-fetch concurrency), connector runtime fixes (#414), the Windows fingerprint stat-identity fix (#781 — this port has no fingerprint), and upstream's own wiki updates (#747/#757/#759/#764/#770/#773/#785) plus the version-packages chore (#754). -
Durable per-page resumability arrives upstream, and this port reads it without writing it (#720). Upstream added a committed
openwiki/.page-manifest.jsonledger recording, per page, the commit and source fingerprint it was verified against plus which producer completed it — so a run that dies on page nine of twelve can publish the eight good pages and the next run starts from them instead of from scratch. The port cannot write an entry, and the reason is structural rather than a shortcut:buildManifestEntryonly accepts a page whose.claimssidecar exists and carries averificationevent matching the page's current bytes, and this port keeps no sidecar and stamps noverified(Step 5's long-standing[omitted]). Fabricating an entry would assert a machine verification that never happened. What the port does do is read the part that needs no sidecar — each entry'sgitHead— soskills/openwiki/SKILL.mdStep 1 now builds real per-page update baselines when a native or CI run left a manifest behind, which is exactly the payoff of merging a partially-failed CI PR. Two fail-safes are recorded so a later sync does not "fix" them: a native run following a port run finds the coverage unverifiable and re-reviews those pages (stale-but-ignored, the safe direction), and upstream'shasCompleteBaselineCoverageno-op gate is deliberately not ported, because a presence test in a port that never records entries would wedge every future update into a full run. -
The planner's update context is now per-page windows, not one flat changed-path list (#720) —
references/prompt-planner.md. Upstream replaced "Changed repository paths" with "Committed per-page update windows" plus the rule that gives it teeth: a page already advanced by a merged partial update must not be regenerated for changes at or before its baseline. The port renders real cohorts from the manifest when one exists and otherwise degrades to the single baseline it can prove (.last-update.json'sgitHead, or full review when none was recorded) — which is what it did before, now stated as one window instead of a list. A cohort with an empty changed-path set is upstream's fast-forward case reached by a different road: the port cannot advance a ledger it does not write, but "nothing visible moved since this baseline" falls out of the window itself. -
Claims reconciliation became sparse upstream, and this port says plainly how little of that is live here (#769). Upstream stopped round-tripping a page's whole Claim set through the model:
submit_pagenow takes only{confirmedClaimIds, claims, retractedClaimIds}, an omitted issue-free Claim is retained rather than retracted (the inverse of the old rule), the complete set moved behind a new on-demandinspect_claimstool, and the page prompt renders a Claim count plus only the stale/unresolved ones.CLAIMS_RECONCILIATION_GUIDANCEand thesubmit_pageparagraph are ported verbatim so the next sync stays line-mappable — but with no sidecar this port has no persisted Claim ids at all, so the two id fields andinspect_claimshave nothing to name and every submission is "all added".references/prompt-page.mdnow opens by saying so, and keeps the id-free half that does transfer: don't re-derive a page's whole grounding on a focused update (read itssourceson demand — that is this port'sinspect_claims), give every resource Step 1 flagged an explicit recheck decision rather than leaving it cited-but-unchecked, and respect the net floor that replaced the oldmin(1)payload rule — a completed page must retain or establish at least one material Claim. Also ported: one decision per id, and the deliberate asymmetry that a retraction of an unknown id is tolerated (delete-like, for retry safety) while confirm and update stay strict. -
An unrecognizable language request now stops the run instead of quietly producing an English wiki (#761) — both wiki skills' Step 1. Upstream reversed itself here: warning and falling back to English persisted the wrong language in run state, and since resume refuses to change a started run's language, the user could not fix a typo without deleting OpenWiki's own state files. The port rejects at the entry, before any write, with upstream's new message. One
[adapted]difference that matters: upstream validates a--languageflag, so its advice is "use a code rather than a language name" — this port's input is prose, so mapping "Korean" tokois the skill's job, and it stops only when no real language is identifiable at all. -
Partial progress is now a publishable CI result, not a failure to hide (#720) —
references/automation.mdandskills/openwiki/SKILL.mdStep 6. Upstream's workflow gainedcontinue-on-erroron the OpenWiki step, arm -f -- openwiki/.run.jsoncleanup, a PR opened even on failure with the outcome in the body ("merge it to make that progress the baseline for the next scheduled run"), and a final step that re-raises the failure so the job stays red. All three recipes here follow suit; GitLab and Bitbucket capture the exit code and re-raise it after pushing, since neither hascontinue-on-error. Step 6 now states the port's equivalent of upstream's manifest baseline: thestatus: "interrupted"metadata with a rewoundgitHeadthat it already wrote for a skipped page is the "this much is done" record, so a partial run's output should be reported as committable rather than offered up for tidying away. One honest caveat recorded in both places:claude -pexits 0 when the skill merely skips a page, so.last-update.json'sstatusis the partial-run signal, not the CI job status. -
Smaller ports.
cursorjoinsclaude-code/codex/opencodein both wiki skills' provenance-actor list (#748). The provenance pass gains an explicit rule that a wiki may legitimately carry differentgenerated.byactors across pages and you must never normalize another host's actor to yours — upstream made this concrete in #720 by tracking the completing producer per page and passingproducerActorsByPageinto the finalizer, now that a durable run can be resumed by a different host (which also means resume no longer rejects a mismatched producer). A rollback or deletion that reports the file was already absent is success, not an error, and is now attributed (#767 — upstream's backends spell that outcome two ways). Restating an already-fixed plan is no longer an error while replacing it still is (#789), soprompt-planner.mdstates the rule that survives for a port with no tool: the page set is fixed once the queue starts. Andopenwiki/.page-manifest.jsonjoins the never-hand-edit list, the no-op worktree-clean ignore list (upstream widenedisUpdateMetadataStatusLine), and — deliberately not — the content-snapshot exclusions, since it is committed wiki output and a change to it is a real content change.openwiki-asklearns to read its per-pagegitHeadas a sharper freshness signal than the whole-wiki.last-update.json.
v0.4.3
-
Upstream sync: bump pin
8e5175b→5020dbb(upstream v0.4.3, taking v0.4.2 along the way). Two one-fix releases, both hardening the lifecycle 0.4.0/0.4.1 introduced rather than adding surface. Out of scope: the two version-packages chores (#738/#741). -
Mid-run source drift finalizes once instead of replanning (#740) —
skills/openwiki/SKILL.mdSteps 2 and 6. Until 0.4.2 a repository change during a run invalidated the whole plan and the runner looped to replan and redo everything; 0.4.3 deletes that loop (and thereplanningprogress stage nothing emits any more), detects drift twice — before the finalize passes and again after Claims finalization, so a change starting mid-finalize still counts — and then finishes once, recording that a later update is due. The port's Step 2 note flips from[omitted]to[adapted]: it keeps the cheapgit rev-parse HEAD+ worktree check but now re-checks at both points, and Step 6 treats drift exactly like a skipped page —status: "interrupted"withgitHeadrewound — instead of only mentioning it in the final report. That is strictly better: a report does not survive the session, and metadata forces the follow-up run. The user-facing wording follows upstream's: the wiki was finalized without advancing its source checkpoint. -
gitHeadomission on an interrupted run is now upstream-explicit (#740).writeLastUpdateMetadata's override acceptsnullfor "no successful baseline exists", where it previously fell back to the current head — the bug being that a first-ever interrupted run would record the head it had just failed to document and make that work invisible forever. This port already specified the omission when it ported #732; the note now attributes it and UPSTREAM.md records the signature change. -
A page that does not exist yet snapshots as absent (#737) —
skills/openwiki/SKILL.mdStep 4. Upstream's snapshot could throw on a missing page because a read may raise ENOENT rather than returning a not-found result, which aborted exactly the common case: init, and any update adding a page. The port's Step 4 already said "or that it does not exist yet", so no rule changed; it now states outright that an absent page is a valid snapshot and never a failure, with the upstream fix cited so a later sync does not read the sentence as an accident.
v0.4.1
-
Upstream sync: bump pin
27d835c→8e5175b(upstream v0.4.1). Two ports, both about a run surviving trouble instead of aborting. Out of scope: the visualizer overlay/reader fix (#724), upstream's own wiki updates (#733/#736), and the version-packages chore (#729). -
OKF metadata repair replaces OKF metadata rejection (#728, #730). Upstream's
normalizeConceptContentnow delegates to a newrepairOkfFrontmatterthat works field by field instead of rebuilding: a page that passes full validation is left byte-for-byte alone (a stricter test than 0.4.0's "parses and has a non-emptytype" — junk optional fields are no longer tolerated, they are repaired), a parseable block is repaired in place with every producer extension kept, and only an unusable block falls back to the minimal derived block. Both wiki skills' Step 2 now carries the per-field rules — derivetype(plusopenwiki_generated: true) andtitle; drop an invaliddescription/resource/timestamp/status/stale_after; filtertags,verified, andsourcesto their conformant entries; remove ageneratedthat is not a valid{by, at?}event, because a trust assertion that cannot be proven conformant must not be rewritten into a false one. Upstream deleted both carry-across lists (PRESERVED_EXTENSION_FIELDS,PRESERVED_STRUCTURED_FIELDS) since the in-place path preserves the original block; the skills drop them too and state the consequence — on the unparseable-YAML fallback,openwiki_translation_pendingand the code-owned families are lost, because they cannot be read back from a block that does not parse. -
Three byte-level details from the same PRs that matter for interoperability, now reflected in both skills:
setGeneratedEventrendersgenerated: { by, at }with spaces inside the braces (was{by, at}); a page whose body changed this run has its trailing line endings canonicalized to exactly one LF and nothing else (#730), while an unchanged page never passes through that normalization; and provenance restoration compares the existing event by meaning first, so an older{by: …}spelling on a page nobody touched is left as-is rather than reformatted. Thesourcesprojection likewise repairs front matter before and after projecting and compares the final bytes, so a repair alone justifies a write and a no-op projection does not. -
Provenance and the per-write check stopped being fatal (#728). The provenance pass skips a page it cannot read and skips a write that fails, leaving the already-persisted page as the deterministic fallback rather than discarding the rest of a finalized wiki; both skills now say so and ask for the skipped pages to be reported. The per-write front-matter check repairs deterministically instead of only warning, and warns only when the repaired bytes cannot be persisted — so
prompt-page.md's submission gate is now "repair, then validate", failing only on a shape no deterministic repair can fix. -
A page worker that cannot finish is skipped, not fatal (#732) — new to
skills/openwiki/SKILL.mdStep 4. Snapshot a page's exact current Markdown before working it; if it cannot be completed, restore the snapshot (or delete the page when it did not exist), mark the job skipped, say which page and why, and continue the queue. Step 5 restores skipped pages once more before finalizing and excludes them from thesourcesprojection — projecting an empty set would strip the grounding the previous run recorded. Step 6 then writesstatus: "interrupted"and rewindsgitHeadto the previous run's head (upstream's newgitHeadOverride), because recording the current head would make the skipped page invisible to every future update. A submission failure that is not a correctable input problem still aborts. Upstream'sskippedjob status and its reset-to-pending on resume are[omitted]: this port re-plans every run, so the retry is inherent.