Commit Graph

38 Commits

Author SHA1 Message Date
浅念 0ec826bd4b feat: port cms case layout into trade-pro
Task 10g: rewrite pages/case.html from the thin 1-line variant to the cms
projects/[slug].astro design (pixel baseline dist/hesupipe/en/projects/):
PageHero (breadcrumb Home > Cases > title, cover bg) + 1.2fr/0.8fr detail
grid (overview block with location/industry rows + rich body via the 10d
typography layer; sticky side column with main photo, 3-col gallery tiles
and Results card) + Recommended Products + Other Projects (groups['case']
minus self), all empty-data sections hidden. Results points come from the
open fields.results convention (semicolon/newline separated); cms
dictionary fallback copy is never ported (fake data across sites).

Listing case branch (10c evaluation): core form (hero + cols-3 cards +
pagination) already matches cms projects list; only the hero copy voice
differed, so listing.html gains a case-aware eyebrow/lead fallback
(OUR PROJECTS). cms-specific tabs (no data source) and the FEATURED CASE
STUDY band (HESU-static dictionary content) stay unported, documented in
the template header.

Adds test_trade_pro_case_layout_structure (build-flow: gallery/results
structure, related-case dedup, empty-data hiding, /cases/ hero voice).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 16:59:52 +08:00
浅念 882b8cb1ec feat: port cms contact layout into trade-pro (info/form/no-fake-submit)
Task 10f. contact.html rebuilt from contact.astro + LeadForm.astro:
PageHero (breadcrumb/cover bg) -> 0.85/1.25 info+form-card grid ->
rich body section (body only). No-fake-submit dual form: configured
HTTPS form_endpoint renders external form (name/email/message +
pro-honeypot, 10b contract); unconfigured renders no <form> at all,
guidance card with real mailto when footer_email exists. Contact
items render only with real fields (email mailto; no fabricated
phone/address), cms map band dropped (no address data source).
CSS appended to pro.css with own 900/620 media blocks; new test
test_trade_pro_contact_layout_structure covers both shapes.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 16:34:28 +08:00
浅念 7d7e98adfa feat: port cms about layout into trade-pro
Task 10e: rewrite pages/about.html from the 2-row thin variant to the
full cms about page design (about.astro, pixel baseline
dist/hesupipe/en/about/): page hero with breadcrumb + cover backdrop +
in-page anchor button, company intro two-col with derived stats bar,
rich body (gated on body), advantages grid, dark mission band with
gallery backdrop and glass feature cards, gallery-driven facility card
grid (hidden when empty), certifications grid.

Data mapping: about page = ordinary page entry; cms dict-only stats and
factory copy have no platform fields, so stats reuse the 10a home
derivation (products/categories/brands/cases counts, hidden when all
empty) and facility cards are driven by page.cover + fields.gallery
(make_context gallery, deduped, cover first); markFloatImages is not
ported (sanitize strips class attributes, same conclusion as 10d) and
the body renders through body_copy + the 10d sf-tp-article-body
typography layer via dual classing.

CSS lands in pro.css under sf-tp-about-* reusing the 10a/10b/10c
components (two-col, stats, feature/card grids, section head, page
hero, breadcrumb); responsive collapse comes from the existing 10a/10c
media blocks, with about-specific 900/620 rules in a dedicated block
(767 intentionally empty, covered by 10c page-hero).

Tests: test_trade_pro_about_layout_structure drives a data-rich /about/
(PATCHed bootstrap entry with cover/summary/rich body/gallery + product
and post entries) and an empty custom-route about page
(meta.page_template), asserting structure, data mapping, and empty-data
section hiding.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:58:30 +08:00
浅念 f15ea85db4 docs: fix specificity notation in 10d css comment (review minor 1)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:38:23 +08:00
浅念 598f4695dd feat: port cms article detail layout into trade-pro + review minors
- article hero/meta/rich-body/author card/next-story/related sidebar
  per cms news/[slug] design; .pro-article-hero contract preserved
- review minors: back-link & CTA render even with 1-2 posts only;
  specificity comment notation corrected to (0,3,1)/(0,2,1)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:37:04 +08:00
浅念 1eddcf9136 feat: port cms article detail layout into trade-pro (hero/body/related)
Task 10d: rewrite trade-pro article.html from the thin pro-article
skeleton to the cms news/[slug].astro design (pixel baseline
dist/hesupipe/en/news/<slug>/):

- hero reuses the 10c sf-tp-page-hero component (cover as bg image +
  brand-soft overlay) with the breadcrumb inside; the platform contract
  class .pro-article-hero stays on the hero section and the pro-base
  centered/giant-h1 skeleton is flattened by specificity in pro.css
- meta row (category pill - publish_date - author), rich-text body via
  body_copy with a cms rich-body typographic layer, divider, author
  card, next-story navigation
- related band below the content: More News side box (120px thumb rows,
  3 items, self and next-story excluded) + dark side CTA + back link,
  1fr+300px grid collapsing at 900/620
- date field is meta.fields.publish_date (blueprints post definition),
  rendered raw as YYYY-MM-DD
- new responsive rules live in the 10d media blocks appended at the end
  of pro.css to avoid the 10c source-order cascade trap; the 620 hero
  h1 compact size is re-declared at the same specificity because the
  10d no-media h1 reset (0,4,0) outranks the 10c 620 rule (0,3,0)
- tests: test_trade_pro_article_layout_structure builds a site with a
  cover/date/rich-body post plus 4 other posts and asserts hero/meta/
  body/author/next/related structure, .pro-article-hero presence, no
  bare arrow characters

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:04:07 +08:00
浅念 ea2ac339e0 fix: listing review round + compose web build-timeout passthrough
- listing grid collapses at 900/620 (source-order fix), route-substring
  kind fallback gated to empty non-category listings, section-head shows
  item/page counts, Popular reads linked, category h1 assertions
- compose: SITEFORGE_BUILD_TIMEOUT_SECONDS now passed to web service
  (enqueue side reads it — upstream gap found during mirror builds)
- chore: ignore runtime state files

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 14:32:10 +08:00
浅念 8f8dfd19e5 fix: listing review round — responsive grid collapse, branch fallback, test assertions
Quality review fixes for Task 10c (2 Important + 5 Minor):
- [I1] sf-tp-card-grid--listing now collapses to 2 cols at 900px and
  compact gap at 620px: the 3-col declaration sits after the 10a media
  blocks in source order, so the fold rules must live in the new 10c
  media blocks to win at equal specificity
- [I2] tp_post_like trusts the first listing item's content type when
  the list is non-empty; the route-substring fallback now only applies
  to empty listings of kind=='listing' — /categories/post-sales-service/
  style slugs can no longer flip a product category page into the news
  branch
- [M3] empty-state negative assertions check the rendered attribute
  string, not the selector literal (previously always true)
- [M4] catalogue section-head intro is now an item/page count instead
  of duplicating the hero lead
- [M5] Popular reads entries link to the posts (same data as Latest,
  no analytics source on the platform)
- [M6] both /categories/pumps/ pagination pages assert exactly one h1
- [M7] side-panel sticky top uses --sf-tp-space-24

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 14:26:34 +08:00
浅念 9ea8369e2b feat: port cms listing layout into trade-pro (kind-branched cards/filters/pagination)
Task 10c. listing.html (category.html now includes it) replaces the thin
pro-inner-hero variant with the cms list designs:
- product-like listings (product/vehicle/brand/case/service) get the
  products/[...page].astro form: ported PageHero, 260px sticky category
  side panel, 3-col sf-tp-card grid reusing the 10a card components
- post-like listings (/news/, /post/) get the news/[...page].astro form:
  1fr+310px two-col layout, horizontal news rows (290px media + tag/
  title/summary/Read more), three aside boxes (Latest/Popular/count)
- pagination is the cms Pagination window (first/last + current-2..+2,
  ellipsis collapse) with arrow-left/arrow-right SVG icons and
  builder-consistent URLs (page 1 = section root)
- platform filter contract kept: .pro-filter-panel stays the immediate
  previous sibling of .pro-filter-scope (pro.js previousElementSibling
  lookup); cards/rows carry .pro-card + data-brand/data-category
- empty sections hide filters/grid/pagination behind a friendly empty
  state (noindex scaffold pages)

Test: test_trade_pro_listing_layout_structure drives a real build with
105 imported products + 3 posts, asserting both branches, static
pagination on /categories/pumps/ pages 1-2, contract adjacency, and
no bare arrow glyphs.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 14:06:15 +08:00
浅念 1f2e7529a2 docs: patch registry for V8_21_3 base
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 12:32:12 +08:00
浅念 601451f22b upgrade: adopt V8.21.3 (V8.13→8.21.3: P5 SFTP/S3, P6 multilingual, editor overhaul, enterprise hardening)
Overlay ~150 upstream items onto our V8.12 base, preserving trade-pro
theme, registry tests, and design docs. Re-applied our patch set
(discovery/env_for/blocks.css/type-mapping/theme_color/frontend entries,
test_theme_pro_v3 mods) — all anchors survived upstream evolution.

New platform enhancement (fixes upgrade-introduced regression):
multilingual.site_locale now honors settings_json.locale, plus
PUT /api/i18n/sites/{id}/locale — standalone English sites get
<html lang='en'> under the V8.15 locale-rewrite pipeline.

compose: adopt V8.21.3 (image 8.21.3-dev.1, /api/ready probes, MySQL/S3
env) with project name pinned to siteforge-v8-10 (data volumes).

Tests: 356 passed / 11 failed — all 11 confirmed pre-existing in
pristine V8.21.3 on this host (10 upstream Windows env + our build test
now green after locale fix). Patch registry updated in plan doc.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 12:31:03 +08:00
浅念 257c89e159 fix: product inquiry honeypot hidden + review minors (10b quality round)
- .pro-honeypot hidden under .sf-theme-trade-pro scope (was visible:
  pro-base hide rule needs .pro-inquiry ancestor, new form lacks it)
- drop redundant .sf-tp-photo class on placeholder branch (dual
  aspect-ratio, shadow asymmetry)
- spec table filters 'gallery' rows (string-form gallery leaked as a row)
- comment documents pro.js sibling-node constraint on gallery markup

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 11:43:52 +08:00
浅念 e017d3a809 fix: home visual feedback round — soft bg for features, branded placeholder, plan 10j
- advantages section gains section--soft (white cards were invisible on white)
- .pro-art placeholder redesigned: brand gradient + initials + small kind
  label, ring ornament hidden (was heavy gray block)
- plan: new Task 10j (port cms header/footer chrome visuals) per user
  feedback that overall look should match cms
- verified live: mirror build 7f1e8c47f0c4 (374/384 real images pulled,
  203 pages, 0 errors)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 11:00:13 +08:00
浅念 5ea0c8c5e8 feat: port cms product detail layout into trade-pro (gallery/specs/inquiry)
Rewrite pages/product.html from the 3-row skeleton to the cms
[slug].astro design: breadcrumb -> gallery (main + scrolling thumbs,
reusing the platform pro.js data-gallery-image hooks, zero new JS) +
summary column (eyebrow/h1/lead/brand+model/actions) -> flattened
Product details panel -> Specifications table from fields (hidden when
empty) -> related products on the home card grid -> inquiry section
(left contact info, right external form only when form_endpoint is
configured, CTA to /contact/ otherwise).

Component CSS lands in pro.css under .sf-theme-trade-pro with
900/620 breakpoints; stale .pro-specs tint rules removed (other
themes keep their pro-base skeleton); cross-theme skeleton assertion
in test_theme_pro_v3.py now excludes trade-pro; new
test_trade_pro_product_layout_structure covers the build output.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 10:17:31 +08:00
浅念 c318829ff3 feat: port cms home layout into trade-pro (hero/features/cards/cta + reveal JS)
Task 10a (Phase 3 first layout task). home.html now mirrors the cms
astro-site-runtime homepage section sequence: full-bleed hero (single
active slide; the platform has no multi-slide config, so the carousel
dots/JS are not ported), trustbar, two-col about with floating stats,
soft products band (4-card grid), dark applications band (2x2 case
tiles), advantages feature grid, soft news band (3-card grid), and the
closing cta band. Data maps to SiteForge context (page.cover/summary,
showcase, cases, stories, category/brand counts); empty sections hide
instead of rendering shells. All new component classes are sf-tp-*
prefixed and compose on the Task 8 base utilities in theme.css
(.wrap/.section/.eyebrow/.icon-circle/.sf-tp-btn).

CSS: the five cms components' scoped styles (PageHero, FeatureGrid,
CardGrid, Cta, SectionHead + the inline homepage bands) are extracted
into pro.css as the sf-tp-* component layer, tokens rewritten to
--sf-tp-*, breakpoints 900/767/620 preserved. theme.css accordingly
drops the superseded generic .cards/.card/.feature mobile baselines
and the .pro-home-hero em bridge, and retargets the dark-surface ghost
button hook from .cta-band to .sf-tp-cta.

Reveal: cms uses data-reveal everywhere; a ~15-line inline script at
the pro.html tail adds html.js + an IntersectionObserver that toggles
is-visible (the reduced-motion/no-JS exemptions already live in
theme.css from Task 8).

Tests: test_theme_registry gains test_trade_pro_home_layout_structure
(preview-render contract: sf-tp-hero, card grid, feature grid, cta,
no pro-industrial-hero residue, reveal script). The distinct-markup
tripwire in test_theme_pro_v3 is legitimately updated 4 -> 5 (renamed
to drop the stale "four"): with trade-pro now carrying its own
sf-tp-hero class, five themes yield five distinct hero signatures,
which is what the test always meant to enforce.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 09:23:30 +08:00
浅念 1dd510285a polish: icon sizing hardened for cross-browser (review I-1/M2/M3/M4)
- .sf-tp-icon CSS width/height (Safari doesn't support var() in SVG
  presentation attributes); --sm variant class replaces size= call sites
- search icon centered via translateY, decoupled from input height
- bare-arrow test: full charset (→←↗↘⌕▾) + line-level › whitelist
- new test: site.html tp_arrow must stay in sync with macro library path

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 09:00:50 +08:00
浅念 22b614118b feat: SVG icon macro library replaces bare text arrows in trade-pro
Task 9 (new design, not a cms port): _professional_components.html gains
an icon(name, size, cls) macro — 10 inline line-style glyphs (arrow-right,
arrow-left, chevron-down, check, phone, mail, location, download, search,
quote), 24x24 viewBox, stroke=currentColor, stroke-width 1.5, round
caps/joins, decorative aria-hidden + focusable=false, default size
var(--sf-tp-icon-size-md, 20px), unknown names fall back to arrow-right.
Every glyph is a single <path> so the d attribute needs no |safe.

All bare text arrows (->, <-, ↗, ▾, ⌕) in the macro library, pro.html,
site.html and pages/* are replaced with macro calls (site.html keeps a
self-contained copy of the arrow glyph because its rendering envs cannot
import the macro library); the filters macro search box gains an inline
search icon; footer links gain small arrows. theme.css adds .sf-tp-icon
alignment, in-button icon spacing, and search-box icon positioning.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:35:52 +08:00
浅念 afecc10aad fix: scope trade-pro element baselines to body class (review I-1/I-2/I-3)
- body/h1-h4/p/a/:focus-visible/label/input/details/summary now under
  .sf-theme-trade-pro so they win the cascade over platform pro-base.css
  (cms typography actually applies now)
- same scoping inside the 620px mobile block to keep overrides effective
- data-reveal gated behind html.js + comment states Task 10 JS dependency

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:22:41 +08:00
浅念 0859893e65 feat: port cms design tokens and base styles into trade-pro theme.css
Full port of astro-site-runtime tokens.css (183 tokens, V2 bright-blue)
and base.css (element baseline, layout utilities, forms, FAQ, reveal
motion, 620px mobile block) into the trade-pro theme. All cms variables
renamed with the --sf-tp- prefix keeping semantic names; button system
rebuilt as sf-tp-btn with sm/lg sizes and ghost/outline/round variants
so platform custom.css (.btn/.primary/.request/.button/.nav-btn) can
never restyle it. Phase-2 short token aliases (--sf-tp-primary etc.)
and .pro-* bridge rules retained, now driven by the cms tokens.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:07:34 +08:00
浅念 fbce5ecc1f docs: Phase 2 acceptance record — hesupipe on trade-pro, 203 pages, all gates green
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:59:49 +08:00
浅念 a59e46c10c fix: trade-pro workspace card description and preview colors (review round)
- design() desc map gains trade-pro entry (was rendering literal 'undefined')
- workspace.css: .theme-preview.trade-pro / .site-icon.trade-pro brand colors

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:57:23 +08:00
浅念 2527f7ced9 feat: register trade-pro in theme color map and all six frontend entry points
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:51:27 +08:00
浅念 2a2f943bf4 fix: trade-pro review fixes — drop shadow blocks.css, English presets, 7-item fallback nav
- remove themes/trade-pro/blocks.css (52-byte placeholder shadowed the
  platform 7KB block stylesheet via copy_blocks_css) and drop it from
  manifest styles; Phase 3 brings real component styles
- page-presets.json: all editor/bootstrap copy translated to trade B2B
  English; ids, block types, structure and hrefs identical to industrial
- fallback nav widened to all 7 default sections (Brands/Cases restored)
  so the documented false-positive window only relabels, never drops
  coverage; comment added next to the tp_needs_en_nav set
- test anchors '>Products<' on the built home page

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:40:49 +08:00
浅念 5797638caf feat: trade-pro skeleton theme package (Phase 2)
Fifth built-in theme: English-first international B2B skeleton registered
via manifest discovery, builds real sites end-to-end. pro.html derives
from industrial with lang=en, href-set value-comparison English fallback
nav (header + footer), sf-tp-* button classes and hard-coded #0b3d91
theme-color until the map entry lands. pages/ ships all 14 kinds; macro
library is an English passthrough copy pending the Phase 3 cms port.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:19:30 +08:00
浅念 702253f387 polish: copy_blocks_css minors + record editor dual-source observation
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:58:05 +08:00
浅念 960f7b1002 feat: theme-level blocks.css takes priority over platform asset
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:49:12 +08:00
浅念 712ccac058 polish: env_for hardening per code review (M1-M3)
- env_for validates theme against THEMES whitelist (defense in depth)
- degraded single-path envs are no longer cached
- tests: unknown-theme rejection, real macro shadowing semantics,
  degraded branch path + no-cache

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:45:40 +08:00
浅念 67b469d56d feat: per-theme Jinja env enables theme-level macro override
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:33:05 +08:00
浅念 b1b4d12a19 polish: discovery hardening per code review (review round 2 minors)
- Fail fast with clear RuntimeError when themes/ directory is missing
- Document underscore-prefix skip rule
- Tests: broken-manifest/mismatch/no-manifest skip case, missing-dir fail-fast
- tests/test_theme_pro_v3.py: drop fourth hardcoded list, import from core

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:28:57 +08:00
浅念 204c5039ab feat: single-source theme discovery replaces three hardcoded whitelists
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:14:44 +08:00
浅念 cd109cf873 docs: plan review nits — preview-based test reads, spec R3.1 revision chain
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:04:30 +08:00
浅念 5c7643fcf2 upgrade: adopt V8.12.0-dev.1 (V8.11 unified professional UI + V8.12 workflow usability)
- Overlay 26 changed files from SiteForge_Enterprise_V8_12 (UI layer only:
  professional-ui.js/css, workspace/factory-v2/operations/editor templates,
  +2 test files, compose/ci/scripts/docs)
- Re-apply v8_workflows type-mapping fix (类型/分类) lost in upgrade
- Pin compose project name to siteforge-v8-10 so existing data volumes
  (hesupipe site 483295c29ea0, 193 entries) keep attached
- Drop stray .s10_* state files; ignore .s10_*/.sf_*/.s87_* patterns
- Plan/spec revisions per plan-review round 1 (icons are new design,
  real test assertions, recorded deviations)

Tests: 226 passed / 1 env-only failure (test needs node binary in PATH,
absent in python:3.12-slim container; host node v24 --check all 9 JS OK)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:02:45 +08:00
浅念 19e865b889 merge: adopt remote main history, V8.10.0-dev.1 tree supersedes V5 baseline
Remote main carried a V5 source baseline plus COMPLETION_PLAN.md (v1.0/v2.0).
Our tree is the V8.10.0-dev.1 continuation of that same lineage; the plan
document is preserved. Their commits stay reachable, our tree wins wholesale.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 16:51:00 +08:00
浅念 18e0c95ed2 docs: carry over COMPLETION_PLAN.md (v2.0) from remote main
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 16:51:00 +08:00
浅念 8cea7dee20 chore: baseline V8.10.0-dev.1 with v8_workflows type-mapping fix and trade-pro spec
- SiteForge Enterprise V8.10.0-dev.1 upstream source (210 tests)
- Fix: v8_workflows._mapped_input now reads both 类型/分类 columns so WXR
  imports keep post/product types instead of collapsing to page
- Docs: trade-pro theme port spec (R3) and implementation plan

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 16:49:25 +08:00
浅念 70b74b2e93 docs: 计划 v2.0 修正——compose 冲突标记已复现、控制台措辞、P1-2 精简实现、单人排期
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 11:03:47 +08:00
浅念 e8f5c4330a docs: 完整实现补全计划 v1.0(P0 + Phase 1-5、里程碑与决策点)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 10:46:53 +08:00
浅念 3c57c167f2 chore: import SiteForge Factory V5 source (baseline)
导入 SiteForge Factory V5 基线源码:
- FastAPI + SQLite + Docker Compose(Web + Worker)架构
- 四套商业主题 × 14 页面模板(1.1.0,含历史版本快照)
- 四种建站模式骨架 + 迁移审计 + 发布门禁
- 52 项 pytest 测试
- 补全计划主文档 docs/superpowers/plans/

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 10:42:19 +08:00