Record the three capture findings as import guidance - #487
Merged
Conversation
A repo whose initial content comes from a live external system depends on a capture the standup procedure cannot re-derive, because the source is not under version control and stops serving on someone else's calendar. The procedure covered the repo and said nothing about that input. The three failures are measured rather than predicted, from a WordPress-to-Hugo import of a 108-post site, and they share one shape: the artifact the source hands you agrees with itself, so the cheap check passes for the wrong reason. An export is not a media capture. 261 of 972 referenced assets, 27%, are hotlinked to a third-party host and appear in no export, and half the referencing URLs are proxied through the CMS image proxy, so a third-party asset carries a first-party hostname and a host-keyed inventory reports full coverage of a set it never read. Media is enumerated from the rendered pages, and localizing external assets is required rather than optional. A sitemap is not the URL contract. 111 URLs listed against 1,051 served, and the target generator's plural taxonomy roots break 195 term URLs while the build reports success. The golden list is generated from the live crawl, never from the converter output, which would make the check circular, and the list length is floored before parity so a truncated list cannot make everything below it pass vacuously. An HTTP fetch is not the original. 778 files captured over HTTP against the official export reconcile at 778 of 778 while 31 differ and 17.2 MB is lost, worst case a 1.7 MB photo returned as an 8 KB thumbnail at the same URL. Library media comes from the official export and is verified by content hash against its manifest, since a count is not a verification. The doc is hub-only, on the same footing as the other docs/ procedures, and STANDUP.md gains step 1B pointing at it. That step is placed with steps 0 and 1A because it is the third window that closes quietly, and it states that the capture runs as early as the source is reachable, ahead of scaffolding where the source is rented or already scheduled for shutdown. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds hub-only fleet guidance documenting three verified “capture pass” failure modes discovered during a WordPress-to-Hugo import (issue #456), and links that guidance into the repo stand-up procedure so it’s applied at the right time window (before the source system changes or disappears).
Changes:
- Introduces a new hub-only procedure doc (
docs/content-import.md) describing three concrete capture/verification pitfalls with measured evidence. - Adds a new
STANDUP.mdstep (1B) that instructs capturing and verifying external source systems early, and points to the new guidance. - Adds the necessary reference link target for the new doc in
STANDUP.md.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| STANDUP.md | Adds step 1B to capture/verify external source systems early and links to the new import guidance doc. |
| docs/content-import.md | New hub-only guidance capturing three “looks green but is wrong” import verification findings with measured context. |
ptr727
added a commit
that referenced
this pull request
Aug 1, 2026
…to main (#498) Promotes eight commits from `develop`. Every one traces to a defect found in use rather than to a planned change, and five came from downstream agents reporting what the procedure did not cover. ## What lands | Commit | Change | | --- | --- | | `a0f6f24` (#487) | `docs/content-import.md`, the three capture-pass findings from the Blog migration: an export is not a media capture, a sitemap is not the URL contract, and an HTTP fetch is not the original | | `8bdfa22` (#494) | The write-guard scopes by **owner** rather than exact origin, with `GH_WRITE_GUARD_ALLOW` for a different owner. Four target-flag spellings that silently bypassed rule 3 are closed | | `981d92f` (#492) | The purpose is restated as agent enablement, in `README.md`, `HISTORY.md` and `AGENTS.md` | | `275705b` (#493) | `TODO.md` becomes the fleet backlog destination, and `spec/readme-structure.md` stops mandating the construction `GOVERNANCE.md` bans | | `b6ab6db` (#491) | `STANDUP.md` step 0A names the maintainer-only prerequisites, and step 4 asserts the remote | | `89e3868` (#488) | The `version.json` floor is chosen at standup rather than inherited | | `eed2e00` (#495) | `README.md` gains "What It Achieves", the objectives and the fidelity ladder | | `f6dc5e6` (#497) | `CODESTYLE.md` stops claiming CI runs the same checks as the clean-compile | ## Provenance Five of the eight answer issues filed by downstream agents: #456 (Blog intake), #489 and #490 (the Blog carry), and #496 (Financial-Modeling). That loop is the one "What It Achieves" now describes, and this promotion is it closing. ## Divergence, checked rather than assumed `main...develop` reports `8 ahead, 102 behind, diverged`. **The 102 are topology, not content.** They are 79 promotion merge commits, which are main-only by construction because a promotion is a two-parent merge, plus 23 `Update codegen files` bot commits from this repo's pre-2.0 life as a .NET sample template. `git diff --name-status origin/develop origin/main` returns exactly the 12 files these 8 commits touch, so there is **no main-only content** to reconcile. ## Verification on the merged `develop` Every gate re-run after the last merge, not inherited from the individual PRs: - `prose_lint.py . --check charset --check dupword --check spelling` clean tree-wide. - `repo_gate.py` clean (`eol`, `sha-pin`). - `spec/validate.py` clean, 21 cataloged repos classify. - `gh-write-guard.py --selftest` passes, including the nine new repository-scope cases. - `python3 -m unittest discover -s scripts`, 180 tests pass. - The `README.md` objectives list verified as one continuous list of 8 bullets with the fidelity table nested, since an unindented table split it in review. ## Merge mechanics This is a promotion, so it merges as a **merge commit** with two parents, never a squash. Its head **is** `develop`, so `--delete-branch` must not be used. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
Writes the three capture-pass findings from the Blog intake (#456) into fleet guidance, which is the item that comment thread left owed. Both findings the hub publicly committed to recording are here, plus the third that arrived later and is the strongest of the three.
The gap
STANDUP.mdcovers standing up a repo. It says nothing about the one input it cannot re-derive: when a repo's content comes from a live external system, that system is not under version control and stops serving on someone else's calendar. Whatever the capture misses is gone, and each of the three failures below produces a capture that reconciles cleanly and is wrong.What lands
docs/content-import.md, hub-only on the same footing as the otherdocs/procedures, holding the three findings with the measurement behind each one:STANDUP.mdstep 1B, a short pointer placed with steps 0 and 1A because it is the third window that closes quietly. It states that the capture runs as early as the source is reachable, ahead of scaffolding where the source is rented or scheduled for shutdown.Why the numbers are in the doc
They are measured from one WordPress-to-Hugo import and labeled as evidence for the rule rather than constants to expect. The rules themselves are phrased for any import, not for WordPress or for Hugo.
Scope
Guidance only. No spec, registry, or workflow change, and nothing here claims the
hugotype or thessh-deploymechanism, which stay with the maintainer. The closing section ties all three to the existing floor rule inGOVERNANCE.md"Verification Discipline" rather than restating it.Verification
python3 scripts/prose_lint.py . --diff origin/developclean, and both files clean whole (confirmed after staging, since the scan reads tracked files and skipped the new file while it was untracked).python3 scripts/repo_gate.pyclean,python3 -m unittest discover -s scripts180 passing.STANDUP.mddiff is 7 inserted lines with nothing else touched.🤖 Generated with Claude Code