[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73C8DH6GWYQPRSWQBTSYYRC":3,"skill-same:01M73C8DH6GWYQPRSWQBTSYYRC":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M73C8DH6GWYQPRSWQBTSYYRC","project-resync",null,"Full bidirectional sync cycle for fleet member projects (Projects\u002Fco-* minus the docs\u002Ffleet-membership.json exclusions): provenance-audit uncommitted content, sync each project to its GitHub remote, selectively promote reusable work back into templates\u002FL0, review each project (cadenced), run the root \u002Fsync, upgrade projects from their variant templates, and land upgrade PRs. Use when: user says \"project-resync\", \"resync projects\", \"resync the project fleet\", \"sync project cycle\", or asks to sync\u002Fbackport\u002Fupgrade the Projects\u002F* fleet. Distinct from the `sync` skill (single-repo commit→PR pipeline): this is the whole-fleet, bidirectional cycle.","5throck\u002Fai-workspace-standards","5throck","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F10958964?v=4","01M73BFEH0V0VS483TW4JD49JW","01M73BFEJ5VQZJHJSFTVPAZGDM",25,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fproject-resync\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: project-resync\nversion: 1.8.0\ndescription: >\n  Full bidirectional sync cycle for fleet member projects (Projects\u002Fco-*\n  minus the docs\u002Ffleet-membership.json exclusions): provenance-audit\n  uncommitted content, sync each project to its GitHub remote, selectively\n  promote reusable work back into templates\u002FL0, review each project (cadenced),\n  run the root \u002Fsync, upgrade projects from their variant templates, and land\n  upgrade PRs. Use when: user says \"project-resync\", \"resync projects\", \"resync\n  the project fleet\", \"sync project cycle\", or asks to sync\u002Fbackport\u002Fupgrade\n  the Projects\u002F* fleet. Distinct from the `sync` skill (single-repo commit→PR\n  pipeline): this is the whole-fleet, bidirectional cycle.\nstatus: active\nscope: common\nl2_propagate: false\nowner: pm\nlast_updated: 2026-11-07\nlast_reviewed: 2026-11-08\nprerequisites: gh CLI authenticated; workspace-root CWD\nrelates_to:\n  - skill: sync\n    type: composes_with\n  - skill: upgrade-project\n    type: follows\n  - skill: project-to-variant\n    type: relates_to\n  - skill: project-review\n    type: composes_with\nmetadata:\n  type: orchestration\n  triggers:\n    - project-resync\n    - resync projects\n    - sync project cycle\n---\n\n# project-resync\n\nFull bidirectional sync cycle for the template fleet. One run covers:\nprovenance audit → GitHub sync → selective backport → root PR → upgrades →\nupgrade PRs. **Safety first: nothing is pushed without a dated provenance\nverdict** — stale sync-wave residue must never pollute a remote.\n**Fleet membership SSOT** (DEC-20261107-01): the project set is derived ONLY\nvia `bun scripts\u002Ffleet-list.ts --json` — `Projects\u002Fco-*` directories minus\nthe exclusions recorded in `docs\u002Ffleet-membership.json`. Never hardcode the\nfleet count; never fall back to a raw `Projects\u002Fco-*` glob, even when the\nhelper fails (on helper\u002Fregistry failure, STOP and file one urgent ticket).\n\n## Safety Rules (non-negotiable)\n\n1. **Audit before any commit\u002Fpush** (Step 0). No verdict → no action.\n2. **Never commit STALE-RESIDUE verdicts.** Snapshot locally before discarding;\n   snapshots are never pushed.\n3. **Never use `--no-verify`** or bypass either the project's or the\n   workspace's sync gates.\n4. **Remote bootstrap**: remote-less repos get `gh repo create 5throck\u002F\u003Cname>\n   --private` + `git remote add origin` — private strictly, no\n   collaborators\u002Ftopics unless asked.\n5. **PR base = project default branch**; verify\n   before merging.\n6. **Backport gate**: promote only template-grade, reusable content. Engagement\n   output, domain stacks, and VARIANT-INJECT content stay in the project\n   (ADR-0031). Never backport deprecated skills.\n7. KEEP-uncertain defaults to COMMIT-side review, never silent deletion.\n\n## Step 0 — Provenance audit\n\n```bash\nbun scripts\u002Fresync-audit.ts --snapshot-dir \u002Ftmp\u002Fresync-snapshots\n```\n\nReview the per-project verdict tables:\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| STALE-RESIDUE | equals a current L0\u002FL1\u002FL2 source, or an older revision corroborated by project mtime older + line-order agreement | snapshot → discard (tracked: `git checkout --`, untracked: delete) |\n| PRESUME-STALE | subset of a source without mtime\u002Forder corroboration — possible deliberate reordering or legitimate deletion | human confirm before discard; routes to commit-side review like LOCAL-WORK |\n| LOCAL-WORK | diverges from HEAD and every source; or non-template file | commit candidate (Step 1); feeds backport review (Step 2) |\n| KEEP | unresolvable | human review; default to commit on a side branch if risky |\n\nApply verdicts only after reading the MIXED-group per-file details.\n\n## Step 1 — Sync each project to GitHub\n\nPer project (clean of STALE-RESIDUE now):\n\n1. Commit the LOCAL-WORK set via the **project's own dev-sync** (mandatory\n   pathway; creates `pr\u002F\u003Cts>-\u003Cslug>` + PR with audit gates):\n   `bun scripts\u002Fdev-sync.ts --body-file \u003Cbody> \"\u003Cenglish conventional message>\"`.\n2. Bootstrap remote-less repos first (`gh repo create 5throck\u002F\u003Cx> --private`,\n   `git remote add origin`, push current branch).\n3. Merge each PR when checks are CLEAN; checkout default + pull; delete\n   branches. Projects with no changes (or already-pushed commits only): just\n   push \u002F skip.\n\n## Step 2 — Selective backport review\n\nDiff each project's **landed delta for this cycle** against its variant surface\n(`templates\u002Fco-\u003Cx>\u002F`) using the 5-surface method\n(docs\u002Fdesigns\u002F2026-08-28-project-template-backport-design.md). The delta source\nis the union of:\n\n- **(a) Step-1 LOCAL-WORK landings** (as before); and\n- **(b) merged PRs in the review window** that are **non-mechanical** —\n  mechanical = the PR is a template-delivery\u002Fworkspace-sync landing whose\n  changed files are limited to `template-version.txt`, `.claude\u002Flast-upgrade-*`,\n  `docs\u002FVERSION_MANIFEST.md`, `memory\u002F`, and generated registries\n  (`chore: upgrade template…` \u002F `chore: workspace sync…` shapes). Session work\n  a project landed through its own dev-sync PRs (feature\u002Ffix\u002Fdocs PRs) is NOT\n  mechanical and MUST enter the judgment. For (b), run\n  `bun scripts\u002Fbackport-diff.ts --project \u003Cp> --base \u003Cpre-window-rev>` where\n  pre-window-rev is the project revision before the window's first\n  non-mechanical merge (fall back to the mechanical wave's merge if the exact\n  rev is unclear; state the base used in the report).\n\nSession-landed work previously bypassed this step entirely (only Step 2e saw\nit, requests-only) — since 1.7.0 every landed delta gets a promote \u002F\nstays-project \u002F discarded-stale verdict:\n\n- **Promote** template-grade, reusable assets into `templates\u002Fco-\u003Cx>\u002F` (or L0\n  for cross-variant assets) — after measuring that the project copy is\n  genuinely newer\u002Fricher, not just divergent.\n- **Stays-project**: engagement output, domain content, VARIANT-INJECT blocks.\n- 5-surface candidate table aid: `bun scripts\u002Fbackport-diff.ts --project\n  \u003Cco-name> --base \u003Crev>` (v1.0.2, standard aid since T-20261009-003) plus\n  surface-by-surface reads over the named range.\n- Produce the per-variant judgment report (promoted \u002F stays-project \u002F\n  discarded-stale, per source (a)\u002F(b)) — it feeds Step 3's PR body and the\n  root CHANGELOG.\n- Validate: `bun scripts\u002Fvalidate-templates.ts`, `bun test` (root).\n\n## Step 2b — Evidence plane review\n\nRun `bun scripts\u002Fevidence-backport-scan.ts`. Read-only: reports candidates, never\nwrites into `templates\u002F` or into any `Projects\u002Fco-*` instance (design\ndocs\u002Fdesigns\u002F2026-09-19-actor-model-and-evidence-backport-design.md §4, ADR-0084\nDecision 6).\n\nFor each project, record the detected form (F1 prose ledger \u002F F2 registry-backed \u002F\nF3 schema-typed \u002F F0 unrecognized \u002F MIXED \u002F none), the M1-M6 maturity results, and\nthe verdict:\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| PROMOTABLE | form real + all of M1-M6 pass | promote (see below) |\n| SCHEMA-ONLY | M6a passes (a procedure exists) but M6b fails (not repeatedly used) | human-triage row; do not promote |\n| NOT_YET | some other maturity test failed | human-triage row; do not promote |\n| NEEDS_TRIAGE | F0, MIXED, or no evidence-shaped content at all | human-triage row; do not promote |\n\nPromote only `PROMOTABLE` candidates, and only by authoring the **pair** — under\n`templates\u002Fco-\u003Cx>\u002F`:\n\n- the F3 schema (`evidence-models\u002F\u003Crecord-type>.schema.json`, regardless of the\n  source form),\n- its companion `evidence-collection-\u003Cname>` skill (a generalization of the\n  source collection procedure — never a copy of engagement-specific content),\n- a provenance `README.md` recording the source project, source form, the skill\n  path that satisfied M6, the commit range the maturity bar was measured over,\n  and the M1-M6 results.\n\nA schema promoted without its companion procedure is an incomplete backport and\nMUST be rejected at review. Route `F0`, `MIXED`, `SCHEMA-ONLY`, and any\n`NOT_YET` verdict to the cycle report as human-triage rows. Never auto-write\ninto `templates\u002F`. Safety Rule 6 (backport gate) governs this step unchanged.\n\n## Step 2c — Fleet echo check\n\nFor each backport-worthy LOCAL-WORK candidate from Step 2, check whether the\nsame change (fix, improvement, or gap) echoes across the rest of the fleet:\n\n1. Derive a fixed query per candidate: its distinctive identifiers or strings\n   (symbol names, error messages, config keys — stable tokens that only match\n   the changed code).\n2. Run the query across ALL fleet repos (the membership SSOT —\n   `bun scripts\u002Ffleet-list.ts --json`), scoped to the surface the\n   candidate came from (e.g.\n   `grep -rn \"\u003Cidentifier>\" Projects\u002F*\u002Fskills\u002F Projects\u002F*\u002Fscripts\u002F`).\n3. Record a per-project verdict in the Step 2 judgment report:\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| same-defect-present | the sibling carries the same pre-fix content | row in the cycle report — the fix lands in that project's own next resync |\n| absent | the sibling has no matching content (different lineage, or already resolved) | no action |\n| divergent-implementation | the sibling solves the same problem differently | human-triage row — possible cross-project learning, never merged mechanically |\n\nReport-only: this step never edits sibling projects. ADR-0031 Principle 5\n(`docs\u002Fadr\u002F0031-l1-l2-fork-model.md`) forbids automated sibling sync — drift\nREPORTING is the sanctioned direction. Each project adopts its echo fixes\nthrough its own reviewed resync cycle.\n\n## Step 2d — Upstream request ledger (design 2026-10-07-daily-fleet-learning-extraction)\n\nRead-only upward-carrier reporting; added by user direction 2026-10-07:\n\n1. Read every open upstream-request ticket (`kind: manual`, `U-` ids) in the\n   workspace store and every `LOCAL-PATCH(upstream-request: \u003Cid>)` marker in\n   the fleet.\n2. Report each in the cycle report as the **upstream request ledger**:\n   requesting project, subject, disposition stage (received \u002F designed \u002F\n   fixed \u002F re-delivered), and — when re-delivered — the template version that\n   carried the fix to the requesting project.\n3. Loop-closing duty: when this cycle's upgrade wave delivered a fix a\n   project requested, state the pairing explicitly (\"co-develop's U-20261006-001\n   reached the fleet via v0.13.1\"). Report only — no edits.\n\n## Step 2e — Learning extraction (design 2026-10-07-daily-fleet-learning-extraction)\n\nFor each project with **merged landings in the window** (PRs merged, or\ncommits landed by its own session), dispatch one scoped review pass over the\ndelta (daily cadence, user directive 2026-10-07 — nightly batches are 1–3\nlandings, small and fresh):\n\n1. Identify reusable assets: template enhancement, new\u002Freusable skill, L0\n   tooling improvement, cross-pollination candidate.\n2. File one ticket per asset — `kind: manual`, title prefix `learning:` —\n   citing evidence refs (files, PRs). Requests only.\n3. **No silence rule**: a landing with no reusable assets gets a one-line\n   \"reviewed, nothing to extract\" entry. Every landing produces either a\n   request or an explicit negative.\n4. **Never write into `templates\u002F`, sibling projects, or promotion surfaces**\n   from this step. Promotion remains human-judged (user directive 2026-10-07);\n   this step adds reporting and requests, moving no promotion authority\n   (ADR-0031 unchanged).\n5. Budget: review up to 3 landings per night; overflow is listed and carried\n   to the next night first-in-first-reviewed. Pollination (Step 2c) is\n   redefined to seed from these extracted assets, not only from backport\n   diffs. The Friday FULL sweep reviews the cumulative week as the safety\n   net for anything a nightly pass missed or degraded.\n6. **Skill-graph learning cross-reference** (since 1.7.0): after Phase-I's\n   `skill-graph-fleet-report.ts` snapshot exists, diff per-project skill sets\n   and node counts against the prior snapshot. Project-side **new skills this\n   window** join the extraction pass as candidates; a new\u002Fsimilar skill\n   converging across ≥3 projects, or a fleet-report delivery gap (root skill\n   missing from projects), files a `skill-graph:`-prefixed ticket row.\n   Report-only — this never edits `skills\u002F`, `templates\u002F`, or projects.\n\n## Step 2f — Per-project review (cadence; since 1.7.0)\n\nThe fleet's project reviews previously happened only in ad-hoc sessions — the\nnightly cycle now carries a per-project review leg (design\n2026-10-27-project-resync-coverage-design):\n\n1. **Battery ALWAYS** (no agents): run each project's own `bun scripts\u002Faudit.ts`\n   and record PASS\u002FFAIL per project in the cycle report. Any FAIL → same-day\n   ticket with the mandatory Class column.\n2. **SCOPED review** for every project with a non-mechanical window landing\n   (same set as Step 2 source (b)): one window-scoped read-only reviewer per\n   project — Critical \u002F High \u002F Moderate \u002F Strengths with file:line evidence,\n   Class column (one-time \u002F systemic \u002F script-gap), in the cycle report's\n   per-project section. Script-gap findings become validator-hardening tickets\n   like any project-review run.\n3. **ROTATION safety net**: when the scoped set is empty (or the night is\n   heavy), review exactly one project per night by deterministic rotation —\n   `day-of-year mod N` over the sorted fleet SSOT list\n   (`bun scripts\u002Ffleet-list.ts`) — so every project\n   is reviewed at least once per N nights even when quiet. State the rotated\n   project in the report.\n4. **Budget binding**: Step 2f reviewers share the nightly ≤4-agent cap with\n   Phase 1b variant reviews and Step 2e extraction passes; on cap exhaustion,\n   remaining projects degrade to battery-only with an explicit note and carry\n   FIFO to the next night. Degraded cycle (Phase I ≥3 ERRORs) → battery-only,\n   no reviewers.\n\n## Step 3 — Root PR\n\nStandard `\u002Fsync` with the Step-2 report; merge before Step 4 (sequential\nbranch rule — upgrades must see merged templates).\n\n## Step 4 — Upgrade projects\n\nPer project: `bun scripts\u002Fupgrade-project.ts Projects\u002F\u003Cp> --dry-run --prune-removed` →\nreview category plan → run with the same flags → verify\n`.claude\u002Ftemplate-version.txt` and project `bun scripts\u002Faudit.ts`.\n\n`--prune-removed` is mandatory in this cycle: the upgrade engine is\n`L0`-only and the delivered tree carries no engine copy (ADR-0073\nAmendments 1, 3 and 4 — the delivered scripts are `validate-templates.ts`\nplus the `lib\u002F` leaf modules `upgrade-policy.ts`, `skills-registry.ts` and\n`platform-skeleton-merge.ts` that project `dev-sync.ts`\u002F`validate-templates.ts`\nimport), so any project still holding a stray engine copy\n(`scripts\u002Fupgrade-project.ts`)\ngets it retired by this flag and drops the pruned script's registry row itself. A registered project-local script (SCRIPTS.md source\ncell = the variant name) is never pruned; if one still disappears, that is a\npruner defect — file a ticket, do not hand-restore silently.\n\nThe delivered scripts' SCRIPTS.md\nregistry rows reconcile automatically (common-registry fallback, layer\nrewrite, duplicate-row removal). Still proof-check the upgrade:\n`bun scripts\u002Fverify-scripts.ts --verify` per project must exit clean — an\nunregistered script there means the reconcile missed a case (report it,\ndo not hand-patch silently). Upgrades must run on a clean tree: the\npre-upgrade `git stash push` snapshot reverts uncommitted tracked changes.\nNote the upgrader is workspace-side only (`L0`, ADR-0073 Amendment 1) —\ninvoke `bun scripts\u002Fupgrade-project.ts …` from the workspace root; from\ninside a project use `bun ..\u002F..\u002Fscripts\u002Fupgrade-project.ts .`.\n\n## Step 5 — Upgrade PRs + final verification\n\nPer project: dev-sync `chore: upgrade template to \u003Cversion>`, merge CLEAN,\ndefault + pull + delete branches. Final gate: all projects have clean trees,\n0 unpushed, 0 open PRs, passing audits; root audit + validate-templates pass.\n\n## Step 6 — Fleet branch cleanup + root final sync\n\nAfter Step 5's merges:\n\n1. **Remote PR branches**: for every project, delete merged `pr\u002F*` branches —\n   `git -C \u003Cproject> branch -r --merged origin | grep 'origin\u002Fpr\u002F'` →\n   `git -C \u003Cproject> push origin --delete \u003Cbranch>`; then `git fetch --prune`.\n   (Repos with auto-delete-on-merge need only the prune.)\n2. **Local PR branches**: `git -C \u003Cproject> branch --list 'pr\u002F*'` → `-D` after\n   verifying each is merged. Return every repo to its default branch + pull.\n3. **Root final sync**: root must be on `main`, pulled, clean (`git status`).\n4. Emit the final state table — per project: dirty \u002F unpushed \u002F open PRs \u002F\n   template version — all zeros before declaring the cycle complete.\n\n## Output Format\n\n- Step 0: audit tables (script output) + applied-verdict summary per project.\n- Steps 1\u002F5: per-project PR URLs + merge states.\n- Step 2: per-variant judgment report.\n- Step 2b: evidence-backport-scan verdict table per project + human-triage rows.\n- Step 2c: fleet echo-check verdict table per backport candidate.\n- Step 2d: upstream request ledger (read-only upward-carrier report).\n- Step 2e: learning-extraction outputs (including skill-graph cross-reference rows).\n- Step 2f: per-project review section — battery table (all projects) + scoped\u002Frotation findings.\n- Cycle summary: one table — project → synced? \u002F promoted? \u002F reviewed? \u002F upgraded? \u002F final state.\n\n## Related Skills\n\n- **sync**: single-repo commit→PR pipeline (used inside projects and at root).\n- **upgrade-project**: L2→L3 delivery (Step 4).\n- **project-to-variant**: standalone-project promotion (different concern —\n  not part of this cycle).\n- **project-review**: loop: project-review (diagnose) → project-resync (fleet sync\u002Fbackport) → upgrade-project (deliver) → project-review baseline-only (verify).\n","# project-resync\n\nFull bidirectional sync cycle for the template fleet. One run covers:\nprovenance audit → GitHub sync → selective backport → root PR → upgrades →\nupgrade PRs. **Safety first: nothing is pushed without a dated provenance\nverdict** — stale sync-wave residue must never pollute a remote.\n**Fleet membership SSOT** (DEC-20261107-01): the project set is derived ONLY\nvia `bun scripts\u002Ffleet-list.ts --json` — `Projects\u002Fco-*` directories minus\nthe exclusions recorded in `docs\u002Ffleet-membership.json`. Never hardcode the\nfleet count; never fall back to a raw `Projects\u002Fco-*` glob, even when the\nhelper fails (on helper\u002Fregistry failure, STOP and file one urgent ticket).\n\n## Safety Rules (non-negotiable)\n\n1. **Audit before any commit\u002Fpush** (Step 0). No verdict → no action.\n2. **Never commit STALE-RESIDUE verdicts.** Snapshot locally before discarding;\n   snapshots are never pushed.\n3. **Never use `--no-verify`** or bypass either the project's or the\n   workspace's sync gates.\n4. **Remote bootstrap**: remote-less repos get `gh repo create 5throck\u002F\u003Cname>\n   --private` + `git remote add origin` — private strictly, no\n   collaborators\u002Ftopics unless asked.\n5. **PR base = project default branch**; verify\n   before merging.\n6. **Backport gate**: promote only template-grade, reusable content. Engagement\n   output, domain stacks, and VARIANT-INJECT content stay in the project\n   (ADR-0031). Never backport deprecated skills.\n7. KEEP-uncertain defaults to COMMIT-side review, never silent deletion.\n\n## Step 0 — Provenance audit\n\n```bash\nbun scripts\u002Fresync-audit.ts --snapshot-dir \u002Ftmp\u002Fresync-snapshots\n```\n\nReview the per-project verdict tables:\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| STALE-RESIDUE | equals a current L0\u002FL1\u002FL2 source, or an older revision corroborated by project mtime older + line-order agreement | snapshot → discard (tracked: `git checkout --`, untracked: delete) |\n| PRESUME-STALE | subset of a source without mtime\u002Forder corroboration — possible deliberate reordering or legitimate deletion | human confirm before discard; routes to commit-side review like LOCAL-WORK |\n| LOCAL-WORK | diverges from HEAD and every source; or non-template file | commit candidate (Step 1); feeds backport review (Step 2) |\n| KEEP | unresolvable | human review; default to commit on a side branch if risky |\n\nApply verdicts only after reading the MIXED-group per-file details.\n\n## Step 1 — Sync each project to GitHub\n\nPer project (clean of STALE-RESIDUE now):\n\n1. Commit the LOCAL-WORK set via the **project's own dev-sync** (mandatory\n   pathway; creates `pr\u002F\u003Cts>-\u003Cslug>` + PR with audit gates):\n   `bun scripts\u002Fdev-sync.ts --body-file \u003Cbody> \"\u003Cenglish conventional message>\"`.\n2. Bootstrap remote-less repos first (`gh repo create 5throck\u002F\u003Cx> --private`,\n   `git remote add origin`, push current branch).\n3. Merge each PR when checks are CLEAN; checkout default + pull; delete\n   branches. Projects with no changes (or already-pushed commits only): just\n   push \u002F skip.\n\n## Step 2 — Selective backport review\n\nDiff each project's **landed delta for this cycle** against its variant surface\n(`templates\u002Fco-\u003Cx>\u002F`) using the 5-surface method\n(docs\u002Fdesigns\u002F2026-08-28-project-template-backport-design.md). The delta source\nis the union of:\n\n- **(a) Step-1 LOCAL-WORK landings** (as before); and\n- **(b) merged PRs in the review window** that are **non-mechanical** —\n  mechanical = the PR is a template-delivery\u002Fworkspace-sync landing whose\n  changed files are limited to `template-version.txt`, `.claude\u002Flast-upgrade-*`,\n  `docs\u002FVERSION_MANIFEST.md`, `memory\u002F`, and generated registries\n  (`chore: upgrade template…` \u002F `chore: workspace sync…` shapes). Session work\n  a project landed through its own dev-sync PRs (feature\u002Ffix\u002Fdocs PRs) is NOT\n  mechanical and MUST enter the judgment. For (b), run\n  `bun scripts\u002Fbackport-diff.ts --project \u003Cp> --base \u003Cpre-window-rev>` where\n  pre-window-rev is the project revision before the window's first\n  non-mechanical merge (fall back to the mechanical wave's merge if the exact\n  rev is unclear; state the base used in the report).\n\nSession-landed work previously bypassed this step entirely (only Step 2e saw\nit, requests-only) — since 1.7.0 every landed delta gets a promote \u002F\nstays-project \u002F discarded-stale verdict:\n\n- **Promote** template-grade, reusable assets into `templates\u002Fco-\u003Cx>\u002F` (or L0\n  for cross-variant assets) — after measuring that the project copy is\n  genuinely newer\u002Fricher, not just divergent.\n- **Stays-project**: engagement output, domain content, VARIANT-INJECT blocks.\n- 5-surface candidate table aid: `bun scripts\u002Fbackport-diff.ts --project\n  \u003Cco-name> --base \u003Crev>` (v1.0.2, standard aid since T-20261009-003) plus\n  surface-by-surface reads over the named range.\n- Produce the per-variant judgment report (promoted \u002F stays-project \u002F\n  discarded-stale, per source (a)\u002F(b)) — it feeds Step 3's PR body and the\n  root CHANGELOG.\n- Validate: `bun scripts\u002Fvalidate-templates.ts`, `bun test` (root).\n\n## Step 2b — Evidence plane review\n\nRun `bun scripts\u002Fevidence-backport-scan.ts`. Read-only: reports candidates, never\nwrites into `templates\u002F` or into any `Projects\u002Fco-*` instance (design\ndocs\u002Fdesigns\u002F2026-09-19-actor-model-and-evidence-backport-design.md §4, ADR-0084\nDecision 6).\n\nFor each project, record the detected form (F1 prose ledger \u002F F2 registry-backed \u002F\nF3 schema-typed \u002F F0 unrecognized \u002F MIXED \u002F none), the M1-M6 maturity results, and\nthe verdict:\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| PROMOTABLE | form real + all of M1-M6 pass | promote (see below) |\n| SCHEMA-ONLY | M6a passes (a procedure exists) but M6b fails (not repeatedly used) | human-triage row; do not promote |\n| NOT_YET | some other maturity test failed | human-triage row; do not promote |\n| NEEDS_TRIAGE | F0, MIXED, or no evidence-shaped content at all | human-triage row; do not promote |\n\nPromote only `PROMOTABLE` candidates, and only by authoring the **pair** — under\n`templates\u002Fco-\u003Cx>\u002F`:\n\n- the F3 schema (`evidence-models\u002F\u003Crecord-type>.schema.json`, regardless of the\n  source form),\n- its companion `evidence-collection-\u003Cname>` skill (a generalization of the\n  source collection procedure — never a copy of engagement-specific content),\n- a provenance `README.md` recording the source project, source form, the skill\n  path that satisfied M6, the commit range the maturity bar was measured over,\n  and the M1-M6 results.\n\nA schema promoted without its companion procedure is an incomplete backport and\nMUST be rejected at review. Route `F0`, `MIXED`, `SCHEMA-ONLY`, and any\n`NOT_YET` verdict to the cycle report as human-triage rows. Never auto-write\ninto `templates\u002F`. Safety Rule 6 (backport gate) governs this step unchanged.\n\n## Step 2c — Fleet echo check\n\nFor each backport-worthy LOCAL-WORK candidate from Step 2, check whether the\nsame change (fix, improvement, or gap) echoes across the rest of the fleet:\n\n1. Derive a fixed query per candidate: its distinctive identifiers or strings\n   (symbol names, error messages, config keys — stable tokens that only match\n   the changed code).\n2. Run the query across ALL fleet repos (the membership SSOT —\n   `bun scripts\u002Ffleet-list.ts --json`), scoped to the surface the\n   candidate came from (e.g.\n   `grep -rn \"\u003Cidentifier>\" Projects\u002F*\u002Fskills\u002F Projects\u002F*\u002Fscripts\u002F`).\n3. Record a per-project verdict in the Step 2 judgment report:\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| same-defect-present | the sibling carries the same pre-fix content | row in the cycle report — the fix lands in that project's own next resync |\n| absent | the sibling has no matching content (different lineage, or already resolved) | no action |\n| divergent-implementation | the sibling solves the same problem differently | human-triage row — possible cross-project learning, never merged mechanically |\n\nReport-only: this step never edits sibling projects. ADR-0031 Principle 5\n(`docs\u002Fadr\u002F0031-l1-l2-fork-model.md`) forbids automated sibling sync — drift\nREPORTING is the sanctioned direction. Each project adopts its echo fixes\nthrough its own reviewed resync cycle.\n\n## Step 2d — Upstream request ledger (design 2026-10-07-daily-fleet-learning-extraction)\n\nRead-only upward-carrier reporting; added by user direction 2026-10-07:\n\n1. Read every open upstream-request ticket (`kind: manual`, `U-` ids) in the\n   workspace store and every `LOCAL-PATCH(upstream-request: \u003Cid>)` marker in\n   the fleet.\n2. Report each in the cycle report as the **upstream request ledger**:\n   requesting project, subject, disposition stage (received \u002F designed \u002F\n   fixed \u002F re-delivered), and — when re-delivered — the template version that\n   carried the fix to the requesting project.\n3. Loop-closing duty: when this cycle's upgrade wave delivered a fix a\n   project requested, state the pairing explicitly (\"co-develop's U-20261006-001\n   reached the fleet via v0.13.1\"). Report only — no edits.\n\n## Step 2e — Learning extraction (design 2026-10-07-daily-fleet-learning-extraction)\n\nFor each project with **merged landings in the window** (PRs merged, or\ncommits landed by its own session), dispatch one scoped review pass over the\ndelta (daily cadence, user directive 2026-10-07 — nightly batches are 1–3\nlandings, small and fresh):\n\n1. Identify reusable assets: template enhancement, new\u002Freusable skill, L0\n   tooling improvement, cross-pollination candidate.\n2. File one ticket per asset — `kind: manual`, title prefix `learning:` —\n   citing evidence refs (files, PRs). Requests only.\n3. **No silence rule**: a landing with no reusable assets gets a one-line\n   \"reviewed, nothing to extract\" entry. Every landing produces either a\n   request or an explicit negative.\n4. **Never write into `templates\u002F`, sibling projects, or promotion surfaces**\n   from this step. Promotion remains human-judged (user directive 2026-10-07);\n   this step adds reporting and requests, moving no promotion authority\n   (ADR-0031 unchanged).\n5. Budget: review up to 3 landings per night; overflow is listed and carried\n   to the next night first-in-first-reviewed. Pollination (Step 2c) is\n   redefined to seed from these extracted assets, not only from backport\n   diffs. The Friday FULL sweep reviews the cumulative week as the safety\n   net for anything a nightly pass missed or degraded.\n6. **Skill-graph learning cross-reference** (since 1.7.0): after Phase-I's\n   `skill-graph-fleet-report.ts` snapshot exists, diff per-project skill sets\n   and node counts against the prior snapshot. Project-side **new skills this\n   window** join the extraction pass as candidates; a new\u002Fsimilar skill\n   converging across ≥3 projects, or a fleet-report delivery gap (root skill\n   missing from projects), files a `skill-graph:`-prefixed ticket row.\n   Report-only — this never edits `skills\u002F`, `templates\u002F`, or projects.\n\n## Step 2f — Per-project review (cadence; since 1.7.0)\n\nThe fleet's project reviews previously happened only in ad-hoc sessions — the\nnightly cycle now carries a per-project review leg (design\n2026-10-27-project-resync-coverage-design):\n\n1. **Battery ALWAYS** (no agents): run each project's own `bun scripts\u002Faudit.ts`\n   and record PASS\u002FFAIL per project in the cycle report. Any FAIL → same-day\n   ticket with the mandatory Class column.\n2. **SCOPED review** for every project with a non-mechanical window landing\n   (same set as Step 2 source (b)): one window-scoped read-only reviewer per\n   project — Critical \u002F High \u002F Moderate \u002F Strengths with file:line evidence,\n   Class column (one-time \u002F systemic \u002F script-gap), in the cycle report's\n   per-project section. Script-gap findings become validator-hardening tickets\n   like any project-review run.\n3. **ROTATION safety net**: when the scoped set is empty (or the night is\n   heavy), review exactly one project per night by deterministic rotation —\n   `day-of-year mod N` over the sorted fleet SSOT list\n   (`bun scripts\u002Ffleet-list.ts`) — so every project\n   is reviewed at least once per N nights even when quiet. State the rotated\n   project in the report.\n4. **Budget binding**: Step 2f reviewers share the nightly ≤4-agent cap with\n   Phase 1b variant reviews and Step 2e extraction passes; on cap exhaustion,\n   remaining projects degrade to battery-only with an explicit note and carry\n   FIFO to the next night. Degraded cycle (Phase I ≥3 ERRORs) → battery-only,\n   no reviewers.\n\n## Step 3 — Root PR\n\nStandard `\u002Fsync` with the Step-2 report; merge before Step 4 (sequential\nbranch rule — upgrades must see merged templates).\n\n## Step 4 — Upgrade projects\n\nPer project: `bun scripts\u002Fupgrade-project.ts Projects\u002F\u003Cp> --dry-run --prune-removed` →\nreview category plan → run with the same flags → verify\n`.claude\u002Ftemplate-version.txt` and project `bun scripts\u002Faudit.ts`.\n\n`--prune-removed` is mandatory in this cycle: the upgrade engine is\n`L0`-only and the delivered tree carries no engine copy (ADR-0073\nAmendments 1, 3 and 4 — the delivered scripts are `validate-templates.ts`\nplus the `lib\u002F` leaf modules `upgrade-policy.ts`, `skills-registry.ts` and\n`platform-skeleton-merge.ts` that project `dev-sync.ts`\u002F`validate-templates.ts`\nimport), so any project still holding a stray engine copy\n(`scripts\u002Fupgrade-project.ts`)\ngets it retired by this flag and drops the pruned script's registry row itself. A registered project-local script (SCRIPTS.md source\ncell = the variant name) is never pruned; if one still disappears, that is a\npruner defect — file a ticket, do not hand-restore silently.\n\nThe delivered scripts' SCRIPTS.md\nregistry rows reconcile automatically (common-registry fallback, layer\nrewrite, duplicate-row removal). Still proof-check the upgrade:\n`bun scripts\u002Fverify-scripts.ts --verify` per project must exit clean — an\nunregistered script there means the reconcile missed a case (report it,\ndo not hand-patch silently). Upgrades must run on a clean tree: the\npre-upgrade `git stash push` snapshot reverts uncommitted tracked changes.\nNote the upgrader is workspace-side only (`L0`, ADR-0073 Amendment 1) —\ninvoke `bun scripts\u002Fupgrade-project.ts …` from the workspace root; from\ninside a project use `bun ..\u002F..\u002Fscripts\u002Fupgrade-project.ts .`.\n\n## Step 5 — Upgrade PRs + final verification\n\nPer project: dev-sync `chore: upgrade template to \u003Cversion>`, merge CLEAN,\ndefault + pull + delete branches. Final gate: all projects have clean trees,\n0 unpushed, 0 open PRs, passing audits; root audit + validate-templates pass.\n\n## Step 6 — Fleet branch cleanup + root final sync\n\nAfter Step 5's merges:\n\n1. **Remote PR branches**: for every project, delete merged `pr\u002F*` branches —\n   `git -C \u003Cproject> branch -r --merged origin | grep 'origin\u002Fpr\u002F'` →\n   `git -C \u003Cproject> push origin --delete \u003Cbranch>`; then `git fetch --prune`.\n   (Repos with auto-delete-on-merge need only the prune.)\n2. **Local PR branches**: `git -C \u003Cproject> branch --list 'pr\u002F*'` → `-D` after\n   verifying each is merged. Return every repo to its default branch + pull.\n3. **Root final sync**: root must be on `main`, pulled, clean (`git status`).\n4. Emit the final state table — per project: dirty \u002F unpushed \u002F open PRs \u002F\n   template version — all zeros before declaring the cycle complete.\n\n## Output Format\n\n- Step 0: audit tables (script output) + applied-verdict summary per project.\n- Steps 1\u002F5: per-project PR URLs + merge states.\n- Step 2: per-variant judgment report.\n- Step 2b: evidence-backport-scan verdict table per project + human-triage rows.\n- Step 2c: fleet echo-check verdict table per backport candidate.\n- Step 2d: upstream request ledger (read-only upward-carrier report).\n- Step 2e: learning-extraction outputs (including skill-graph cross-reference rows).\n- Step 2f: per-project review section — battery table (all projects) + scoped\u002Frotation findings.\n- Cycle summary: one table — project → synced? \u002F promoted? \u002F reviewed? \u002F upgraded? \u002F final state.\n\n## Related Skills\n\n- **sync**: single-repo commit→PR pipeline (used inside projects and at root).\n- **upgrade-project**: L2→L3 delivery (Step 4).\n- **project-to-variant**: standalone-project promotion (different concern —\n  not part of this cycle).\n- **project-review**: loop: project-review (diagnose) → project-resync (fleet sync\u002Fbackport) → upgrade-project (deliver) → project-review baseline-only (verify).\n",{"name":5,"owner":23,"scope":24,"status":25,"version":26,"metadata":27,"relates_to":32,"description":44,"l2_propagate":19,"last_updated":45,"last_reviewed":46,"prerequisites":47},"pm","common","active","1.8.0",{"type":28,"triggers":29},"orchestration",[5,30,31],"resync projects","sync project cycle",[33,36,39,42],{"type":34,"skill":35},"composes_with","sync",{"type":37,"skill":38},"follows","upgrade-project",{"type":40,"skill":41},"relates_to","project-to-variant",{"type":34,"skill":43},"project-review","Full bidirectional sync cycle for fleet member projects (Projects\u002Fco-* minus the docs\u002Ffleet-membership.json exclusions): provenance-audit uncommitted content, sync each project to its GitHub remote, selectively promote reusable work back into templates\u002FL0, review each project (cadenced), run the root \u002Fsync, upgrade projects from their variant templates, and land upgrade PRs. Use when: user says \"project-resync\", \"resync projects\", \"resync the project fleet\", \"sync project cycle\", or asks to sync\u002Fbackport\u002Fupgrade the Projects\u002F* fleet. Distinct from the `sync` skill (single-repo commit→PR pipeline): this is the whole-fleet, bidirectional cycle.\n",1794009600000,1794096000000,"gh CLI authenticated; workspace-root CWD","main","1162ccc568cf90c01b3886d6143cbfd851a37883",".hermes\u002Fskills\u002Fproject-resync",9,"https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards","https:\u002F\u002Fgithub.com\u002F5throck","Experienced in digital transformation, enterprise IT, startup acceleration, and business strategy. Focused on building practical systems that connect technolo","2026-11-14 21:22:34",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add 5throck\u002Fai-workspace-standards --skill project-resync",{"tool":62,"command":63},"bunx","bunx skills add 5throck\u002Fai-workspace-standards --skill project-resync",{"tool":65,"command":66},"pnpm","pnpm dlx skills add 5throck\u002Fai-workspace-standards --skill project-resync","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fproject-resync\u002FSKILL.md",true,[],[71,79,84,89,94,99],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":78},"01M7BBJDYHJMGTJYSC37JVWY8S","i18n-layout","Text layout and encoding guidance: character encoding (UTF-8, legacy Korean code pages, BOM hazards), line endings, RTL\u002Fbidi handling, and script-specific font selection (Hangul focus). Use when: encoding is corrupted or mojibake appears, an RTL locale must render correctly, fonts must be chosen for a script, or CRLF\u002FBOM issues surface.","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002Ftemplates\u002Fco-work\u002Fskills\u002Fi18n-layout\u002FSKILL.md",[],[],"2026-11-15 14:19:17",{"skillNo":80,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":78},"01M7BBJ9XHAAS1AVGKZZ841VBZ","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002Ftemplates\u002Fco-work\u002F.hermes\u002Fskills\u002Fi18n-layout\u002FSKILL.md",[],[],{"skillNo":85,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":78},"01M7BBJ5C3X8TKFKG5R9P9P49W","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002Ftemplates\u002Fco-work\u002F.gemini\u002Fskills\u002Fi18n-layout\u002FSKILL.md",[],[],{"skillNo":90,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":78},"01M7BBJ1B52X0QMJ2QVBMPJB37","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002Ftemplates\u002Fco-work\u002F.codex\u002Fskills\u002Fi18n-layout\u002FSKILL.md",[],[],{"skillNo":95,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":78},"01M7BBHX91BW2Q2R276MRX5AW3","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002Ftemplates\u002Fco-work\u002F.claude\u002Fskills\u002Fi18n-layout\u002FSKILL.md",[],[],{"skillNo":100,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":78},"01M7BBHQWGXPSFRWN1PRC2NMMV","https:\u002F\u002Fgithub.com\u002F5throck\u002Fai-workspace-standards\u002Fblob\u002Fmain\u002Ftemplates\u002Fco-work\u002F.agents\u002Fskills\u002Fi18n-layout\u002FSKILL.md",[],[]]