website-build-skill 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +12 -0
- package/.claude-plugin/plugin.json +10 -0
- package/AGENTS.md +19 -0
- package/CHANGELOG.md +42 -0
- package/CLAUDE.md +16 -0
- package/CODE_OF_CONDUCT.md +127 -0
- package/CONTRIBUTING.md +49 -0
- package/LICENSE +21 -0
- package/MAINTAINERS.md +12 -0
- package/README.md +148 -0
- package/RELEASING.md +133 -0
- package/REPO_SETTINGS.md +91 -0
- package/SECURITY.md +28 -0
- package/adapters/agents-md.md +26 -0
- package/adapters/antigravity.md +68 -0
- package/adapters/chatgpt-project.md +57 -0
- package/adapters/claude-code.md +25 -0
- package/adapters/claude-desktop.md +33 -0
- package/adapters/codex.md +21 -0
- package/adapters/custom-gpt.md +57 -0
- package/adapters/grok.md +100 -0
- package/adapters/hermes.md +49 -0
- package/adapters/team.yaml +42 -0
- package/adapters/zero-install.md +17 -0
- package/bin/website-build-skill.mjs +6 -0
- package/docs/COMPATIBILITY.md +34 -0
- package/docs/EVALUATION.md +109 -0
- package/docs/INSTALLER.md +73 -0
- package/docs/LIBRARY-CHECK.md +95 -0
- package/docs/METHOD.md +32 -0
- package/docs/PROVENANCE.md +36 -0
- package/docs/TIPS.md +18 -0
- package/docs/bundles/checklists.md +414 -0
- package/docs/bundles/method.md +1398 -0
- package/docs/bundles/playbooks.md +1566 -0
- package/docs/bundles/prompts.md +987 -0
- package/docs/bundles/team.md +1781 -0
- package/docs/evaluation/host-trial.md +95 -0
- package/docs/evaluation/receipt-template.json +18 -0
- package/docs/evidence/audit-baseline.json +61 -0
- package/docs/evidence/content-review.json +141 -0
- package/docs/evidence/floor.json +345 -0
- package/docs/evidence/library-check.json +164 -0
- package/docs/evidence/local-checks.json +156 -0
- package/llms.txt +74 -0
- package/package.json +68 -0
- package/skills/website-build-skill/SKILL.md +124 -0
- package/skills/website-build-skill/archive/graphics-design-original.md +70 -0
- package/skills/website-build-skill/checklists/accessibility.md +38 -0
- package/skills/website-build-skill/checklists/brand-and-mockups.md +43 -0
- package/skills/website-build-skill/checklists/build.md +39 -0
- package/skills/website-build-skill/checklists/performance-seo.md +40 -0
- package/skills/website-build-skill/checklists/research.md +91 -0
- package/skills/website-build-skill/checklists/security.md +38 -0
- package/skills/website-build-skill/checklists/ship.md +59 -0
- package/skills/website-build-skill/examples/audit-cases.md +66 -0
- package/skills/website-build-skill/examples/fictional-studio-brief.md +73 -0
- package/skills/website-build-skill/examples/fictional-studio-handoff.md +98 -0
- package/skills/website-build-skill/manifest.json +1474 -0
- package/skills/website-build-skill/playbooks/accessibility.md +91 -0
- package/skills/website-build-skill/playbooks/choose-stack.md +69 -0
- package/skills/website-build-skill/playbooks/data-and-templates.md +89 -0
- package/skills/website-build-skill/playbooks/deploy-and-operate.md +87 -0
- package/skills/website-build-skill/playbooks/embed-facades.md +59 -0
- package/skills/website-build-skill/playbooks/image-pipeline.md +73 -0
- package/skills/website-build-skill/playbooks/performance-budgets.md +76 -0
- package/skills/website-build-skill/playbooks/research-and-memory.md +398 -0
- package/skills/website-build-skill/playbooks/security-headers.md +132 -0
- package/skills/website-build-skill/playbooks/self-hosted-fonts.md +62 -0
- package/skills/website-build-skill/playbooks/structured-data-and-llms.md +84 -0
- package/skills/website-build-skill/prompts/00-start.md +94 -0
- package/skills/website-build-skill/prompts/01-website-deep-research.md +233 -0
- package/skills/website-build-skill/prompts/03-extract-brand-kit.md +46 -0
- package/skills/website-build-skill/prompts/04-three-mockups.md +44 -0
- package/skills/website-build-skill/prompts/05-stack-and-build.md +46 -0
- package/skills/website-build-skill/prompts/06-site-audit.md +39 -0
- package/skills/website-build-skill/prompts/07-accessibility-contrast.md +38 -0
- package/skills/website-build-skill/prompts/08-seo-aeo.md +72 -0
- package/skills/website-build-skill/prompts/09-security-headers.md +40 -0
- package/skills/website-build-skill/prompts/10-adversarial-pre-ship.md +44 -0
- package/skills/website-build-skill/prompts/11-ship-and-verify.md +44 -0
- package/skills/website-build-skill/prompts/12-web-design-team.md +141 -0
- package/skills/website-build-skill/references/stacks/framework.md +76 -0
- package/skills/website-build-skill/references/stacks/scripted-static.md +76 -0
- package/skills/website-build-skill/references/stacks/static-html.md +72 -0
- package/skills/website-build-skill/roles/builder.md +139 -0
- package/skills/website-build-skill/roles/coordinator.md +132 -0
- package/skills/website-build-skill/roles/designer.md +125 -0
- package/skills/website-build-skill/roles/graphics.md +126 -0
- package/skills/website-build-skill/roles/optimizer.md +129 -0
- package/skills/website-build-skill/roles/researcher.md +202 -0
- package/skills/website-build-skill/roles/reviewer.md +139 -0
- package/skills/website-build-skill/templates/audit-brief.md +63 -0
- package/skills/website-build-skill/templates/brand.md +53 -0
- package/skills/website-build-skill/templates/brief.md +51 -0
- package/skills/website-build-skill/templates/evidence.md +100 -0
- package/skills/website-build-skill/templates/handoff.yaml +23 -0
- package/skills/website-build-skill/templates/install-choice.txt +28 -0
- package/skills/website-build-skill/templates/site-operations.md +71 -0
- package/skills/website-build-skill/templates/status.md +47 -0
- package/skills/website-build-skill/templates/tokens.json +72 -0
- package/src/agents.mjs +7 -0
- package/src/bundle.mjs +106 -0
- package/src/catalog.mjs +12 -0
- package/src/choice.mjs +6 -0
- package/src/cli.mjs +96 -0
- package/src/install.mjs +344 -0
- package/src/library-check.mjs +106 -0
- package/src/validate.mjs +351 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Test whether people can complete the task
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: can the site's primary journey work across input and perception needs?
|
|
8
|
+
|
|
9
|
+
## Establish the target
|
|
10
|
+
|
|
11
|
+
Start with the method's WCAG 2.2 AA baseline and verify the current W3C release,
|
|
12
|
+
applicable target level, and relevant criteria as of ASK DATE before relying on it.
|
|
13
|
+
Record a newer applicable release or erratum without silently changing an approved target.
|
|
14
|
+
Name each critical journey and its routes, controls, errors, and completion state.
|
|
15
|
+
Require manual evidence for every critical journey as well as automated checks.
|
|
16
|
+
|
|
17
|
+
## Use meaningful structure
|
|
18
|
+
|
|
19
|
+
Choose headings for hierarchy, landmarks for page regions, links for navigation,
|
|
20
|
+
and buttons for actions. Give controls names that make sense out of context.
|
|
21
|
+
Use native controls when they meet the need and test any custom control fully.
|
|
22
|
+
Expose expanded/selected/invalid state and relationships accurately.
|
|
23
|
+
Do not use an icon, color, or positional instruction as the only meaning.
|
|
24
|
+
|
|
25
|
+
## Exercise keyboard and focus
|
|
26
|
+
|
|
27
|
+
Navigate from entry through completion using keyboard only.
|
|
28
|
+
Test menus, dialogs, validation errors, dismissal, retry, and success.
|
|
29
|
+
Record visible focus, logical order, no trap, and restoration after closing overlays.
|
|
30
|
+
Confirm focused content is visible and not hidden behind sticky UI.
|
|
31
|
+
Test the escape path and focus destination when asynchronous content replaces a control.
|
|
32
|
+
|
|
33
|
+
## Compute contrast
|
|
34
|
+
|
|
35
|
+
Use a calculator or runner with actual foreground and background inputs.
|
|
36
|
+
For translucent layers, gradients, or images, compute the rendered composition and
|
|
37
|
+
inspect the relevant worst-case locations and control states.
|
|
38
|
+
Record font size/weight, criterion, threshold, unrounded ratio, method, and result.
|
|
39
|
+
The baseline text thresholds are 4.5:1 for normal text and 3:1 for qualifying large text;
|
|
40
|
+
verify the authoritative criteria and qualification rules before applying them.
|
|
41
|
+
Evaluate meaningful control boundaries and focus under their applicable criteria.
|
|
42
|
+
A color pair with no computed ratio is UNVERIFIED and cannot pass.
|
|
43
|
+
Never round a failure upward or silently change an approved brand role to claim success.
|
|
44
|
+
|
|
45
|
+
## Test communication and recovery
|
|
46
|
+
|
|
47
|
+
Associate labels and descriptions with inputs; preserve useful entered data on errors.
|
|
48
|
+
Explain each error, its location, and a practical way to recover.
|
|
49
|
+
Test status announcements with a named screen reader/browser combination.
|
|
50
|
+
Inspect image alternatives for their actual purpose, with empty alternatives for decoration.
|
|
51
|
+
Provide required media alternatives and usable controls.
|
|
52
|
+
Automated semantics checks supplement actual assistive-technology journeys.
|
|
53
|
+
|
|
54
|
+
## Check reflow and motion
|
|
55
|
+
|
|
56
|
+
The method proposes widths of 320, 390, 768, and 1280 CSS pixels for layout checks.
|
|
57
|
+
Test text zoom at 200% and reflow separately against the applicable criteria.
|
|
58
|
+
Record unintended horizontal scrolling, clipped controls, or hidden content.
|
|
59
|
+
Check target size and spacing against the verified criterion, not a remembered number.
|
|
60
|
+
Honor reduced motion and provide pause controls where required.
|
|
61
|
+
Do not make information available only through animation, hover, or precise pointing.
|
|
62
|
+
Inspect flashing hazards and preserve useful content without JavaScript.
|
|
63
|
+
|
|
64
|
+
## Work a small example
|
|
65
|
+
|
|
66
|
+
A dialog opens from an inquiry button, traps no user, names its purpose, and can close.
|
|
67
|
+
A missing required field exposes a linked error and preserves the other entries.
|
|
68
|
+
After closing, focus returns to the inquiry trigger.
|
|
69
|
+
Capture each transition and its result, not only the default dialog screenshot.
|
|
70
|
+
|
|
71
|
+
## Verify and remediate
|
|
72
|
+
|
|
73
|
+
Write site-work/qa/accessibility.md and site-work/qa/contrast.md.
|
|
74
|
+
For each result record route/state, candidate, tool/environment, criterion, inputs,
|
|
75
|
+
observed behavior, evidence, impact, owner, and retest result.
|
|
76
|
+
Apply checklists/accessibility.md AX01 through AX08.
|
|
77
|
+
Re-run failed journeys after fixes; keep meaningful regressions for repeatable failures.
|
|
78
|
+
Do not call an automated scanner a conformance certificate.
|
|
79
|
+
Unavailable checks remain UNVERIFIED with a precise test and capable runner handoff.
|
|
80
|
+
|
|
81
|
+
## Failure modes and source starting points
|
|
82
|
+
|
|
83
|
+
- Visual guess: a brand-colored button is called accessible without calculation.
|
|
84
|
+
- Mouse-only evidence: keyboard and error recovery remain untested.
|
|
85
|
+
- Scanner certificate: no violations is mistaken for complete conformance.
|
|
86
|
+
- Incomplete composition: opacity or image background is omitted from ratio inputs.
|
|
87
|
+
|
|
88
|
+
Open https://www.w3.org/TR/WCAG22/ and current W3C release information.
|
|
89
|
+
Open https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html
|
|
90
|
+
for text contrast, with separate relevant criteria for controls and focus.
|
|
91
|
+
Record actual source access before adopting the baseline in a project.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Choose the smallest stack
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: what is the least machinery that meets the approved brief?
|
|
8
|
+
|
|
9
|
+
## Establish requirements
|
|
10
|
+
|
|
11
|
+
Require accepted research, a confirmed brief, and a named mockup selection.
|
|
12
|
+
List routes, content editor, publishing frequency, repeated structures, state,
|
|
13
|
+
authentication, secrets, integration needs, localization, and maintenance owner.
|
|
14
|
+
Separate request-time requirements from operations that can happen during a build.
|
|
15
|
+
A framework preference is a preference, not proof of a runtime requirement.
|
|
16
|
+
|
|
17
|
+
## Follow the decision tree
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
Server secrets, authenticated state, or request-time behavior?
|
|
21
|
+
Compare a small separate endpoint with an application framework.
|
|
22
|
+
Select a framework only if the remaining application requirements earn it.
|
|
23
|
+
Otherwise, repeated pages with shared structure or derived metadata?
|
|
24
|
+
Yes: scripted static builder with validated records and shared templates.
|
|
25
|
+
No: static HTML, CSS, and only the JavaScript the approved experience uses.
|
|
26
|
+
Before adding another layer, name the requirement still unmet.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- Static HTML: load references/stacks/static-html.md for files, preview, and checks.
|
|
30
|
+
- Scripted static: load references/stacks/scripted-static.md for data-derived routes.
|
|
31
|
+
- Framework: load references/stacks/framework.md for server/client and runtime boundaries.
|
|
32
|
+
|
|
33
|
+
## Compare costs and exits
|
|
34
|
+
|
|
35
|
+
For each candidate, name its dependency, supported version, build/runtime needs,
|
|
36
|
+
host constraints, upgrade path, editor workflow, and removal path.
|
|
37
|
+
Evaluate APIs against official documentation opened in this engagement.
|
|
38
|
+
Payments may use a hosted checkout. MDX may compile to static pages.
|
|
39
|
+
Neither capability universally requires a particular framework.
|
|
40
|
+
Do not add a CMS, analytics service, or paid dependency without an approved need.
|
|
41
|
+
|
|
42
|
+
## Work a small example
|
|
43
|
+
|
|
44
|
+
An invented workshop has a home page, visit page, and quarterly article series.
|
|
45
|
+
Repeated articles share title, summary, image, and canonical metadata.
|
|
46
|
+
A scripted static builder can derive articles and discovery files from one record.
|
|
47
|
+
A private member area would add a server-state requirement that needs a new comparison.
|
|
48
|
+
Do not silently extend the original stack decision to cover the member area.
|
|
49
|
+
|
|
50
|
+
## Record and verify
|
|
51
|
+
|
|
52
|
+
Write site-work/stack.md with requirements, rejected alternatives and reasons,
|
|
53
|
+
selected recipe, dependencies, host, source claim IDs, and exact editing/build commands.
|
|
54
|
+
Have another author add a representative next item from those instructions.
|
|
55
|
+
Verify the new route, navigation, canonical, sitemap, and discovery entry together.
|
|
56
|
+
Apply checklists/build.md B01 and B03 before accepting the decision.
|
|
57
|
+
|
|
58
|
+
## Failure modes
|
|
59
|
+
|
|
60
|
+
- Familiarity: choosing a framework before reading requirements or selecting a mockup.
|
|
61
|
+
- Hidden server: static output depends on an undocumented secret-bearing process.
|
|
62
|
+
- Editorial duplication: each new record needs manual changes in multiple metadata lists.
|
|
63
|
+
- Unsupported API: copying a remembered version without a current source check.
|
|
64
|
+
|
|
65
|
+
## Source starting points
|
|
66
|
+
|
|
67
|
+
Open the selected framework and host's official versioned documentation.
|
|
68
|
+
Inspect real source files at a recorded repository revision and check its license.
|
|
69
|
+
The three local stack references are recipes to validate, not platform support claims.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Make repeated pages data changes
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: how can another author add the tenth item without copying a page?
|
|
8
|
+
|
|
9
|
+
## Separate responsibilities
|
|
10
|
+
|
|
11
|
+
- Data: authored content and stable identities, owned independently of layout.
|
|
12
|
+
- Validation: required fields, types, uniqueness, URLs, dates, and relationships.
|
|
13
|
+
- Rendering: shared templates and context-specific serialization.
|
|
14
|
+
- Output: generated pages and discovery artifacts, never edited as source.
|
|
15
|
+
- Deployment: an allowlist of checked output, with private work files excluded.
|
|
16
|
+
|
|
17
|
+
## Define the record contract
|
|
18
|
+
|
|
19
|
+
Name an immutable record ID and a unique normalized route slug.
|
|
20
|
+
Require title, useful body, and publication state inputs needed for that content type.
|
|
21
|
+
Mark optional provider IDs and assets explicitly optional.
|
|
22
|
+
Define the accepted identifier grammar from the provider's current official source.
|
|
23
|
+
Trim before validating. Whitespace-only identifiers are absent, not valid values.
|
|
24
|
+
Reject malformed required fields with record ID and field name before rendering.
|
|
25
|
+
Omit missing optional controls and list omissions in the build report.
|
|
26
|
+
|
|
27
|
+
## Compute state once
|
|
28
|
+
|
|
29
|
+
Define publicationState(record, clock, timezonePolicy) as a pure decision.
|
|
30
|
+
Use its result for page headings, badges, buttons, indexes, feeds, and discovery output.
|
|
31
|
+
Use an explicit clock and timezone policy; do not infer dates from the build machine.
|
|
32
|
+
Test immediately before, at, and after each release boundary.
|
|
33
|
+
A static page changes state only after rebuilding. Name the rebuild trigger or human owner.
|
|
34
|
+
|
|
35
|
+
## Keep helpers narrow
|
|
36
|
+
|
|
37
|
+
| Helper | Contract | Adverse input |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| esc | Escape text or quoted attribute metacharacters after string normalization. | Quotes, ampersands, angle brackets. |
|
|
40
|
+
| jsonLd | Serialize valid JSON and escape literal less-than characters for a script element. | Script-terminator text followed by markup. |
|
|
41
|
+
| safeUrl | Parse, normalize, and allow only schemes/origins appropriate to the URL role. | A script URL, control characters, or an unexpected origin. |
|
|
42
|
+
| publicationState | Return one state and its allowed actions using the explicit clock. | A release boundary with an absent provider ID. |
|
|
43
|
+
|
|
44
|
+
Use structural DOM/template APIs when available; do not concatenate untrusted attributes.
|
|
45
|
+
Escaping is not URL validation, and safe JSON is not HTML sanitization.
|
|
46
|
+
For rich HTML, use a reviewed sanitizer with a narrow allowlist or render text instead.
|
|
47
|
+
|
|
48
|
+
## Work a small example
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
record: workshop-introduction
|
|
52
|
+
slug: workshop-introduction
|
|
53
|
+
state: published
|
|
54
|
+
provider_id: empty
|
|
55
|
+
expected page: visible article, no provider link, no player, omission in build report
|
|
56
|
+
expected discovery: the article route only if it satisfies the public-content rules
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Validate the ID before constructing a URL, not after interpolating it into a suffix.
|
|
60
|
+
Never render an empty href, a fragment stand-in, or an empty provider URL as recovery.
|
|
61
|
+
A valid optional ID enables its control only when the shared state permits it.
|
|
62
|
+
|
|
63
|
+
## Derive related outputs
|
|
64
|
+
|
|
65
|
+
Generate route HTML, titles, descriptions, canonical URLs, social metadata,
|
|
66
|
+
structured data, sitemap, and llms.txt from the same validated records.
|
|
67
|
+
Sort deterministically. Use content or transformation identities for generated asset names.
|
|
68
|
+
Exclude drafts and private records consistently from navigation and discovery.
|
|
69
|
+
Keep Optimizer's authored inputs immutable when Builder integrates a revision.
|
|
70
|
+
|
|
71
|
+
## Verify the generated artifact
|
|
72
|
+
|
|
73
|
+
Run checklists/build.md B02 through B07 on rendered HTML.
|
|
74
|
+
Exercise quotes, ampersands, angle brackets, script terminators, rejected schemes,
|
|
75
|
+
empty and whitespace IDs, duplicate slugs, long copy, missing assets, and boundary dates.
|
|
76
|
+
Prove hostile text stays text, valid JSON parses, and unsafe actions are absent.
|
|
77
|
+
Add one representative record and inspect every derived surface.
|
|
78
|
+
Rebuild unchanged inputs twice and investigate output differences.
|
|
79
|
+
|
|
80
|
+
## Failure modes and sources
|
|
81
|
+
|
|
82
|
+
- Late validation: malformed data reaches templates before a meaningful error.
|
|
83
|
+
- Split state: badges and buttons each implement a separate date condition.
|
|
84
|
+
- Safe-looking source: only the template is checked while generated HTML is broken.
|
|
85
|
+
- Quiet omission: optional data disappears without an author-visible report.
|
|
86
|
+
|
|
87
|
+
Open the chosen template engine's escaping documentation, the URL API documentation,
|
|
88
|
+
and https://html.spec.whatwg.org/multipage/scripting.html for script parsing context.
|
|
89
|
+
Record source-opening evidence before relying on an implementation detail.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Promote an exact, operable release
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: can a cold reader release, verify, and recover this site from one document?
|
|
8
|
+
|
|
9
|
+
## Establish release authority and identity
|
|
10
|
+
|
|
11
|
+
Require the brief, user selection, current research, QA receipts, independent review,
|
|
12
|
+
and ROUND 1 dispositions with regressions on the final candidate.
|
|
13
|
+
Name target account, project, domain, operator, and authorized action.
|
|
14
|
+
Existing explicit authorization is sufficient within its scope.
|
|
15
|
+
If authority is missing, finish the reviewable candidate before asking at that boundary.
|
|
16
|
+
Do not infer permission to buy services, create accounts, change unrelated DNS, or rotate keys.
|
|
17
|
+
|
|
18
|
+
Record source revision, build environment, immutable artifact digest, and preview identity.
|
|
19
|
+
If review fixes changed the candidate, retain the reviewed predecessor, explained diff,
|
|
20
|
+
post-fix harness, and final digest. Unexplained changes invalidate affected evidence.
|
|
21
|
+
Identify a known-working rollback artifact and its documented restoration command.
|
|
22
|
+
An initial release needs an explicit safe recovery plan when no predecessor exists.
|
|
23
|
+
|
|
24
|
+
## Prepare and promote
|
|
25
|
+
|
|
26
|
+
Build cleanly using the documented command and locked dependencies where applicable.
|
|
27
|
+
Inspect the actual upload allowlist for research, private assets, credentials, and unrelated files.
|
|
28
|
+
Test the preview's routes and production configuration before promotion.
|
|
29
|
+
Promote the checked bytes rather than rebuilding from a moving source revision.
|
|
30
|
+
Record the command/action, actual response, deployment identifier, timestamp, and public URLs.
|
|
31
|
+
A successful command is evidence of a deploy operation, not a working public journey.
|
|
32
|
+
|
|
33
|
+
## Verify the live release
|
|
34
|
+
|
|
35
|
+
Check HTTPS, canonical hosts, redirects, intended routes, error paths, and assets.
|
|
36
|
+
Complete the primary journey, including validation, submission, and recovery.
|
|
37
|
+
Inspect actual CSP and other headers on all response classes.
|
|
38
|
+
Check canonical metadata, social images, sitemap, llms.txt, and intentional exclusions.
|
|
39
|
+
Inspect mobile and desktop behavior with production CSP enforced.
|
|
40
|
+
Separate social-bot origin responses from third-party preview-cache results.
|
|
41
|
+
Verify analytics at the intended property; loading a script does not prove receipt.
|
|
42
|
+
Record absent field observations as UNVERIFIED with a follow-up owner.
|
|
43
|
+
|
|
44
|
+
If a critical check fails, use the authorized recovery plan and verify the restored journey.
|
|
45
|
+
Record both the failure and recovery evidence; do not hide rollback under a release PASS.
|
|
46
|
+
Apply checklists/ship.md SH01 through SH10, including distinct pre-promotion and live phases.
|
|
47
|
+
|
|
48
|
+
## Write one complete operations document
|
|
49
|
+
|
|
50
|
+
Builder writes SITE_OPERATIONS.md in the authorized implementation root.
|
|
51
|
+
Use templates/site-operations.md and replace blank contract fields with actual evidence.
|
|
52
|
+
Keep these sections in order:
|
|
53
|
+
|
|
54
|
+
1. What and why: purpose, audience, primary action, and deployed identity.
|
|
55
|
+
2. Trigger: manual or scheduled content, build, and release events with owners.
|
|
56
|
+
3. Invocation chain: editing through validation, build, preview, promotion, and verification.
|
|
57
|
+
4. Dependencies: versions, host, integrations, credentials by mechanism only.
|
|
58
|
+
5. Reads: content, assets, tokens, environment names, and approved external resources.
|
|
59
|
+
6. Writes: generated output, deployed targets, logs, and runtime side effects.
|
|
60
|
+
7. The closed loop: watcher, expected signal, cadence, recipient, and response.
|
|
61
|
+
8. Failure modes: symptoms, diagnosis, recovery, and escalation owner.
|
|
62
|
+
9. Run-and-verify by hand: exact working commands, success evidence, and rollback.
|
|
63
|
+
10. Source of truth: source, deployed artifact, research/approval revisions, and maintenance owner.
|
|
64
|
+
|
|
65
|
+
Name what watches the site, including nothing. Silence is not a monitoring plan.
|
|
66
|
+
Include enough content-editing and recovery detail to avoid requiring a second document.
|
|
67
|
+
Every untested command or procedure says UNVERIFIED and names the settling test.
|
|
68
|
+
Never write secret values, authenticated URLs, or personal credentials into the document.
|
|
69
|
+
|
|
70
|
+
## Maintain the result
|
|
71
|
+
|
|
72
|
+
Record who adds content, approves brand changes, updates dependencies, and checks measurements.
|
|
73
|
+
Scheduled publication requires an actual trigger; date-dependent templates do not self-run.
|
|
74
|
+
Revalidate expired host, license, security, and search facts before later releases.
|
|
75
|
+
Re-run checks affected by changed content, resources, forms, or dependencies.
|
|
76
|
+
Keep rollback identities and retention limitations explicit.
|
|
77
|
+
|
|
78
|
+
## Failure modes and sources
|
|
79
|
+
|
|
80
|
+
- Artifact drift: deploying unreviewed files after a green harness.
|
|
81
|
+
- False live proof: command success replaces browser and response evidence.
|
|
82
|
+
- Missing loop: nobody receives an alert or knows how to run a manual check.
|
|
83
|
+
- Untested recovery: a rollback command is documented as verified without a run.
|
|
84
|
+
|
|
85
|
+
Open the selected host's current deployment, promotion, and recovery documentation.
|
|
86
|
+
Record version, plan restrictions, actual access evidence, and authorized runtime receipts.
|
|
87
|
+
No host procedure is assumed to work because this package describes it.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Load providers after deliberate activation
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: how can a visitor choose a player without paying its cost on arrival?
|
|
8
|
+
|
|
9
|
+
## Validate the control
|
|
10
|
+
|
|
11
|
+
Require a valid provider ID and an allowed destination before rendering a facade.
|
|
12
|
+
Use the selected provider's current identifier and URL requirements.
|
|
13
|
+
An absent or whitespace-only ID omits the entire control and records the omission.
|
|
14
|
+
Do not replace it with a dead iframe, empty suffix, or empty link.
|
|
15
|
+
|
|
16
|
+
## Render a local first state
|
|
17
|
+
|
|
18
|
+
Show a local authorized poster, a useful description, and a real button.
|
|
19
|
+
Reserve player space using actual aspect ratio to prevent layout shifts.
|
|
20
|
+
Give the button an accessible action name, not only a play-shaped icon.
|
|
21
|
+
Keep a safe outbound link available when loading or embedding fails.
|
|
22
|
+
Do not fetch provider posters, preconnect, or inject provider SDKs before activation.
|
|
23
|
+
|
|
24
|
+
## Implement a bounded state transition
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
idle -> deliberate button activation -> loading -> ready
|
|
28
|
+
loading -> error -> retry or safe outbound fallback
|
|
29
|
+
ready + repeated activation -> no second iframe
|
|
30
|
+
invalid identifier -> no facade and no outbound provider control
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Create the iframe only on intentional keyboard or pointer activation.
|
|
34
|
+
Set its title, reviewed source, and minimum necessary permissions.
|
|
35
|
+
Select sandbox behavior from the provider's actual requirements and test it.
|
|
36
|
+
Keep focus predictable while replacing content and announce loading/error states.
|
|
37
|
+
Do not remove the focused button without a deliberate focus destination.
|
|
38
|
+
Provide a no-JavaScript path to the approved outbound destination.
|
|
39
|
+
|
|
40
|
+
## Verify the network boundary
|
|
41
|
+
|
|
42
|
+
Start a clean browser session without cached provider resources.
|
|
43
|
+
Inspect requests before activation: no iframe, poster, script, or provider connection.
|
|
44
|
+
Activate by keyboard and pointer in separate checks.
|
|
45
|
+
Inspect requests, layout stability, focus, error recovery, and repeated activation.
|
|
46
|
+
Test with production CSP and network failure, including blocked third-party cookies.
|
|
47
|
+
Record exact route, candidate, environment, request log, and results.
|
|
48
|
+
Apply checklists/build.md B04 and checklists/performance-seo.md PS03.
|
|
49
|
+
|
|
50
|
+
## Failure modes and sources
|
|
51
|
+
|
|
52
|
+
- Cosmetic facade: a hidden iframe already fetched the provider.
|
|
53
|
+
- Remote poster: the first state still contacts the provider.
|
|
54
|
+
- Lost focus: swapping markup strands a keyboard user.
|
|
55
|
+
- Overbroad policy: frame permissions allow unrelated origins or capabilities.
|
|
56
|
+
|
|
57
|
+
Open the chosen provider's official embedding documentation and current browser
|
|
58
|
+
iframe documentation. Retain the source ledger and network inspection evidence.
|
|
59
|
+
Click-to-play is a performance/privacy boundary, not proof of consent compliance.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Deliver images for their actual slots
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: how do images remain useful and sharp within the route's loading budget?
|
|
8
|
+
|
|
9
|
+
## Inventory before transforming
|
|
10
|
+
|
|
11
|
+
Record source identity, rights evidence, intrinsic dimensions, image role, focal point,
|
|
12
|
+
crop intent, background/transparency, decorative status, and alt-text intent.
|
|
13
|
+
Preserve authorized originals and required notices under Graphics ownership.
|
|
14
|
+
Strip unnecessary sensitive metadata from public exports without altering the original.
|
|
15
|
+
Unknown rights block release of that asset.
|
|
16
|
+
|
|
17
|
+
## Choose transformations
|
|
18
|
+
|
|
19
|
+
Measure layout slots at representative widths and display densities.
|
|
20
|
+
Generate AVIF and WebP candidates using the selected supported sharp version.
|
|
21
|
+
Retain a browser-usable original-format fallback for the same composition.
|
|
22
|
+
Do not ship an unsuitable source format as the fallback solely because it is original.
|
|
23
|
+
Record a conversion when the master is a design file rather than a web image.
|
|
24
|
+
Compare compression by inspecting edges, small text, gradients, and the intended crop.
|
|
25
|
+
Quality and width settings are choices to measure, never universal defaults.
|
|
26
|
+
|
|
27
|
+
## Define a deterministic pipeline
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
input: original bytes + crop + widths + quality settings + encoder version
|
|
31
|
+
process: validate -> orient -> crop -> resize -> encode -> inspect
|
|
32
|
+
output: content-keyed variants + actual dimensions + byte sizes + manifest
|
|
33
|
+
invalidate: any input bytes, settings, crop, or encoder version changes
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Use a documented TypeScript build script with sharp as a declared build dependency.
|
|
37
|
+
Read current API documentation before implementing format options.
|
|
38
|
+
Reject enlargements that cannot meet the approved visual requirement.
|
|
39
|
+
Rebuild from source rather than recompressing already compressed derivatives.
|
|
40
|
+
|
|
41
|
+
## Connect markup to layout
|
|
42
|
+
|
|
43
|
+
Use picture sources for AVIF and WebP with an img fallback.
|
|
44
|
+
Set srcset widths from actual exports and sizes from the rendered CSS slots.
|
|
45
|
+
Set width and height from the real file and reserve the matching aspect ratio.
|
|
46
|
+
Do not claim dimensions from a requested export setting without inspecting the result.
|
|
47
|
+
Give meaningful images task-relevant alternatives; use empty alternatives for decoration.
|
|
48
|
+
|
|
49
|
+
## Protect the first screen
|
|
50
|
+
|
|
51
|
+
Identify the likely LCP image from the real route and a measurement trace.
|
|
52
|
+
Make the important image discoverable in initial HTML and avoid lazy loading it.
|
|
53
|
+
Lazy load appropriate below-fold images and test behavior with JavaScript unavailable.
|
|
54
|
+
Avoid preloading every image; verify that a critical preload matches the selected resource.
|
|
55
|
+
|
|
56
|
+
## Verify and hand off
|
|
57
|
+
|
|
58
|
+
Inspect desktop/mobile crops and representative density combinations in a browser.
|
|
59
|
+
Record the selected resource, actual dimensions, byte size, request timing, and visual result.
|
|
60
|
+
Compare the route budget before and after the pipeline change.
|
|
61
|
+
Measure each social card independently and pass its actual dimensions to Optimizer.
|
|
62
|
+
Graphics hands an immutable export revision and rights ledger to Builder.
|
|
63
|
+
Apply checklists/brand-and-mockups.md BM07 and checklists/performance-seo.md PS03.
|
|
64
|
+
|
|
65
|
+
## Failure modes and sources
|
|
66
|
+
|
|
67
|
+
- Mismatched sizes: the browser fetches a large variant for a narrow slot.
|
|
68
|
+
- Crop loss: the focal subject disappears on mobile.
|
|
69
|
+
- False dimensions: one social-card size is copied across unequal files.
|
|
70
|
+
- Nondeterminism: unchanged originals churn names and invalidate caches.
|
|
71
|
+
|
|
72
|
+
Open https://sharp.pixelplumbing.com/ and the selected browser image guidance.
|
|
73
|
+
Record the exact API version, actual source access, and inspected export results.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Measure the experience against explicit budgets
|
|
2
|
+
|
|
3
|
+
Date rule: [establish ASK DATE and revalidate claims](research-and-memory.md#ask-date-rule).
|
|
4
|
+
Source status: external facts and example commands are UNVERIFIED until checked for the chosen version and engagement.
|
|
5
|
+
Record opened URLs, source dates or unknown, actual access dates, and supporting evidence.
|
|
6
|
+
|
|
7
|
+
Question: is the site fast enough for its visitors' routes, devices, and primary tasks?
|
|
8
|
+
|
|
9
|
+
## Set route budgets before implementation
|
|
10
|
+
|
|
11
|
+
Select representative routes: the main entry, a repeated content page, and the heaviest journey.
|
|
12
|
+
Record viewport, device/CPU/network profile, cache state, tool version, and route state.
|
|
13
|
+
Choose transfer, script, image, and third-party budgets from actual content and audience needs.
|
|
14
|
+
Name the owner, rationale, method, and exception process for each budget.
|
|
15
|
+
Do not invent a universal byte allowance or silently enlarge a missed target.
|
|
16
|
+
|
|
17
|
+
## Separate proposed targets from evidence
|
|
18
|
+
|
|
19
|
+
The method proposes a Lighthouse mobile performance median of at least 90 per route.
|
|
20
|
+
The field baseline to revalidate is p75 LCP at most 2.5 seconds, INP at most 200 ms,
|
|
21
|
+
and CLS at most 0.1, assessed separately by device class and reporting window.
|
|
22
|
+
These numeric baselines are UNVERIFIED for the current engagement until the authoritative
|
|
23
|
+
source is opened and its source date, access date, release, and applicability are recorded.
|
|
24
|
+
Do not cite this playbook as proof of current external thresholds.
|
|
25
|
+
|
|
26
|
+
Lab scores diagnose a controlled run. They do not establish real-user p75 or interaction quality.
|
|
27
|
+
A new site can lack sufficient field observations; record UNVERIFIED, the follow-up owner,
|
|
28
|
+
when to check again, and the intended data source. Do not invent a field PASS.
|
|
29
|
+
|
|
30
|
+
## Run a repeatable lab series
|
|
31
|
+
|
|
32
|
+
1. Build the identified candidate and serve its production output.
|
|
33
|
+
2. Fix the environment, route state, and cold-cache conditions for the series.
|
|
34
|
+
3. Run three comparable mobile Lighthouse measurements for each representative route.
|
|
35
|
+
4. Retain every raw report, run timestamp, environment, and command.
|
|
36
|
+
5. Use a calculator or runner to compute the median; retain its inputs and result.
|
|
37
|
+
6. Compare the result to the recorded budget and investigate the causes of misses.
|
|
38
|
+
|
|
39
|
+
Discard a run only for an evidenced invalid measurement, preserve it with the reason,
|
|
40
|
+
and rerun under the same conditions. Never select only the best report.
|
|
41
|
+
Budget exceptions need a named decision, remaining impact, and evidence, not a disguised PASS.
|
|
42
|
+
|
|
43
|
+
## Diagnose and improve
|
|
44
|
+
|
|
45
|
+
Use the trace to identify hero discovery delays, blocking resources, image overfetch,
|
|
46
|
+
font swaps, third-party work, and unnecessary JavaScript.
|
|
47
|
+
Test a bounded change and compare the same route under the same conditions.
|
|
48
|
+
Use image-pipeline.md, self-hosted-fonts.md, and embed-facades.md for focused corrections.
|
|
49
|
+
Keep animation optional, honor reduced motion, and suspend decorative work in hidden tabs.
|
|
50
|
+
Check useful initial content and the primary navigation with JavaScript disabled.
|
|
51
|
+
|
|
52
|
+
## Work a small example
|
|
53
|
+
|
|
54
|
+
A route loads its local poster immediately but delays the third-party player until activation.
|
|
55
|
+
Compare cold traces before and after the facade change.
|
|
56
|
+
Inspect the pre-click request log and test keyboard activation before accepting the gain.
|
|
57
|
+
A smaller transfer with a broken player fails the journey gate.
|
|
58
|
+
|
|
59
|
+
## Save the evidence
|
|
60
|
+
|
|
61
|
+
Write site-work/qa/build/performance.md with artifact identity, route budget table,
|
|
62
|
+
raw report paths, computed medians, field-data status, failures, and follow-up owners.
|
|
63
|
+
Apply checklists/performance-seo.md PS01 through PS04.
|
|
64
|
+
Unknown tool access leaves measurement UNVERIFIED with commands for a capable runner.
|
|
65
|
+
|
|
66
|
+
## Failure modes and source starting points
|
|
67
|
+
|
|
68
|
+
- Lab/field substitution: a single score is called real-user performance.
|
|
69
|
+
- Cherry picking: the best of several runs replaces the recorded series.
|
|
70
|
+
- Budget drift: limits change after a failure without a reviewable decision.
|
|
71
|
+
- Optimized screenshot: interactivity, reduced motion, and hidden-tab work go unchecked.
|
|
72
|
+
|
|
73
|
+
Open https://web.dev/articles/defining-core-web-vitals-thresholds for field definitions.
|
|
74
|
+
Open https://developer.chrome.com/docs/lighthouse/performance/performance-scoring
|
|
75
|
+
for the chosen Lighthouse version and score interpretation.
|
|
76
|
+
Keep source-opening receipts separate from site measurement reports.
|