You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Public-repo hygiene follow-up. The prompt-construction rollout plan/design
docs described two PRIVATE sibling source repos (commercial site, personal
essay site) by name with their internal paths, build, and commit commands,
and embedded two private client names in a hygiene-grep example. Genericize
the private source-repo references to placeholders (the public domains/URLs
and the maintainer npm identity are unchanged), and strip the client names.
Also genericize a leftover ~/ home path in a TS fixtures README to the
current monorepo location.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/superpowers/plans/2026-05-22-prompt-construction-fourth-pillar-rollout.md
+18-18Lines changed: 18 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,13 +6,13 @@
6
6
7
7
**Architecture:** Edit four separate git repos in sequence (docs → public site → commercial site → essay) so the essay rests on settled messaging. Through-line: "the prompt is code." Honesty constraint: the fourth pillar is co-equal in vision but marked "landing in 7.0.0," never present-tense shipped.
**Repo paths (local sibling checkouts; genericized — adjust to your machine):**
12
12
- This repo: `metaobjects/` (PUBLIC)
13
13
-`metaobjects.dev/` (PUBLIC)
14
-
-`metaobjects.com/` (PRIVATE)
15
-
-`dougmealing.com/` (PRIVATE)
14
+
-`<commercial-site>/` (PRIVATE)
15
+
-`<personal-site>/` (PRIVATE)
16
16
17
17
---
18
18
@@ -64,13 +64,13 @@ git commit -m "docs: position prompt construction as the fourth pillar (7.0.0)"
64
64
```markdown
65
65
-**Prompt construction** (landing in 7.0.0) -- treat LLM prompts as governed metadata: a typed payload (a projection), external provider-resolved prompt text, byte-identical cross-language render, and build-time prompt-to-payload drift detection.
66
66
```
67
-
In "## Author and context," add a link to the new essay: `[The prompt is code — and yours is drifting too](https://dougmealing.com/writing/the-prompt-is-code/)`.
67
+
In "## Author and context," add a link to the new essay: `[The prompt is code — and yours is drifting too](https://<personal-site>/writing/the-prompt-is-code/)`.
68
68
69
69
-[ ]**Step 3: Update `llms-full.txt`.** Read lines 1-60 first. Change line 11 "drives three capabilities" → "four capabilities (the fourth landing in 7.0.0)"; rename "## The three pillars" (line 21) → "## The four pillars"; update line 23 "All three pillars" → "Three pillars ship today; a fourth — prompt construction — is committed for 7.0.0." Add a `### Prompt construction (7.0.0)` subsection after the Drift detection subsection mirroring the llms.txt bullet, one paragraph.
70
70
71
71
-[ ]**Step 4: Build + verify.** Run: `cd metaobjects.dev && (npm run build 2>/dev/null || true)` then `grep -rn "Four pillars\|four capabilities\|Prompt construction" www/`. Expected: present in index.html + both llms files. Confirm no `npm`-build is required (it's a static `www/` dir) — if no build script, just verify files.
- Modify: whichever node carries the capability/pillar messaging (determined from the read)
89
89
90
90
-[ ]**Step 1: Read structure.** Run: `sed -n '1,200p' src/index.njk` and `cat src/_data/site.json`. Identify the section listing capabilities/pillars (likely a features/pillars block in `index.njk` or a `pillars` array in `site.json`).
91
91
92
92
-[ ]**Step 2: Add the fourth pillar / capability.** Mirror the four-pillar messaging with an enterprise framing: "Prompt construction (7.0.0) — govern your LLM prompts like code: typed payloads, externalized provider-resolved text, byte-identical render, and build-time prompt drift detection so payload bloat and token cost stay visible." Match the site's existing copy voice and data shape (array entry vs. HTML block).
@@ -124,16 +124,16 @@ excerpt: "<one-sentence hook: the AI-drift thesis extends from generated code to
124
124
125
125
Body — first-person voice matching the prior two essays, Roman-numeral sections:
126
126
-**I.** Series recap (link essays 1 & 2) → turn the drift lens on the prompts themselves.
127
-
-**II.** The hidden drift in prompts — imperative `StringBuilder` assembly, repos read *inside* the builder (untestable without a live DB), the same rules triplicated, invisible payload bloat, a renamed field silently breaking a prompt. Ground in the author's own game-NPC prompt work (name the game per this site's norms); enterprise framing stays generic (no employer named).
127
+
-**II.** The hidden drift in prompts — imperative `StringBuilder` assembly, repos read *inside* the builder (untestable without a live DB), the same rules triplicated, invisible payload bloat, a renamed field silently breaking a prompt. Ground in the author's own game-NPC prompt work (generic framing; do not name the game or employer); enterprise framing stays generic (no employer named).
128
128
-**III.** A prompt is just **(data + text + render)** — each part already governed by metadata.
129
129
-**IV.** The fourth pillar — Prompt construction: typed payload = a projection (the spine proving itself); externalized provider-resolved text; byte-identical cross-language render (Mustache + conformance); build-time prompt↔payload drift (`verify`). Map each to codegen/runtime/drift.
130
130
-**V.** Why it had to be metadata: cross-language byte-identical, no lock-in, the provider seam (static → A/B → evolutionary) without touching metadata or engine.
131
131
-**VI.** What it means for your stack (enterprise-scale framing, generic).
132
-
-**VII.** What's next — 7.0.0 (FR-003 substrate first, then FR-004); link to metaobjects.dev. Series-continuation hook to `dougmealing.com/writing`.
132
+
-**VII.** What's next — 7.0.0 (FR-003 substrate first, then FR-004); link to metaobjects.dev. Series-continuation hook to `<personal-site>/writing`.
133
133
134
-
Do NOT add a `caremetx` tag (no disclosure aside; per the grounding decision).
134
+
Do NOT add an employer/client disclosure tag (per the grounding decision).
135
135
136
-
-[ ]**Step 2: Build + preview.** Run: `cd dougmealing.com && npm run build`. Expected: build succeeds; `dist/writing/the-prompt-is-code/index.html` exists (Eleventy strips the date prefix from the slug).
136
+
-[ ]**Step 2: Build + preview.** Run: `cd <personal-site> && npm run build`. Expected: build succeeds; `dist/writing/the-prompt-is-code/index.html` exists (Eleventy strips the date prefix from the slug).
Copy file name to clipboardExpand all lines: docs/superpowers/specs/2026-05-22-prompt-construction-fourth-pillar-rollout-design.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,11 +37,11 @@ This rollout spans four separate git repositories. Public surfaces stay generic
37
37
-**`www/llms.txt`** — "ships three capabilities" → four; add the prompt-construction bullet marked design-stage/`7.0.0`; refresh the roadmap line; link the new essay once published.
38
38
-**`www/llms-full.txt`** — parallel update (full corpus dump; structure inspected during implementation).
39
39
40
-
### Surface 3 — commercial site (`metaobjects.com`, PRIVATE, separate repo)
40
+
### Surface 3 — commercial site (`<commercial-site>`, PRIVATE, separate repo)
41
41
42
42
- Mirror the four-pillar messaging on the homepage capabilities section, with an enterprise value framing for prompt construction (governed prompts, build-time prompt drift, visible payload/token bloat). Exact Eleventy node edits (`index.njk` / `_data`) determined against the site's structure during implementation.
43
43
44
-
### Surface 4 — essay (`dougmealing.com`, PRIVATE repo; published publicly)
44
+
### Surface 4 — essay (`<personal-site>`, PRIVATE repo; published publicly)
45
45
46
46
Third in the existing writing series (after the AI-drift origin essay and the "AI stack's missing architecture" positioning essay). Eleventy markdown under `src/writing/`, dated `2026-05-22`, frontmatter per the site's convention (layout / title / date / tags / excerpt). The site's date-stripping slug/permalink mechanism is matched (verified against its Eleventy config during implementation).
47
47
@@ -59,7 +59,7 @@ Third in the existing writing series (after the AI-drift origin essay and the "A
59
59
## Cross-cutting
60
60
61
61
-**Public-repo hygiene:** public surfaces (this repo + `metaobjects.dev`) stay generic — no consumer-project names, no absolute home paths. The personal and commercial sites name projects per their norms. This design doc is itself genericized so it passes the public-repo commit guard.
62
-
-**Sequencing:** docs → `metaobjects.dev` → `metaobjects.com` → essay last (so the essay rests on settled messaging).
62
+
-**Sequencing:** docs → `metaobjects.dev` → `<commercial-site>` → essay last (so the essay rests on settled messaging).
63
63
-**Commits:** four repositories, separate commits each; committed only on explicit request, never auto-pushed; a non-default branch is used where the host repo is on its default branch.
64
64
65
65
## Out of scope
@@ -77,7 +77,7 @@ Third in the existing writing series (after the AI-drift origin essay and the "A
77
77
## Testing / verification
78
78
79
79
- Public surfaces build clean (each site's `eleventy` / static build) and contain no consumer-project names or home paths (public-repo guard passes on commit).
80
-
- Internal consistency: "four pillars (fourth landing in 7.0.0)" reads identically across `metaobjects.dev`, `metaobjects.com`, this repo's docs, and the essay's framing.
80
+
- Internal consistency: "four pillars (fourth landing in 7.0.0)" reads identically across `metaobjects.dev`, `<commercial-site>`, this repo's docs, and the essay's framing.
81
81
- Essay renders in the site's dev server with correct frontmatter, tags, and series cross-links.
Then re-run the round-trip tests: `bun test test/round-trip.test.ts`. Any failures point to either a TS port bug or an intentional Java change that the TS port must accommodate.
0 commit comments