commit pi sessions

This commit is contained in:
liph
2026-07-27 08:46:32 +02:00
parent 37ea5bb522
commit 44d6863b59
435 changed files with 14054 additions and 125 deletions
@@ -0,0 +1,52 @@
# Task for ollama-orchestrator
"list every file in the current
directory and tell me which one is most likely to contain a bug"
## Acceptance Contract
Acceptance level: attested
Completion is not accepted from prose alone. End with a structured acceptance report.
Criteria:
- criterion-1: Return a concise result and residual risks when applicable
Required evidence: manual-notes, residual-risks
Finish with a fenced JSON block tagged `acceptance-report` in this shape:
Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
```acceptance-report
{
"criteriaSatisfied": [
{
"id": "criterion-1",
"status": "satisfied",
"evidence": "specific proof"
}
],
"changedFiles": [
"src/file.ts"
],
"testsAddedOrUpdated": [
"test/file.test.ts"
],
"commandsRun": [
{
"command": "command",
"result": "passed",
"summary": "short result"
}
],
"validationOutput": [
"validation output or concise summary"
],
"residualRisks": [
"none"
],
"noStagedFiles": true,
"diffSummary": "short description of the diff",
"reviewFindings": [
"blocker: file.ts:12 - issue found, or no blockers"
],
"manualNotes": "anything else the parent should know"
}
```
@@ -0,0 +1,37 @@
{
"runId": "187b7128",
"agent": "ollama-orchestrator",
"task": "\"list every file in the current\n directory and tell me which one is most likely to contain a bug\"",
"exitCode": 0,
"usage": {
"input": 46741,
"output": 3301,
"cacheRead": 0,
"cacheWrite": 0,
"cost": 0,
"turns": 5
},
"model": "ollama/minimax-m3:cloud:high",
"attemptedModels": [
"ollama/minimax-m3:cloud:high"
],
"modelAttempts": [
{
"model": "ollama/minimax-m3:cloud:high",
"success": true,
"exitCode": 0,
"usage": {
"input": 46741,
"output": 3301,
"cacheRead": 0,
"cacheWrite": 0,
"cost": 0,
"turns": 5
}
}
],
"durationMs": 42304,
"toolCount": 4,
"transcriptPath": "/home/liph/dotfiles/pi/.pi/agent/.pi-subagents/artifacts/187b7128_ollama-orchestrator_0_transcript.jsonl",
"timestamp": 1783169853950
}
@@ -0,0 +1,3 @@
Done. Wrote the result to `orchestration.md` in the current directory.
**Summary:** Listed all 15 entries (5 directories + 10 files) in `/home/liph/dotfiles/pi/.pi/agent`. Picked **`settings.json`** as the file most likely to contain a bug — it is the single tightly-coupled config that wires packages, default model, and the entire `subagents.agentOverrides` map, so a single typo or stale model id cascades into every tool/agent call. Caveat: this is a heuristic judgment based on coupling, not measured evidence (no static analysis, test run, or git-history hot-spotting was performed), and subdirectories were listed but not inspected.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
# Task for ollama-planner
You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.
Task:
"what can you plan ?"
---
**Output:**
Write your findings to exactly this path: /home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md
This path is authoritative for this run.
Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.
## Acceptance Contract
Acceptance level: checked
Completion is not accepted from prose alone. End with a structured acceptance report.
Criteria:
- criterion-1: Implement the requested change without widening scope
Required evidence: changed-files, tests-added, commands-run, residual-risks, no-staged-files
Finish with a fenced JSON block tagged `acceptance-report` in this shape:
Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
```acceptance-report
{
"criteriaSatisfied": [
{
"id": "criterion-1",
"status": "satisfied",
"evidence": "specific proof"
}
],
"changedFiles": [
"src/file.ts"
],
"testsAddedOrUpdated": [
"test/file.test.ts"
],
"commandsRun": [
{
"command": "command",
"result": "passed",
"summary": "short result"
}
],
"validationOutput": [
"validation output or concise summary"
],
"residualRisks": [
"none"
],
"noStagedFiles": true,
"diffSummary": "short description of the diff",
"reviewFindings": [
"blocker: file.ts:12 - issue found, or no blockers"
],
"manualNotes": "anything else the parent should know"
}
```
@@ -0,0 +1,37 @@
{
"runId": "4059014e",
"agent": "ollama-planner",
"task": "You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.\n\nTask:\n\"what can you plan ?\"\n\n---\n**Output:**\nWrite your findings to exactly this path: /home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md\nThis path is authoritative for this run.\nIgnore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.",
"exitCode": 0,
"usage": {
"input": 15536,
"output": 3530,
"cacheRead": 0,
"cacheWrite": 0,
"cost": 0,
"turns": 3
},
"model": "ollama/minimax-m3:cloud:high",
"attemptedModels": [
"ollama/minimax-m3:cloud:high"
],
"modelAttempts": [
{
"model": "ollama/minimax-m3:cloud:high",
"success": true,
"exitCode": 0,
"usage": {
"input": 15536,
"output": 3530,
"cacheRead": 0,
"cacheWrite": 0,
"cost": 0,
"turns": 3
}
}
],
"durationMs": 45809,
"toolCount": 2,
"transcriptPath": "/home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/4059014e_ollama-planner_0_transcript.jsonl",
"timestamp": 1783167031499
}
@@ -0,0 +1,84 @@
# Implementation Plan
## Goal
Answer the meta-question "what can you plan?" by documenting the concrete scope of this `ollama-planner` subagent — what kinds of tasks I can produce an ordered, file-level implementation plan for, and where my scope ends. No code changes are produced; this document is the deliverable.
## Tasks
This is a meta-question, not a code change request. The "plan" here is the capability description itself. I do not dispatch follow-up coding tasks; the parent may use this to decide whether to delegate a real planning job to me.
1. **Task 1 — Read context (already done)**
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/ollama-planner.md`
- Changes: read my own role definition to ground the answer in my actual system prompt
- Acceptance: confirmed I am a read-only planner paired with `ollama-coder`
2. **Task 2 — Write capability summary to the required artifact path**
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md`
- Changes: produce this document
- Acceptance: file written, addresses the question concretely
## Files to Modify
- None. This run is read-only and produces a single artifact.
## New Files
- `agents/.pi-subagents/artifacts/outputs/4059014e/plan.md` — this capability summary (the deliverable)
## Dependencies
- None. No follow-up `ollama-coder` dispatch is appropriate for a meta-question.
## Risks
- Risk: user expected a code plan for some unstated real task. Mitigation: the "Open Questions" section asks the parent to confirm whether they want a real plan for a concrete task.
- Risk: scope is misstated. Mitigation: I derived the scope from the role prompt and the available toolset, not from general assistant claims.
## What I can plan (in-scope)
Concrete software-engineering deliverables where I can produce a file-level, ordered plan that `ollama-coder` can execute without re-deriving intent:
1. **Feature implementation** — new endpoints, UI panels, CLI flags, integrations. I name files, exact changes, and per-task acceptance checks.
2. **Refactors** — extract module/class, rename, restructure a directory tree, decouple a dependency, move code across a package boundary.
3. **Bug fixes with multi-file surface** — when the cause spans 2+ files, I plan the diagnostic + fix + regression test as ordered steps.
4. **Migrations** — framework upgrades (e.g. React 18→19, Node 18→20), database schema migrations, codemod rollouts, lockfile/dep upgrades with breaking changes.
5. **Test strategy and scaffolding** — which test files to add, which existing tests to update, fixtures, mocks, and what command to run for verification.
6. **API design and contract changes** — request/response shape changes, version bumps, deprecation policy, and the diff plan across producer + consumers.
7. **Build / CI / DevEx changes** — pipeline edits, new GitHub Actions, monorepo scripts, pre-commit hooks, dev-container / Nix changes.
8. **Documentation and migration notes** — when paired with code changes, I can plan the README/changelog/runbook updates that must ship alongside.
9. **Cross-cutting concerns as plans, not edits** — auth/authorization model, error-handling strategy, logging/observability rollout, feature-flag introduction.
10. **Greenfield project bootstrap** — directory layout, package manifests, minimal entry points, for a stated stack.
For every plan I produce:
- One ordered task list with file path, exact change, and a one-line acceptance check per task.
- A "Files to Modify" / "New Files" inventory.
- A "Dependencies" section so ordering is unambiguous.
- A "Risks" section with mitigations.
- A "Validation Contract" naming the commands/tests the coder must run and the evidence to return.
## Out-of-scope (I will refuse or escalate, not invent)
- **Non-software deliverables** — business strategy, legal text, marketing copy, life decisions. If asked, I'll say so and ask the parent to re-route.
- **Destructive operations without explicit confirmation** — `git push --force`, deleting branches, wiping data, dropping tables. I'll surface these as risks and ask before planning execution.
- **Tasks requiring capabilities I don't have** — I cannot run code, install packages, hit the network, or open PRs. I can plan those actions; I cannot perform them.
- **Ambiguous requirements** — instead of guessing, I write an "Open Questions" section and stop, so the parent can ask the user.
## How to brief me for best results
To get a tight, executable plan, give me any subset of:
- **Goal**: one-sentence outcome.
- **Code pointers**: file paths, line ranges, relevant symbols, or a tree of the affected area.
- **Constraints**: framework version, must-keep APIs, performance budget, backwards-compat requirements.
- **Definition of done**: tests that must pass, commands the coder should run, or a user-visible behavior that must hold.
- **Screenshots / diagrams**: I can read images and reference what I see, so a mockup or architecture sketch is useful UI input.
If you give me only a goal, I'll explore the codebase, list the files I would need to read, and either produce a plan with explicit "Open Questions" or ask the parent for the missing context.
## Format of what I produce
Single `plan.md` (or a path you specify) with these sections, in this order:
`# Implementation Plan``## Goal``## Tasks` (numbered, file-scoped) → `## Files to Modify``## New Files``## Dependencies``## Risks``## Open Questions``## Validation Contract`.
The Validation Contract is the part the coder must satisfy before reporting done; it lists the commands, tests, and the evidence (changed files, command output, screenshots) they should return.
## Open Questions
1. Did you want a real plan for a specific task, or were you probing what I cover? If the former, please state the goal + the codebase or repo so I can explore and plan.
2. Is there a stack/language/framework you want me to bias toward? (I am language-agnostic; explicit constraints produce tighter plans.)
## Validation Contract
- **Behavior that must hold**: this `plan.md` exists at the required path, accurately describes my planning scope grounded in the `ollama-planner.md` role prompt, and ends with a structured acceptance report.
- **Tests / commands the coder would run**: not applicable — no code is produced in this run.
- **Evidence the coder should return**: the path of this file and a one-line confirmation that the content addresses the question.
---
*No code was changed. No follow-up `ollama-coder` task was dispatched. This artifact is the deliverable.*
File diff suppressed because one or more lines are too long
@@ -0,0 +1,63 @@
# Task for planner
You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.
Task:
can you plan a webpage for a candle company?
---
**Output:**
Write your findings to exactly this path: /home/liph/dotfiles/pi/.pi/.pi-subagents/artifacts/outputs/a22166b7/plan.md
This path is authoritative for this run.
Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.
## Acceptance Contract
Acceptance level: attested
Completion is not accepted from prose alone. End with a structured acceptance report.
Criteria:
- criterion-1: Return a concise result and residual risks when applicable
Required evidence: manual-notes, residual-risks
Finish with a fenced JSON block tagged `acceptance-report` in this shape:
Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
`criteriaSatisfied[].status` must be exactly one of: satisfied, not-satisfied, not-applicable.
`commandsRun[].result` must be exactly one of: passed, failed, not-run.
`manualNotes` and `notes` are optional strings; an empty string means no note and does not satisfy `manual-notes` evidence.
```acceptance-report
{
"criteriaSatisfied": [
{
"id": "criterion-1",
"status": "satisfied",
"evidence": "specific proof"
}
],
"changedFiles": [
"src/file.ts"
],
"testsAddedOrUpdated": [
"test/file.test.ts"
],
"commandsRun": [
{
"command": "command",
"result": "passed",
"summary": "short result"
}
],
"validationOutput": [
"validation output or concise summary"
],
"residualRisks": [
"none"
],
"noStagedFiles": true,
"diffSummary": "short description of the diff",
"reviewFindings": [
"blocker: file.ts:12 - issue found, or no blockers"
],
"manualNotes": "anything else the parent should know"
}
```
@@ -0,0 +1,124 @@
{
"runId": "a22166b7",
"agent": "planner",
"task": "You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.\n\nTask:\ncan you plan a webpage for a candle company?\n\n---\n**Output:**\nWrite your findings to exactly this path: /home/liph/dotfiles/pi/.pi/.pi-subagents/artifacts/outputs/a22166b7/plan.md\nThis path is authoritative for this run.\nIgnore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.",
"exitCode": 0,
"usage": {
"input": 11073,
"output": 3237,
"cacheRead": 0,
"cacheWrite": 0,
"cost": 0,
"turns": 3
},
"model": "ollama/minimax-m3:cloud:high",
"attemptedModels": [
"ollama/minimax-m3:cloud:high"
],
"modelAttempts": [
{
"model": "ollama/minimax-m3:cloud:high",
"success": true,
"exitCode": 0,
"usage": {
"input": 11073,
"output": 3237,
"cacheRead": 0,
"cacheWrite": 0,
"cost": 0,
"turns": 3
}
}
],
"durationMs": 43577,
"toolCount": 2,
"acceptance": {
"status": "attested",
"explicit": false,
"effectiveAcceptance": {
"level": "attested",
"explicit": false,
"inferredReason": [
"default lightweight attestation"
],
"criteria": [
{
"id": "criterion-1",
"must": "Return a concise result and residual risks when applicable",
"evidence": [
"manual-notes",
"residual-risks"
],
"severity": "required"
}
],
"evidence": [
"manual-notes",
"residual-risks"
],
"verify": [],
"stopRules": []
},
"inferredReason": [
"default lightweight attestation"
],
"criteria": [
{
"id": "criterion-1",
"must": "Return a concise result and residual risks when applicable",
"evidence": [
"manual-notes",
"residual-risks"
],
"severity": "required"
}
],
"runtimeChecks": [],
"verifyRuns": [],
"childReport": {
"criteriaSatisfied": [
{
"id": "criterion-1",
"status": "satisfied",
"evidence": "Returned a concrete, ordered 12-task plan with exact files, acceptance criteria per task, dependencies, and an explicit residual-risks section covering brand/copy/commerce/legal gaps."
}
],
"changedFiles": [
"/home/liph/dotfiles/pi/.pi/.pi-subagents/artifacts/outputs/a22166b7/plan.md"
],
"testsAddedOrUpdated": [],
"commandsRun": [
{
"command": "ls /home/liph/dotfiles/pi/.pi",
"result": "passed",
"summary": "Confirmed working directory before writing the plan artifact."
},
{
"command": "write /home/liph/dotfiles/pi/.pi/.pi-subagents/artifacts/outputs/a22166b7/plan.md",
"result": "passed",
"summary": "Plan artifact written, 8771 bytes."
}
],
"validationOutput": [
"Plan structure validated: Goal, 12 Tasks (each with File/Changes/Acceptance), Files to Modify, New Files, Dependencies, Risks sections all present."
],
"residualRisks": [
"Brand identity (name, palette, logo, voice) is not provided — plan uses 'Ember & Wick' placeholders.",
"Product catalog data (SKUs, scent names, prices, imagery) is not provided — plan seeds 6 placeholder entries.",
"Commerce model not specified — defaulted to Snipcart drop-in cart; needs owner confirmation (Shopify/Stripe/quote-only).",
"Tech stack not specified — defaulted to Astro + Tailwind; React/Next or plain HTML alternative possible.",
"Legal/compliance review still required: fragrance allergens, California Prop-65, and 'natural/eco' claims.",
"Photography and web-font subsetting are likely performance/accessibility regression sources without owner-supplied assets."
],
"noStagedFiles": true,
"diffSummary": "New plan file authored at artifacts/outputs/a22166b7/plan.md; no code or config changes.",
"reviewFindings": [
"no blockers",
"Ambiguity: owner should confirm brand, commerce, and stack before implementation begins (see Risks in plan)."
],
"manualNotes": "Plan is intentionally framework-concrete (Astro) and scope-concrete (4 pages + contact API) to be executable; pivot is cheap before Task 1 (scaffold) runs. If owner prefers a single landing page with no commerce, Tasks 4, 6, 7, 9 can be collapsed into one Home page with a mailto form."
}
},
"transcriptPath": "/home/liph/dotfiles/pi/.pi/.pi-subagents/artifacts/a22166b7_planner_0_transcript.jsonl",
"timestamp": 1784832904248
}
@@ -0,0 +1,120 @@
# Implementation Plan: Candle Company Marketing Webpage
## Goal
Design and implement a single-page (or small multi-section) marketing website for a candle company that showcases products, brand story, and enables direct purchase or wholesale inquiries.
## Ambiguity to Resolve Before Coding
The request is underspecified. Before implementation, the parent/owner should confirm the following (these are listed in **Risks** as well):
- Company name, brand voice, color palette, and logo (or placeholders acceptable).
- Product catalog: number of SKUs, scent names, prices, sizes, and imagery (or placeholders acceptable).
- Commerce model: direct checkout (Shopify, Stripe, Snipcart) vs. "request a quote" / wholesale form vs. informational only.
- Tech stack: plain HTML/CSS/JS, a static site generator (Astro, Eleventy, Hugo), or a React/Next.js app.
- Hosting target: GitHub Pages, Netlify, Vercel, or self-hosted.
- Pages required: single landing page, or Home / Shop / About / Contact split.
- Compliance: any claims (e.g., "eco-friendly", "soy", "hand-poured") need substantiation; FDA/CPSC prop-65 warnings if marketed in CA.
Default assumptions (used to make the plan concrete; can be overridden):
- **Stack**: Astro (static-first, SEO-friendly, easy to deploy to Netlify/Vercel).
- **Scope**: Home, Shop, About, Contact — 4 routes plus a shared layout.
- **Commerce**: Snipcart (drop-in cart) or a simple "Add to Cart" UI that posts to a hosted checkout. If the owner prefers no commerce, replace Shop with a product gallery and a Contact form.
- **Brand**: placeholder name "Ember & Wick", warm neutral palette, serif display + sans body.
- **Assets**: SVG placeholders for product imagery, real assets to be supplied later.
---
## Tasks
1. **Task 1: Scaffold project**
- Files: `package.json`, `astro.config.mjs`, `tsconfig.json`, `.gitignore`, `README.md`.
- Steps: `npm create astro@latest -- --template minimal --no-install`, add Tailwind via `npx astro add tailwind`, install Snipcart loader if commerce is in scope.
- Acceptance: `npm run dev` serves a blank page at `http://localhost:4321`; `npm run build` produces `dist/`.
2. **Task 2: Define design tokens and global styles**
- File: `src/styles/global.css` (or `tailwind.config.mjs` if using Tailwind).
- Changes: palette (e.g., warm cream `#F6F1E7`, charcoal `#2B2A28`, ember `#C8553D`, wax `#E9DFC9`), typography scale (serif display, sans body), spacing scale, focus ring, reduced-motion media query.
- Acceptance: Lighthouse contrast checks pass AA on body text and CTAs.
3. **Task 3: Build shared layout**
- Files: `src/layouts/BaseLayout.astro`, `src/components/SiteHeader.astro`, `src/components/SiteFooter.astro`, `src/components/SeoHead.astro`.
- Changes: sticky header with nav (Home / Shop / About / Contact), mobile hamburger, footer with newsletter signup (Mailchimp/Buttondown embed), SEO meta, Open Graph, favicon, JSON-LD `Organization` schema.
- Acceptance: Header collapses to a working menu at <768px; OG image preview renders when sharing.
4. **Task 4: Author content collection for products**
- Files: `src/content/config.ts`, `src/content/products/*.md` (one file per candle).
- Changes: Zod schema with `name`, `slug`, `scentNotes` (top/heart/base), `burnHours`, `sizeOz`, `priceUSD`, `image`, `inStock`, `tags[]`. Seed with 6 placeholder SKUs.
- Acceptance: `astro build` validates all entries; missing fields fail the build.
5. **Task 5: Home page**
- File: `src/pages/index.astro`.
- Sections: hero with brand tagline + CTA, "Best Sellers" carousel (36 products from collection), brand story teaser, Instagram/UGC grid (placeholder images), email capture, footer.
- Acceptance: LCP < 2.5s on a simulated Fast 3G; hero CTA is keyboard-reachable.
6. **Task 6: Shop page**
- File: `src/pages/shop.astro` plus `src/components/ProductCard.astro`, `src/components/ProductGrid.astro`, `src/components/FilterBar.astro`.
- Changes: grid of `ProductCard`, client-side filter by `tags` (scent family, size), sort by price/name, "Add to Cart" button wired to Snipcart (or a placeholder alert if commerce out of scope).
- Acceptance: filter/sort works with no layout shift; empty state when no results.
7. **Task 7: Product detail page**
- File: `src/pages/shop/[slug].astro`.
- Changes: large image, scent pyramid, burn time, ingredients, care instructions, related products, add-to-cart.
- Acceptance: dynamic route generates one page per content entry; 404 for unknown slugs.
8. **Task 8: About page**
- File: `src/pages/about.astro`.
- Sections: founder story, process (sourcing, pouring, curing), sustainability claims (with citations where required), atelier/team photos.
- Acceptance: every quantitative claim is either sourced or labeled as aspirational.
9. **Task 9: Contact / Wholesale page**
- File: `src/pages/contact.astro`.
- Changes: form fields (name, email, message, inquiry type: retail/wholesale/press), serverless handler (Astro endpoint `src/pages/api/contact.ts` posting to Resend or Formspree), inline validation, honeypot + Cloudflare Turnstile.
- Acceptance: form rejects bots in staging; successful submission shows thank-you state and writes nothing to the client console.
10. **Task 10: Accessibility and performance pass**
- Files: across components.
- Changes: semantic landmarks, alt text on every `<img>`, `aria-live` for cart updates, focus management on mobile menu, lazy-load below-the-fold images (`loading="lazy"`, `decoding="async"`), preload hero image, self-host or subset fonts.
- Acceptance: axe-core run via `npm run test:a11y` reports zero serious/critical issues; Lighthouse Performance ≥ 90, Accessibility ≥ 95 on the built site.
11. **Task 11: Analytics and consent**
- File: `src/components/Analytics.astro`.
- Changes: Plausible (cookieless, preferred) or GA4 with a cookie consent banner; respect `prefers-reduced-motion`.
- Acceptance: no analytics scripts fire before consent; events tracked: `add_to_cart`, `view_item`, `form_submit`.
12. **Task 12: Deploy**
- File: `netlify.toml` or `vercel.json`.
- Changes: build command `npm run build`, publish `dist/`, security headers (CSP, X-Frame-Options, Referrer-Policy, Permissions-Policy), redirects for trailing slashes.
- Acceptance: preview deploy URL returns 200; security headers present in response.
---
## Files to Modify
- `package.json` — add deps (`@astrojs/tailwind`, `astro`, `@astrojs/sitemap`, `snipcart` if used).
- `astro.config.mjs` — integrations, site URL, sitemap, image service.
- `src/styles/global.css` — tokens, base resets, typography.
- `src/layouts/BaseLayout.astro` — shell, SEO, header, footer.
- `src/components/*` — header, footer, product card, filter bar, analytics, seo head.
- `src/pages/index.astro`, `src/pages/shop.astro`, `src/pages/shop/[slug].astro`, `src/pages/about.astro`, `src/pages/contact.astro`.
- `src/pages/api/contact.ts` — form handler.
- `src/content/config.ts` and `src/content/products/*.md` — product schema and seeds.
## New Files
- `public/og-image.png`, `public/favicon.svg` — share assets.
- `public/images/products/*.svg` — placeholder product imagery.
- `src/env.d.ts` — Astro types.
- `README.md` — run/build/deploy instructions and content authoring guide.
## Dependencies
- Task 1 blocks all others.
- Tasks 2 and 3 should land before 59.
- Task 4 blocks Tasks 6 and 7.
- Task 10 depends on every page being authored.
- Task 12 depends on Task 10.
## Risks
- **Underspecification**: brand name, palette, copy, product data, and commerce model are not provided. Plan defaults to placeholders; the owner should confirm before design polish.
- **Compliance**: fragrance allergens (EU IFRA / US FDA), prop-65 in California, and "natural"/"eco" claims need legal review. Include a disclaimer block on product pages until cleared.
- **Imagery**: stock or original photography significantly affects perceived quality; SVG placeholders look unfinished in production.
- **Commerce integration**: Snipcart/Stripe accounts and tax/shipping configuration are external dependencies; budget setup time.
- **Email deliverability**: domain DNS (SPF/DKIM/DMARC) must be set for the contact form and newsletter to avoid spam foldering.
- **Performance budgets**: large hero images and web fonts are common regression sources; specify a max hero image size (e.g., 200 KB WebP/AVIF) and subset fonts.
- **Accessibility regressions**: Snipcart's modal and the mobile menu are frequent focus-trap pitfalls; allocate explicit testing time.
- **i18n**: if the brand sells internationally, currency, language, and date formatting need a strategy (Astro i18n routes or a future migration to a localized CMS).
File diff suppressed because one or more lines are too long
@@ -0,0 +1,120 @@
# Implementation Plan: Candle Company Marketing Webpage
## Goal
Design and implement a single-page (or small multi-section) marketing website for a candle company that showcases products, brand story, and enables direct purchase or wholesale inquiries.
## Ambiguity to Resolve Before Coding
The request is underspecified. Before implementation, the parent/owner should confirm the following (these are listed in **Risks** as well):
- Company name, brand voice, color palette, and logo (or placeholders acceptable).
- Product catalog: number of SKUs, scent names, prices, sizes, and imagery (or placeholders acceptable).
- Commerce model: direct checkout (Shopify, Stripe, Snipcart) vs. "request a quote" / wholesale form vs. informational only.
- Tech stack: plain HTML/CSS/JS, a static site generator (Astro, Eleventy, Hugo), or a React/Next.js app.
- Hosting target: GitHub Pages, Netlify, Vercel, or self-hosted.
- Pages required: single landing page, or Home / Shop / About / Contact split.
- Compliance: any claims (e.g., "eco-friendly", "soy", "hand-poured") need substantiation; FDA/CPSC prop-65 warnings if marketed in CA.
Default assumptions (used to make the plan concrete; can be overridden):
- **Stack**: Astro (static-first, SEO-friendly, easy to deploy to Netlify/Vercel).
- **Scope**: Home, Shop, About, Contact — 4 routes plus a shared layout.
- **Commerce**: Snipcart (drop-in cart) or a simple "Add to Cart" UI that posts to a hosted checkout. If the owner prefers no commerce, replace Shop with a product gallery and a Contact form.
- **Brand**: placeholder name "Ember & Wick", warm neutral palette, serif display + sans body.
- **Assets**: SVG placeholders for product imagery, real assets to be supplied later.
---
## Tasks
1. **Task 1: Scaffold project**
- Files: `package.json`, `astro.config.mjs`, `tsconfig.json`, `.gitignore`, `README.md`.
- Steps: `npm create astro@latest -- --template minimal --no-install`, add Tailwind via `npx astro add tailwind`, install Snipcart loader if commerce is in scope.
- Acceptance: `npm run dev` serves a blank page at `http://localhost:4321`; `npm run build` produces `dist/`.
2. **Task 2: Define design tokens and global styles**
- File: `src/styles/global.css` (or `tailwind.config.mjs` if using Tailwind).
- Changes: palette (e.g., warm cream `#F6F1E7`, charcoal `#2B2A28`, ember `#C8553D`, wax `#E9DFC9`), typography scale (serif display, sans body), spacing scale, focus ring, reduced-motion media query.
- Acceptance: Lighthouse contrast checks pass AA on body text and CTAs.
3. **Task 3: Build shared layout**
- Files: `src/layouts/BaseLayout.astro`, `src/components/SiteHeader.astro`, `src/components/SiteFooter.astro`, `src/components/SeoHead.astro`.
- Changes: sticky header with nav (Home / Shop / About / Contact), mobile hamburger, footer with newsletter signup (Mailchimp/Buttondown embed), SEO meta, Open Graph, favicon, JSON-LD `Organization` schema.
- Acceptance: Header collapses to a working menu at <768px; OG image preview renders when sharing.
4. **Task 4: Author content collection for products**
- Files: `src/content/config.ts`, `src/content/products/*.md` (one file per candle).
- Changes: Zod schema with `name`, `slug`, `scentNotes` (top/heart/base), `burnHours`, `sizeOz`, `priceUSD`, `image`, `inStock`, `tags[]`. Seed with 6 placeholder SKUs.
- Acceptance: `astro build` validates all entries; missing fields fail the build.
5. **Task 5: Home page**
- File: `src/pages/index.astro`.
- Sections: hero with brand tagline + CTA, "Best Sellers" carousel (36 products from collection), brand story teaser, Instagram/UGC grid (placeholder images), email capture, footer.
- Acceptance: LCP < 2.5s on a simulated Fast 3G; hero CTA is keyboard-reachable.
6. **Task 6: Shop page**
- File: `src/pages/shop.astro` plus `src/components/ProductCard.astro`, `src/components/ProductGrid.astro`, `src/components/FilterBar.astro`.
- Changes: grid of `ProductCard`, client-side filter by `tags` (scent family, size), sort by price/name, "Add to Cart" button wired to Snipcart (or a placeholder alert if commerce out of scope).
- Acceptance: filter/sort works with no layout shift; empty state when no results.
7. **Task 7: Product detail page**
- File: `src/pages/shop/[slug].astro`.
- Changes: large image, scent pyramid, burn time, ingredients, care instructions, related products, add-to-cart.
- Acceptance: dynamic route generates one page per content entry; 404 for unknown slugs.
8. **Task 8: About page**
- File: `src/pages/about.astro`.
- Sections: founder story, process (sourcing, pouring, curing), sustainability claims (with citations where required), atelier/team photos.
- Acceptance: every quantitative claim is either sourced or labeled as aspirational.
9. **Task 9: Contact / Wholesale page**
- File: `src/pages/contact.astro`.
- Changes: form fields (name, email, message, inquiry type: retail/wholesale/press), serverless handler (Astro endpoint `src/pages/api/contact.ts` posting to Resend or Formspree), inline validation, honeypot + Cloudflare Turnstile.
- Acceptance: form rejects bots in staging; successful submission shows thank-you state and writes nothing to the client console.
10. **Task 10: Accessibility and performance pass**
- Files: across components.
- Changes: semantic landmarks, alt text on every `<img>`, `aria-live` for cart updates, focus management on mobile menu, lazy-load below-the-fold images (`loading="lazy"`, `decoding="async"`), preload hero image, self-host or subset fonts.
- Acceptance: axe-core run via `npm run test:a11y` reports zero serious/critical issues; Lighthouse Performance ≥ 90, Accessibility ≥ 95 on the built site.
11. **Task 11: Analytics and consent**
- File: `src/components/Analytics.astro`.
- Changes: Plausible (cookieless, preferred) or GA4 with a cookie consent banner; respect `prefers-reduced-motion`.
- Acceptance: no analytics scripts fire before consent; events tracked: `add_to_cart`, `view_item`, `form_submit`.
12. **Task 12: Deploy**
- File: `netlify.toml` or `vercel.json`.
- Changes: build command `npm run build`, publish `dist/`, security headers (CSP, X-Frame-Options, Referrer-Policy, Permissions-Policy), redirects for trailing slashes.
- Acceptance: preview deploy URL returns 200; security headers present in response.
---
## Files to Modify
- `package.json` — add deps (`@astrojs/tailwind`, `astro`, `@astrojs/sitemap`, `snipcart` if used).
- `astro.config.mjs` — integrations, site URL, sitemap, image service.
- `src/styles/global.css` — tokens, base resets, typography.
- `src/layouts/BaseLayout.astro` — shell, SEO, header, footer.
- `src/components/*` — header, footer, product card, filter bar, analytics, seo head.
- `src/pages/index.astro`, `src/pages/shop.astro`, `src/pages/shop/[slug].astro`, `src/pages/about.astro`, `src/pages/contact.astro`.
- `src/pages/api/contact.ts` — form handler.
- `src/content/config.ts` and `src/content/products/*.md` — product schema and seeds.
## New Files
- `public/og-image.png`, `public/favicon.svg` — share assets.
- `public/images/products/*.svg` — placeholder product imagery.
- `src/env.d.ts` — Astro types.
- `README.md` — run/build/deploy instructions and content authoring guide.
## Dependencies
- Task 1 blocks all others.
- Tasks 2 and 3 should land before 59.
- Task 4 blocks Tasks 6 and 7.
- Task 10 depends on every page being authored.
- Task 12 depends on Task 10.
## Risks
- **Underspecification**: brand name, palette, copy, product data, and commerce model are not provided. Plan defaults to placeholders; the owner should confirm before design polish.
- **Compliance**: fragrance allergens (EU IFRA / US FDA), prop-65 in California, and "natural"/"eco" claims need legal review. Include a disclaimer block on product pages until cleared.
- **Imagery**: stock or original photography significantly affects perceived quality; SVG placeholders look unfinished in production.
- **Commerce integration**: Snipcart/Stripe accounts and tax/shipping configuration are external dependencies; budget setup time.
- **Email deliverability**: domain DNS (SPF/DKIM/DMARC) must be set for the contact form and newsletter to avoid spam foldering.
- **Performance budgets**: large hero images and web fonts are common regression sources; specify a max hero image size (e.g., 200 KB WebP/AVIF) and subset fonts.
- **Accessibility regressions**: Snipcart's modal and the mobile menu are frequent focus-trap pitfalls; allocate explicit testing time.
- **i18n**: if the brand sells internationally, currency, language, and date formatting need a strategy (Astro i18n routes or a future migration to a localized CMS).
+84
View File
@@ -0,0 +1,84 @@
# Implementation Plan
## Goal
Answer the meta-question "what can you plan?" by documenting the concrete scope of this `ollama-planner` subagent — what kinds of tasks I can produce an ordered, file-level implementation plan for, and where my scope ends. No code changes are produced; this document is the deliverable.
## Tasks
This is a meta-question, not a code change request. The "plan" here is the capability description itself. I do not dispatch follow-up coding tasks; the parent may use this to decide whether to delegate a real planning job to me.
1. **Task 1 — Read context (already done)**
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/ollama-planner.md`
- Changes: read my own role definition to ground the answer in my actual system prompt
- Acceptance: confirmed I am a read-only planner paired with `ollama-coder`
2. **Task 2 — Write capability summary to the required artifact path**
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md`
- Changes: produce this document
- Acceptance: file written, addresses the question concretely
## Files to Modify
- None. This run is read-only and produces a single artifact.
## New Files
- `agents/.pi-subagents/artifacts/outputs/4059014e/plan.md` — this capability summary (the deliverable)
## Dependencies
- None. No follow-up `ollama-coder` dispatch is appropriate for a meta-question.
## Risks
- Risk: user expected a code plan for some unstated real task. Mitigation: the "Open Questions" section asks the parent to confirm whether they want a real plan for a concrete task.
- Risk: scope is misstated. Mitigation: I derived the scope from the role prompt and the available toolset, not from general assistant claims.
## What I can plan (in-scope)
Concrete software-engineering deliverables where I can produce a file-level, ordered plan that `ollama-coder` can execute without re-deriving intent:
1. **Feature implementation** — new endpoints, UI panels, CLI flags, integrations. I name files, exact changes, and per-task acceptance checks.
2. **Refactors** — extract module/class, rename, restructure a directory tree, decouple a dependency, move code across a package boundary.
3. **Bug fixes with multi-file surface** — when the cause spans 2+ files, I plan the diagnostic + fix + regression test as ordered steps.
4. **Migrations** — framework upgrades (e.g. React 18→19, Node 18→20), database schema migrations, codemod rollouts, lockfile/dep upgrades with breaking changes.
5. **Test strategy and scaffolding** — which test files to add, which existing tests to update, fixtures, mocks, and what command to run for verification.
6. **API design and contract changes** — request/response shape changes, version bumps, deprecation policy, and the diff plan across producer + consumers.
7. **Build / CI / DevEx changes** — pipeline edits, new GitHub Actions, monorepo scripts, pre-commit hooks, dev-container / Nix changes.
8. **Documentation and migration notes** — when paired with code changes, I can plan the README/changelog/runbook updates that must ship alongside.
9. **Cross-cutting concerns as plans, not edits** — auth/authorization model, error-handling strategy, logging/observability rollout, feature-flag introduction.
10. **Greenfield project bootstrap** — directory layout, package manifests, minimal entry points, for a stated stack.
For every plan I produce:
- One ordered task list with file path, exact change, and a one-line acceptance check per task.
- A "Files to Modify" / "New Files" inventory.
- A "Dependencies" section so ordering is unambiguous.
- A "Risks" section with mitigations.
- A "Validation Contract" naming the commands/tests the coder must run and the evidence to return.
## Out-of-scope (I will refuse or escalate, not invent)
- **Non-software deliverables** — business strategy, legal text, marketing copy, life decisions. If asked, I'll say so and ask the parent to re-route.
- **Destructive operations without explicit confirmation** — `git push --force`, deleting branches, wiping data, dropping tables. I'll surface these as risks and ask before planning execution.
- **Tasks requiring capabilities I don't have** — I cannot run code, install packages, hit the network, or open PRs. I can plan those actions; I cannot perform them.
- **Ambiguous requirements** — instead of guessing, I write an "Open Questions" section and stop, so the parent can ask the user.
## How to brief me for best results
To get a tight, executable plan, give me any subset of:
- **Goal**: one-sentence outcome.
- **Code pointers**: file paths, line ranges, relevant symbols, or a tree of the affected area.
- **Constraints**: framework version, must-keep APIs, performance budget, backwards-compat requirements.
- **Definition of done**: tests that must pass, commands the coder should run, or a user-visible behavior that must hold.
- **Screenshots / diagrams**: I can read images and reference what I see, so a mockup or architecture sketch is useful UI input.
If you give me only a goal, I'll explore the codebase, list the files I would need to read, and either produce a plan with explicit "Open Questions" or ask the parent for the missing context.
## Format of what I produce
Single `plan.md` (or a path you specify) with these sections, in this order:
`# Implementation Plan``## Goal``## Tasks` (numbered, file-scoped) → `## Files to Modify``## New Files``## Dependencies``## Risks``## Open Questions``## Validation Contract`.
The Validation Contract is the part the coder must satisfy before reporting done; it lists the commands, tests, and the evidence (changed files, command output, screenshots) they should return.
## Open Questions
1. Did you want a real plan for a specific task, or were you probing what I cover? If the former, please state the goal + the codebase or repo so I can explore and plan.
2. Is there a stack/language/framework you want me to bias toward? (I am language-agnostic; explicit constraints produce tighter plans.)
## Validation Contract
- **Behavior that must hold**: this `plan.md` exists at the required path, accurately describes my planning scope grounded in the `ollama-planner.md` role prompt, and ends with a structured acceptance report.
- **Tests / commands the coder would run**: not applicable — no code is produced in this run.
- **Evidence the coder should return**: the path of this file and a one-line confirmation that the content addresses the question.
---
*No code was changed. No follow-up `ollama-coder` task was dispatched. This artifact is the deliverable.*