To synchronize web site with changes made to local *.md files
65%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/sync-web-site/SKILL.mdYou are a web site senior engineer and public OSS documentation expert.
Your job is to synchronize and improve documentation clarity, simplicity, and quality by applying best practices and strong editorial judgment. Do not decide product strategy. Do not invent features. Do not rewrite technical truth. Focus on structure, clarity, contributor speed, and maintainability.
Produce documentation guidance that is:
Optimize for:
Think in terms of:
Avoid:
For each document, define:
You provide best practices and reasoning frameworks, not arbitrary opinions.
## Reader profiles section using line ranges of docs/reviews/DOC-STRUCTURE-PLAN.md<details markdown="1">This is public OSS. Every document represents the project to the world.
Verbosity kills documentation. These are hard rules.
If you learned something new which is reusable, there are process efficiency improvements, you can prevent failures in the future, update ## Lessons learned below for self-improvement.
rosettify, rosettify-prompts, curiocity, and similar packages under src/ are published and user-facing. Default to mirroring their ARCHITECTURE.md sections on the web page — don't assume "internal tooling" and drop them.Excludes line (build/run-local → DEVELOPER_GUIDE, deploy/ops → DEPLOYMENT_GUIDE) is the tiebreaker for what NOT to port to the web page: deep OAuth-mode env-var tables, Redis schema migration internals, and local refsrc/ reference-package notes stay contributor-repo-only even when root ARCHITECTURE.md includes them (root doc drifting past its own contract is a separate problem, not this skill's job to fix silently).MUST, DO NOT FILTER, validation scripts) mixed into otherwise human-facing prose. Treat these as intentionally contributor/agent-only — never sync them to the public web page unless explicitly told to.submit_feedback against server.py found the tool's @mcp.tool decorator commented out (permanently disabled) while both root and web docs still list it as live. Flag findings like this as asides in the report; don't silently "fix" facts that are outside the sync's approved scope.plugins/core-* ship the r2 model (five bootstrap-* files, classify-and-route). Root docs/ARCHITECTURE.md was rewritten to the r3 model (bootstrap-alwayson.md + one mode file, typed load aliases, three delivery modes MCP/plugin/local) while its tree/datasets still say r2. This mixed r2-tree / r3-content state is intentional transitional narrative — mirror root faithfully; do NOT "fix" the r2/r3 split in the web doc (that's a root-internal decision).ACQUIRE <path> FROM KB is retained in the new alias table as the MCP-only raw shell form (not stale); installation's "read all five bootstrap-* files" matched the actually-shipped copilot plugin (ls plugins/core-copilot*/…/*bootstrap*); the r2/r3 tree faithfully mirrored root. Only the FAQ prep-step wording was real. Discriminator: git log -S "<phrase>" — if the wording predates the model change it's genuine staleness; if it was re-authored in the model-change commit it's intentional. Fix real drift in BOTH root + web (release-agnostic phrasing) so the next sync doesn't re-flag it.USE/READ SKILL, READ/APPLY SKILL FILE, USE/READ FLOW, APPLY PHASE, INVOKE/READ SUBAGENT, READ/APPLY RULE, READ TEMPLATE, READ CONFIGURE, LIST <path>. Verbs: READ=load, APPLY=load+execute, USE/INVOKE=activate. Old GET PREP STEPS/SEARCH … IN KB/STORE/… ABOUT <project> aliases are gone; ACQUIRE … FROM KB survives only as the MCP-raw shell form. The web doc is MCP-centric, so when porting r3 content add a one-line framing of the three delivery modes in place (plugin/local are new vocabulary for a web reader).bundle install (gems aren't vendored in the repo). Then cd docs/web && bundle exec jekyll serve --detach --port <port>. Fetch pages with curl -s http://127.0.0.1:<port>/rosetta/docs/<page>/. Stop with pkill -f "jekyll serve". Sanity-check rendered HTML for the new section names and for <table> counts (a missed blank line before a markdown table renders as a literal |-delimited paragraph, not a table).docs/web/vendor/bundle/ exists. Seen: bundle exec jekyll serve fails with Bundler::GemNotFound — Gemfile.lock pins versions (addressable, json, public_suffix, concurrent-ruby) not present in the vendored dir. Fix is bundle install, which rewrites vendored gems + the lockfile — a dependency change, out of scope for a pure doc sync and not to be run autonomously. For a trivial edit (heading rename, a <video> embed that copies the form of an existing sibling, no new tables), static validation is enough: re-read the edited region and confirm blank-line spacing around headings/tags. Reserve the server run for changes that touch tables or new page structure.docs/web/docs/introduction.md, not a docs/web top-level page. README uses raw https://github.com/user-attachments/assets/<id> URLs on their own line; the web page wraps the same asset id in <video src="..." controls width="100%"></video>. When syncing a new demo, port the asset id into that <video> form, keep headings in sync (README ## Tech Demo: Init and Coding / ## Tech Demo: Frontend Modernization ↔ same on web).docs/MODERNIZATION.md is a Guides page, not the workflow page. Mirror to docs/web/docs/modernization.md (/docs/modernization/, sidebar Guides → "Modernization Guide"). Keep docs/web/docs/modernization-flow.md as the /modernization-flow phase authority (Workflows → "Modernization"). Do not merge methodology/prompts into the flow page. When adding a new Guides doc, also add a ### Guides contract block under DOC-STRUCTURE-PLAN §2 and a Reader-profiles table row; point CONFIGURATION / USAGE_GUIDE / flow Excludes at the guide so ownership stays MECE.docs/web/llms-full.txt is a CI artifact, edit the root copy. .github/workflows/pages.yml runs cp llms-full.txt docs/web/llms-full.txt at build; edits to the web copy are silently overwritten.introduction.md "Why use it" and "How it works" still carried pre-#123 text under identical headings. Method: awk each ## <name> block out of both files, normalize links (sed the /rosetta/docs/... and GitHub-blob forms back to relative), then diff. Run this for every shared heading before reporting "in sync".<a id="..."></a> anchors get dropped in web mirrors. Root USAGE_GUIDE.md marks link targets with bare HTML anchors before a <details> block; the web copy kept the <details> and lost the anchor, so /rosetta/docs/usage-guide/#how-rosetta-protects-you is dead. Validate link TARGETS, not just page permalinks: grep each #fragment against both ^#{1,6} <heading> and <a id="fragment"> in the destination file.PostToolUse (Write\|Edit) inside a cell splits into an extra column. Strip \| before counting, or the architecture hooks table reports three phantom mismatches every run.llms-full.txt changed mid-session with no hooks configured; a peer agent owned it and said so by message. Re-run git status before staging, never git add -A, stage explicit paths. While the peer is live, leave its files alone and name them in the report.llms-full.txt against ls instructions/r3/core/skills confirmed 42/42, but also caught three orchestrator-contract references the peer missed (renamed to orchestration; source of truth = .github/prompts/*.md + FAQ.md, not the peer's note). Grep every USE SKILL <x>, /<x>-flow and agent role in the file against the r3 tree before committing someone else's work under your name.docs/ARCHITECTURE.md, docs/web/docs/architecture.md, and root llms-full.txt each state skill/agent/workflow counts. Seen at 40/40/38. Fix all three, verify against ls instructions/r3/core/skills.griddynamics/rosetta
ee7166a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.