Skip to content

Commit 4da796f

Browse files
committed
1.0.0-gamma.11: preserve compare sources and recover Astro deliveries (from 2c844d2)
1 parent 7206744 commit 4da796f

21 files changed

Lines changed: 861 additions & 54 deletions

‎.claude-plugin/marketplace.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"source": "./",
1515
"displayName": "html2wp — HTML to WordPress",
1616
"description": "BETA. Convert a static HTML site into a standalone WordPress block theme, verified against the original at three viewport widths — and reviewed by you before handover. The conversion runs through a verified Astro 5 build, so the Astro project is a real output too — compared pixel by pixel against the source before anything WordPress-shaped is generated.",
17-
"version": "1.0.0-gamma.10",
17+
"version": "1.0.0-gamma.11",
1818
"author": {
1919
"name": "BELNEM s.r.o.",
2020
"email": "hello@html2wp.dev",

‎.claude-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "html2wp",
33
"displayName": "html2wp — HTML to WordPress",
44
"description": "BETA. Convert a static HTML site — or anything that builds to one (Lovable, Bolt, v0, Next export) — into a standalone WordPress block theme: verified pixel by pixel, pages, blog, forms, menus, SEO and redirects, with no plugin required and verification gates at every stage. Two modes: Full (every gate repaired until green, then your own page-by-page review) and Flash (every stage once, no repair loop, the gates reported). The gates catch most fidelity drift, not all of it.",
5-
"version": "1.0.0-gamma.10",
5+
"version": "1.0.0-gamma.11",
66
"author": {
77
"name": "BELNEM s.r.o.",
88
"email": "hello@html2wp.dev",

‎.codex-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "html2wp",
3-
"version": "1.0.0-gamma.10",
3+
"version": "1.0.0-gamma.11",
44
"description": "Convert static HTML or buildable web projects into verified, editable WordPress block themes.",
55
"author": {
66
"name": "BELNEM s.r.o.",

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.0-gamma.10
1+
1.0.0-gamma.11

‎skills/html2wp/SKILL.md‎

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -675,9 +675,7 @@ continue", below); starting over from the original is the owner's own choice
675675

676676
### The Astro 5 project only (mode `astro`)
677677

678-
The same rule — every stage once, a red check recorded, a stage that cannot
679-
feed the next one stops cleanly — over the stages that build the Astro
680-
project. No service conversion (no allowance is spent), no WordPress, no
678+
Run each stage once with bounded capture recovery. A failed page capture is recorded, retried once in a fresh isolated context when parallel capture failed, and other routes continue. Never repeat unchanged failed work. Preserve the expected route inventory independently of the manifest; a partial ZIP is a delivery with outstanding issues, never proof of complete conversion. No service conversion (no allowance is spent), no WordPress, no
681679
theme. `progress.sh mode astro` first; its own table.
682680

683681
| stage | commands, once | record and go on (`warn`) | stop (`fail`) |
@@ -695,6 +693,39 @@ theme. `progress.sh mode astro` first; its own table.
695693
Its verdict words: "Astro: all checks passed", "Astro: not visually
696694
repaired", "Astro: checks not run", "Astro: stopped".
697695

696+
### Astro recovery — repair the conversion, not only the build message
697+
698+
`0 pages built` alone is not an error: self-contained HTML in `public/` is
699+
copied to `dist/`. Check `astro-coverage.json`, `route-inventory.json`, the
700+
prerender report and the actual built routes. Never reduce expected routes
701+
to the partial capture's manifest. Missing homepage, capture failures and
702+
source runtime errors remain red even when A/A2 match that partial input.
703+
704+
After an Astro delivery, an explicit owner request to repair conversion
705+
uses `H2WP_MODE=repair-delivery` and:
706+
707+
```sh
708+
python3 assets/scripts/astro-delivery.py {workspace} repair
709+
```
710+
711+
This helper spends the existing owner repair allowance, snapshots the prior
712+
ZIP and editable project, builds a wholly separate candidate with a fresh
713+
serial capture, runs the Astro build and fresh A/A2 checks, and packages the
714+
candidate. It never overlays old captured HTML with assets from a new build.
715+
The previous export stays available. It refuses to discard owner edits or
716+
replace a product with fewer pages. On failure it republishes the retained
717+
result with the remaining issue. Read its `repair-history/astro-*/repair.log`.
718+
Do not repeat the same remedy in the same owner turn; do not change plugin
719+
code, weaken gates or synthesize missing backend credentials. Record source
720+
backend errors separately from converter defects.
721+
722+
A question about a failed delivery is still a question: answer it without
723+
running this helper or changing session/result/export files. A normal visual
724+
change still uses Change mode. The Change prohibition on pipeline stages and
725+
packaging does not apply to the explicit Astro recovery helper. Do not add
726+
wrappers merely to increase Astro's page counter or claim that doing so
727+
recovers missing routes.
728+
698729
### Stage 0 in Flash — identify, once, what Full would have fixed later
699730

700731
`flash-manifest.py` writes the manifest DRAFT (pages, keys, chrome by the

‎skills/html2wp/VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.0-gamma.10
1+
1.0.0-gamma.11

‎skills/html2wp/assets/repair-levers.json‎

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,15 @@
104104
],
105105
"what": "a failure that stops the run and that no script named with h2wp-signature",
106106
"levers": []
107+
},
108+
"astro-incomplete": {
109+
"stages": [
110+
"-1"
111+
],
112+
"what": "Astro delivery is incomplete or its captured source failed",
113+
"levers": [
114+
"astro-isolated-capture"
115+
]
107116
}
108117
},
109118
"levers": {
@@ -119,12 +128,12 @@
119128
},
120129
"listing-static": {
121130
"label": "leave that listing static",
122-
"remedy": "Set that listing's blog (or shop) to \"present\": false with the reason \"Flash: the listing's selectors could not be wired (preflight-listings.json)\" — the rest converts; the report names it.",
131+
"remedy": "Set that listing's blog (or shop) to \"present\": false with the reason \"Flash: the listing's selectors could not be wired (preflight-listings.json)\" \u2014 the rest converts; the report names it.",
123132
"again": "node $S/preflight-listings.mjs --manifest={workspace}/conversion-manifest.json"
124133
},
125134
"preview-again": {
126135
"label": "bring the preview WordPress up again",
127-
"remedy": "test-env.sh up <slug> once more, from the workspace — it is idempotent; the upload is not repeated.",
136+
"remedy": "test-env.sh up <slug> once more, from the workspace \u2014 it is idempotent; the upload is not repeated.",
128137
"again": "cd {workspace} && $S/test-env.sh up <slug>"
129138
},
130139
"article-part-residue": {
@@ -139,23 +148,23 @@
139148
},
140149
"form-field-names": {
141150
"label": "name the form's fields",
142-
"remedy": "Give the field normalize-form-fields names as ambiguous or not locatable a name in the input page ({input}/<page>) — the name its label or placeholder says — or give the radios a <fieldset><legend>.",
151+
"remedy": "Give the field normalize-form-fields names as ambiguous or not locatable a name in the input page ({input}/<page>) \u2014 the name its label or placeholder says \u2014 or give the radios a <fieldset><legend>.",
143152
"again": "normalize-form-fields.py --manifest={workspace}/conversion-manifest.json --apply"
144153
},
145154
"menu-wiring": {
146155
"label": "wire the menu",
147-
"remedy": "Replace the static navigation in the header or footer part with the menu token the other menus use (the same [wp-menu …] form, the nav's own markup inside), then apply it into the preview.",
156+
"remedy": "Replace the static navigation in the header or footer part with the menu token the other menus use (the same [wp-menu \u2026] form, the nav's own markup inside), then apply it into the preview.",
148157
"again": "python3 $S/apply-change.py {workspace} --repair 5 --what \"wire the menu\", then the check that was red"
149158
},
150159
"cart-count": {
151160
"label": "the cart count in every header, in step with the cart",
152-
"remedy": "python3 $S/woo-shims.py {workspace} --cart-count --cart-sync — the count token in every cart link of every header part (the design's own badge from the cart specimen, else a neutral one) and the script that keeps it in step with the block cart and the Store API — then into the preview. Stage 5.6 runs it for you: $S/woo-repair.py {workspace}.",
161+
"remedy": "python3 $S/woo-shims.py {workspace} --cart-count --cart-sync \u2014 the count token in every cart link of every header part (the design's own badge from the cart specimen, else a neutral one) and the script that keeps it in step with the block cart and the Store API \u2014 then into the preview. Stage 5.6 runs it for you: $S/woo-repair.py {workspace}.",
153162
"again": "python3 $S/apply-change.py {workspace} --repair 5.6 --what \"the cart count\", then python3 $S/audit-woo-coverage.py --wp <url> --workspace {workspace} --probe-cart",
154163
"script": "woo-shims.py --cart-count --cart-sync"
155164
},
156165
"size-as-cart-attribute": {
157166
"label": "the chosen option goes into the cart line",
158-
"remedy": "python3 $S/woo-shims.py {workspace} --option-cart-data — a chosen option (a size, a colour) of a product with no variations becomes the cart line's own data, shown in the cart, the checkout and the order, so two sizes are two lines — then into the preview. Stage 5.6 runs it for you: $S/woo-repair.py {workspace}.",
167+
"remedy": "python3 $S/woo-shims.py {workspace} --option-cart-data \u2014 a chosen option (a size, a colour) of a product with no variations becomes the cart line's own data, shown in the cart, the checkout and the order, so two sizes are two lines \u2014 then into the preview. Stage 5.6 runs it for you: $S/woo-repair.py {workspace}.",
159168
"again": "python3 $S/apply-change.py {workspace} --repair 5.6 --what \"options as cart lines\", then python3 $S/audit-woo-coverage.py --wp <url> --workspace {workspace} --probe-cart",
160169
"script": "woo-shims.py --option-cart-data"
161170
},
@@ -168,6 +177,10 @@
168177
"label": "the AI's own diagnosed fix",
169178
"remedy": "Read the failing command's output and logs, find the cause, and change only what causes it (never a gate, a check or its thresholds). Say in the close note what you changed and why.",
170179
"again": "the failing command, once"
180+
},
181+
"astro-isolated-capture": {
182+
"label": "Rebuild Astro from a fresh serial capture",
183+
"remedy": "astro-delivery.py WORKSPACE repair; isolated candidate, preserve previous ZIP and owner edits"
171184
}
172185
}
173186
}

0 commit comments

Comments
 (0)