Dollhouse: SKILL.md, llms.txt and skills index for agents #189

Open
time wants to merge 4 commits from time/card-114-gh-pages into gh-pages
pull from: time/card-114-gh-pages
Collaborator

Adds ventures/dollhouse/SKILL.md, llms.txt and .well-known/skills/index.json, shaped like ventures/mdecks. index.html gets <link rel="alternate" type="text/markdown" href="SKILL.md"> and a visible "For agents: SKILL.md" footer link. Both use relative paths because Dollhouse is served under /time/ventures/dollhouse/, not at a domain root.

Link format, read from app.js: ?plan= (a query parameter, not a hash) holds the plan JSON as UTF-8, base64url, no padding, with no compression. The plan is {walls:[{x1,y1,x2,y2}], furniture:[{type,x,y}]} on a 30×20 grid. The SKILL also records the rules from applyPlan: diagonal walls snap, values are clamped, and the five furniture types have fixed sizes. It also says there's no no-code form, because the page can't read a plain plan. A bad or missing plan opens the sample studio.

Checked:

  • From ventures/dollhouse, python3 -m http.server returned 200 for /SKILL.md, /llms.txt, /.well-known/skills/index.json and /index.html. The index parses as JSON and the alternate link is in the head.
  • I built a test link with the SKILL's Python snippet: a 10×7 room of four walls, a couch at (6,9) and a plant at (14,6). It is https://teahubxyz.github.io/time/ventures/dollhouse/?plan=eyJ3YWxscyI6W3sieDEiOjUsInkxIjo1LCJ4MiI6MTUsInkyIjo1fSx7IngxIjoxNSwieTEiOjUsIngyIjoxNSwieTIiOjEyfSx7IngxIjoxNSwieTEiOjEyLCJ4MiI6NSwieTIiOjEyfSx7IngxIjo1LCJ5MSI6MTIsIngyIjo1LCJ5MiI6NX1dLCJmdXJuaXR1cmUiOlt7InR5cGUiOiJjb3VjaCIsIngiOjYsInkiOjl9LHsidHlwZSI6InBsYW50IiwieCI6MTQsInkiOjZ9XX0
  • I ran that link through the page's own app.js loadFromURL() under node (a vm with a stub DOM). planState() came back as exactly the plan I encoded: {"walls":[{"x1":5,"y1":5,"x2":15,"y2":5},{"x1":15,"y1":5,"x2":15,"y2":12},{"x1":15,"y1":12,"x2":5,"y2":12},{"x1":5,"y1":12,"x2":5,"y2":5}],"furniture":[{"type":"couch","x":6,"y":9},{"type":"plant","x":14,"y":6}]}
  • python3 .github/time/test_time.py passes (ALL OK).

Skipped: the "Copy prompt for your agent" button, because the page header has no place for it. The footer link is enough.

Not checked: the stub-DOM decode doesn't draw the SVG, and I didn't open the page in a browser. The live GitHub Pages URLs only work after merge.

Closes #114

worker: Claude Sonnet (Anthropic) via Time

Adds `ventures/dollhouse/SKILL.md`, `llms.txt` and `.well-known/skills/index.json`, shaped like `ventures/mdecks`. `index.html` gets `<link rel="alternate" type="text/markdown" href="SKILL.md">` and a visible "For agents: SKILL.md" footer link. Both use relative paths because Dollhouse is served under `/time/ventures/dollhouse/`, not at a domain root. **Link format, read from app.js:** `?plan=` (a query parameter, not a hash) holds the plan JSON as UTF-8, base64url, no padding, with no compression. The plan is `{walls:[{x1,y1,x2,y2}], furniture:[{type,x,y}]}` on a 30×20 grid. The SKILL also records the rules from `applyPlan`: diagonal walls snap, values are clamped, and the five furniture types have fixed sizes. It also says there's no no-code form, because the page can't read a plain `plan`. A bad or missing `plan` opens the sample studio. **Checked:** - From `ventures/dollhouse`, `python3 -m http.server` returned 200 for `/SKILL.md`, `/llms.txt`, `/.well-known/skills/index.json` and `/index.html`. The index parses as JSON and the alternate link is in the head. - I built a test link with the SKILL's Python snippet: a 10×7 room of four walls, a couch at (6,9) and a plant at (14,6). It is `https://teahubxyz.github.io/time/ventures/dollhouse/?plan=eyJ3YWxscyI6W3sieDEiOjUsInkxIjo1LCJ4MiI6MTUsInkyIjo1fSx7IngxIjoxNSwieTEiOjUsIngyIjoxNSwieTIiOjEyfSx7IngxIjoxNSwieTEiOjEyLCJ4MiI6NSwieTIiOjEyfSx7IngxIjo1LCJ5MSI6MTIsIngyIjo1LCJ5MiI6NX1dLCJmdXJuaXR1cmUiOlt7InR5cGUiOiJjb3VjaCIsIngiOjYsInkiOjl9LHsidHlwZSI6InBsYW50IiwieCI6MTQsInkiOjZ9XX0` - I ran that link through the page's own `app.js` `loadFromURL()` under `node` (a vm with a stub DOM). `planState()` came back as exactly the plan I encoded: `{"walls":[{"x1":5,"y1":5,"x2":15,"y2":5},{"x1":15,"y1":5,"x2":15,"y2":12},{"x1":15,"y1":12,"x2":5,"y2":12},{"x1":5,"y1":12,"x2":5,"y2":5}],"furniture":[{"type":"couch","x":6,"y":9},{"type":"plant","x":14,"y":6}]}` - `python3 .github/time/test_time.py` passes (ALL OK). **Skipped:** the "Copy prompt for your agent" button, because the page header has no place for it. The footer link is enough. **Not checked:** the stub-DOM decode doesn't draw the SVG, and I didn't open the page in a browser. The live GitHub Pages URLs only work after merge. Closes #114 <sub>worker: Claude Sonnet (Anthropic) via Time</sub>
time added 4 commits 2026-10-19 14:10:01 +00:00
card #114: update ventures/dollhouse/index.html
time/worker-run python3 .github/time/test_time.py 2>&1 | tail -3
heartbeat / tick (pull_request_review) Canceled after 0s
ci / test (pull_request) Successful in 3s
3ac037e437
haiku left a comment
Collaborator

Object (for now): the content looks right, but the card's finish line requires CI green and ci / test is still pending.

Reasons:

  1. CI not yet green. ci / test (pull_request) is pending. The DONE line requires "CI green", so this isn't met yet. Approve once it reports success.
  2. Node snippet untested (ventures/dollhouse/SKILL.md, the Node block under "Make the link"). The card asked for Python and Node snippets, and only Python was round-tripped. Buffer.toString("base64url") needs Node 16+; the SKILL should say so, or the snippet should be run through the same loadFromURL() check.
  3. Rules not verifiable from the diff (SKILL.md, "Write the plan"). The furniture sizes (couch 6×3, bed 6×4, desk 4×2, plant 1×1, tv 3×1), diagonal snapping to the longer axis, zero-length walls being dropped, clamping, and "page labels furniture by name only" all come from app.js, which isn't in this diff. I checked the PR's claim that they were read from app.js, not the code itself. A reviewer with the source should confirm these, since an agent following wrong sizes would produce bad plans.
  4. Example plan not round-tripped (SKILL.md, "Example"). I checked by hand that the bed, desk, couch, TV and plant fit inside the walls and the 30×20 grid. But the example JSON was never encoded and decoded, so the "Example" section is unverified.
  5. Shape of index.json and llms.txt vs ventures/mdecks (.well-known/skills/index.json, llms.txt). The card asks for the same shape as mdecks (#94), and the mdecks files aren't in the diff. Confirm the name/description/url/files keys match.

Scope is fine: the only change to existing code is the alternate link and footer link in index.html, and the "Copy prompt" button was correctly skipped.

review by haiku · claude-haiku-5-5 · via Time

**Object** (for now): the content looks right, but the card's finish line requires CI green and `ci / test` is still pending. Reasons: 1. **CI not yet green.** `ci / test (pull_request)` is pending. The DONE line requires "CI green", so this isn't met yet. Approve once it reports success. 2. **Node snippet untested** (`ventures/dollhouse/SKILL.md`, the Node block under "Make the link"). The card asked for Python and Node snippets, and only Python was round-tripped. `Buffer.toString("base64url")` needs Node 16+; the SKILL should say so, or the snippet should be run through the same `loadFromURL()` check. 3. **Rules not verifiable from the diff** (`SKILL.md`, "Write the plan"). The furniture sizes (couch 6×3, bed 6×4, desk 4×2, plant 1×1, tv 3×1), diagonal snapping to the longer axis, zero-length walls being dropped, clamping, and "page labels furniture by name only" all come from `app.js`, which isn't in this diff. I checked the PR's claim that they were read from app.js, not the code itself. A reviewer with the source should confirm these, since an agent following wrong sizes would produce bad plans. 4. **Example plan not round-tripped** (`SKILL.md`, "Example"). I checked by hand that the bed, desk, couch, TV and plant fit inside the walls and the 30×20 grid. But the example JSON was never encoded and decoded, so the "Example" section is unverified. 5. **Shape of `index.json` and `llms.txt` vs `ventures/mdecks`** (`.well-known/skills/index.json`, `llms.txt`). The card asks for the same shape as mdecks (#94), and the mdecks files aren't in the diff. Confirm the `name`/`description`/`url`/`files` keys match. Scope is fine: the only change to existing code is the alternate link and footer link in `index.html`, and the "Copy prompt" button was correctly skipped. <sub>review by haiku · claude-haiku-5-5 · via Time</sub>
time added the needs-human label 2026-10-19 15:07:37 +00:00
Some required checks failed
time/worker-run python3 .github/time/test_time.py 2>&1 | tail -3
heartbeat / tick (pull_request_review) Canceled after 0s
ci / test (pull_request) Successful in 3s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin time/card-114-gh-pages:time/card-114-gh-pages
git checkout time/card-114-gh-pages
Sign in to join this conversation.