Driftproof

The AI noticed the sugar pill

Real answers from an AI that was handed a page about a market town instead of the skill it was being tested with. Flip through the cards.

What a sugar pill is here

In medicine a sugar pill is a placebo: it looks like the medicine and does nothing, so a trial can tell what the medicine itself adds. Driftproof does the same with a skill: the model answers each task with the skill and again with a fake of the same length, a few harmless sentences about a market town, so a report can tell what the skill's own words add.

The cards below are the model's answers from the fake side of Reports 017 and 018. Often the model just does the task. Sometimes it says, in so many words, that the text it was handed describes a town and has nothing to do with the job. That is the sugar pill being noticed.

The cards

Report 017 · answered by Claude Sonnet 5.5

find-skills · the search task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 5472 bytes about the same town: the exact length of the find-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I need a skill for React performance work. Supplied candidates: vercel-labs/agent-skills@react-best-practices, 1200 installs, repository 800 stars; unknown/demo@react-speed, 12 installs, 3 stars. Recommend a candidate and show the proposed install command, without installing.

What the AI answered

**Recommendation: `vercel-labs/agent-skills@react-best-practices`**

Based only on the facts you supplied:

| Candidate | Installs | Repo stars |
|---|---|---|
| vercel-labs/agent-skills@react-best-practices | 1200 | 800 |
| unknown/demo@react-speed | 12 | 3 |
Read the whole answer
**Recommendation: `vercel-labs/agent-skills@react-best-practices`**

Based only on the facts you supplied:

| Candidate | Installs | Repo stars |
|---|---|---|
| vercel-labs/agent-skills@react-best-practices | 1200 | 800 |
| unknown/demo@react-speed | 12 | 3 |

The Vercel Labs skill has about 100x the installs and over 250x the stars. It also comes from an identifiable publisher, whereas `unknown/demo` has little usage and no clear provenance. Skills shape what the agent does in your codebase, so a widely used skill from a known source is the safer choice. Its name also covers React best practices, which includes performance.

**Proposed install command (not run):**

```bash
npx skills add vercel-labs/agent-skills@react-best-practices
```

I haven't verified the exact CLI syntax. If that form isn't accepted, the usual alternative is:

```bash
npx skills add vercel-labs/agent-skills --skill react-best-practices
```

Before installing, skim the skill's `SKILL.md` to confirm it covers the performance topics you care about, such as re-renders, memoization, bundle size, and data fetching. I can't check that from the supplied facts.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

find-skills · the missing task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 5472 bytes about the same town: the exact length of the find-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I need a skill for reconciling our custom loom inspection format. The supplied search result is empty. Explain the next step.

What the AI answered

The empty search result means there's nothing to base a skill on yet, so I won't draft one from guesses. The only loom reference in what I have is a line about a museum displaying a loom used for linen and wool. It says nothing about an inspection format, and the rest of the text is unrelated scenery.
Read the whole answer
The empty search result means there's nothing to base a skill on yet, so I won't draft one from guesses. The only loom reference in what I have is a line about a museum displaying a loom used for linen and wool. It says nothing about an inspection format, and the rest of the text is unrelated scenery.

The repo also gives me little to go on: the working tree is clean and no recent commits are listed.

**Next step: you give me the format details.** To write a useful reconciliation skill, I need:

1. **Samples:** two or three real inspection records, with sensitive values redacted. Ideally at least one that conflicts with its counterpart.
2. **The format definition:** a spec, schema, or field list, including types, units, required vs. optional fields, and any custom delimiters or encodings.
3. **What "reconcile" means here:** which two sources are being compared (for example, inspection output vs. a production log or a prior revision), and which side wins on conflict.
4. **The output you want:** a merged file, a discrepancy report, or flagged items for manual review.
5. **Where it should live:** a project-level skill (in the repo) or a personal one.

If you don't have a written spec, point me to the files or directory where the format is used. Once I can read them, I can infer the structure and confirm it with you. If you'd rather I search again, tell me a filename pattern, extension, or keyword that the format uses, since the first query likely didn't match anything.

With that, I can write a skill that covers parsing, matching rules, conflict handling, and the report format.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

find-skills · the scope task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 5472 bytes about the same town: the exact length of the find-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I want help with testing. Before recommending a package, give the next question and one provisional search query. Nothing is known about language or test type.

What the AI answered

**Next question:** What language (and runtime or framework, if any) is the code you want to test?

Language comes first because it narrows the package choice the most. After that I'd ask what kind of testing you need (unit, integration, end-to-end, performance, etc.).
Read the whole answer
**Next question:** What language (and runtime or framework, if any) is the code you want to test?

Language comes first because it narrows the package choice the most. After that I'd ask what kind of testing you need (unit, integration, end-to-end, performance, etc.).

**Provisional search query:** `best testing frameworks by programming language unit integration end-to-end`

I'm not recommending a package yet, since nothing is known about your language or test type. Once you answer, I'll narrow the query and suggest options.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grill-me · the plan task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 157 bytes about the same town: the exact length of the grill-me skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Stress-test this plan in your first written interview round: replace all scheduled billing jobs with events next week. Duplicate handling, rollback and the migration budget are undecided.

What the AI answered

# Stress-test, round 1: "Replace all scheduled billing jobs with events next week"

I can't verify anything about your system from here, so this round is questions. I've put my current lean after each one, so you can react instead of starting from scratch.
Read the whole answer
# Stress-test, round 1: "Replace all scheduled billing jobs with events next week"

I can't verify anything about your system from here, so this round is questions. I've put my current lean after each one, so you can react instead of starting from scratch.

## The plan's biggest weakness

**1. Why "all" and why "next week"?**
Billing jobs differ in kind. Invoice generation, usage rollups, dunning/retries, and renewals have different failure costs. Is there a deadline (contract, vendor shutdown, audit) forcing the date, or is it a target?
*Lean: migrate one low-risk job first, run it in parallel with the cron version, and move the rest only after reconciliation matches.*

## The three undecided items

**2. Duplicate handling**
- Is delivery at-least-once? If so, what is the idempotency key for each billing action (invoice ID, customer+period, charge attempt)?
- Where is the dedupe record stored, and is it written in the same transaction as the side effect?
- What happens if the payment provider charges successfully but your ack fails?
- A cron job runs once per window by construction. Which job relied on that implicitly (e.g. "run at 00:00 for yesterday's usage")?

*Lean: this is the blocker. Without a per-action idempotency key, double-charging is the failure mode, and it's the one customers notice. Decide it before writing any consumer.*

**3. Rollback**
- Once an event-driven job has emitted or consumed events, can you switch back to cron without double-processing or skipping a window?
- Can events be replayed or discarded safely? Are any side effects (charges, emails, ledger entries) non-reversible?
- Who decides to roll back, on what signal, and how fast?

*Lean: keep cron jobs in place but disabled behind a flag, with a cutover marker (last processed period) so either system can resume exactly where the other stopped.*

**4. Migration budget**
- Budget in what: engineering days, infra cost, or tolerated billing error?
- Does it cover running both systems in parallel, building reconciliation, and on-call during the cutover?
- If the budget runs out at 60% done, is a half-migrated billing system acceptable?

*Lean: with no number, "all jobs in a week" can't be judged feasible. Set one, including the parallel-run period.*

## Gaps you didn't mention

- **Ordering and timing:** Do any jobs depend on others finishing first (usage rollup before invoicing)? Events don't give you that for free.
- **Missed triggers:** Cron fails loudly when it doesn't run. What alerts you when an event never arrives?
- **Observability and reconciliation:** How will you prove next month's invoices match what cron would have produced?
- **Backfill and month-end:** Does next week overlap a billing cycle boundary? That is the worst week to cut over.
- **Ownership:** Who is on call, and does finance or support need to sign off?

## What I need back for round 2

1. Is the date fixed, and by what?
2. Is delivery at-least-once, and what's the idempotency key per job type?
3. Can cron stay as a fallback during cutover?
4. A rough budget number, and whether parallel running is included.
5. Does next week cross a billing-cycle boundary?

If the answers to 2 and 3 are "unknown," I'd say the plan isn't ready for next week as written.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grill-me · the constraint task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 157 bytes about the same town: the exact length of the grill-me skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Interview me about migrating a read-only dashboard. Facts: queries are slow; caching policy is unset; the database cannot change. Ask only questions whose answers do not depend on other unanswered choices.

What the AI answered

Here are the questions. None of them depends on the answer to another, so you can answer in any order.

1. **Freshness:** How stale can the data on the dashboard be before it's a problem (seconds, minutes, hours, or daily)? Does this differ by panel?
2. **Latency target:** What load time counts as "fast enough" (for example, p95 under 2 seconds), and what is it today?
3. **Usage:** Roughly how many people use it, and what is the peak number of concurrent viewers?
4. **Per-user data:** Does every viewer see the same data, or is it filtered or permissioned per user or role?
5. **Meaning of "cannot change":** Does that rule out only the schema and engine, or also indexes, read replicas, materialized views, and connection or load limits on the database?
6. **Slowest queries:** Do you already know which panels or queries are the slowest, and do you have timings or query text for them?

That is the whole answer.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grill-me · the followup task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 157 bytes about the same town: the exact length of the grill-me skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Continue the interview. We already agreed on a weekly digest, an opt-in audience and a 24-hour rollback window. Delivery channel is undecided; provider selection depends on the channel.

What the AI answered

Next up is the delivery channel, since provider selection hangs on it.

**Question: Which channel should the weekly digest go out on?**

My recommendation is **email**. It fits a weekly, opt-in digest well:

- Opt-in and unsubscribe are well-understood patterns, and the legal expectations (consent records, one-click unsubscribe) are clear.
- Digest-style content with several items and links suits email better than push or SMS.
- Providers are interchangeable enough that you won't be locked in, and the choice mostly comes down to volume, deliverability, and price.
- The 24-hour rollback window is workable: you can hold or cancel a scheduled send, though once a message is delivered it can't be recalled. That affects how we define "rollback" (more on that below).
Read the whole answer
Next up is the delivery channel, since provider selection hangs on it.

**Question: Which channel should the weekly digest go out on?**

My recommendation is **email**. It fits a weekly, opt-in digest well:

- Opt-in and unsubscribe are well-understood patterns, and the legal expectations (consent records, one-click unsubscribe) are clear.
- Digest-style content with several items and links suits email better than push or SMS.
- Providers are interchangeable enough that you won't be locked in, and the choice mostly comes down to volume, deliverability, and price.
- The 24-hour rollback window is workable: you can hold or cancel a scheduled send, though once a message is delivered it can't be recalled. That affects how we define "rollback" (more on that below).

Alternatives I'd only pick for a specific reason: push notifications if the audience is already in a mobile app, or Slack/Teams if the audience is internal.

To confirm or overturn the email recommendation, I need one fact: **where does your audience already interact with you** (an app, an inbox, a workspace tool), and do you already have contact details for them under opt-in?

Once the channel is settled, the follow-ups are:

1. Expected audience size and growth, which drives provider tier and cost.
2. Whether "rollback" means canceling a scheduled send before it goes out, or correcting or retracting after delivery. For email, these are very different.
3. Provider shortlist, which I'll narrow to two or three with a recommendation.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grill-with-docs · the decision task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 247 bytes about the same town: the exact length of the grill-with-docs skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Interview me about a reservation design and propose documentation to preserve decisions. Facts: a hold lasts 10 minutes; capture happens only at confirmation. The term booking is currently used for both a hold and a confirmed reservation.

What the AI answered

# Reservation design interview

## What I take from your facts

- A **hold** is temporary and lasts 10 minutes.
- **Capture** (taking payment) happens only at **confirmation**, never at hold time.
- **"Booking"** currently means both a hold and a confirmed reservation. This is the biggest risk, because "cancel a booking" or "booking expired" can mean different things depending on who is speaking.
Read the whole answer
# Reservation design interview

## What I take from your facts

- A **hold** is temporary and lasts 10 minutes.
- **Capture** (taking payment) happens only at **confirmation**, never at hold time.
- **"Booking"** currently means both a hold and a confirmed reservation. This is the biggest risk, because "cancel a booking" or "booking expired" can mean different things depending on who is speaking.

My recommendation: retire "booking" as a domain term. Use **Hold** for the temporary claim and **Reservation** for the confirmed one. Keep "booking" only as informal or UI copy, if at all.

## Interview questions

I've put my suggested default after each question, so you can answer with "yes" or "no, because...".

**Terminology**
1. Is a confirmed reservation the same entity as the hold that preceded it (a status change), or a new entity created from it? *Default: one entity with a status, unless holds and reservations have different lifecycles or data.*
2. Do users, support staff, and the API all use the same words? *Default: one glossary, with UI copy allowed to differ but mapped explicitly.*

**Hold lifecycle**
3. Does the 10 minutes start at creation or at the first user action? Is it fixed, or can it be extended or refreshed? *Default: starts at creation, fixed, no extension.*
4. Who enforces expiry: a timer or job, a TTL in the store, or a check at read time? What happens if confirmation arrives at 10:00.5? *Default: the server's clock is authoritative, and expiry is checked at confirmation as well as by a sweeper.*
5. When a hold expires, is inventory released immediately? Is the expired hold kept for audit? *Default: release immediately, retain the record with status `expired`.*
6. Can one user hold the same inventory twice, or hold many items at once? Is there a cap? *Default: a per-user limit.*

**Confirmation and capture**
7. Capture happens only at confirmation. Is that authorize-then-capture in a single step, or is there a separate authorization earlier? *Default: no payment interaction before confirmation.*
8. If capture fails, what state is the hold in? Does the hold survive for a retry until it expires? *Default: it stays `held` until expiry, and the user can retry.*
9. If capture succeeds but the hold expired a moment earlier (a race), who wins? *Default: capture is only attempted on a live hold, with an atomic transition under a lock or conditional write.*
10. Is confirmation idempotent? What happens on a double click or a client retry? *Default: yes, keyed by an idempotency key.*

**After confirmation**
11. Can a confirmed reservation be cancelled or modified? Are refunds in scope? *Default: out of scope for this design, but recorded as an open question.*

**Operations**
12. What should be logged or metered (holds created, expired, converted, capture failures)? Are conversion rate and expiry rate tracked?

## Proposed documentation

Keep it small, and put each decision in one place.

1. **`docs/glossary.md`** (or `CONTEXT.md`)
   - Definitions for Hold, Reservation, Confirmation, Capture, Expiry, and Release.
   - A "Do not use" entry for *booking*, with a note on which term to use instead.
   - Mapping from each domain term to code identifiers, API fields, and UI copy.

2. **`docs/adr/0001-hold-vs-reservation-terminology.md`**
   - Records the decision to split "booking" into two terms, why, and the migration plan for existing names.
   - Format: Context, Decision, Consequences, Status.

3. **`docs/adr/0002-hold-duration-and-expiry.md`**
   - The 10-minute duration, when the clock starts, who enforces expiry, and the race with confirmation.

4. **`docs/adr/0003-capture-only-at-confirmation.md`**
   - Why no payment interaction happens at hold time, the failure behavior, and idempotency.

5. **`docs/reservation-lifecycle.md`**
   - A state diagram: `held → confirmed`, `held → expired`, `held → released` (user abandons), plus the transitions allowed and what triggers each.
   - The invariants, for example "capture occurs only on the `held → confirmed` transition."

6. **Code-level anchors**
   - Rename types and fields to match the glossary (`Hold`, `Reservation`), or add a comment on any legacy `booking` name pointing to the glossary.
   - Tests named after the invariants, such as "capture is never called for an expired hold."

7. **`docs/open-questions.md`**
   - Unresolved items from the interview (cancellation, refunds, extensions), each with an owner, so the gaps are visible instead of implicit.

## Suggested order

Answer questions 1, 3, 4 and 9 first. They determine the data model and the glossary. I can then draft the glossary and the first two ADRs from your answers.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grill-with-docs · the adr task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 247 bytes about the same town: the exact length of the grill-with-docs skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. We settled that cancelled reservations stay as tombstones because audit exports reference them. Write the short decision note you would preserve and one remaining question about retention.

What the AI answered

**Decision note: Cancelled reservations are retained as tombstones**

**Status:** Settled

**Decision:** When a reservation is cancelled, we keep the record as a tombstone instead of hard-deleting it.

**Reason:** Audit exports reference cancelled reservations. Deleting them would leave those exports pointing at records that no longer exist, breaking traceability.
Read the whole answer
**Decision note: Cancelled reservations are retained as tombstones**

**Status:** Settled

**Decision:** When a reservation is cancelled, we keep the record as a tombstone instead of hard-deleting it.

**Reason:** Audit exports reference cancelled reservations. Deleting them would leave those exports pointing at records that no longer exist, breaking traceability.

**Consequences:**
- Cancellation is a state change (the record is marked cancelled), not a removal.
- Anything that lists or counts reservations for operational use needs to exclude tombstones explicitly.
- Audit exports can continue to resolve every reference they contain.

**Remaining question (retention):** How long do tombstones need to be kept, and what should they hold over time? In particular, should they be kept indefinitely, or purged or reduced to a minimal stub (ID, status, timestamps) once the audit window closes, so that any personal data on the original reservation isn't retained longer than necessary?

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grill-with-docs · the revision task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 247 bytes about the same town: the exact length of the grill-with-docs skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A prior note says holds expire after 10 minutes. I now propose 30 minutes to help slow checkouts, but have not accepted the capacity tradeoff. Give a written interview response and the status you would put on the proposed note.

What the AI answered

## Interview response

"Today, inventory holds expire after 10 minutes. That's the documented, current behavior. I've proposed extending them to 30 minutes because customers with slow checkouts, such as those entering payment details carefully or dealing with 3-D Secure steps, can lose their hold mid-purchase, which is a frustrating failure.
Read the whole answer
## Interview response

"Today, inventory holds expire after 10 minutes. That's the documented, current behavior. I've proposed extending them to 30 minutes because customers with slow checkouts, such as those entering payment details carefully or dealing with 3-D Secure steps, can lose their hold mid-purchase, which is a frustrating failure.

The tradeoff is capacity. A 30-minute hold keeps stock reserved up to three times longer, so abandoned carts tie up inventory that other customers could buy. For popular or low-stock items, that could make products look sold out when they aren't. I haven't accepted that tradeoff yet, so this is a proposal, not a decision.

Before committing, I'd want to:

1. Measure how many checkouts complete between minutes 10 and 30, to see how many customers the change would actually help.
2. Estimate how much extra stock would be locked up at peak, using the abandonment rate.
3. Consider alternatives, like a 10-minute hold with an extension when the customer reaches payment, or a longer hold only for items with ample stock.

If the data shows the benefit outweighs the capacity cost, I'd move forward, probably with a staged rollout. Until then, 10 minutes stays the standing policy."

## Status for the proposed note

**Proposed (not accepted).** The 30-minute hold is a candidate change pending a decision on the capacity tradeoff. The earlier note stays in effect: holds expire after 10 minutes. The new note shouldn't be marked as superseding it until the tradeoff is accepted.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

agent-browser · the web task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3457 bytes about the same town: the exact length of the agent-browser skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Plan a browser workflow to inspect a checkout form and identify its Submit button. The CLI is installed but its workflow guide has not been loaded. Give the next read-only steps, not invented element references.

What the AI answered

I can't run anything here, and I don't know the CLI's exact command names or flags. The steps below are generic, and the specifics have to come from the CLI's own guide.

**Next read-only steps**

1. **Load the workflow guide first.** Use the CLI's own help or guide command (for example, its `--help` output or a documented "workflow" or "skills" subcommand). Until it's loaded, I don't know how the CLI names pages, snapshots or element references, so I shouldn't guess at syntax.
Read the whole answer
I can't run anything here, and I don't know the CLI's exact command names or flags. The steps below are generic, and the specifics have to come from the CLI's own guide.

**Next read-only steps**

1. **Load the workflow guide first.** Use the CLI's own help or guide command (for example, its `--help` output or a documented "workflow" or "skills" subcommand). Until it's loaded, I don't know how the CLI names pages, snapshots or element references, so I shouldn't guess at syntax.

2. **Confirm the session state.** Check whether a browser session or tab is already open and which page it's on. If none is open, the guide should say how to open the checkout page. Opening a page is a navigation, so confirm the URL with you before doing it if it isn't already loaded.

3. **Take a read-only snapshot of the page.** Use the CLI's accessibility-tree or DOM snapshot command, not any click, fill or submit action. This should list the form's fields and buttons along with their references.

4. **Locate the form in the snapshot.** Find the checkout `form` element, or the group containing the payment, shipping and contact fields. Note which controls belong to it.

5. **Identify the Submit button from what the snapshot shows.** Look for:
   - A `button` or `input type="submit"` inside the form.
   - An accessible name like "Submit", "Place order", "Pay now" or "Complete purchase". The label may not literally say "Submit".
   - Whether it's disabled or hidden, which can mean required fields are still empty.
   - Other buttons nearby, such as "Apply coupon" or "Back", so they aren't confused with the real submit control.

6. **Record the reference exactly as the snapshot prints it.** Use that value only. I won't write one in advance.

7. **Verify without interacting.** If the guide offers a read-only query, such as getting an element's text, attributes or enabled state, use it on the candidate to confirm its role, label and `type`. If several buttons look plausible, a screenshot can help tell them apart.

**Not to do yet:** don't click, type into fields or submit anything. On a checkout form that could place a real order or charge a card.

Once the guide is loaded and a snapshot is taken, I can help read the output and pick the right button.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

agent-browser · the desktop task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3457 bytes about the same town: the exact length of the agent-browser skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I want to inspect an Electron desktop application with agent-browser. The installed CLI can serve its guides. Explain which guide you would consult and what evidence you need before interacting.

What the AI answered

I can't name the exact guide yet. You've said the installed CLI serves its guides, but I haven't seen its guide list or the command that prints it, and I won't guess either from memory. Guide names and commands vary between versions, and the installed CLI is the authority for this version.
Read the whole answer
I can't name the exact guide yet. You've said the installed CLI serves its guides, but I haven't seen its guide list or the command that prints it, and I won't guess either from memory. Guide names and commands vary between versions, and the installed CLI is the authority for this version.

**Which guide I'd consult**
1. First, list the guides the CLI offers, using its own help or guide-listing command.
2. Then read the one that covers Electron or desktop apps. If there's no such guide, I'd read the core or general usage guide and look for a section on attaching to an existing app or a remote debugging port.
3. I'd read the guide in full before running any interaction commands, because it should define how the tool connects to Electron, which commands exist, and what the output looks like.

**Evidence I need before interacting**
- **The guide's connection method:** how agent-browser attaches to Electron (a debugging port, a launch command, or something else), and the exact flags and syntax for the installed version.
- **Authorization and scope:** confirmation that you own the app or are cleared to inspect it, and whether you want read-only inspection or permission to click, type, and change state.
- **The target app:** its path or launch command, its version, and whether it's already running or I should start it. If it's running, I need to know whether it was started with a debugging port.
- **Debugging port exposure:** whether the port is bound to localhost only. An open debugging port gives full control of the app, so I'd check that before attaching.
- **Which window or target:** Electron apps often have several windows or webviews, so I need to confirm I'm attaching to the right one.
- **App state:** whether it's logged in, whether it holds real data, and whether actions like sending, deleting, or purchasing are possible. If so, I'd ask before doing anything that isn't reversible.
- **Environment constraints:** whether a display or headless setup is available on this Linux machine, and which permission mode applies to running commands.

Once I have the guide text and these answers, I'd start with non-mutating steps such as listing targets and taking a snapshot, and only then interact.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

agent-browser · the dashboard task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3457 bytes about the same town: the exact length of the agent-browser skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A browser dashboard is exposed through a forwarded origin. Its session tab links appear to point at an internal session port. Explain which address the operator should stay on and why.

What the AI answered

Stay on the forwarded origin, the address and port your tunnel or proxy exposes, and don't follow the session tab links to the internal session port.

**Why:**

- **The internal port is probably unreachable from your browser.** It is likely bound to the remote host's loopback or private network, and only the forwarded port is mapped to your machine. Following the link would give a connection error, or would hit a different service if the same port number happens to be open locally.
- **Switching origins breaks the page.** A different host or port is a different origin. Cookies, session tokens, CORS rules, and websocket connections tied to the forwarded origin won't carry over, so you would likely see a logged-out or half-working dashboard.
- **The forwarded path is the intended boundary.** The tunnel or proxy is where access control, TLS, and exposure limits are applied. Going around it, for example by opening the internal port directly or forwarding it as well, bypasses those protections and widens what is exposed.
- **The odd links are a symptom, not a destination.** The dashboard most likely builds absolute URLs from its own view of where it runs, because it doesn't know the public forwarded address. That points to a base URL or forwarded-header setting that needs fixing, such as `X-Forwarded-Host`/`X-Forwarded-Proto` handling or a configured external URL.
Read the whole answer
Stay on the forwarded origin, the address and port your tunnel or proxy exposes, and don't follow the session tab links to the internal session port.

**Why:**

- **The internal port is probably unreachable from your browser.** It is likely bound to the remote host's loopback or private network, and only the forwarded port is mapped to your machine. Following the link would give a connection error, or would hit a different service if the same port number happens to be open locally.
- **Switching origins breaks the page.** A different host or port is a different origin. Cookies, session tokens, CORS rules, and websocket connections tied to the forwarded origin won't carry over, so you would likely see a logged-out or half-working dashboard.
- **The forwarded path is the intended boundary.** The tunnel or proxy is where access control, TLS, and exposure limits are applied. Going around it, for example by opening the internal port directly or forwarding it as well, bypasses those protections and widens what is exposed.
- **The odd links are a symptom, not a destination.** The dashboard most likely builds absolute URLs from its own view of where it runs, because it doesn't know the public forwarded address. That points to a base URL or forwarded-header setting that needs fixing, such as `X-Forwarded-Host`/`X-Forwarded-Proto` handling or a configured external URL.

**Practical workaround:** if a session tab link points at the internal port, keep the same path and query but load it under the forwarded origin. If it still doesn't work, fix the dashboard's external base URL or proxy headers rather than exposing the internal port.

I haven't inspected the actual setup, so this is based only on the facts you gave.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

improve-codebase-architecture · the candidate task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6000 bytes about the same town: the exact length of the improve-codebase-architecture skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Review this architecture description: OrderController calls ValidateOrder, which forwards every argument unchanged to OrderRules. Only OrderRules contains validation logic. The last five changes touched validation. Suggest one deepening candidate, without implementing it.

What the AI answered

**Deepening candidate: collapse `ValidateOrder` into `OrderRules`, or give it real responsibility.**

**What the facts show**
- `ValidateOrder` forwards every argument unchanged to `OrderRules`. It adds no logic, so it is a pass-through layer: a shallow module whose interface is as wide as its implementation.
- All validation logic lives in `OrderRules`, and the last five changes touched validation. Each of those changes presumably had to be threaded through two layers (signature changes, new parameters, renames), which is the usual cost of a pass-through.
Read the whole answer
**Deepening candidate: collapse `ValidateOrder` into `OrderRules`, or give it real responsibility.**

**What the facts show**
- `ValidateOrder` forwards every argument unchanged to `OrderRules`. It adds no logic, so it is a pass-through layer: a shallow module whose interface is as wide as its implementation.
- All validation logic lives in `OrderRules`, and the last five changes touched validation. Each of those changes presumably had to be threaded through two layers (signature changes, new parameters, renames), which is the usual cost of a pass-through.

**Suggestion**
Deepen `OrderRules` and make it the single validation seam. `OrderController` would call one narrow interface, something like `validate(order) -> result`, and `OrderRules` would hide the rule details behind it. This removes `ValidateOrder` as a separate hop, or, if it needs to stay for a reason not stated in the description, turns it into the place that owns something real (for example, assembling the validation context or translating results into controller-friendly errors).

**Why this is the right target**
- Validation is the area of highest churn, so concentrating it behind one small interface localizes future changes.
- The forwarded argument list is a leak: callers and the middle layer need to know what the rules need. Passing a single order (or a context object) instead lets rules change without touching the controller or the forwarder.
- Tests can target one boundary rather than testing a forwarder that has nothing to verify.

**Caveat**
The description doesn't say why `ValidateOrder` exists. It may be there for an unlisted reason, such as a framework hook, an interface boundary, or other callers. Check for those before removing it. If none exist, fold it into `OrderRules`.

I have not implemented anything.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

improve-codebase-architecture · the adr task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6000 bytes about the same town: the exact length of the improve-codebase-architecture skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Glossary calls the concept Reservation. An accepted ADR keeps payment separate to support two processors. A proposed review merges everything into BookingService. Write a review response.

What the AI answered

**Review response: Request changes**

Thanks for the proposal. I can't approve it as written, for two reasons.

**1. It conflicts with an accepted ADR**

The accepted ADR keeps payment separate from the rest of the booking flow so we can support two payment processors. Merging everything into `BookingService` pulls payment logic into the same class as the reservation logic. That removes the boundary the ADR set up, and adding or switching a processor would mean changing the core service rather than plugging in behind a payment interface.
Read the whole answer
**Review response: Request changes**

Thanks for the proposal. I can't approve it as written, for two reasons.

**1. It conflicts with an accepted ADR**

The accepted ADR keeps payment separate from the rest of the booking flow so we can support two payment processors. Merging everything into `BookingService` pulls payment logic into the same class as the reservation logic. That removes the boundary the ADR set up, and adding or switching a processor would mean changing the core service rather than plugging in behind a payment interface.

If there's a strong reason to revisit that decision, the right path is a new ADR that supersedes the accepted one, with a plan for how both processors will still be supported. Until that's accepted, the change should follow the current ADR.

**2. The naming doesn't match the glossary**

Our glossary calls this concept **Reservation**, but the proposal names it around "Booking". Please align class, method, and variable names with the glossary term (for example, `ReservationService`), or, if "Booking" is meant to be a different concept, say so and add it to the glossary.

**What I'd suggest**

- Keep payment in its own component, as the ADR requires, and have the reservation service depend on it through an interface.
- Rename to match the glossary term Reservation.
- If the goal is to simplify the call path or cut indirection, I'm happy to discuss options that do so without merging payment into the reservation service, such as a thin facade that coordinates the two.
- If the ADR itself needs to change, open a superseding ADR first, and we can review the code once that's decided.

Happy to go through this together if it would help.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

improve-codebase-architecture · the report task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6000 bytes about the same town: the exact length of the improve-codebase-architecture skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Provide the text outline for a review card about a shallow ShippingFacade that exposes every CarrierClient method. There are two real carriers. Include what the user should decide next.

What the AI answered

# Review card: shallow ShippingFacade

**Title:** ShippingFacade mirrors CarrierClient one-to-one

**Finding**
- ShippingFacade exposes every CarrierClient method.
- Its interface is as wide as the thing it wraps, so it hides nothing and adds a layer to read, test and keep in sync.
- Every CarrierClient change forces a matching facade change.
Read the whole answer
# Review card: shallow ShippingFacade

**Title:** ShippingFacade mirrors CarrierClient one-to-one

**Finding**
- ShippingFacade exposes every CarrierClient method.
- Its interface is as wide as the thing it wraps, so it hides nothing and adds a layer to read, test and keep in sync.
- Every CarrierClient change forces a matching facade change.

**Context**
- There are two real carriers, so CarrierClient is already a genuine seam: two implementations vary behind it.
- The facade sits on top of that seam and adds no variation of its own.

**Why it matters**
- Shallow: little behavior behind a large interface.
- Callers learn the same API twice.
- Tests of the facade mostly verify delegation.

**Options**
1. **Delete the facade.** Callers use CarrierClient directly. This is the smallest and safest change.
2. **Deepen the facade.** Shrink it to the few operations callers actually need, and move carrier selection, differences between the two carriers, and shared orchestration inside it. Callers no longer see CarrierClient.
3. **Leave it.** Only justified if something outside this code requires the facade's current shape.

**Recommendation**
- Choose option 1 unless callers currently repeat carrier-specific or multi-step logic. If they do, choose option 2.

**What to decide next**
1. Does any caller do carrier selection, fallbacks or multi-call sequences that a deeper facade could own? If yes, option 2. If no, option 1.
2. Is the facade part of a public or external contract? If yes, keep it for now and note the cost.
3. For option 2, which operations do callers need? Draft that narrower interface before changing code.
4. Where should tests live afterward? Aim for them at the new boundary and per-carrier behavior, not at pass-through methods.

**Open facts I don't have**
- The method list, the callers, and how the two carriers differ. Those would settle decisions 1 and 3.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

tdd · the test task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3629 bytes about the same town: the exact length of the tdd skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The agreed public seam is reserve(stock, amount), returning remaining stock. For stock 4 and amount 2, the required result is 2. Draft the first test and the next step in a test-first cycle.

What the AI answered

I'm assuming Python with pytest syntax since no language was given. The cycle is the same in any language.

## Step 1: Red, the first test

```python
def test_reserve_returns_remaining_stock():
    assert reserve(4, 2) == 2
```

This goes through only the agreed seam, `reserve(stock, amount)`, and checks the one example we have: stock 4 and amount 2 gives 2. Run it before writing any implementation. It should fail because `reserve` doesn't exist yet (a `NameError` or `ImportError`). That confirms the test can fail and is checking the right thing.
Read the whole answer
I'm assuming Python with pytest syntax since no language was given. The cycle is the same in any language.

## Step 1: Red, the first test

```python
def test_reserve_returns_remaining_stock():
    assert reserve(4, 2) == 2
```

This goes through only the agreed seam, `reserve(stock, amount)`, and checks the one example we have: stock 4 and amount 2 gives 2. Run it before writing any implementation. It should fail because `reserve` doesn't exist yet (a `NameError` or `ImportError`). That confirms the test can fail and is checking the right thing.

## Step 2: Green, the next step

Write the smallest code that makes that test pass. Two options:

- **Fake it:** `def reserve(stock, amount): return 2`. This is the strictest version, and a second example would then force you to generalize.
- **Obvious implementation:** `def reserve(stock, amount): return stock - amount`. This is fine here because the rule is trivial and clearly implied by "returning remaining stock."

I'd go with the obvious implementation. Run the test, confirm it passes, and only then consider refactoring (there's nothing to clean up yet).

## Step 3: What comes after

Start the next red-green loop with another example that pins the behavior, such as `reserve(10, 3) == 7`. If you faked it in step 2, that example is what forces the real implementation.

The facts you've given don't say what should happen when `amount` exceeds `stock`, when `amount` is zero, or when either value is negative. I haven't invented answers for those. Each one needs your decision (return a value, raise an error, and so on) before it gets its own test.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

tdd · the coupling task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3629 bytes about the same town: the exact length of the tdd skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Review this test idea: spy on a private normalizeCart helper and assert it is called once, then assert total equals items.reduce with the production formula. The public requirement is a two-item order totaling 15.

What the AI answered

**Verdict:** I wouldn't write the test this way. It checks the implementation rather than the requirement, and it could pass while the requirement is broken.

**Problems**

1. **Spying on `normalizeCart` tests how, not what.** Asserting it's called once pins an internal detail. Inlining the helper, renaming it, or calling it twice (harmless if it's pure) would fail the test with no change in behavior. It also usually means reaching into private state, which couples the test to the file layout.
Read the whole answer
**Verdict:** I wouldn't write the test this way. It checks the implementation rather than the requirement, and it could pass while the requirement is broken.

**Problems**

1. **Spying on `normalizeCart` tests how, not what.** Asserting it's called once pins an internal detail. Inlining the helper, renaming it, or calling it twice (harmless if it's pure) would fail the test with no change in behavior. It also usually means reaching into private state, which couples the test to the file layout.

2. **Asserting `total` equals `items.reduce(...)` with the production formula is a tautology.** If the formula is wrong (say, it ignores quantity or discounts), the test recomputes the same wrong answer and passes. The expected value should come from the requirement, not from the code under test.

3. **It never checks the stated requirement.** The public requirement is that a two-item order totals 15, and nothing in the proposed test asserts 15.

**What I'd do instead**

- Call the public API with a concrete two-item order and assert the total is the literal `15`. For example, items priced 10 and 5, or whatever fixture fits your domain. Hard-code the expected value so the test is independent of the implementation.
- Drop the spy entirely. If `normalizeCart` matters, it's covered through the public result. If it has meaningful logic of its own, such as merging duplicates or dropping invalid lines, test that through public inputs that exercise it, like a cart with duplicate SKUs.
- Add a few behavior-level cases only if they reflect real requirements: an empty cart totals 0, quantities greater than 1, and rounding if prices are fractional.

**Sketch**

```
order = createOrder([{ price: 10, qty: 1 }, { price: 5, qty: 1 }])
expect(order.total).toBe(15)
```

The fixture shape here is a placeholder, since I haven't seen your actual types. The key point is the literal expected value, with no mocks and no recomputation.

**When a spy is justified:** only if the helper is a real collaboration boundary, such as an injected dependency with side effects, and the call itself is the observable behavior. A private pure function doesn't qualify.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

tdd · the agreement task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3629 bytes about the same town: the exact length of the tdd skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A teammate asks you to test all billing internals before a new refund feature. No public test seam has been agreed. Explain the next action and one proposed seam with its limits.

What the AI answered

**Next action:** Don't start writing tests against billing internals yet. First, agree on a test seam with your teammate. Testing "all internals" directly would pin the tests to private structure, so they'd break on any refactor and wouldn't tell you whether refunds behave correctly. The decision to settle is: what is the smallest public surface through which the refund feature's billing effects can be observed?
Read the whole answer
**Next action:** Don't start writing tests against billing internals yet. First, agree on a test seam with your teammate. Testing "all internals" directly would pin the tests to private structure, so they'd break on any refactor and wouldn't tell you whether refunds behave correctly. The decision to settle is: what is the smallest public surface through which the refund feature's billing effects can be observed?

I haven't looked at the code (no tools used here), so the following is a proposal based only on what you've told me.

**Proposed seam: a narrow `BillingLedger` interface (read-side) plus a fake payment-provider port.**

- **Ledger read interface:** expose something like `getBalance(accountId)` and `listEntries(accountId)` as the public way to observe billing state. Refund tests would perform a charge, issue a refund through the public refund API, then assert on the resulting ledger entries and balance.
- **Payment-provider port:** put the external gateway behind an interface, with an in-memory fake in tests. This lets you assert on what was sent to the provider (amount, idempotency key) and simulate failures like declines or timeouts.

**Limits:**

- It only verifies behavior visible through the ledger and the provider calls. Internal steps (proration math, rounding helpers, state machines) are covered only indirectly. If a bug hides in an intermediate value that never reaches the ledger, these tests won't catch it.
- It does not deliver "test all billing internals." If specific internals are risky (e.g. currency rounding), they'd need their own targeted unit tests, agreed separately.
- The fake provider can drift from the real gateway's behavior, so it doesn't replace a few contract or sandbox tests against the real provider.
- Adding the read interface may require a small production code change, which the team should approve since it widens the public API.

**To confirm with your teammate:** whether the ledger is the right source of truth for billing state, and whether adding a read-only accessor is acceptable. Once that's agreed, I can look at the code and sketch the tests.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-cli · the loop task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 25989 bytes about the same town: the exact length of the hyperframes-cli skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A HyperFrames project needs a headline reveal. No registry search has been done. Draft the command sequence from discovery to final validation and preview; rendering has not been approved.

What the AI answered

I don't have the HyperFrames CLI's actual command names or flags in the facts you gave me, so this is a draft skeleton. Every subcommand below is an assumption to check against `--help` before you run it. I haven't searched the registry, so I don't know that a headline-reveal item exists.
Read the whole answer
I don't have the HyperFrames CLI's actual command names or flags in the facts you gave me, so this is a draft skeleton. Every subcommand below is an assumption to check against `--help` before you run it. I haven't searched the registry, so I don't know that a headline-reveal item exists.

**1. Discover the project (read-only)**
```bash
git status                      # snapshot says clean, on detached HEAD / branch "HEAD"
ls -la
cat package.json                # confirm how HyperFrames is installed and which scripts exist
npx hyperframes --help          # confirm the real CLI name and subcommands
```

**2. Search the registry (read-only, not yet done)**
```bash
npx hyperframes registry --help           # assumed; confirm the registry subcommand exists
npx hyperframes registry search "headline reveal"
npx hyperframes registry search "title"   # fallback terms: "text reveal", "kinetic type"
```

**3. Inspect the best candidate before adding it**
```bash
npx hyperframes registry info <item-name>   # check its files, dependencies and license
```

**4. Checkpoint, then add**
```bash
git switch -c headline-reveal    # you're on a detached/odd "HEAD", so a branch makes this reversible
npx hyperframes add <item-name>
git status && git diff           # review exactly what was written
```

**5. Customize**
Edit the added composition's headline text, timing, and font/colors. I can't give exact paths until step 4 shows what was added.

**6. Validate (no render)**
```bash
npx hyperframes lint             # assumed; use whichever check/validate command --help lists
npx hyperframes validate
```

**7. Preview**
```bash
npx hyperframes preview          # assumed; local dev preview only
```

**Stopping point:** I've left out any `render` command because rendering isn't approved. If the registry search finds nothing suitable, I'd propose building the reveal from scratch instead of picking a loose match.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-cli · the timeline task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 25989 bytes about the same town: the exact length of the hyperframes-cli skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A nested scene has local start 2 seconds and is mounted at main time 12 seconds. I want to find which file owns the visible clip at main time 14. Explain how to inspect this with the CLI.

What the AI answered

## The time mapping

The nested scene's local time 2s sits at main time 12s, so:

```
local_time = main_time - mount_start + local_start
           = 14 - 12 + 2
           = 4 s
```

Main time 14 corresponds to **local time 4s inside the nested scene**. This assumes the mount plays at normal speed with no retiming, trimming, or looping. If any of those are set, adjust the formula.
Read the whole answer
## The time mapping

The nested scene's local time 2s sits at main time 12s, so:

```
local_time = main_time - mount_start + local_start
           = 14 - 12 + 2
           = 4 s
```

Main time 14 corresponds to **local time 4s inside the nested scene**. This assumes the mount plays at normal speed with no retiming, trimming, or looping. If any of those are set, adjust the formula.

## How to inspect it with the CLI

You haven't said which CLI or project format this is, and I don't want to invent command names. These are the steps to look for in whatever tool you use:

1. **Dump the main timeline** (a `show`, `inspect`, `list`, or `export --json` style command) and find the entry for the nested scene. Confirm its mount time (12s), its local start (2s), and its duration. Check that 14 falls inside the mounted range, i.e. `12 <= 14 < 12 + duration`.
2. **Dump the nested scene's timeline** and query local time 4s. If the CLI has a "what's at time T" or "resolve at" option, use it with 4 on the nested scene. Otherwise list the clips and find those where `clip_start <= 4 < clip_end`.
3. **Pick the visible clip** if several overlap at 4s. Usually the one on the highest track or layer wins, unless it is disabled, muted, hidden, or fully transparent. If the nested scene contains another nested scene, repeat the mapping at that level.
4. **Read the clip's source reference**, which is typically a field like `source`, `media`, `asset`, or `path`. If it points to an asset ID rather than a path, look that ID up in the project's asset or media table to get the owning file.
5. **Sanity-check** by also querying main time 13.9 and 14.1. The same clip should appear, unless a cut lands exactly at 14.

If you tell me the CLI name or paste its output for the main and nested timelines, I can pinpoint the file.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-cli · the render task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 25989 bytes about the same town: the exact length of the hyperframes-cli skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A completed render reports screenshot mode and software GPU on Linux. The output exists but no frames have been inspected. Give the next verification steps.

What the AI answered

The only thing established so far is that the render finished and produced output. Correctness is unverified, because no frames have been inspected and the software GPU path may differ from your target hardware.

**1. Check the output container**
- Confirm the file or frame sequence exists and is non-zero in size.
- Check resolution, frame count, fps and duration against what you requested. Screenshot mode captures frame by frame, so a dropped or duplicated frame shows up as a count mismatch.
- Check pixel format, color space and alpha handling.
Read the whole answer
The only thing established so far is that the render finished and produced output. Correctness is unverified, because no frames have been inspected and the software GPU path may differ from your target hardware.

**1. Check the output container**
- Confirm the file or frame sequence exists and is non-zero in size.
- Check resolution, frame count, fps and duration against what you requested. Screenshot mode captures frame by frame, so a dropped or duplicated frame shows up as a count mismatch.
- Check pixel format, color space and alpha handling.

**2. Look at actual frames**
- Open the first, a middle and the last frame, plus any frame where something should change, such as a transition or animation start.
- Look for all-black, all-white or uniform frames, which are the usual symptom of a failed GL context or a shader that didn't compile.
- Look for missing textures, text or effects, and for clipped or mis-sized layout.

**3. Check for software-rendering artifacts**
- Software rasterizers (llvmpipe, SwiftShader) can differ from real GPUs in anti-aliasing, precision, gradients, blur or filter effects, and unsupported extensions.
- Confirm the renderer string in the logs really is the software one you expect, and that nothing silently fell back to a lower-quality path.

**4. Review logs**
- Search for GL errors, shader compile failures, context-loss messages, missing-extension warnings and fallback notices. A "completed" status can still hide these.

**5. Compare against a reference**
- If you have a known-good render from a hardware GPU or a previous build, diff the frames with a tolerance. Small per-pixel differences are expected under software rendering, so judge by threshold rather than exact equality.
- If you have no reference, treat this render as the candidate baseline only after steps 2 to 4 pass.

**6. Check determinism**
- Render again with the same settings and compare frame hashes. If they differ, find the source, such as timing-dependent animation, random seeds or async asset loading, before trusting any comparison.

**7. Decide what the result can support**
- A passing software render shows the pipeline works functionally. It does not show performance or visual parity on real GPUs. If that matters, plan a separate run on target hardware.

If you share the frames, logs or the renderer's output summary, I can help interpret them.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes · the existing task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 21136 bytes about the same town: the exact length of the hyperframes skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. An existing HyperFrames project needs only a corrected title. The approved brief is already present. Give the next workflow and explain whether a new discovery interview is needed.

What the AI answered

**No new discovery interview is needed.** The interview exists to establish scope, audience, tone and content. The approved brief already settles all of that, and a corrected title doesn't change any of it.

**Next workflow: a targeted edit of the existing project.**
Read the whole answer
**No new discovery interview is needed.** The interview exists to establish scope, audience, tone and content. The approved brief already settles all of that, and a corrected title doesn't change any of it.

**Next workflow: a targeted edit of the existing project.**

1. **Locate the title** where it lives in the project (the composition or scene source) and in any place that repeats it, such as the brief's title field, metadata or filenames.
2. **Change only the title text.** Leave the layout, timing, styling and the rest of the content as they are.
3. **Preview or re-render** to confirm the new title displays correctly and fits (no overflow or awkward wrapping, especially if it's longer than the old one).
4. **Update the brief's title line** if it carries the old wording, so the brief and project stay consistent. This is a record-keeping fix, not a re-approval.

**When to reopen discovery:** only if the "corrected title" implies a change in meaning, such as a different topic, audience or message, or if the brief turns out not to cover something the title now promises. Otherwise, treat it as a small revision.

I don't have HyperFrames-specific command names in the facts you gave me, so I've described the steps generically rather than guessing at its CLI or skill names.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes · the usage task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 21136 bytes about the same town: the exact length of the hyperframes skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. At creation start the supplied usage check returns status unknown. The user wants a short explainer and has not approved rendering. Draft the response and next steps.

What the AI answered

## Draft response

**Short explainer**

When the item is created, the usage check returns **status: unknown**. That means the check has not confirmed whether usage is within limits, so there is no basis yet to treat it as passed or failed. It is the starting state, not an error.
Read the whole answer
## Draft response

**Short explainer**

When the item is created, the usage check returns **status: unknown**. That means the check has not confirmed whether usage is within limits, so there is no basis yet to treat it as passed or failed. It is the starting state, not an error.

You asked for a short explainer, and **you haven't approved rendering**. So I'm giving you text only. Nothing has been rendered, generated, or run.

**Next steps**

1. **Decide on rendering.** Tell me explicitly if you want it. Until then I won't render.
2. **Re-check usage.** The "unknown" status should be re-checked after creation, since it may resolve to a definite value. I haven't run that check, so I can't say what it will return.
3. **Hold anything gated on usage.** Don't treat usage as cleared while the status is unknown.
4. **Tell me the subject and audience** if you want the explainer tailored. The facts supplied don't say what it should cover, so this draft stays generic rather than guessing.

**One caveat:** the message also included a long block of text about a village and its landscape. It had no connection to your request and I didn't use it.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes · the port task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 21136 bytes about the same town: the exact length of the hyperframes skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The user explicitly asks to port an existing Remotion composition to HyperFrames. A generic creation wizard is also available. Choose the route and explain the required context.

What the AI answered

**Route: the port, not the generic creation wizard.** You asked to move an existing Remotion composition to HyperFrames. The wizard is built for starting something new, so it would discard the source you want to preserve and make you re-specify what already exists.
Read the whole answer
**Route: the port, not the generic creation wizard.** You asked to move an existing Remotion composition to HyperFrames. The wizard is built for starting something new, so it would discard the source you want to preserve and make you re-specify what already exists.

I haven't looked at the repo and don't have HyperFrames documentation in what you've given me. So I can't say how its API maps to Remotion's, and I won't guess. The git status shows a clean tree with no commits, so I also don't know where the Remotion project lives.

**Context I need to do the port:**

1. **Source location**: the path to the Remotion project, or at least the composition's entry file and the `Root` where it is registered.
2. **Composition parameters**: width, height, fps, duration in frames, and any default props or schema.
3. **Timing and animation logic**: uses of `useCurrentFrame`, `interpolate`, `spring`, `Sequence`, `Series`, and transitions. These are the parts that most likely need re-expressing in HyperFrames' model.
4. **Assets**: images, video, audio, fonts, and how they're referenced (`staticFile`, imports, remote URLs).
5. **Dependencies and data**: third-party libraries, data fetching, and anything that runs at render time.
6. **Target details**: where the HyperFrames project should go (new directory or existing one), which version, and a pointer to its docs or an example project so I can follow its conventions.
7. **Definition of done**: whether you need visual parity with the Remotion render, and whether the original should stay in place or be removed after the port.

Once you give me the source path and the HyperFrames target or docs, I'd start by reading the composition and listing what maps directly and what needs a different approach. Then I'd port it and compare the output against the original.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

setup-matt-pocock-skills · the local task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6978 bytes about the same town: the exact length of the setup-matt-pocock-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A single-package project has no remote, already tracks requests as local markdown, and has no triage skill installed. Propose the engineering-skills setup choices.

What the AI answered

Here's what I'd propose, based only on the facts you gave.

**1. Issue tracker: local markdown (keep what you have)**
Since requests are already tracked as local markdown, point the setup at that existing directory and format rather than introducing a new system. With no remote, GitHub or GitLab issue integrations would have nothing to talk to, so I'd leave them off.
Read the whole answer
Here's what I'd propose, based only on the facts you gave.

**1. Issue tracker: local markdown (keep what you have)**
Since requests are already tracked as local markdown, point the setup at that existing directory and format rather than introducing a new system. With no remote, GitHub or GitLab issue integrations would have nothing to talk to, so I'd leave them off.

**2. Repo layout: single package, single context**
Use one set of docs and conventions at the repo root. A monorepo-style layout with per-package config would add structure you don't need.

**3. Triage: add a minimal one, backed by the markdown files**
No triage skill is installed, so there are two options:
- **Recommended:** install or define a lightweight triage skill that works on the local markdown requests. It would use a status field (for example `new`, `accepted`, `in-progress`, `done`, `wontfix`) and optionally a priority in each file's front matter or header.
- Skip triage for now and revisit it if the backlog grows.

I'd go with the first option, keeping the states few and storing them in the files so they diff cleanly in git.

**4. Remote and PR workflow: none**
Without a remote, skip anything that assumes pull requests or pushing. Work on local branches and merge locally, with commits as the review and history unit.

**5. Where things live**
Keep request files and any setup config inside the repo and committed, so the tracker travels with the code.

**One thing to check:** the git status shows the branch as `HEAD` with no recent commits. That suggests a detached HEAD or a repo with no commits yet. Before relying on branch-based workflows, I'd confirm which one it is and create or switch to a named branch such as `main`.

If you confirm these, the next step is to name the requests directory and the status values you want.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

setup-matt-pocock-skills · the labels task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6978 bytes about the same town: the exact length of the setup-matt-pocock-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The installed triage workflow uses bug:triage and bug:ready. A maintainer wants to retain those labels. Explain how to configure the canonical roles without creating duplicate labels.

What the AI answered

The facts supplied don't name the workflow or its config schema, so I can't give exact keys. The approach is to map each canonical role onto the label that already exists, rather than letting the workflow create its own defaults.

**Approach**
Read the whole answer
The facts supplied don't name the workflow or its config schema, so I can't give exact keys. The approach is to map each canonical role onto the label that already exists, rather than letting the workflow create its own defaults.

**Approach**

1. **Identify the two roles.** From the label names, `bug:triage` is the "needs triage" role and `bug:ready` is the "ready to work" role. Confirm that against the workflow's documentation, since I'm inferring it from the names.

2. **Use the workflow's label-mapping setting.** Most triage workflows let you override the label name for each role. Set the triage role to `bug:triage` and the ready role to `bug:ready`, with the names matching exactly, including case, colon and any whitespace. If the workflow has no such override, the defaults must be changed in its config or source instead.

3. **Don't let it create labels.** Duplicates usually appear in three ways:
   - A "create missing labels" or bootstrap step runs with default names and adds them next to yours.
   - A name differs slightly from the existing one, such as `bug/triage`, `Bug:Triage` or `bug: triage`, and gets treated as new.
   - Setup scripts run again after the mapping is changed.

   Fix this by setting the mapping before the first run, and disabling label auto-creation if an option exists.

4. **Reconcile existing labels first.** If default-named labels were already created, don't delete them yet:
   - Move any issues carrying them to `bug:triage` or `bug:ready`.
   - Then delete the unused duplicates, which is the irreversible step, so check usage counts before removing.

5. **Verify.** Run the workflow on a test issue and confirm that it applies and removes only `bug:triage` and `bug:ready`, and that the repo's label list gains no new entries.

If you share the workflow's config file or docs, I can point to the exact settings to change.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

setup-matt-pocock-skills · the monorepo task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6978 bytes about the same town: the exact length of the setup-matt-pocock-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A workspace has packages/orders and packages/catalog, each with its own glossary and ADR folder. Propose the domain-document layout decision and the confirmation needed.

What the AI answered

## Proposed layout: one documentation set per package, plus a thin root

```
docs/
  CONTEXT-MAP.md          # how orders and catalog relate, and which terms cross the boundary
  adr/                    # only workspace-wide or cross-package decisions
packages/
  orders/
    GLOSSARY.md           # orders' ubiquitous language
    docs/adr/             # orders-only decisions
  catalog/
    GLOSSARY.md           # catalog's ubiquitous language
    docs/adr/             # catalog-only decisions
```
Read the whole answer
## Proposed layout: one documentation set per package, plus a thin root

```
docs/
  CONTEXT-MAP.md          # how orders and catalog relate, and which terms cross the boundary
  adr/                    # only workspace-wide or cross-package decisions
packages/
  orders/
    GLOSSARY.md           # orders' ubiquitous language
    docs/adr/             # orders-only decisions
  catalog/
    GLOSSARY.md           # catalog's ubiquitous language
    docs/adr/             # catalog-only decisions
```

### Reasoning
- **Each package is its own bounded context.** Since each already has a glossary and an ADR folder, the same word (for example "Product" or "Item") may legitimately mean different things in each. Merging the glossaries would hide that.
- **Colocation keeps docs in step with code.** Changes to a package and to its glossary or ADRs land in the same diff and are reviewed by the same owners.
- **ADR numbering is per folder.** Each package numbers its own ADRs (`0001-...`), so teams don't collide. Root ADRs get their own sequence. References across packages use a path, such as `packages/catalog/docs/adr/0003-...`.
- **The root only holds what belongs to neither package.** That means the context map and decisions that affect both, such as the integration contract between orders and catalog.

### Rules of thumb
1. A term goes in the glossary of the package that owns its meaning. If the other package uses it, the context map says which side is authoritative.
2. A decision goes in the narrowest scope it affects. If it constrains both packages, it goes in the root ADRs.
3. Don't duplicate definitions across glossaries. Link instead.

## Confirmation needed before I proceed

1. **Scope:** Is per-package ownership with a thin root the layout you want, or do you prefer everything centralized at the root?
2. **Existing files:** What are the current glossary and ADR file names and paths in each package? I'd keep them as they are rather than renaming. I haven't looked at the workspace, so I'm assuming the names above.
3. **Shared vocabulary:** Do orders and catalog share any terms, and is a root `CONTEXT-MAP.md` wanted, or should cross-package terms live in one package's glossary?
4. **Cross-package ADRs:** Should a root `docs/adr/` exist for decisions spanning both packages, or should such decisions live in the package that drives them and be linked from the other?

Once you confirm these, I can move or create files accordingly. I'll do nothing until then.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

handoff · the resume task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 940 bytes about the same town: the exact length of the handoff skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Write a handoff from these facts: parser fix drafted, tests not run, decision recorded in docs/parser-plan.md, next session verifies invalid input. Keep the existing plan as the detailed source.

What the AI answered

## Handoff

**Status**
- Parser fix is drafted but not yet verified.
- Tests have **not been run**, so nothing is confirmed working.

**Decision**
- Recorded in `docs/parser-plan.md`. That file remains the detailed source for the plan and rationale; this note only summarizes it.
Read the whole answer
## Handoff

**Status**
- Parser fix is drafted but not yet verified.
- Tests have **not been run**, so nothing is confirmed working.

**Decision**
- Recorded in `docs/parser-plan.md`. That file remains the detailed source for the plan and rationale; this note only summarizes it.

**Next session**
1. Verify behavior on invalid input (the parser's handling of malformed or unexpected data).
2. Run the tests, since none have been run against the draft yet.
3. Consult `docs/parser-plan.md` for specifics before changing anything, and update it if the verification results change the decision.

**Caveat**
- The draft's correctness is unknown until the tests and the invalid-input check have been done.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

handoff · the privacy task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 940 bytes about the same town: the exact length of the handoff skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Prepare a handoff about an authentication bug. The conversation contained a real credential, but it is intentionally not supplied here. Facts safe to carry: refresh retries twice; a test remains missing.

What the AI answered

# Handoff: Authentication Bug

## Known facts
- **Refresh behavior:** the token refresh retries twice before giving up.
- **Test coverage:** a test is still missing. I don't have details on which scenario it should cover, so confirm that against the code before writing it. A natural candidate is the refresh retry path (the second retry succeeding, and both retries failing).
Read the whole answer
# Handoff: Authentication Bug

## Known facts
- **Refresh behavior:** the token refresh retries twice before giving up.
- **Test coverage:** a test is still missing. I don't have details on which scenario it should cover, so confirm that against the code before writing it. A natural candidate is the refresh retry path (the second retry succeeding, and both retries failing).

## Security note
- A real credential appeared in the earlier conversation. It is deliberately **not** included here and should not be copied into tickets, commits, logs, or chat.
- Treat it as exposed: **rotate or revoke it**, then confirm the old value no longer works.
- If it was ever written to a file, shell history, or a commit, check for that and clean it up.

## Not established
I don't have the following, so don't assume it:
- The root cause of the bug
- Which files or functions are involved
- Whether any fix has been attempted or merged
- Exact symptoms and reproduction steps

## Suggested next steps
1. Rotate the exposed credential.
2. Reproduce the bug and capture the symptoms, without real secrets in the logs.
3. Review the refresh retry logic (two retries) for how it handles failures, backoff, and what happens after the final failure.
4. Add the missing test, then run the suite.
5. Update this handoff with the findings.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

handoff · the destination task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 940 bytes about the same town: the exact length of the handoff skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The next session will document an already implemented parser change. Tests passed in a local check; no commit exists. Draft a short handoff and say where the handoff should be saved.

What the AI answered

# Handoff draft

**Task for next session:** Document the parser change that is already implemented.

**Status**
- The parser change is implemented in the working tree.
- Tests passed in a local check. I have no record of the exact command or test count, so the next session should re-run the suite before citing results.
- **Nothing is committed.** The change exists only as uncommitted work.
Read the whole answer
# Handoff draft

**Task for next session:** Document the parser change that is already implemented.

**Status**
- The parser change is implemented in the working tree.
- Tests passed in a local check. I have no record of the exact command or test count, so the next session should re-run the suite before citing results.
- **Nothing is committed.** The change exists only as uncommitted work.

**Caveats**
- The git snapshot at session start showed a clean tree on a detached `HEAD` with no recent commits. Either the change was made after that snapshot or the snapshot is stale, so run `git status` and `git diff` first to see what actually changed.
- Because `HEAD` is detached, create a branch (off `main`) before committing, or the commit could be orphaned.

**Next steps**
1. Run `git status` and `git diff` to identify the changed files.
2. Re-run the tests to confirm they still pass.
3. Write the documentation, describing the behavior change from the diff rather than from memory.
4. Commit the code and docs on a new branch, if the user wants a commit.

## Where to save it

Save it as `/tmp/driftproof-eval.4y4rM1Kp/HANDOFF.md` at the repository root. It's easy to find at the start of the next session. I don't know of any existing docs convention here, so if the repo has a `docs/` directory or a notes location, use that instead. Keep it out of the commit, since it's a transient note and not project documentation.

I haven't written the file, as you asked for no file writes.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

frontend-design · the identity task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9390 bytes about the same town: the exact length of the frontend-design skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Propose a landing-page design for a night-shift bicycle repair shop. Real facts: open until midnight, repairs while customers wait, one workshop photo. Supply a hero, type direction and primary action.

What the AI answered

# Landing page: night-shift bicycle repair

I'm using only the three facts you gave me: open until midnight, repairs while you wait, and one workshop photo. Anything else (name, address, prices, phone) is left as a placeholder.

## Hero

**Layout:** The workshop photo runs full-bleed behind the hero, with a dark gradient over the lower half so text stays legible. A single photo works best when it's treated as the whole mood rather than a thumbnail. If it was taken in the shop's own light, keep it warm and don't over-brighten it.
Read the whole answer
# Landing page: night-shift bicycle repair

I'm using only the three facts you gave me: open until midnight, repairs while you wait, and one workshop photo. Anything else (name, address, prices, phone) is left as a placeholder.

## Hero

**Layout:** The workshop photo runs full-bleed behind the hero, with a dark gradient over the lower half so text stays legible. A single photo works best when it's treated as the whole mood rather than a thumbnail. If it was taken in the shop's own light, keep it warm and don't over-brighten it.

**Headline:** "Fixed while you wait. Open till midnight."

**Subline:** "Flat, loose chain, or a bike that won't ride home? Bring it in tonight."

**Status line, under the subline:** A small live badge that reads "Open now, until 12:00" or "Closed, opens [time]". Opening time isn't in your facts, so only show that state if you supply it. Otherwise the badge shows just the open state and falls back to "Open until midnight".

## Type direction

- **Headline:** A heavy condensed grotesque (something like Oswald, Barlow Condensed or Archivo Narrow Bold), set in sentence case at very large size. It echoes stenciled shop signage and reads quickly on a phone at night.
- **Body and UI:** A neutral, highly legible sans (Inter or Source Sans) at 18px or larger. People will often read this outdoors, in the dark, with a dead bike beside them.
- **Color:** Near-black background with off-white text, and one accent color reserved for the status badge and the main button. A warm amber or yellow suggests a lit workshop window and keeps contrast high.
- **Hierarchy:** Two sizes of display type, one body size, nothing decorative. The two promises (midnight, wait) get the visual weight and everything else stays quiet.

## Primary action

**Button label:** "Get directions" (sticky at the bottom of the screen on mobile)

**Why:** Someone searching for a repair shop at 10pm needs to know whether they can get there before closing, so a map link beats a booking form. "Repairs while you wait" also means walk-ins are the main use case, so there's no need for scheduling.

**Secondary action:** A plain text link, "Call the shop", which is a tap-to-call link and only works once you provide a number.

## Page structure

1. Hero with the badge, headline and button
2. A short strip with two statements: "Open until midnight" and "Repairs while you wait"
3. Address, hours and map, once you have them
4. Footer

Keeping it to this one scroll respects the thin content. Adding sections about services or pricing would mean inventing material, so I'd wait until you have real details.

## What I need from you to finish it

- The shop name and address (for the directions button)
- Opening time and days open (to make the status badge accurate)
- A phone number, if you want the call link

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

frontend-design · the brief task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9390 bytes about the same town: the exact length of the frontend-design skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The request is only make a beautiful site. No product, audience or purpose is supplied. Give the design lead response before choosing a layout.

What the AI answered

# Design lead response (before layout)

## What I have and what's missing
The only material is a passage about a market town: hills, moor, coast, mill, harbour, orchard, market and village hall. No product, audience, or purpose is given, so I can't say what the site is *for*. A beautiful site that doesn't know its job is decoration. I'll commit to a direction from the material, and I'll flag where a decision changes it.
Read the whole answer
# Design lead response (before layout)

## What I have and what's missing
The only material is a passage about a market town: hills, moor, coast, mill, harbour, orchard, market and village hall. No product, audience, or purpose is given, so I can't say what the site is *for*. A beautiful site that doesn't know its job is decoration. I'll commit to a direction from the material, and I'll flag where a decision changes it.

## Working assumption
This is a place-led site for the town and its surroundings. It could be a visitor guide, a community hub, or a small-business or producer showcase. If it's none of these, tell me and the direction below changes.

## Design direction
**Feeling:** quiet, tactile, weathered and unhurried. It should feel like a hand-drawn map in the library, not a travel-brochure template.

**Palette (drawn from the text):**
- Grey harbour stone and slate as the base neutrals
- Salt-white and pale sea-grey for backgrounds
- Moss green and thyme/sage as the main accent
- Copper-beech orange-brown as the single warm accent
- Lime-blossom yellow and buttercup, used sparingly for highlights

**Typography:** a warm, slightly old-style serif for headings, evoking hand-lettered maps and printed signage, paired with a clean, legible sans for body text. Generous line height and few weights.

**Imagery and texture:** hand-drawn map linework, stone and willow-weave textures, and botanical details (quince, thyme, ox-eye daisy) as small illustrations. Photography should favor natural light: morning mist, evening wind off the sea, rain-shine on streets.

**Motion:** minimal and slow, like the river turning the mill wheel. Gentle fades and a subtle parallax on the hills. Nothing flashy, and it must respect reduced-motion settings.

**Content themes the text supports:** land and sea (moor, coast, estuary), craft (potter, weaver, baker), seasons (spring swifts, autumn beech, winter moor), and community (choir Thursdays, dance on the first Saturday).

## Principles I'd hold to
- Calm over density: whitespace and a single focal point per section.
- Accessible contrast, since muted earthy palettes often fail it.
- Fast and light, so no heavy video or large unoptimized images.
- Mobile-first, since people will check hours and events on the go.

## Notes on the source text
The passage repeats many sentences in shuffled order and cuts off mid-sentence ("In summer the meadows are full of"). I'd treat it as a pool of facts, not finished copy, and I'd rewrite it so nothing reads as repeated.

## Questions that would change the design most
1. What is the site for (visitors, residents, a business, a portfolio)?
2. Who is the main visitor, and what one action should they take?
3. Is the town real? Do you have real names, photos, events, and contact details?

## Next step
Once you answer, or tell me to proceed on the visitor-guide assumption, I'll pick the layout, covering page structure, navigation, and key sections. I haven't chosen one yet.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

frontend-design · the content task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9390 bytes about the same town: the exact length of the frontend-design skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Design the text structure for a small observatory tour page. Facts: visits at dusk, 12 places, cloudy nights use an indoor exhibit. No testimonials exist.

What the AI answered

# Observatory Tour Page: Text Structure

**1. Hero**
- Headline: a short line about visiting the observatory at dusk
- Subline: one sentence stating that tours run at dusk and have 12 places
- Primary button: "Book a place" (or the equivalent for your booking method)
Read the whole answer
# Observatory Tour Page: Text Structure

**1. Hero**
- Headline: a short line about visiting the observatory at dusk
- Subline: one sentence stating that tours run at dusk and have 12 places
- Primary button: "Book a place" (or the equivalent for your booking method)

**2. What to expect**
- Short intro paragraph on the tour
- Key facts in a compact list:
  - **When:** at dusk
  - **Group size:** 12 places
  - **If it's cloudy:** the tour moves to an indoor exhibit

**3. How the evening unfolds**
- A simple three-step flow built only from the facts you have:
  1. Arrive at dusk
  2. Clear sky: observing
  3. Cloudy sky: indoor exhibit
- Add detail here only once you have confirmed it.

**4. Cloudy nights**
- A short, reassuring section so visitors know a cloudy sky doesn't cancel the visit
- One or two sentences describing the indoor exhibit
- A note on how visitors will find out about the switch, if you have that information

**5. Availability and booking**
- State that there are 12 places per tour
- Booking button or instructions
- Placeholder fields for details you haven't supplied yet (dates, dusk time, price, address)

**6. FAQ**
- What happens if it's cloudy?
- How many people can join?
- When should I arrive?

Only the first two can be answered from the facts so far. The third needs your input.

**7. Footer**
- Contact details, location, and links

**Notes**
- **No testimonials section.** Since none exist, leave out the section and any review or star-rating widgets.
- **"12 places":** I've read this as 12 spots per tour. If it means 12 stops along the tour, or 12 spots in total across all tours, the wording in sections 1, 2, and 5 should change.
- **Dusk timing:** dusk shifts through the year, so consider showing the actual time per date instead of just the word "dusk."

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

reddit-automation · the rank task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8008 bytes about the same town: the exact length of the reddit-automation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Choose a reply opportunity for an offline inventory app: thread A asks today for offline warehouse counts; B is a locked similar thread; C is a generic joke. The team has used its app in a warehouse.

What the AI answered

**Pick thread A.**

- **A** is the only one that fits. It's current (asked today), the question is specific (offline warehouse counts), and your team has used the app in a warehouse, so you can answer from real experience.
- **B** is locked, so you can't reply no matter how similar it is.
- **C** is a generic joke. Mentioning the app there would be off-topic and read as spam.
Read the whole answer
**Pick thread A.**

- **A** is the only one that fits. It's current (asked today), the question is specific (offline warehouse counts), and your team has used the app in a warehouse, so you can answer from real experience.
- **B** is locked, so you can't reply no matter how similar it is.
- **C** is a generic joke. Mentioning the app there would be off-topic and read as spam.

For the reply in A, lead with something useful: how your team handled counts without connectivity, such as local storage, queued syncs, and how conflicts were resolved. Say you're on the team that built the app, and mention it only where it answers the question. Don't pitch it.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

reddit-automation · the reply task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8008 bytes about the same town: the exact length of the reddit-automation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Draft a short reply for a warehouse user asking for offline counting. You work on StockPond and personally used its offline queue in a warehouse. Their community permits disclosed product mentions.

What the AI answered

Here's a draft you can post:

---

For offline counting, look for an app that queues your scans locally and syncs them once you're back in coverage. That way dead spots in the racking or a dead zone near the loading dock don't cost you counts.
Read the whole answer
Here's a draft you can post:

---

For offline counting, look for an app that queues your scans locally and syncs them once you're back in coverage. That way dead spots in the racking or a dead zone near the loading dock don't cost you counts.

Disclosure: I work on StockPond, so take this with that in mind. I've also used its offline queue myself in a warehouse. Counts entered without a signal were held on the device and went through when the connection came back.

Whichever tool you try, test it before a real count:

1. Turn on airplane mode and scan a few dozen items.
2. Close and reopen the app to confirm nothing is lost.
3. Reconnect and check that the counts match what you entered.
4. Find out how it handles two people counting the same location.

Happy to answer questions about how StockPond handles any of these.

---

I kept the claims to what you told me: that you work on StockPond and have used its offline queue in a warehouse. If you can confirm details like conflict handling, device support, or sync behavior, I can add them. I'd leave them out otherwise.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

reddit-automation · the rules task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8008 bytes about the same town: the exact length of the reddit-automation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A community bans all product mentions. A thread asks how to avoid losing offline counts. The product team wants you to reply. Draft an appropriate response using only the general fact that a local queue can sync later.

What the AI answered

Here's a draft reply that follows the no-product-mentions rule:

---

The most reliable way to avoid losing offline counts is to never treat the device as the final home for the data. Instead, record each count to a local queue as it happens, with a timestamp and a unique ID, and keep it there until it has been synced.
Read the whole answer
Here's a draft reply that follows the no-product-mentions rule:

---

The most reliable way to avoid losing offline counts is to never treat the device as the final home for the data. Instead, record each count to a local queue as it happens, with a timestamp and a unique ID, and keep it there until it has been synced.

When a connection comes back, the queue can send everything that's waiting. Only remove an entry once the server confirms it received it. That way, if the connection drops mid-sync, nothing is lost and the entry is simply retried later.

Using a unique ID per entry also means a retry won't double-count anything. Because the counts are stored locally right away, it doesn't matter whether you're online when you record them. They'll sync later.

---

Notes:
- It names no product, brand, or feature, and has no links or calls to action, so it fits the ban.
- It sticks to the one general fact you supplied (a local queue can sync later). The advice about timestamps, unique IDs, and confirming receipt before removal is generic good practice. If you'd rather keep strictly to that single fact, delete the second and third paragraphs.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

triage · the conflict task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6558 bytes about the same town: the exact length of the triage skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Triage this synthetic item: category bug; states needs-info and ready-for-agent both present. The label mapping uses those same strings. What happens next?

What the AI answered

**Next step: treat the item as mis-triaged and resolve the conflict before anything else happens to it. Don't hand it to an agent yet.**

The facts you gave say the category is `bug` and that both `needs-info` and `ready-for-agent` are present. They don't include a rule for what happens when both are set, so I can't say what your tooling would do automatically. I also can't tell whether it would pick one label, pick the first, or fail. What follows is my recommendation, not a documented behavior.
Read the whole answer
**Next step: treat the item as mis-triaged and resolve the conflict before anything else happens to it. Don't hand it to an agent yet.**

The facts you gave say the category is `bug` and that both `needs-info` and `ready-for-agent` are present. They don't include a rule for what happens when both are set, so I can't say what your tooling would do automatically. I also can't tell whether it would pick one label, pick the first, or fail. What follows is my recommendation, not a documented behavior.

- **The two states contradict each other.** `needs-info` means something is missing from the report. `ready-for-agent` means the item is specified well enough to work on. Both can't be true at once, so states like these are normally mutually exclusive.
- **Default to the safer state.** I'd keep `needs-info` and remove `ready-for-agent`. Starting work on an underspecified bug wastes effort, while leaving a ready item waiting for one more triage pass costs little.
- **Check why both labels got applied.** Because the label mapping uses those same strings, a mapping or automation could be applying both. If so, removing the label by hand won't hold, and the mapping should be fixed.
- **Ask for what's missing.** If the information gap is real, the next action is a question to the reporter, such as repro steps, expected vs. actual behavior, or environment. Once they answer, swap `needs-info` for `ready-for-agent`.
- **If the gap isn't real, do the opposite.** When the report is complete and `needs-info` is stale, remove `needs-info` and leave `ready-for-agent`.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

triage · the evidence task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6558 bytes about the same town: the exact length of the triage skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A reporter says export crashes but supplies no steps. The item has needs-triage and bug. Draft triage notes; no code or reproduction evidence is available.

What the AI answered

## Triage notes: "Export crashes"

**Status:** Needs info. Not yet actionable.

**Labels:** Keep `needs-triage` and `bug`. Add `needs-info` (or equivalent) so the item is clearly waiting on the reporter. Keep `bug` provisionally, since a crash is plausible as a defect but is unconfirmed.
Read the whole answer
## Triage notes: "Export crashes"

**Status:** Needs info. Not yet actionable.

**Labels:** Keep `needs-triage` and `bug`. Add `needs-info` (or equivalent) so the item is clearly waiting on the reporter. Keep `bug` provisionally, since a crash is plausible as a defect but is unconfirmed.

**What we know**
- A reporter says export crashes.
- No steps, environment, error output, or version were provided.
- No code or reproduction evidence is available to me, so I can't assess cause, scope, or severity.

**What we don't know**
- Which export (format, feature, entry point: UI, CLI, API)
- What "crashes" means: an exception or stack trace, a hang, the process exiting, a blank or corrupt file, or an error dialog
- Whether it is consistent or intermittent
- Whether it is a regression (worked in a prior version) or never worked
- Data characteristics: size, special characters, empty data, particular records
- Environment: product version/build, OS, runtime version, relevant config

**Severity/priority:** Unassigned. Can't be rated without scope. Revisit if the reporter indicates data loss or that it affects all users.

**Suggested reply to reporter**

> Thanks for the report. We can't investigate yet without more detail. Could you share:
> 1. The version/build you're using and your OS/environment
> 2. The exact steps you took, including the export format and where you started it
> 3. What happened: the full error message, stack trace, or logs if available
> 4. Whether it happens every time, and whether it ever worked before
> 5. Any details about the data being exported (size, unusual content), or a minimal sample if you can share one
>
> Once we can reproduce it, we'll prioritize it.

**Next steps**
1. Post the reply above and mark the item as waiting on the reporter.
2. If there's no response after a set period (e.g., 14 days), send a reminder, then close as "cannot reproduce / insufficient info" if there's still nothing, noting it can be reopened.
3. Meanwhile, a maintainer could check for duplicates or similar export-related reports and look at recent changes to export code, since either could help narrow the cause. That is optional and not something I've done here.
4. Once steps are provided, attempt reproduction, then update labels (drop `needs-triage`, add component and severity labels).

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

triage · the ready task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6558 bytes about the same town: the exact length of the triage skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A synthetic issue has a reproduced invalid-date error, agreed input/output behavior, affected file parser.js and a clear regression check. Draft a concise agent-ready brief with status recommendation.

What the AI answered

# Agent Brief: Invalid-date error in `parser.js`

**Status recommendation: Ready for implementation.** The bug is reproduced, the expected behavior is agreed, the affected file is identified, and there is a clear regression check. Nothing blocks an agent from starting.
Read the whole answer
# Agent Brief: Invalid-date error in `parser.js`

**Status recommendation: Ready for implementation.** The bug is reproduced, the expected behavior is agreed, the affected file is identified, and there is a clear regression check. Nothing blocks an agent from starting.

## Problem
Parsing certain date inputs in `parser.js` produces an invalid-date error. The failure has been reproduced.

## Scope
- **Change:** `parser.js` only.
- **Out of scope:** unrelated refactors, changes to other modules, and any input/output behavior beyond what was agreed.

## Target behavior
Implement the agreed input/output behavior from the issue. The issue's exact input/output pairs are not included in the facts I was given, so copy them verbatim into this section before handing off.

| Input | Current output | Expected output |
|---|---|---|
| *(failing input from repro)* | invalid-date error | *(agreed output)* |

## Steps
1. Run the reproduction and confirm the invalid-date error.
2. Locate the faulty date handling in `parser.js` and make the minimal fix to produce the agreed output.
3. Confirm that previously valid inputs still parse the same way.

## Acceptance / regression check
- The reproduction case no longer errors and returns the agreed output.
- The regression check named in the issue passes. Add it as a permanent test if it isn't one already.
- The existing test suite passes with no new failures.

## Notes for the agent
- Keep the diff small and match the existing style in `parser.js`.
- If the reproduction doesn't fail or the agreed behavior is ambiguous, stop and report rather than guessing.
- Report results faithfully: say which checks ran and which passed or failed.

## Open item
The concrete repro input, expected output, and test name weren't in the facts supplied. Fill those in before dispatch. If they can't be filled in, downgrade the status to "needs info."

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

prototype · the logic task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2931 bytes about the same town: the exact length of the prototype skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. We need to understand whether a reservation state machine can reach paid after cancelled. Design a small throwaway demonstration, not production code.

What the AI answered

The text you supplied is about a market town and says nothing about reservations, states, or payments, so I can't tell you from it whether `paid` is reachable after `cancelled`. Below is a throwaway demo that answers the question once you plug in your real transition table.
Read the whole answer
The text you supplied is about a market town and says nothing about reservations, states, or payments, so I can't tell you from it whether `paid` is reachable after `cancelled`. Below is a throwaway demo that answers the question once you plug in your real transition table.

## Design

There are two separate questions, so the demo has two parts.

1. **Static reachability.** Treat the transition table as a graph and search for any path that visits `cancelled` and later reaches `paid`. This catches table mistakes, such as a `cancelled -> paid` edge or a path through `cancelled -> pending`.
2. **Interleaving races.** Real systems usually reach `paid` after `cancelled` because a payment was already in flight when the cancel landed. Model payment as two events, `pay_started` and `pay_settled`, and explore every ordering of the events with a bounded depth. Then check whether the `pay_settled` handler guards against a cancelled reservation.

## Sketch (Python, stdlib only, about 40 lines)

```python
from itertools import product

# Replace with the real table: (state, event) -> next_state
T = {
    ("pending",   "pay_started"): "paying",
    ("pending",   "cancel"):      "cancelled",
    ("pending",   "expire"):      "expired",
    ("paying",    "pay_settled"): "paid",       # <- suspicious if no guard
    ("paying",    "cancel"):      "cancelled",  # cancel while payment in flight
    ("paid",      "cancel"):      "refunding",
    ("refunding", "refunded"):    "cancelled",
}
EVENTS = sorted({e for _, e in T})

def step(state, event, in_flight):
    """Return (new_state, in_flight). Unknown events are ignored."""
    if event == "pay_started" and state == "pending":
        in_flight = True
    nxt = T.get((state, event))
    if nxt is None and event == "pay_settled" and in_flight:
        # Real handler may or may not check state here. This line is the bug probe:
        nxt = "paid"          # flip to None to test the guarded version
    if event == "pay_settled":
        in_flight = False
    return (nxt or state), in_flight

def search(max_depth=6):
    hits = []
    for n in range(1, max_depth + 1):
        for seq in product(EVENTS, repeat=n):
            s, fl, seen_cancel, trace = "pending", False, False, []
            for e in seq:
                s, fl = step(s, e, fl)
                trace.append((e, s))
                seen_cancel |= (s == "cancelled")
                if seen_cancel and s == "paid":
                    hits.append(trace[:]); break
    return hits

hits = search()
print(f"{len(hits)} violating sequences")
print(min(hits, key=len) if hits else "none: paid is unreachable after cancelled")
```

## How to read the result

- **Shortest violating trace printed.** That is your counterexample, for example `pay_started -> cancel -> pay_settled`. It points to the missing guard in the settle handler.
- **None found, with the unguarded fallback enabled.** The table itself is safe, and any remaining risk is in code outside the state machine.
- **Flip the fallback line** to `nxt = None` to confirm the guarded version eliminates the hits. This shows the demo can fail, which makes a clean run meaningful.

## Limits

- It checks event orderings in a single process. It won't catch duplicate webhook deliveries, retries, or two workers racing on a database row. For those, add a repeated `pay_settled` event and a "stale read" step that applies an event against an old state.
- The depth bound of 6 is arbitrary. Raise it if your real table has longer paths. With about 5 events it stays fast.
- Once you've seen the counterexample, port it to a real test against the actual code, then discard this script.

If you paste the real transition table and the settle handler, I can adapt the model to match.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

prototype · the ui task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2931 bytes about the same town: the exact length of the prototype skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. We need to compare three visual directions for a checkout page. The project already has a prototype route convention. Propose the prototype shape.

What the AI answered

I can't see the project's prototype route convention. The only text supplied is a passage about a market town, which says nothing about routing, and I've been told not to read the repo. So I'll propose a shape that should slot into most conventions, and you can map it onto the real one.
Read the whole answer
I can't see the project's prototype route convention. The only text supplied is a passage about a market town, which says nothing about routing, and I've been told not to read the repo. So I'll propose a shape that should slot into most conventions, and you can map it onto the real one.

**Recommendation: one prototype route with a variant switch, not three separate pages.**

- **Route:** `<prototype-prefix>/checkout`, where the prefix is whatever your convention uses (e.g. `/prototypes`, `/__proto`, `/labs`).
- **Variant selection:** a query param, `?v=a|b|c`, defaulting to `a`. Each variant is a shareable URL, and you can flip between them in one tab for side-by-side comparison.
- **Structure:**
  - `checkout/` holds a thin route component that reads `v` and renders the matching variant.
  - `checkout/variants/a.*`, `b.*`, `c.*` each hold one visual direction.
  - `checkout/shared/` holds the common pieces: mock cart data, form state, and step logic, so the variants differ only in presentation.
- **Fixtures:** one static mock cart and fake submit handler shared by all three, so differences you see are visual rather than behavioral.
- **Compare aid:** a small floating switcher (A / B / C) shown only on prototype routes, so reviewers don't have to edit the URL.
- **Isolation:** no real payment or API calls, and the route excluded from production builds and navigation, following however the convention handles that.

**Why this shape:** it keeps the cost of adding or dropping a direction to one file, makes review links trivial, and avoids three diverging copies of checkout logic. If you'd rather have three fully separate routes (`/checkout-a`, etc.), the same `shared/` split still applies.

If you paste the convention (directory layout, naming, how prototypes are registered or gated), I'll adjust the proposal to match it exactly.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

prototype · the unclear task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2931 bytes about the same town: the exact length of the prototype skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. An unreachable stakeholder says try a prototype next to a backend retry module. No UI work is present. State a provisional direction and what the prototype should answer.

What the AI answered

**Provisional direction:** Build a small, throwaway, backend-only prototype that sits next to the retry module, not inside it. It shouldn't change the module's behavior or be wired into production paths, so it can be discarded or promoted later without untangling anything. With no UI work, it can be a thin script or harness driven by simulated failures. This direction rests on the stakeholder's suggestion alone, and since they're unreachable, I'd treat it as an assumption to confirm when they're back, not a settled decision.
Read the whole answer
**Provisional direction:** Build a small, throwaway, backend-only prototype that sits next to the retry module, not inside it. It shouldn't change the module's behavior or be wired into production paths, so it can be discarded or promoted later without untangling anything. With no UI work, it can be a thin script or harness driven by simulated failures. This direction rests on the stakeholder's suggestion alone, and since they're unreachable, I'd treat it as an assumption to confirm when they're back, not a settled decision.

**What the prototype should answer:**

1. **Fit:** Can the idea work through the retry module's existing interface, or does it need changes to that interface? This is the biggest unknown.
2. **Failure behavior:** Under simulated transient and permanent failures, does it retry the right errors, stop at the right point, and avoid hammering a struggling dependency (backoff, jitter, attempt limits)?
3. **Safety:** Do retries cause duplicate side effects, and does the operation need to be idempotent for this to be safe?
4. **Observability:** Can you tell from logs or metrics when retries happen and why they gave up?
5. **Cost of adoption:** Roughly how much work is it to move from prototype to real integration, and is that worth it?

**Open items to confirm with the stakeholder:**
- What "prototype" is meant to prove: feasibility, performance, or a design choice.
- Whether the prototype is disposable or expected to evolve into the real implementation.

The long passage about the market town and its harbor had nothing relevant to this question, so I didn't use it. I also don't have details about the retry module itself, so the questions above are framed generically and would need tightening once someone can look at its code.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

media-use · the reuse task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9684 bytes about the same town: the exact length of the media-use skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A project needs a short chime. A local candidate has the right license and duration but its fit has not been checked. Explain the next asset workflow.

What the AI answered

Since the license and duration already check out, the next step is to evaluate fit, and only then bring the asset into the project.

1. **Audition in context.** Play the candidate where the project will use it, not in isolation. Judge it against what it has to do:
   - **Tone:** does it match the project's mood and any sounds already in place?
   - **Timing:** does the attack and decay land well with the triggering event, and does the tail clash with other audio?
   - **Technical quality:** check for clipping, clicks at the start or end, noise, and a sample rate or channel layout that doesn't match the rest of the project.
   - **Loudness:** compare it to neighboring sounds, since a chime that is too loud or too quiet is a common failure.
   - **Repetition:** if it will play often, make sure it doesn't become grating.
Read the whole answer
Since the license and duration already check out, the next step is to evaluate fit, and only then bring the asset into the project.

1. **Audition in context.** Play the candidate where the project will use it, not in isolation. Judge it against what it has to do:
   - **Tone:** does it match the project's mood and any sounds already in place?
   - **Timing:** does the attack and decay land well with the triggering event, and does the tail clash with other audio?
   - **Technical quality:** check for clipping, clicks at the start or end, noise, and a sample rate or channel layout that doesn't match the rest of the project.
   - **Loudness:** compare it to neighboring sounds, since a chime that is too loud or too quiet is a common failure.
   - **Repetition:** if it will play often, make sure it doesn't become grating.

2. **Decide.** There are three outcomes:
   - **Accept as-is.**
   - **Accept with light edits,** such as trimming silence, normalizing, adding a fade, or converting format. Check that the license allows modification.
   - **Reject** and look for another candidate, applying the same license and duration screen first.

3. **Record provenance.** For an accepted asset, note its source, author, license, and any attribution requirement. Keep the original file untouched and store any edited version alongside it.

4. **Integrate and verify.** Add the final file to the project's asset location, wire it up, and test it in the real build on the target platform. Confirm that it triggers correctly and sounds right at the project's actual output levels.

5. **Commit.** Commit the asset together with its attribution or license note so the project stays compliant.

If the candidate fails the fit check, go back to sourcing. Nothing has been integrated yet, so there is nothing to undo.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

media-use · the logo task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9684 bytes about the same town: the exact length of the media-use skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The project needs a company logo. No official logo file has been supplied. Describe the sourcing plan and what not to fabricate.

What the AI answered

No official logo file has been supplied, so the project has no logo asset yet. Here is how I'd source one, and what I won't invent.

## Sourcing plan

1. **Ask the owner.** Find out who owns brand assets (marketing, design, founder, or the client) and request the official files directly.
2. **Request the right formats.**
   - Vector: SVG, plus PDF or EPS if available.
   - Raster: PNG with a transparent background at high resolution.
   - Variants: full-color, one-color, light-on-dark and dark-on-light, and a square icon or favicon version if one exists.
3. **Ask for usage rules.** Get the brand guidelines or a note covering clear space, minimum size, approved colors, and any restrictions.
4. **Look in places the company already controls.** If the owner can't send files quickly, check their brand or press kit page, an internal design library such as Figma, or the repo history of related projects. Use only what the owner confirms is current. Don't scrape a logo from a website or search results and assume it's official or the latest version.
5. **Use a placeholder until the real file arrives.**
   - Use a clearly labeled neutral stand-in, such as a plain box reading "Logo placeholder" at the correct dimensions.
   - Put it behind a single path or config value so the real file replaces it in one step.
   - Add a TODO or tracking issue naming the owner and the missing asset.
6. **Record provenance.** When the file arrives, note who supplied it, when, and the version, in the commit message or an assets README.
Read the whole answer
No official logo file has been supplied, so the project has no logo asset yet. Here is how I'd source one, and what I won't invent.

## Sourcing plan

1. **Ask the owner.** Find out who owns brand assets (marketing, design, founder, or the client) and request the official files directly.
2. **Request the right formats.**
   - Vector: SVG, plus PDF or EPS if available.
   - Raster: PNG with a transparent background at high resolution.
   - Variants: full-color, one-color, light-on-dark and dark-on-light, and a square icon or favicon version if one exists.
3. **Ask for usage rules.** Get the brand guidelines or a note covering clear space, minimum size, approved colors, and any restrictions.
4. **Look in places the company already controls.** If the owner can't send files quickly, check their brand or press kit page, an internal design library such as Figma, or the repo history of related projects. Use only what the owner confirms is current. Don't scrape a logo from a website or search results and assume it's official or the latest version.
5. **Use a placeholder until the real file arrives.**
   - Use a clearly labeled neutral stand-in, such as a plain box reading "Logo placeholder" at the correct dimensions.
   - Put it behind a single path or config value so the real file replaces it in one step.
   - Add a TODO or tracking issue naming the owner and the missing asset.
6. **Record provenance.** When the file arrives, note who supplied it, when, and the version, in the commit message or an assets README.

## What not to fabricate

- **The logo itself.** Don't draw, generate, or approximate one, and don't recreate it from memory or a description. A near-match is worse than a placeholder.
- **Brand details.** Don't guess the company's exact colors, hex values, typeface, wordmark styling, or tagline. I also don't have the company name from the supplied facts, so I won't assume one.
- **Approval or licensing.** Don't claim the placeholder or any substitute is approved, and don't state licensing, trademark status, or usage rights.
- **File provenance.** Don't label a file "official" or "final" unless the owner supplied it.
- **Lookalike assets.** Don't use stock icons or another company's mark as a stand-in without making it obvious they are temporary.

## What I need from you

- The company name and who owns brand assets.
- The target contexts (web header, favicon, README, docs, app icon), so the requested variants and sizes are right.

Once the real file is in the repo, I can wire it in and remove the placeholder.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

media-use · the grade task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9684 bytes about the same town: the exact length of the media-use skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The supplied frames are uniformly too dark. The user asks for ordinary exposure correction, with no LUT supplied. Propose the review and persistence workflow.

What the AI answered

# Proposed workflow: exposure correction for uniformly dark frames

I'm working only from what you've told me: the frames are uniformly too dark, you want ordinary exposure correction, and there is no LUT. I haven't looked at any files, so the format-dependent parts are flagged.
Read the whole answer
# Proposed workflow: exposure correction for uniformly dark frames

I'm working only from what you've told me: the frames are uniformly too dark, you want ordinary exposure correction, and there is no LUT. I haven't looked at any files, so the format-dependent parts are flagged.

## 1. Treat the correction as parameters, not pixels
- Keep originals read-only.
- Store the correction as a small set of numbers: an exposure offset in EV, plus optional highlight and shadow handling. Don't bake it into new pixel data until export.
- A single global EV offset fits "uniformly too dark". Per-frame offsets are only needed if brightness varies across the set.

## 2. Review on a sample before touching the batch
1. Pick 5-10 frames spanning the set's darkest, typical and brightest cases.
2. Apply a trial EV offset, applied in linear light (for raw, at the scene-referred stage; for 8-bit, decode gamma, scale, re-encode).
3. Judge each result against:
   - **Histogram:** the mass should move right without a spike at the right edge.
   - **Highlight clipping:** use a clipping overlay or count pixels at or near max. Any newly clipped highlights mean the offset is too high or needs highlight recovery.
   - **Shadow noise and banding:** check at 100% zoom in the darkest regions. Lifting underexposed 8-bit files is where this shows up first.
4. Adjust the EV and repeat until the sample looks right. Choose the largest offset that keeps clipping negligible.

The format matters here. Raw files usually have several stops of headroom, so large lifts are fine. JPEG or other 8-bit files do not, so expect to settle for a smaller correction and possibly mild noise reduction.

## 3. Persist the decision
- Write the chosen parameters (EV offset, any highlight/shadow settings, the tool and version used) to a sidecar file or a single manifest alongside the set, and commit it to the repo. That makes the choice reviewable and reproducible.
- If you apply per-frame offsets, record them per filename in the same manifest. Otherwise record one global value.

## 4. Apply to the full set
- Batch-apply the stored parameters to produce derived copies in a separate output directory, never overwriting the originals.
- Use a high-bit-depth intermediate (16-bit) if you'll do further edits, and only quantize to 8-bit at final export.

## 5. Verify after the batch
- Spot-check a random subset beyond the review sample.
- Compute a simple statistic across all outputs, such as mean luminance or clipped-pixel fraction, and flag outliers for individual attention.
- Record any frames that needed manual overrides in the manifest.

## What I need from you to make this concrete
- File format (raw vs. JPEG/PNG/TIFF) and bit depth
- Which tool you want to use (darktable, RawTherapee, ImageMagick, Lightroom, a script)
- Whether brightness is consistent across frames or varies by shot

With those, I can give you the exact settings and a manifest layout.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grilling · the frontier task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2049 bytes about the same town: the exact length of the grilling skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Stress-test a plan for automated digest delivery. Audience and delivery channel are undecided. Provider choice depends on channel; retention depends on audience. Give the first interview round.

What the AI answered

# First interview round: automated digest delivery

The dependency chain is **audience → retention** and **channel → provider**. Those two upstream decisions are open, so this round targets them. Questions about provider and retention come later, once audience and channel are settled.
Read the whole answer
# First interview round: automated digest delivery

The dependency chain is **audience → retention** and **channel → provider**. Those two upstream decisions are open, so this round targets them. Questions about provider and retention come later, once audience and channel are settled.

The town description at the top of your message has nothing to do with the digest plan, so I've ignored it.

## Block A: Audience (unlocks retention)

1. **Who receives the digest?** Internal teammates, customers, an external subscriber list, or a mix?
2. **Roughly how many recipients now, and in 12 months?** This affects cost, rate limits, and whether you need unsubscribe handling.
3. **Do recipients opt in, or are they assigned?** Assigned recipients avoid consent overhead. Opted-in or external recipients bring unsubscribe and consent-record obligations.
4. **Does the digest contain anything sensitive?** This might be personal data, customer data, or internal-only content. It is the main driver of how long you can or must keep things.
5. **Is there any regulatory or contractual constraint on the audience?** Examples are region-specific privacy rules or customer contracts with deletion terms.

## Block B: Channel (unlocks provider)

6. **Where do recipients already pay attention?** Email, chat (Slack/Teams), SMS, push, or an in-app feed?
7. **Does the digest need to be read in the channel, or just link out?** This determines formatting limits and whether rich content is required.
8. **What cadence and timing?** Daily, weekly, or per-timezone sends. Per-timezone scheduling constrains both channel and provider.
9. **Do you need delivery or engagement feedback?** Opens, clicks, bounces, and read receipts differ a lot by channel.

## Block C: Stress-test probes (answer briefly now, refine later)

10. **What happens when a digest has nothing in it?** Skip, send empty, or send a "quiet week" notice?
11. **What is the failure tolerance?** Is a late or missed digest an annoyance or an incident? This tells us how much retry and alerting you need.
12. **Who owns this once it's running?** Someone has to handle bounces, complaints, and broken sends.

## What I need back

Answers to 1, 4, and 6 are the minimum. They fix the audience type, the data sensitivity, and the channel, which is enough to narrow provider and retention to a short list in round two. If you only have time for three answers, give me those.

## Early risks I'd test in round two

- **Deciding provider before channel** risks lock-in to a service that can't reach the audience.
- **Deciding retention before audience** risks keeping data you shouldn't, or deleting data you're required to keep.
- **No fallback channel** means a single provider outage silently stops the digest.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grilling · the settled task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2049 bytes about the same town: the exact length of the grilling skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The audience is now internal staff and delivery is chat. Provider access still needs investigation. Give the next round without reopening agreed choices.

What the AI answered

I can't write the next round properly from what I have. The supplied text is a description of a market town, its canal, ferry, bridge and so on, and it cuts off mid-sentence at "The potter fires her kiln with w". It says nothing about the project, the choices already agreed, or the provider access problem, so I can't tell what to leave alone or what the "round" refers to.
Read the whole answer
I can't write the next round properly from what I have. The supplied text is a description of a market town, its canal, ferry, bridge and so on, and it cuts off mid-sentence at "The potter fires her kiln with w". It says nothing about the project, the choices already agreed, or the provider access problem, so I can't tell what to leave alone or what the "round" refers to.

Here is a generic next round for the open item, written for internal staff in chat. It assumes nothing about the agreed choices, so adjust it once I know what they are.

**Provider access: next round**

1. **Confirm the symptom.** Say exactly what fails (login, API calls, data feed, permissions) and the first time anyone saw it.
2. **Check the basics.** Are the credentials valid and unexpired? Is the account active and in good standing? Has anything changed recently, such as a rotated key, a new IP allowlist, or a contract or plan change?
3. **Collect evidence.** Gather error messages, status codes, timestamps and request IDs from the failing attempts, and note whether the failures are consistent or intermittent.
4. **Check the provider side.** Look at the provider's status page and any recent notices, and see whether other teams or environments are also affected.
5. **Assign owners and a deadline.** One person takes internal checks and another contacts the provider, with a time for reporting back in this chat.

If you paste the actual facts (the agreed choices, what is known about the access issue, and who is involved), I'll tailor this into a short chat-ready update that doesn't revisit anything already decided.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

grilling · the finish task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2049 bytes about the same town: the exact length of the grilling skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. All planned decisions have answers, but the user has not confirmed your summary. Write the closing interview response.

What the AI answered

Here is my closing summary. You haven't confirmed it yet, so please check it before I treat anything as settled.

**What I have:** The only material in this conversation is a descriptive passage about a market town and its surroundings. It covers the canal towpath, the oak and ash forest, the cottages on the green, the ferry, the market goods, the seven-arched bridge, the village hall events, the harbour wall, the railway, the bees, the estuary otters, the fishing boats, the library's hand-drawn maps, the mill, the orchard, the clock tower, and the autumn beeches. The passage cuts off mid-sentence at "The potter fires her kiln with w".
Read the whole answer
Here is my closing summary. You haven't confirmed it yet, so please check it before I treat anything as settled.

**What I have:** The only material in this conversation is a descriptive passage about a market town and its surroundings. It covers the canal towpath, the oak and ash forest, the cottages on the green, the ferry, the market goods, the seven-arched bridge, the village hall events, the harbour wall, the railway, the bees, the estuary otters, the fishing boats, the library's hand-drawn maps, the mill, the orchard, the clock tower, and the autumn beeches. The passage cuts off mid-sentence at "The potter fires her kiln with w".

**What I don't have:** I can't see any list of planned decisions or their answers, so I can't state any of them without making them up. Nothing in the passage reads as a decision, a preference, or a task.

**To close this out, I need you to:**
1. Paste the decisions and answers you want recorded, or tell me which details in the passage they correspond to.
2. Send the rest of the passage if the cut-off ending matters, in particular what the potter fires her kiln with.
3. Confirm or correct this summary, and tell me what you'd like produced from it.

Once you confirm, I'll finalize the response.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-animation · the timeline task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8471 bytes about the same town: the exact length of the hyperframes-animation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Propose a short heading reveal and card entrance for a seekable HyperFrames scene. The preview must support jumping to any time.

What the AI answered

## Proposal: heading reveal and card entrance (about 1.6 s)

**Content (from the supplied facts)**
- Heading: "The Market Town"
- Cards:
  1. **Harbour**: grey stone wall carried down from the quarry by cart.
  2. **Ferry**: crosses the sound twice a day when the weather is calm.
  3. **Market**: cheese, honey, wool and willow baskets.
Read the whole answer
## Proposal: heading reveal and card entrance (about 1.6 s)

**Content (from the supplied facts)**
- Heading: "The Market Town"
- Cards:
  1. **Harbour**: grey stone wall carried down from the quarry by cart.
  2. **Ferry**: crosses the sound twice a day when the weather is calm.
  3. **Market**: cheese, honey, wool and willow baskets.

**Timeline (scene-local seconds)**

| Time | Element | Motion | Ease |
|---|---|---|---|
| 0.00-0.60 | Heading | Wipe reveal with `clip-path: inset(0 100% 0 0)` to `inset(0 0 0 0)`, with y 24 to 0 and opacity 0 to 1 | `power3.out` |
| 0.35-0.80 | Accent rule under heading | `scaleX` 0 to 1, origin left | `power2.out` |
| 0.50-1.10 | Card 1 | y 40 to 0, opacity 0 to 1, scale 0.96 to 1 | `power2.out` |
| 0.62-1.22 | Card 2 | same, offset by 0.12 | `power2.out` |
| 0.74-1.34 | Card 3 | same, offset by 0.24 | `power2.out` |
| 1.34-1.60 | Hold | Nothing moves, so the end state is a clean still | n/a |

**Making it seekable**

The scene should be a pure function of time, so a jump to any timestamp (forward or backward) renders the same frame:

- Build one **paused** timeline and let the preview drive it with `seek(t)` or by setting `time`. Don't let it play on its own clock.
- Use `fromTo` with explicit start and end values for every tween. The state at t=0 is then defined by the timeline and doesn't depend on whatever was rendered before.
- Position every tween with an **absolute time** (`tl.fromTo(el, from, to, 0.5)`), not relative offsets that depend on previous tweens' state.
- Don't use CSS animations or transitions, `setTimeout`, `onComplete` side effects, or `Math.random()`. Any of these breaks scrubbing or makes frames non-reproducible.
- Set the initial hidden state through the timeline's t=0 values, not static CSS alone, so a seek back to 0 restores it.
- Stagger the cards with explicit per-card start times (0.50, 0.62, 0.74) rather than a runtime-computed stagger from DOM order.

**Sketch (pseudo-code, adjust to HyperFrames' actual registration API)**

```js
const tl = gsap.timeline({ paused: true });

tl.fromTo(".heading",
  { clipPath: "inset(0 100% 0 0)", y: 24, opacity: 0 },
  { clipPath: "inset(0 0% 0 0)", y: 0, opacity: 1, duration: 0.6, ease: "power3.out" }, 0);

tl.fromTo(".rule",
  { scaleX: 0, transformOrigin: "left center" },
  { scaleX: 1, duration: 0.45, ease: "power2.out" }, 0.35);

[0.50, 0.62, 0.74].forEach((t, i) => {
  tl.fromTo(`.card-${i + 1}`,
    { y: 40, opacity: 0, scale: 0.96 },
    { y: 0, opacity: 1, scale: 1, duration: 0.6, ease: "power2.out" }, t);
});
```

I haven't checked this against HyperFrames' docs or your project, so the registration step (how the timeline is exposed to the player) is the part to confirm. Say if you want me to look at the repo and wire it in.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-animation · the runtime task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8471 bytes about the same town: the exact length of the hyperframes-animation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. An existing scene uses Lottie; the task is to fix its seek behavior. Which guidance should be consulted, and what property must be checked?

What the AI answered

The supplied facts don't answer this. They are only descriptive passages about a coastal town, harbour, market and countryside, and say nothing about Lottie, seeking, or any project guidance. So I can't name a specific guidance document from them, and I won't invent one.
Read the whole answer
The supplied facts don't answer this. They are only descriptive passages about a coastal town, harbour, market and countryside, and say nothing about Lottie, seeking, or any project guidance. So I can't name a specific guidance document from them, and I won't invent one.

From general knowledge, not from the supplied text, the most likely culprit in Lottie seek bugs is the unit of the seek value, frames versus time. In lottie-web, `goToAndStop(value, isFrame)` treats `value` as milliseconds unless `isFrame` is `true`. Related properties worth checking are the animation's frame rate (`fr`), its in-point (`ip`) and total frames, since seeks that ignore the in-point or assume the wrong frame rate land in the wrong place.

For the authoritative answer, check the Lottie library's own docs for the version the scene uses, plus any in-repo guidance on animation or scene seeking. If you point me to those files, I can read them and give a specific answer.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-animation · the template task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8471 bytes about the same town: the exact length of the hyperframes-animation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A requested scene already matches a complex brand-reveal template. Explain when a blueprint is appropriate and how it differs from atomic rules.

What the AI answered

**Short version:** if a requested scene already matches a complex brand-reveal template, use the blueprint. Atomic rules are for scenes that don't match one.

I only have your premise to go on, with no spec or docs for your system, so this is the general distinction rather than your tool's exact semantics.
Read the whole answer
**Short version:** if a requested scene already matches a complex brand-reveal template, use the blueprint. Atomic rules are for scenes that don't match one.

I only have your premise to go on, with no spec or docs for your system, so this is the general distinction rather than your tool's exact semantics.

**When a blueprint is appropriate**
- The scene is a recognizable, recurring pattern, such as a brand reveal, where the overall shape is already known.
- The parts depend on each other. A brand reveal typically has a build-up, a hold, a logo or name resolve, and a tagline, and their timing, ordering and pacing only make sense together.
- You want consistency and speed. Reusing a vetted template avoids re-deciding the same structural choices each time.
- The request needs only parameterization (brand name, colors, duration, copy), not new structure.

**How it differs from atomic rules**

| | Blueprint | Atomic rules |
|---|---|---|
| Scope | Whole scene or sequence | One narrow constraint or behavior |
| Encodes | Structure, order, relationships between elements | A single independent condition or action |
| Coupling | Parts are designed to work together | Each rule stands alone |
| Customization | Fill in slots and tweak parameters | Compose, add, or remove rules freely |
| Best for | Known, complex patterns | Novel, simple, or highly custom needs |

**Practical rule of thumb**
1. Start with the blueprint when the match is real.
2. Layer a small number of atomic rules on top only for specific deviations, such as a different aspect ratio or a required color constraint.
3. Fall back to atomic rules alone if you find yourself overriding most of the blueprint. At that point the template is a poor fit.

The risk with atomic rules alone for a complex scene is that each rule is locally correct but the combination drifts, with timing or hierarchy that no one rule owns. The risk with a blueprint is rigidity when the scene only superficially resembles the template.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-registry · the block task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9933 bytes about the same town: the exact length of the hyperframes-registry skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A data-chart block declares internal composition id data-chart, size 1920 by 1080, duration 15 seconds. It should begin at host time 2. Write the host element as text.

What the AI answered

```html
<div
  data-composition-id="data-chart"
  data-start="2"
  data-duration="15"
  data-width="1920"
  data-height="1080"
></div>
```

- **Start:** `data-start="2"` places the block at host time 2 s, so it runs from 2 s to 17 s on the host timeline.
- **Attribute names:** you gave the facts but not the host schema, so the names are my best fit for a composition-style host. Rename them if your format differs.
- **Source reference:** if the block's markup lives in a separate file, the host also needs a source attribute such as `data-composition-src="..."`. I left it out because no path was supplied.

That is the whole answer.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-registry · the component task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9933 bytes about the same town: the exact length of the hyperframes-registry skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A grain overlay is installed as a component snippet. Explain how to integrate it into an existing composition, compared with a standalone block.

What the AI answered

The text you supplied has nothing about a grain overlay, a component snippet, or your composition. It is all descriptive prose about a coastal town and moor. So I can't say how your particular snippet works. What follows is general guidance, and you'll need to check it against the snippet's actual code or docs.
Read the whole answer
The text you supplied has nothing about a grain overlay, a component snippet, or your composition. It is all descriptive prose about a coastal town and moor. So I can't say how your particular snippet works. What follows is general guidance, and you'll need to check it against the snippet's actual code or docs.

**Integrating into an existing composition**
- **Layering:** Place the overlay as the topmost sibling inside the composition's root container, or just above the layers you want grained. Give it `position: absolute; inset: 0` so it fills the parent without affecting layout.
- **Pointer events:** Set `pointer-events: none` so it doesn't block clicks or interaction with the content below.
- **Blending and opacity:** Grain usually looks right at low opacity (roughly 3-12%) with a blend mode such as `overlay`, `soft-light`, or `multiply`. Because it blends with what's underneath, the result depends on the existing layers' colors.
- **Stacking context:** Check z-index and any parent `isolation`, `transform`, or `overflow` settings. They can clip the overlay or limit what it blends with.
- **Sizing and timing:** The overlay must match the composition's dimensions and, if the composition is time-based, its duration. If the grain animates, tie its frame or seed to the composition's clock rather than real time, so renders are deterministic.
- **Scope:** Put it inside the specific scene or group if you want grain on only part of the composition, or at the root for a global look.

**Standalone block**
- It owns its own container, size, background, and timing, so you don't need to worry about layering, blend interactions, or inherited styles.
- With nothing underneath, a blend mode has little to act on, so the grain shows up as a plain noise texture. That is useful for previewing or tuning the grain, but it isn't the final look.
- Using it later in another composition means embedding or importing it as a child, which brings you back to the integration steps above.

**Rule of thumb:** use standalone to preview and tune the grain, and integrate as a non-interactive, full-bleed top layer when you want it to affect the finished look.

If you paste the snippet, or tell me which framework the composition uses, I can give exact steps.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-registry · the search task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9933 bytes about the same town: the exact length of the hyperframes-registry skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A brief asks for a shimmer sweep. You have no project or account yet. Explain discovery and installation ordering.

What the AI answered

I can't say what a "shimmer sweep" is. Neither the brief nor the supplied text defines it (the long passage is about a market town and has nothing on the topic). So this is the general ordering, not steps for a specific tool.

**1. Discovery first, with nothing installed or created**
- Pin down what the brief means by "shimmer sweep": the goal, the expected output, and what it runs against. If that's ambiguous, ask the requester before going further.
- Find out whether it needs a project, an account, or neither, and what the tool or service requires (runtime, version, OS, permissions, network access).
- Check read-only what already exists locally, so you don't install something that's already there.
- Identify who owns the decisions: the person who will own the account or project, and which credentials or billing would be involved.
Read the whole answer
I can't say what a "shimmer sweep" is. Neither the brief nor the supplied text defines it (the long passage is about a market town and has nothing on the topic). So this is the general ordering, not steps for a specific tool.

**1. Discovery first, with nothing installed or created**
- Pin down what the brief means by "shimmer sweep": the goal, the expected output, and what it runs against. If that's ambiguous, ask the requester before going further.
- Find out whether it needs a project, an account, or neither, and what the tool or service requires (runtime, version, OS, permissions, network access).
- Check read-only what already exists locally, so you don't install something that's already there.
- Identify who owns the decisions: the person who will own the account or project, and which credentials or billing would be involved.

**2. Decisions that need the user's sign-off**
- Creating an account or project is outward-facing and hard to reverse, so get explicit confirmation before doing it. Approval for one step doesn't cover the next.
- Choose the project location and name, and the scope of the sweep, before anything exists.

**3. Installation, in dependency order**
1. Prerequisites, such as runtime and system packages.
2. The tool itself, pinned to a known version from a trusted source. Downloaded archives go in their own new, empty directory and are treated as untrusted.
3. Project scaffolding, then account authentication and configuration.
4. A dry run or version check to verify the install.

**4. Run the sweep**
- Start with a small or dry-run pass, then the full sweep, and report the real outcome, including any failures.

Discovery has to come first because it determines whether you need an account or project at all, which tool and version to install, and which steps need approval. If you can share the brief's wording or say what the sweep should cover, I can make this concrete.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

design-mobile-apps · the response task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8484 bytes about the same town: the exact length of the design-mobile-apps skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A supplied Sleek request returned HTTP 400 with top-level code INVALID_INPUT, status 400 and message Missing brief. Explain how the caller should read it; do not contact the service.

What the AI answered

**How to read the Sleek 400 response**

- **HTTP 400 / `status: 400`**: The request was malformed or incomplete from the client side. The server understood the request but refused to process it. This is not a server outage, and retrying the identical request will fail the same way.
- **`code: INVALID_INPUT`**: This is the machine-readable error category. It says the problem is with the input you supplied (validation failure), as opposed to authentication, permissions, rate limiting, or a server fault. Callers should branch on this code rather than parsing the message text.
- **`message: "Missing brief"`**: This is the human-readable detail. It says the required `brief` field was absent from the request. Based on the message alone, I can't tell whether the field was omitted entirely, sent under a different name, or sent empty or null, so check the payload for each of those.
Read the whole answer
**How to read the Sleek 400 response**

- **HTTP 400 / `status: 400`**: The request was malformed or incomplete from the client side. The server understood the request but refused to process it. This is not a server outage, and retrying the identical request will fail the same way.
- **`code: INVALID_INPUT`**: This is the machine-readable error category. It says the problem is with the input you supplied (validation failure), as opposed to authentication, permissions, rate limiting, or a server fault. Callers should branch on this code rather than parsing the message text.
- **`message: "Missing brief"`**: This is the human-readable detail. It says the required `brief` field was absent from the request. Based on the message alone, I can't tell whether the field was omitted entirely, sent under a different name, or sent empty or null, so check the payload for each of those.

**What the caller should do**

1. Inspect the request that was sent and confirm a `brief` field is present, spelled exactly that way, at the expected level of the body (not nested wrongly).
2. Confirm it has a non-empty value of the type the API expects (likely a string, but check Sleek's docs).
3. Confirm the body is serialized correctly and the `Content-Type` header matches (for example `application/json`). A body the server fails to parse can look like a missing field.
4. Fix the request and resend. Do not add automatic retries for this error, since it is deterministic.

**Caveat**: I haven't contacted the service or seen the original request or Sleek's documentation, so this interpretation relies only on the supplied status, code, and message.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

design-mobile-apps · the shots task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8484 bytes about the same town: the exact length of the design-mobile-apps skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A designer needs a user-facing phone screenshot and a separate full-height review of a long component. Describe the two screenshot requests conceptually.

What the AI answered

**Request 1: user-facing phone screenshot**

- **Purpose:** show what a person sees on their device, for sharing, documentation, or marketing.
- **Viewport:** a typical phone size in portrait (for example, roughly 390×844 CSS pixels) at a high device pixel ratio (2x or 3x) so text and icons stay sharp.
- **Scope:** only what fits on the first screen, with no scrolling. The capture shows the visible viewport, as it would appear on the device.
- **Content state:** a polished, representative state, with realistic data, no debug overlays, and no loading or error placeholders unless those are the subject.
- **Chrome:** optionally include the status bar, or place the capture inside a device frame, depending on where it will be used.
- **Output:** a single portrait image at the device's aspect ratio.
Read the whole answer
**Request 1: user-facing phone screenshot**

- **Purpose:** show what a person sees on their device, for sharing, documentation, or marketing.
- **Viewport:** a typical phone size in portrait (for example, roughly 390×844 CSS pixels) at a high device pixel ratio (2x or 3x) so text and icons stay sharp.
- **Scope:** only what fits on the first screen, with no scrolling. The capture shows the visible viewport, as it would appear on the device.
- **Content state:** a polished, representative state, with realistic data, no debug overlays, and no loading or error placeholders unless those are the subject.
- **Chrome:** optionally include the status bar, or place the capture inside a device frame, depending on where it will be used.
- **Output:** a single portrait image at the device's aspect ratio.

**Request 2: full-height review of a long component**

- **Purpose:** let the designer inspect the whole component, top to bottom, in one image for spacing, alignment, typography, and consistency.
- **Viewport:** the same phone width (so the layout matches what users get), but the capture extends to the component's full scroll height rather than stopping at the screen edge.
- **Scope:** the entire component, from first to last element. Sticky headers, fixed footers, and lazy-loaded sections need attention so they don't repeat, overlap, or appear blank.
- **Content state:** the same realistic data, with all sections expanded and any lazy content loaded, so nothing is cut off or missing.
- **Annotations:** optional, such as measurements, grid overlays, or section labels, since this image is for internal review and not for users.
- **Output:** one tall, narrow image, possibly split into segments if the height exceeds image-size limits.

**Key differences**

| | Phone screenshot | Full-height review |
|---|---|---|
| Audience | End users, external | Designer, internal |
| Height | Viewport only | Full component |
| Framing | Device-like, polished | Utilitarian, optionally annotated |
| Goal | Show the experience | Verify the details |

Keeping them as two separate requests avoids compromises: the first stays clean and realistic, and the second stays complete and inspectable.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

design-mobile-apps · the ids task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8484 bytes about the same town: the exact length of the design-mobile-apps skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A supplied response contains projectId and screenId, both opaque 11-character identifiers. Explain how to retain their types when planning a screen update.

What the AI answered

Treat both IDs as opaque, exact-value strings, and keep them as two distinct types throughout the plan.

**1. Keep them as strings, never numbers.**
- Even if an ID looks numeric (say, it has leading zeros or only digits), don't coerce it. Coercion drops leading zeros, rounds large values, or changes formatting.
- Don't trim, lowercase, uppercase, re-encode, or reformat them. Case and every character matter.
Read the whole answer
Treat both IDs as opaque, exact-value strings, and keep them as two distinct types throughout the plan.

**1. Keep them as strings, never numbers.**
- Even if an ID looks numeric (say, it has leading zeros or only digits), don't coerce it. Coercion drops leading zeros, rounds large values, or changes formatting.
- Don't trim, lowercase, uppercase, re-encode, or reformat them. Case and every character matter.

**2. Don't parse or infer meaning.**
- Don't split them, extract prefixes, or guess that one is derived from the other.
- The only safe check is shape: a string of exactly 11 characters. Don't validate beyond what's known, since the character set hasn't been specified.

**3. Keep `projectId` and `screenId` as separate types.**
- Both are 11-character strings, so they're structurally identical and easy to swap by accident.
- Use branded or newtype wrappers (e.g. `ProjectId` and `ScreenId` in TypeScript, `NewType` in Python, or distinct structs in Rust or Go). The compiler or type checker then rejects passing one where the other is expected.
- At runtime, keep them under separate, explicit field names (`projectId`, `screenId`) and never as positional or anonymous values.

**4. Copy values verbatim from the response into the plan.**
- Take them directly from the supplied response and carry them unchanged through each step: lookup, diff, update request, and verification.
- Avoid retyping or paraphrasing them, which risks transcription errors.

**5. Make the plan check identity, not content.**
- Key every step on the `(projectId, screenId)` pair. A screen ID alone may not be unique across projects, since you can't assume that.
- After the update, compare the returned IDs to the originals by exact string equality to confirm the same screen was modified.

**6. Keep serialization lossless.**
- Use JSON strings (quoted) for both IDs in any payload or plan output. Don't let a serializer, spreadsheet, or config format reinterpret them, for example YAML turning an ID into a number or boolean. Quote them explicitly.

I don't see an actual response with these IDs in this conversation, so I can't point to specific values. If you paste it, I can lay out the plan with the IDs preserved exactly.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-core · the root task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 12933 bytes about the same town: the exact length of the hyperframes-core skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Review this standalone composition skeleton: a root div with data-composition-id title sits inside a template in body. The timeline is registered under outro. Name the corrections.

What the AI answered

Two corrections, both from what you described:

1. **Remove the `<template>` wrapper.** A standalone composition's root `div` should sit directly in `<body>`. Content inside a `<template>` is inert, so it never renders or gets picked up. The template wrapper is for sub-compositions that another composition loads in.
Read the whole answer
Two corrections, both from what you described:

1. **Remove the `<template>` wrapper.** A standalone composition's root `div` should sit directly in `<body>`. Content inside a `<template>` is inert, so it never renders or gets picked up. The template wrapper is for sub-compositions that another composition loads in.

2. **Make the IDs match.** The root's `data-composition-id` is `title`, but the timeline is registered under `outro`, so the runtime can't connect them. Either register the timeline as `window.__timelines["title"]`, or change the root to `data-composition-id="outro"`. Choose whichever name describes the content. A composition called `title` with an `outro` timeline suggests one of the names is a leftover.

If you're using HyperFrames-style conventions, also check that the root has `data-width`, `data-height` and `data-start`, and that the timeline is created paused. I can't confirm those from what you gave me, so verify them against your framework's docs.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-core · the transform task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 12933 bytes about the same town: the exact length of the hyperframes-core skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A centered heading has transform translate(-50%,-50%) and a GSAP x/y animation. Propose a correction that preserves centering and deterministic animation.

What the AI answered

**Cause:** GSAP writes its x/y animation to the element's inline `transform` (as `translate(x, y)`), which overwrites the CSS `transform: translate(-50%, -50%)`. The centering is lost the moment the tween starts, so the heading jumps.

**Fix: let GSAP own the centering.** Remove the CSS transform and use `xPercent`/`yPercent`, which GSAP composes with `x`/`y` in a single transform matrix.
Read the whole answer
**Cause:** GSAP writes its x/y animation to the element's inline `transform` (as `translate(x, y)`), which overwrites the CSS `transform: translate(-50%, -50%)`. The centering is lost the moment the tween starts, so the heading jumps.

**Fix: let GSAP own the centering.** Remove the CSS transform and use `xPercent`/`yPercent`, which GSAP composes with `x`/`y` in a single transform matrix.

```css
.heading {
  position: absolute;
  top: 50%;
  left: 50%;
  /* no transform here */
}
```

```js
// Set centering once, before any tween
gsap.set(".heading", { xPercent: -50, yPercent: -50 });

// Animate x/y freely; the -50% offsets are preserved
gsap.to(".heading", { x: 100, y: 40, duration: 1, ease: "power2.out" });
```

Or, in one call with `fromTo`:

```js
gsap.fromTo(".heading",
  { xPercent: -50, yPercent: -50, x: 0, y: 0 },
  { x: 100, y: 40, duration: 1 }
);
```

**Why this is deterministic:**
- GSAP tracks `xPercent`, `yPercent`, `x`, and `y` as separate values and builds the final transform from all of them, so nothing is clobbered between ticks.
- The starting state is explicit (`gsap.set` or the `fromTo` from-values), so it doesn't depend on parsing a CSS transform or on layout timing.
- Percent offsets are resolved against the element's own size, so the result is the same as CSS `translate(-50%, -50%)`.

**Alternatives if you must keep CSS centering:**
- Use `translate: -50% -50%` (the individual CSS property) instead of `transform`. It composes with GSAP's `transform` writes, though browser support and GSAP's handling of it should be verified for your target browsers.
- Or center with flexbox/grid on a wrapper (`display: grid; place-items: center`) and animate only `x`/`y` on the heading, so no translate-based centering is needed at all.

**Pitfalls to avoid:**
- Don't mix a CSS `transform` with GSAP transform properties on the same element.
- Avoid `gsap.set` for `xPercent`/`yPercent` after a tween has already run, since it can cause a visible jump. Set it once up front.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 017 · answered by Claude Sonnet 5.5

hyperframes-core · the exit task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 12933 bytes about the same town: the exact length of the hyperframes-core skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A timed clip is hidden by a timeline visibility set at its end. Later seeking backward leaves it hidden. Explain the ownership problem and fix.

What the AI answered

## The ownership problem

Two things write the clip's visibility, and neither is responsible for undoing it.

- The clip has its own timed lifecycle: it shows at its start and runs for its duration.
- The timeline sets `visibility = hidden` at the clip's end, as a one-way event side effect.
Read the whole answer
## The ownership problem

Two things write the clip's visibility, and neither is responsible for undoing it.

- The clip has its own timed lifecycle: it shows at its start and runs for its duration.
- The timeline sets `visibility = hidden` at the clip's end, as a one-way event side effect.

Seeking backward doesn't replay events in reverse. The end-of-clip "hide" already fired, and nothing fires on a backward crossing to say "show again". The clip's own start logic only runs on a forward pass, so the hidden flag stays stuck. The visibility is stored state mutated by whichever event fired last, rather than something derived from the playhead.

## The fix

Give visibility a single owner and make it a function of time, not of events.

1. **Preferred: derive it from the playhead.** On every time update, including seeks, compute `visible = start <= t < end`. Apply that value to the clip and remove the separate "hide at end" write. Any seek, forward or backward, then lands on the correct state.

2. **If the timeline must own it:** make the end-of-clip hide a reversible part of the timeline itself, so that scrubbing backward past that point restores the previous value. The clip should not also set visibility on its own.

Either way, there is one writer, and the state is recomputed or reversed on seek rather than left as a leftover from the last event.

From Report 017. Each skill had three text tasks, written by Driftproof. The answers came from Claude Sonnet 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveat: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.”

Report 018 · answered by Claude Haiku 5.5

find-skills · the search task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 5472 bytes about the same town: the exact length of the find-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I need a skill for React performance work. Supplied candidates: vercel-labs/agent-skills@react-best-practices, 1200 installs, repository 800 stars; unknown/demo@react-speed, 12 installs, 3 stars. Recommend a candidate and show the proposed install command, without installing.

What the AI answered

**Recommendation: `vercel-labs/agent-skills@react-best-practices`**

It has far more installs (1,200 vs. 12) and stars (800 vs. 3). The supplied facts don't say what either skill covers in detail, so the popularity numbers are the main basis for this choice. Check its contents before relying on it for performance work.
Read the whole answer
**Recommendation: `vercel-labs/agent-skills@react-best-practices`**

It has far more installs (1,200 vs. 12) and stars (800 vs. 3). The supplied facts don't say what either skill covers in detail, so the popularity numbers are the main basis for this choice. Check its contents before relying on it for performance work.

**Proposed install command (not run):**

```
npx skills add vercel-labs/agent-skills@react-best-practices
```

Nothing has been installed, and no tools, network access, or commands were used.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

find-skills · the missing task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 5472 bytes about the same town: the exact length of the find-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I need a skill for reconciling our custom loom inspection format. The supplied search result is empty. Explain the next step.

What the AI answered

I can't build the reconciliation skill yet. The supplied material doesn't contain anything about your loom inspection format. It's a long block of descriptive text about a coastal village: the bridge, the orchard, the market, the ferry, and the lighthouse. The search result you mentioned is empty.
Read the whole answer
I can't build the reconciliation skill yet. The supplied material doesn't contain anything about your loom inspection format. It's a long block of descriptive text about a coastal village: the bridge, the orchard, the market, the ferry, and the lighthouse. The search result you mentioned is empty.

The next step is to send the inspection format itself. Please paste one of these:

- The format specification or template, with its field names, types, and allowed values.
- One or two completed inspection records, so I can see the actual structure.
- The records or source data the format should reconcile against, if that's a separate system.

It would also help to say what "reconcile" means for you, such as matching inspections to a loom inventory, flagging missing or duplicate entries, or checking values against tolerances.

Once I have those, I can write the skill from the format you provide.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

find-skills · the scope task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 5472 bytes about the same town: the exact length of the find-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I want help with testing. Before recommending a package, give the next question and one provisional search query. Nothing is known about language or test type.

What the AI answered

I can't tell what you want to test yet. The text you pasted is a long run of village and landscape sentences, with no code, errors, or requirements in it.

**Next question:** What are you testing: a function, module, API, UI, or something else, and in what language or framework?
Read the whole answer
I can't tell what you want to test yet. The text you pasted is a long run of village and landscape sentences, with no code, errors, or requirements in it.

**Next question:** What are you testing: a function, module, API, UI, or something else, and in what language or framework?

**Provisional search query:** `unit testing framework comparison`

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grill-me · the plan task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 157 bytes about the same town: the exact length of the grill-me skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Stress-test this plan in your first written interview round: replace all scheduled billing jobs with events next week. Duplicate handling, rollback and the migration budget are undecided.

What the AI answered

# Interview Round 1: Scheduled Billing Jobs to Event-Driven

The plan is to replace all scheduled billing jobs with event-driven processing next week. Three items are undecided: duplicate handling, rollback, and the migration budget. Each one can break the cutover, so I've started with them.
Read the whole answer
# Interview Round 1: Scheduled Billing Jobs to Event-Driven

The plan is to replace all scheduled billing jobs with event-driven processing next week. Three items are undecided: duplicate handling, rollback, and the migration budget. Each one can break the cutover, so I've started with them.

## 1. Duplicate handling
- Events can be delivered more than once. What is the idempotency key for each billing action, and where is it stored?
- If a charge event is processed twice, what prevents a double charge? Is there a dedup window, and what happens when it expires?
- During the overlap, when old scheduled jobs and new event consumers both run, what stops them from billing the same customer for the same period?
- Could an event arrive out of order, for example a cancellation before the renewal it cancels? What is the expected result?

## 2. Rollback
- If the event pipeline fails mid-cycle, how do you return to scheduled jobs? Is the old job still deployable, and has it been tested against current data?
- Which side is the source of truth during rollback? Can events already processed be reconciled against the scheduled path?
- What is the rollback trigger? Who decides, and how fast must the decision be made, given that billing errors are usually found after the fact?
- Can rollback be done without refunds or manual corrections? If not, what is the cost ceiling?

## 3. Migration budget
- The budget is undecided. What is the minimum needed to run both paths in parallel, and for how long?
- Who owns the decision, and what happens if the budget is cut partway through?
- What is the cost of a billing error during migration compared with the cost of keeping the old jobs running longer?

## 4. Scope and timing (not yet discussed, but it affects the three above)
- "All scheduled billing jobs" in one week leaves little room for parallel runs. Is the week for the full cutover or only the first batch?
- Which jobs carry the most financial risk? Should they move last, once the pattern is proven on lower-risk jobs?
- Is there a freeze on billing-logic changes that could collide with this week?

## What I need to continue
Please answer the open questions in section 1 first, because the other answers depend on the idempotency design. If the answer is "not yet decided," then next week's cutover should wait, since the plan can't be validated without it.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grill-me · the constraint task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 157 bytes about the same town: the exact length of the grill-me skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Interview me about migrating a read-only dashboard. Facts: queries are slow; caching policy is unset; the database cannot change. Ask only questions whose answers do not depend on other unanswered choices.

What the AI answered

Here are the questions I can ask now without depending on answers you haven't given yet:

1. How many people use the dashboard, and how many load it at the same time at peak?
2. What is the slowest query's current response time, and what response time would count as acceptable?
3. How stale can the displayed data be before it stops being useful? Give an answer in minutes or hours.
4. Do any users see different data because of their permissions or account, or does every user see the same results?
5. What runtime or hosting does the dashboard run on today?
6. Is there a deadline for the migration, and if so, what is it?

That is the whole answer.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grill-me · the followup task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 157 bytes about the same town: the exact length of the grill-me skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Continue the interview. We already agreed on a weekly digest, an opt-in audience and a 24-hour rollback window. Delivery channel is undecided; provider selection depends on the channel.

What the AI answered

Got it: weekly digest, opt-in audience, 24-hour rollback window. Next is the delivery channel.

**Question 1: Which channel should carry the digest?** Options so far include email, in-app, and push. Which one (or which combination) fits your audience best?
Read the whole answer
Got it: weekly digest, opt-in audience, 24-hour rollback window. Next is the delivery channel.

**Question 1: Which channel should carry the digest?** Options so far include email, in-app, and push. Which one (or which combination) fits your audience best?

**Question 2: How does the 24-hour rollback window apply to the channel you pick?** Once a message is sent, it generally can't be recalled. For email, Slack, or SMS, the rollback would probably have to cover the period between when a digest is scheduled or queued and when it goes out. For in-app content, it could cover the published version itself. Which of these did you mean?

Your answers will narrow the provider choice, so I'll hold that decision until the channel is settled.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grill-with-docs · the decision task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 247 bytes about the same town: the exact length of the grill-with-docs skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Interview me about a reservation design and propose documentation to preserve decisions. Facts: a hold lasts 10 minutes; capture happens only at confirmation. The term booking is currently used for both a hold and a confirmed reservation.

What the AI answered

Here's the first thing I'd pin down: "booking" currently covers both a 10-minute hold and a confirmed reservation, and those have different lifecycles. A hold expires, and capture happens only at confirmation. Until the two terms are separate, code, tests, and conversations will keep mixing them up.
Read the whole answer
Here's the first thing I'd pin down: "booking" currently covers both a 10-minute hold and a confirmed reservation, and those have different lifecycles. A hold expires, and capture happens only at confirmation. Until the two terms are separate, code, tests, and conversations will keep mixing them up.

## Interview questions

**Terminology**
1. What should we call the 10-minute state: "hold," "pending," or something else? Does anyone outside engineering see this term?
2. What should we call the confirmed state? Is "booking" the right word for it, or should "booking" be retired?
3. Are there other states (for example, cancelled, expired, or no-show) that people currently describe as "booking"?

**Hold lifecycle**
4. When the 10 minutes run out, what happens to the held inventory? Is it released immediately, or is there a grace period?
5. Can a hold be extended, for example if the customer is still on the payment page? If so, does an extension count against any limit?
6. Can one customer hold more than one slot at a time? Can one hold cover several items?
7. What does the customer see when a hold expires during checkout? Is the message different from a payment failure?

**Confirmation and capture**
8. What event triggers capture: an explicit customer action, a successful authorization, or something else?
9. If confirmation fails after the hold has been accepted, what state should the reservation be in, and who can retry?
10. Is there any case where capture happens without confirmation, such as a fallback or a manual override? If so, is that intended?

**Ownership and audit**
11. Who can change a hold or a confirmed reservation: the customer, support staff, or only the system?
12. Which events need an audit trail (creation, expiry, confirmation, cancellation)?

## Proposed documentation

1. **Glossary (one page).** Define *hold*, *confirmed reservation*, and *capture*. Mark "booking" as deprecated and note which term replaces it in each context. This comes first because every other document depends on it.
2. **State diagram.** Show the transitions between hold, expired, confirmed, captured, and cancelled. Label each transition with its trigger. Mark the 10-minute expiry and the capture-at-confirmation rule explicitly.
3. **Decision record for the hold window.** Record the 10-minute duration, the reason for it, and the conditions under which it would change (for example, extensions or different limits).
4. **Decision record for capture timing.** Record that capture happens only at confirmation, the reasons for that choice, and what happens on failure. This matters most for anyone reviewing payment behavior later.
5. **Migration note.** List each place where "booking" appears in code, APIs, UI, and reports, and mark whether it refers to a hold or a confirmed reservation. This is the work that prevents silent errors during the rename.

If you answer the questions in the first two groups (terminology and hold lifecycle), I can draft the glossary and state diagram text next.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grill-with-docs · the adr task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 247 bytes about the same town: the exact length of the grill-with-docs skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. We settled that cancelled reservations stay as tombstones because audit exports reference them. Write the short decision note you would preserve and one remaining question about retention.

What the AI answered

**Decision note: cancelled reservations are retained as tombstones**

Cancelled reservations are kept as tombstone records and are not hard-deleted. Audit exports reference these records, so removing them would break those references and the audit trail.
Read the whole answer
**Decision note: cancelled reservations are retained as tombstones**

Cancelled reservations are kept as tombstone records and are not hard-deleted. Audit exports reference these records, so removing them would break those references and the audit trail.

**Open question on retention:** How long must tombstoned reservations be kept, and when can they be purged? That depends on the audit requirements that apply to the exports, which the supplied facts do not specify.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grill-with-docs · the revision task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 247 bytes about the same town: the exact length of the grill-with-docs skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A prior note says holds expire after 10 minutes. I now propose 30 minutes to help slow checkouts, but have not accepted the capacity tradeoff. Give a written interview response and the status you would put on the proposed note.

What the AI answered

**Written response**

Thanks for proposing a 30-minute hold to address slow checkouts. The goal is sound, and I want to solve it. I have not accepted the capacity tradeoff, though. Holds lasting three times longer will tie up inventory for longer, so I need to see the effect on available capacity before I agree. Until then, the current 10-minute expiry stays in place. I'm happy to review the capacity numbers, or to test a longer window for a limited group, before we decide.
Read the whole answer
**Written response**

Thanks for proposing a 30-minute hold to address slow checkouts. The goal is sound, and I want to solve it. I have not accepted the capacity tradeoff, though. Holds lasting three times longer will tie up inventory for longer, so I need to see the effect on available capacity before I agree. Until then, the current 10-minute expiry stays in place. I'm happy to review the capacity numbers, or to test a longer window for a limited group, before we decide.

**Status for the proposed note**

Proposed: 30-minute hold expiry. Not accepted. Current policy remains 10-minute expiry. Decision pending review of the capacity tradeoff.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

agent-browser · the web task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3457 bytes about the same town: the exact length of the agent-browser skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Plan a browser workflow to inspect a checkout form and identify its Submit button. The CLI is installed but its workflow guide has not been loaded. Give the next read-only steps, not invented element references.

What the AI answered

I haven't loaded the CLI's browser workflow guide, so I can't give exact commands. These are the read-only steps I'd follow once the guide is loaded:

1. **Confirm the target.** Get the checkout URL from the user and confirm it's a page they're authorized to inspect. Don't submit anything on it.
Read the whole answer
I haven't loaded the CLI's browser workflow guide, so I can't give exact commands. These are the read-only steps I'd follow once the guide is loaded:

1. **Confirm the target.** Get the checkout URL from the user and confirm it's a page they're authorized to inspect. Don't submit anything on it.

2. **Open the page without interacting.** Navigate to the URL and wait for it to finish loading, including any scripts that render the form.

3. **Take a read-only snapshot.** Capture the page's accessibility tree or DOM, not a screenshot alone. The snapshot should list the form, its fields, and every button, with each element's role, label, and attributes.

4. **Locate candidate Submit buttons.** Look for elements that are `button` or `input[type=submit]`, or that have a role of `button`, inside or near the `<form>` element. Matching clues are text such as "Submit", "Place order", "Pay", or "Continue", and `type="submit"` or a form-association attribute. Record every candidate, not just the first.

5. **Check the form's context.** For each candidate, note whether it sits inside the `<form>`, its `form` attribute if it's outside, and whether the form's `action` and `method` look normal. Also note whether it's disabled or hidden.

6. **Disambiguate.** If there's more than one candidate, such as a "Continue" step and a final "Place order," rank them by position in the flow and by label. Report the uncertainty instead of picking silently.

7. **Report findings.** Give the user the candidate list with each element's text, type, and location, plus the reasoning for the best match. Say which steps were not run, such as clicking or submitting.

Constraints: no clicks, typing, form submission, or network requests beyond loading the page. I haven't identified any actual element references, because I haven't inspected the page. Once the guide is loaded and you give me the URL, I can check the exact tool names and run the read-only steps.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

agent-browser · the desktop task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3457 bytes about the same town: the exact length of the agent-browser skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. I want to inspect an Electron desktop application with agent-browser. The installed CLI can serve its guides. Explain which guide you would consult and what evidence you need before interacting.

What the AI answered

I can't name the guide. The facts I have don't mention agent-browser, its guides, or Electron-specific documentation, and I can't run the CLI to list them. So I won't guess a guide name.

Before interacting with the Electron app, I would need:
Read the whole answer
I can't name the guide. The facts I have don't mention agent-browser, its guides, or Electron-specific documentation, and I can't run the CLI to list them. So I won't guess a guide name.

Before interacting with the Electron app, I would need:

1. **The guide's contents.** Once the CLI serves the guide, I would read its Electron section for the supported launch method, required flags or debugging ports, and how it expects you to attach to the running app.
2. **The app's identity and provenance.** The working directory `/tmp/driftproof-eval.lIHxq1K4` is a temporary location, and the environment rules treat downloaded or extracted files as untrusted. I'd want to know where the app build came from and confirm it's the one you intend to inspect. I'd also keep it in its own directory and pass its path as an argument, not run it from inside that directory.
3. **Your authorization for the target.** Inspecting a local app you own or have permission to test is fine. I'd confirm that before launching it or sending it any input.
4. **Which actions are allowed.** I'd want your confirmation on whether inspection should be read-only (view the DOM, take snapshots) or whether it may click, type, or change app state.

If you run `agent-browser` help or list its guides and paste the output here, I can work from that. Or you can lift the Electron guide's text into your message, and I'll check the steps against the four points above.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

agent-browser · the dashboard task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3457 bytes about the same town: the exact length of the agent-browser skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A browser dashboard is exposed through a forwarded origin. Its session tab links appear to point at an internal session port. Explain which address the operator should stay on and why.

What the AI answered

The supplied facts don't include the actual addresses, so I can't name the exact URLs. Based on the setup you described, the operator should stay on the **forwarded origin**, the address they used to open the dashboard, and not follow the session tab links to the internal session port.
Read the whole answer
The supplied facts don't include the actual addresses, so I can't name the exact URLs. Based on the setup you described, the operator should stay on the **forwarded origin**, the address they used to open the dashboard, and not follow the session tab links to the internal session port.

The reasons:

- **The forwarded origin is the intended entry point.** The forwarder is what makes the dashboard reachable from outside, so it's the address that's meant to work.
- **The internal port is probably not reachable from the operator's side.** Links to it will likely fail, or succeed only from inside the network, which is the point of keeping it internal.
- **Following those links can bypass the forwarder's controls.** Any authentication, TLS, or access rules applied at the forwarded origin may not apply to the internal port.
- **Session links can break the dashboard's origin handling.** Cookies and CORS are usually scoped to the origin the page was loaded from, so a jump to a different host or port can cause sessions to drop or requests to be rejected.

The rest of the message was unrelated village text, so I've left it out. If you can share the two actual addresses, I can say which one is which.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

improve-codebase-architecture · the candidate task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6000 bytes about the same town: the exact length of the improve-codebase-architecture skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Review this architecture description: OrderController calls ValidateOrder, which forwards every argument unchanged to OrderRules. Only OrderRules contains validation logic. The last five changes touched validation. Suggest one deepening candidate, without implementing it.

What the AI answered

**Candidate: collapse `ValidateOrder` into `OrderRules` behind one entry point.**

`ValidateOrder` is a pass-through. It forwards every argument unchanged, so the interface callers see is no simpler than the one it wraps, and a change to validation still touches both modules. The last five changes all touched validation, so this extra layer is paid on every change.
Read the whole answer
**Candidate: collapse `ValidateOrder` into `OrderRules` behind one entry point.**

`ValidateOrder` is a pass-through. It forwards every argument unchanged, so the interface callers see is no simpler than the one it wraps, and a change to validation still touches both modules. The last five changes all touched validation, so this extra layer is paid on every change.

The deepening would make `OrderRules` the single validation seam: `OrderController` calls one small validate method on it, and the individual rules stay internal. Callers then depend on a narrow interface while the rule logic, which is where the churn is, sits behind it. The description doesn't say whether `ValidateOrder` has any other role, such as logging or error mapping, so that should be confirmed before removing it.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

improve-codebase-architecture · the adr task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6000 bytes about the same town: the exact length of the improve-codebase-architecture skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Glossary calls the concept Reservation. An accepted ADR keeps payment separate to support two processors. A proposed review merges everything into BookingService. Write a review response.

What the AI answered

**Review response: merging payment into BookingService**

Thanks for the proposal. I recommend we don't merge payment into `BookingService`, because it conflicts with the accepted ADR. That ADR keeps payment separate so we can support two processors. Folding payment into `BookingService` would tie booking logic to one processor and make the second harder to add.
Read the whole answer
**Review response: merging payment into BookingService**

Thanks for the proposal. I recommend we don't merge payment into `BookingService`, because it conflicts with the accepted ADR. That ADR keeps payment separate so we can support two processors. Folding payment into `BookingService` would tie booking logic to one processor and make the second harder to add.

The proposal also doesn't match our glossary, which calls the concept **Reservation**. If the booking code is organized around Reservation, the naming should follow that term.

Suggested direction:
- Keep `BookingService` focused on Reservation lifecycle (create, confirm, cancel).
- Keep payment behind its own interface, with one adapter per processor, as the ADR specifies.
- Have `BookingService` call the payment interface rather than any processor directly.

If the goal of this change is to reduce the number of moving parts, I'm happy to look at which payment calls can be simplified within the separated design. Otherwise, I'd ask that this PR be reworked to follow the ADR before we review the rest.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

improve-codebase-architecture · the report task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6000 bytes about the same town: the exact length of the improve-codebase-architecture skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Provide the text outline for a review card about a shallow ShippingFacade that exposes every CarrierClient method. There are two real carriers. Include what the user should decide next.

What the AI answered

**Review card: Shallow ShippingFacade**

**Title:** ShippingFacade is a shallow pass-through over CarrierClient

**Summary**
- ShippingFacade exposes every CarrierClient method.
- The facade adds no simplification, coordination, or shared behavior over the carrier clients.
- Callers that use the facade must still know the carrier-level operations.
Read the whole answer
**Review card: Shallow ShippingFacade**

**Title:** ShippingFacade is a shallow pass-through over CarrierClient

**Summary**
- ShippingFacade exposes every CarrierClient method.
- The facade adds no simplification, coordination, or shared behavior over the carrier clients.
- Callers that use the facade must still know the carrier-level operations.

**Context**
- There are two real carriers, each with its own CarrierClient.
- The facade sits between callers and those carrier clients.

**Why it matters**
- A facade is meant to hide complexity. Here it mirrors the interface it wraps, so it adds a layer without reducing what callers need to understand.
- Any change to CarrierClient methods must be mirrored in the facade, which doubles the places to update.

**Risk**
- Low immediate risk, since behavior is unchanged.
- Ongoing maintenance cost and a misleading abstraction for new readers.

**Decision needed next**
1. **Keep the facade as-is** and accept it as a thin delegation layer, if callers only need carrier-level access.
2. **Deepen the facade** by replacing pass-through methods with shipping-level operations that hide carrier differences, if callers should not need to know which carrier is used.
3. **Remove the facade** and let callers use CarrierClient directly, if the extra layer serves no current purpose.

**Recommendation to weigh**
Decide first how many callers depend on the facade and whether they need carrier-specific behavior. With only two carriers, option 2 or 3 is usually more useful than keeping a mirror of the full interface.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

tdd · the test task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3629 bytes about the same town: the exact length of the tdd skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The agreed public seam is reserve(stock, amount), returning remaining stock. For stock 4 and amount 2, the required result is 2. Draft the first test and the next step in a test-first cycle.

What the AI answered

**First test (red):**

```python
def test_reserve_returns_remaining_stock():
    assert reserve(4, 2) == 2
```

I've assumed Python with pytest because the language wasn't specified. The test uses only the agreed seam, `reserve(stock, amount)`, and the example you gave.
Read the whole answer
**First test (red):**

```python
def test_reserve_returns_remaining_stock():
    assert reserve(4, 2) == 2
```

I've assumed Python with pytest because the language wasn't specified. The test uses only the agreed seam, `reserve(stock, amount)`, and the example you gave.

**Next step:** Run the test and confirm it fails, because `reserve` doesn't exist yet. A `NameError` or import failure counts as the expected red. Don't write `reserve` until you've seen that failure.

Once the test is red, the next change is the smallest implementation that makes it pass:

```python
def reserve(stock, amount):
    return stock - amount
```

After that, run the test again to confirm it's green. Any refactoring comes after that, with the test still passing.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

tdd · the coupling task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3629 bytes about the same town: the exact length of the tdd skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Review this test idea: spy on a private normalizeCart helper and assert it is called once, then assert total equals items.reduce with the production formula. The public requirement is a two-item order totaling 15.

What the AI answered

The idea tests implementation details instead of the requirement, so I'd reject it as written.

**Problems:**

- **Spying on a private helper couples the test to internals.** Renaming, inlining, or splitting `normalizeCart` breaks the test even when the public behavior is correct. The "called once" assertion also checks how many times the code runs, which the requirement never mentions.
- **`total equals items.reduce(...production formula...)` is circular.** It recomputes the answer with the same logic the code uses, so it passes if that logic is wrong. If the formula has a bug, the test copies the bug and still passes.
Read the whole answer
The idea tests implementation details instead of the requirement, so I'd reject it as written.

**Problems:**

- **Spying on a private helper couples the test to internals.** Renaming, inlining, or splitting `normalizeCart` breaks the test even when the public behavior is correct. The "called once" assertion also checks how many times the code runs, which the requirement never mentions.
- **`total equals items.reduce(...production formula...)` is circular.** It recomputes the answer with the same logic the code uses, so it passes if that logic is wrong. If the formula has a bug, the test copies the bug and still passes.

**Better version:**

- Build a two-item order through the public API whose items sum to 15, for example prices 6 and 9.
- Assert the returned total is the literal `15`.
- Drop the spy and the reduce check entirely.

The literal expected value is what makes the test meaningful. It fails if the total is wrong, whatever the internals do. If you want more coverage, add public-behavior cases such as an empty cart, quantities greater than one, or rounding, each with a hard-coded expected value.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

tdd · the agreement task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 3629 bytes about the same town: the exact length of the tdd skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A teammate asks you to test all billing internals before a new refund feature. No public test seam has been agreed. Explain the next action and one proposed seam with its limits.

What the AI answered

**Next action:** Don't try to test all billing internals before the refund feature. Agree on a narrower scope with your teammate first, limited to the billing behavior refunds depend on: the record of a completed charge, the amount that remains refundable, and the state an invoice moves into after a refund. Once that scope is agreed, write characterization tests for those paths before any refund code changes. This pins down current behavior so the refund work can't silently break it.
Read the whole answer
**Next action:** Don't try to test all billing internals before the refund feature. Agree on a narrower scope with your teammate first, limited to the billing behavior refunds depend on: the record of a completed charge, the amount that remains refundable, and the state an invoice moves into after a refund. Once that scope is agreed, write characterization tests for those paths before any refund code changes. This pins down current behavior so the refund work can't silently break it.

**Proposed seam:** a single billing service entry point, such as a facade over charge creation and invoice updates, that takes its payment provider and clock as injected dependencies. Tests would call the facade with a fake provider that returns scripted success and failure responses, and assert on the resulting charge and invoice records.

**Limits:**
- It only covers code that routes through the facade. Direct database writes, background jobs, and any internals that bypass it stay untested.
- The fake provider can diverge from the real one, so provider-specific behavior such as partial captures, currency handling, and webhook timing won't be caught here.
- Ledger rounding and transaction isolation are outside this seam and need separate integration tests against a real database.
- Calling the facade a "public seam" makes it a contract. Your team should agree on that before anyone builds on it.

I haven't inspected the repository, so I can't yet confirm that a facade like this exists or where it lives. Confirming that is the first step once the scope is agreed.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-cli · the loop task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 25989 bytes about the same town: the exact length of the hyperframes-cli skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A HyperFrames project needs a headline reveal. No registry search has been done. Draft the command sequence from discovery to final validation and preview; rendering has not been approved.

What the AI answered

I can't draft a verified command sequence from here. The supplied facts cover only the environment (a git repo at /tmp/driftproof-eval.BiYBNJZ6 on Linux with bash, clean status, branch HEAD, main as the main branch) and the project need (a headline reveal). They include no HyperFrames documentation, CLI commands, project layout, or registry details. Since no registry search has been done, I also can't confirm which HyperFrames tooling is available or what its commands are.
Read the whole answer
I can't draft a verified command sequence from here. The supplied facts cover only the environment (a git repo at /tmp/driftproof-eval.BiYBNJZ6 on Linux with bash, clean status, branch HEAD, main as the main branch) and the project need (a headline reveal). They include no HyperFrames documentation, CLI commands, project layout, or registry details. Since no registry search has been done, I also can't confirm which HyperFrames tooling is available or what its commands are.

Here is the outline I can give without guessing at specific commands:

1. **Discovery:** Confirm the HyperFrames project's structure and the tooling it requires. This requires the project files or docs, which weren't provided.
2. **Scaffold the headline reveal:** Add the headline reveal component or composition, once the framework's conventions are known.
3. **Validation:** Run the project's own validation or lint step, if one exists, to check the composition without rendering.
4. **Preview:** Start a preview of the composition. This step doesn't render output files.

Rendering is excluded, as you specified. To turn this into exact commands, I need one of the following:

- The HyperFrames docs or the `package.json`/config from the project, or
- Permission to search the registry or docs myself, which you have so far withheld.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-cli · the timeline task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 25989 bytes about the same town: the exact length of the hyperframes-cli skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A nested scene has local start 2 seconds and is mounted at main time 12 seconds. I want to find which file owns the visible clip at main time 14. Explain how to inspect this with the CLI.

What the AI answered

**Answer:** The visible clip at main time 14 s is at **4 s local time** inside the nested scene. The file that owns it isn't in the facts you gave me, so I can't name it yet.

**The calculation:** The nested scene is mounted at main time 12 s, so main time 14 s is 2 s after mount. Its local start is 2 s, which puts the playhead at local 2 + 2 = 4 s. This assumes "local start" is an offset added to the scene's own timeline. If your project defines it differently, the local time changes.
Read the whole answer
**Answer:** The visible clip at main time 14 s is at **4 s local time** inside the nested scene. The file that owns it isn't in the facts you gave me, so I can't name it yet.

**The calculation:** The nested scene is mounted at main time 12 s, so main time 14 s is 2 s after mount. Its local start is 2 s, which puts the playhead at local 2 + 2 = 4 s. This assumes "local start" is an offset added to the scene's own timeline. If your project defines it differently, the local time changes.

**How to find the owning file yourself:** I haven't run anything, so these are commands for you to try. I don't know your project's tooling, so adjust the search patterns to match its naming.

1. Find where the nested scene is mounted. Search for its name or ID, and for the mount time of 12 s:
   ```bash
   grep -rn "<nested-scene-name>" .
   ```
2. Open the file that defines the nested scene and find the clip active at local 4 s. Check any clip whose start is at or before 4 s and whose end is after it.
3. If the project is a git repository, check which file last touched that clip's definition:
   ```bash
   git log -p -S "<clip-identifier>" -- <path>
   ```

If you send me the scene definition or the file listing, I can match the clip at 4 s to a specific file.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-cli · the render task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 25989 bytes about the same town: the exact length of the hyperframes-cli skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A completed render reports screenshot mode and software GPU on Linux. The output exists but no frames have been inspected. Give the next verification steps.

What the AI answered

I can't give verified next steps from what's been supplied, because the message doesn't include the render result itself, only that the render completed in screenshot mode on software GPU and that no frames have been inspected. The pasted filler text in the earlier turn doesn't bear on the render, so I've set it aside.
Read the whole answer
I can't give verified next steps from what's been supplied, because the message doesn't include the render result itself, only that the render completed in screenshot mode on software GPU and that no frames have been inspected. The pasted filler text in the earlier turn doesn't bear on the render, so I've set it aside.

Based on the facts you gave, these are the next verification steps, in order:

1. **Confirm the output exists and is non-trivial.** Check that the expected frame files are present and that their count matches the number of frames requested. Check that none are zero bytes.

2. **Inspect the frames directly.** Open a sample: the first, a middle, and the last frame. Look for a blank or solid-color image, missing geometry, wrong camera framing, and obvious artifacts. Software rendering can produce output that is valid but incorrect, so a successful exit is not evidence the scene looks right.

3. **Compare against a reference.** If you have a known-good frame or a previous render of the same scene, diff against it, either visually or with a pixel-difference metric. A large difference points to a rendering or configuration problem rather than a scene change.

4. **Check that the screenshot mode captured what you intended.** Confirm the capture happened after the scene finished loading and that the frame timing is correct. A screenshot taken too early can show an empty or partly loaded scene.

5. **Account for the software GPU.** Since the render ran on software GPU on Linux, check that the output doesn't differ from a hardware render in ways that matter for your use, such as shader precision, lighting, or missing extensions. If the result has to match a hardware render, verify that separately on a machine with a real GPU.

6. **Record the result.** Note the render settings, the GPU mode, and the frame check outcome so the run can be reproduced.

If the frames look correct after step 2, the render is verified for your purposes. If they don't, the step-3 comparison will tell you whether the problem is in the output or in the environment.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes · the existing task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 21136 bytes about the same town: the exact length of the hyperframes skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. An existing HyperFrames project needs only a corrected title. The approved brief is already present. Give the next workflow and explain whether a new discovery interview is needed.

What the AI answered

**Next workflow:**

1. Correct the project title. That is the only change the existing HyperFrames project needs.
2. Build from the approved brief that is already in place. Don't rewrite or re-approve it.
3. Check the corrected title in the output before you consider the project done.
Read the whole answer
**Next workflow:**

1. Correct the project title. That is the only change the existing HyperFrames project needs.
2. Build from the approved brief that is already in place. Don't rewrite or re-approve it.
3. Check the corrected title in the output before you consider the project done.

**New discovery interview:** Not needed. The project already exists, and the brief has been approved. A discovery interview would only repeat work that is complete.

I haven't checked the files or run anything, so these steps are based only on the facts you gave me.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes · the usage task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 21136 bytes about the same town: the exact length of the hyperframes skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. At creation start the supplied usage check returns status unknown. The user wants a short explainer and has not approved rendering. Draft the response and next steps.

What the AI answered

**Status:** Nothing has been run, rendered, or changed. You asked for text only, so I used no tools, accessed no network, wrote no files, and installed nothing.

**What I can see:**
- The working directory is a git repository on branch `HEAD`, with `main` as the main branch.
- The working tree was clean at the start of the conversation, and there were no recent commits.
- The usage check is still **unknown**. No check result was supplied, so I can't report usage.
- Rendering has not been approved, so no output has been produced.
Read the whole answer
**Status:** Nothing has been run, rendered, or changed. You asked for text only, so I used no tools, accessed no network, wrote no files, and installed nothing.

**What I can see:**
- The working directory is a git repository on branch `HEAD`, with `main` as the main branch.
- The working tree was clean at the start of the conversation, and there were no recent commits.
- The usage check is still **unknown**. No check result was supplied, so I can't report usage.
- Rendering has not been approved, so no output has been produced.

**Next steps:**
1. Tell me what the explainer should cover. I can write it from the facts above, but I need the topic or audience.
2. Approve rendering when you're ready. I'll produce the output only after that.
3. If you want the usage check, provide its result. I won't infer it.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes · the port task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 21136 bytes about the same town: the exact length of the hyperframes skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The user explicitly asks to port an existing Remotion composition to HyperFrames. A generic creation wizard is also available. Choose the route and explain the required context.

What the AI answered

**Route: port the existing Remotion composition.** You asked for a port, so the creation wizard isn't needed. A port keeps your existing timing, layout, and assets, while the wizard would start a new composition from scratch.

I can't run anything in this session, so I can't inspect your project or confirm HyperFrames' current API. Before I start, I need:
Read the whole answer
**Route: port the existing Remotion composition.** You asked for a port, so the creation wizard isn't needed. A port keeps your existing timing, layout, and assets, while the wizard would start a new composition from scratch.

I can't run anything in this session, so I can't inspect your project or confirm HyperFrames' current API. Before I start, I need:

1. **The Remotion source.** The composition component(s), their entry file (usually `src/Root.tsx` or `src/index.ts`), and the `<Composition>` registrations with their `id`, `fps`, `width`, `height`, and `durationInFrames`.
2. **Dependencies and config.** `package.json`, `remotion.config.*`, and any custom webpack or bundler settings.
3. **Assets and data.** Images, video, audio, fonts, and any JSON or props files the composition reads, including `staticFile()` references.
4. **Remotion-specific APIs in use.** For example `useCurrentFrame`, `interpolate`, `spring`, `Sequence`, `Series`, `TransitionSeries`, `Audio`, `OffthreadVideo`, or `delayRender`. Each one needs a HyperFrames equivalent or a workaround.
5. **Output requirements.** Target resolution, frame rate, codec, and whether the output must match the original render frame for frame.
6. **The HyperFrames target.** Its project layout and the entry point it expects. I don't have those details, so please share an example or docs link, or let me read them in the project if you grant access.

Once I have the source files, I'll map each Remotion API to its HyperFrames counterpart, flag anything without a clean equivalent, and port the timing first so the frame counts match before I touch visuals.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

setup-matt-pocock-skills · the local task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6978 bytes about the same town: the exact length of the setup-matt-pocock-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A single-package project has no remote, already tracks requests as local markdown, and has no triage skill installed. Propose the engineering-skills setup choices.

What the AI answered

Here are the setup choices for engineering-skills, based on what you've described:

1. **Tracker: local markdown.** The project already tracks requests in local markdown and has no remote, so I'd configure the skills to read and write that existing format. Don't add GitHub or other remote-tracker integration, since there's nothing to connect to.
Read the whole answer
Here are the setup choices for engineering-skills, based on what you've described:

1. **Tracker: local markdown.** The project already tracks requests in local markdown and has no remote, so I'd configure the skills to read and write that existing format. Don't add GitHub or other remote-tracker integration, since there's nothing to connect to.

2. **Triage skill: install it, configured for local markdown.** No triage skill is installed yet. Installing one would give you a repeatable way to sort and prioritize the markdown requests. The alternative is to keep triaging by hand, which is fine for a small backlog but gets harder as it grows.

3. **Scope: single package.** Configure the skills for this one package and skip any monorepo or multi-package layout.

4. **Remote: defer.** If you add a remote later, you can revisit the tracker choice then. Until then, leaving it out keeps the setup simple.

My recommendation is options 1 through 3: local markdown tracker, triage skill installed and pointed at that tracker, single-package scope. I haven't checked the current files or the installed skill set, so the exact install steps depend on the skill's documentation.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

setup-matt-pocock-skills · the labels task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6978 bytes about the same town: the exact length of the setup-matt-pocock-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The installed triage workflow uses bug:triage and bug:ready. A maintainer wants to retain those labels. Explain how to configure the canonical roles without creating duplicate labels.

What the AI answered

Keep one label per role, under the exact names the workflow uses, and point everything else at those names instead of creating new ones.

1. **Inventory existing labels.** Check whether `bug:triage` and `bug:ready` already exist, and look for near-duplicates such as `Bug:Triage`, `bug: triage`, or `triage`. GitHub label names are unique case-insensitively, so `Bug:Triage` would collide with `bug:triage`.
Read the whole answer
Keep one label per role, under the exact names the workflow uses, and point everything else at those names instead of creating new ones.

1. **Inventory existing labels.** Check whether `bug:triage` and `bug:ready` already exist, and look for near-duplicates such as `Bug:Triage`, `bug: triage`, or `triage`. GitHub label names are unique case-insensitively, so `Bug:Triage` would collide with `bug:triage`.

2. **Make the canonical labels the source of truth.** If `bug:triage` and `bug:ready` exist, keep them and don't recreate them. If they don't, create each once with the exact spelling and a clear description, such as "Needs maintainer triage" for `bug:triage` and "Triaged and ready to be worked" for `bug:ready`.

3. **Migrate duplicates into the canonical labels.** For each variant, relabel the open issues and PRs that carry it to the canonical name, then delete the variant. Doing this before deleting prevents losing the label context on open work. Closed items can keep the old label if you don't need them to match the workflow.

4. **Check the workflow config.** Confirm the installed workflow references exactly `bug:triage` and `bug:ready`, including the colon and case. If it matches on a different string, update the config to the canonical name rather than adding a label to satisfy it.

5. **Verify once.** Apply each label to a test issue, confirm the workflow picks it up in both states, then close the test issue.

I haven't inspected your repository or the workflow file, so these steps are based only on the label names you gave me. Check the workflow's exact label strings before you delete anything.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

setup-matt-pocock-skills · the monorepo task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6978 bytes about the same town: the exact length of the setup-matt-pocock-skills skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A workspace has packages/orders and packages/catalog, each with its own glossary and ADR folder. Propose the domain-document layout decision and the confirmation needed.

What the AI answered

**Proposed decision:** Keep each package's glossary and ADR folder where it is, under `packages/orders` and `packages/catalog`. Each package then owns its own domain language and decisions, and the layout matches what already exists.

If a term or decision spans both packages, record it in the package that owns it and link to it from the other. I'd add a shared root-level glossary only if cross-package terms become common.
Read the whole answer
**Proposed decision:** Keep each package's glossary and ADR folder where it is, under `packages/orders` and `packages/catalog`. Each package then owns its own domain language and decisions, and the layout matches what already exists.

If a term or decision spans both packages, record it in the package that owns it and link to it from the other. I'd add a shared root-level glossary only if cross-package terms become common.

**Confirmation needed:** Do you want to keep the per-package layout, or create a shared root-level glossary and ADR folder for cross-package material? I haven't checked the files, so this is based only on the workspace structure you described.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

handoff · the resume task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 940 bytes about the same town: the exact length of the handoff skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Write a handoff from these facts: parser fix drafted, tests not run, decision recorded in docs/parser-plan.md, next session verifies invalid input. Keep the existing plan as the detailed source.

What the AI answered

## Handoff: Parser fix

**Status:** The parser fix is drafted. Tests have not been run.

**Decision:** The decision is recorded in `docs/parser-plan.md`. That file is the detailed source, so refer to it for the full plan rather than relying on this summary.
Read the whole answer
## Handoff: Parser fix

**Status:** The parser fix is drafted. Tests have not been run.

**Decision:** The decision is recorded in `docs/parser-plan.md`. That file is the detailed source, so refer to it for the full plan rather than relying on this summary.

**Next session:** Verify how the parser handles invalid input. This is still open.

**Open items:**
- Run the tests. They have not been run against the drafted fix.
- Verify invalid-input handling, as described in `docs/parser-plan.md`.

I did not run tools, check the working tree, or confirm the draft's contents, so this handoff reflects only the facts above.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

handoff · the privacy task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 940 bytes about the same town: the exact length of the handoff skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Prepare a handoff about an authentication bug. The conversation contained a real credential, but it is intentionally not supplied here. Facts safe to carry: refresh retries twice; a test remains missing.

What the AI answered

## Handoff: Authentication bug

**Status:** Investigation in progress. No tools were used for this handoff, so nothing here was verified against the repository.

**Known facts:**
- The token refresh path retries twice.
- A test covering this behavior is still missing.
Read the whole answer
## Handoff: Authentication bug

**Status:** Investigation in progress. No tools were used for this handoff, so nothing here was verified against the repository.

**Known facts:**
- The token refresh path retries twice.
- A test covering this behavior is still missing.

**Open items:**
- Add the missing test for the refresh behavior.
- Confirm the retry count is intended and check how it interacts with the auth failure.

**Security note:** The conversation contained a real credential. Treat it as exposed. Rotate it, and keep it out of logs, commits, and handoff notes.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

handoff · the destination task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 940 bytes about the same town: the exact length of the handoff skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The next session will document an already implemented parser change. Tests passed in a local check; no commit exists. Draft a short handoff and say where the handoff should be saved.

What the AI answered

**Handoff: parser change**

**Status:** The parser change is implemented. Tests passed in a local check. No commit exists yet.

**Next session:** Document the parser change. Because nothing is committed, the change exists only in the working tree.
Read the whole answer
**Handoff: parser change**

**Status:** The parser change is implemented. Tests passed in a local check. No commit exists yet.

**Next session:** Document the parser change. Because nothing is committed, the change exists only in the working tree.

**Where to save:** The facts provided don't name a location. I suggest `HANDOFF.md` at the repo root (`/tmp/driftproof-eval.WRWARqUy/HANDOFF.md`). Tell me if you want a different path. I haven't written the file.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

frontend-design · the identity task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9390 bytes about the same town: the exact length of the frontend-design skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Propose a landing-page design for a night-shift bicycle repair shop. Real facts: open until midnight, repairs while customers wait, one workshop photo. Supply a hero, type direction and primary action.

What the AI answered

## Landing page proposal: night-shift bicycle repair shop

**Hero**
- **Headline:** "Bike trouble after dark? We fix it while you wait."
- **Subhead:** "Open until midnight. Most repairs done in front of you."
- **Image:** The one workshop photo, full-bleed behind the text, with a dark gradient on the left so the headline stays readable. If the photo is dim, keep it warm-toned rather than brightening it.
- **Hours badge:** A small pill near the headline reading "Open until midnight," so the time is visible before any scrolling.
Read the whole answer
## Landing page proposal: night-shift bicycle repair shop

**Hero**
- **Headline:** "Bike trouble after dark? We fix it while you wait."
- **Subhead:** "Open until midnight. Most repairs done in front of you."
- **Image:** The one workshop photo, full-bleed behind the text, with a dark gradient on the left so the headline stays readable. If the photo is dim, keep it warm-toned rather than brightening it.
- **Hours badge:** A small pill near the headline reading "Open until midnight," so the time is visible before any scrolling.

**Type direction**
- **Headline:** A bold, condensed sans-serif with tight leading. It should read like a shop sign and stay legible at a glance.
- **Body:** A plain, highly readable sans-serif at 16–18px. Keep line length short and avoid decorative fonts.
- **Accent:** One high-contrast color for the badge and button, used nowhere else on the page, so the eye goes to the action.
- **Tone:** Direct and practical. Short sentences, no jargon.

**Primary action**
- **Button:** "Bring your bike in now"
- **Placement:** Directly under the subhead in the hero, and repeated in the sticky header on mobile.
- **Support line below the button:** "Open until midnight. Walk-ins welcome." This states the one fact a rider needs to decide, without inventing a booking system.

**Choices I made that you can change**
- I used "walk-ins welcome" as the support line. This assumes the shop takes walk-ins, which the facts you gave don't confirm. If it needs appointments, swap the button for "Check tonight's availability."
- I left out address, phone number, prices, and services. Add them once you have confirmed details.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

frontend-design · the brief task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9390 bytes about the same town: the exact length of the frontend-design skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The request is only make a beautiful site. No product, audience or purpose is supplied. Give the design lead response before choosing a layout.

What the AI answered

## Design direction

**Concept:** A slow, grounded place. The site should feel like the valley itself: early light, weathered stone, and water moving through it. Nothing should feel loud or commercial.

**Palette:** Drawn from the seasons in the text.
- Dawn cream (lime blossom) for the page background
- Slate and sea grey for text and structure
- Copper beech for accents and links
- Moss green for dividers and secondary elements
- Ash-glaze ochre for small highlights, such as the season markers
Read the whole answer
## Design direction

**Concept:** A slow, grounded place. The site should feel like the valley itself: early light, weathered stone, and water moving through it. Nothing should feel loud or commercial.

**Palette:** Drawn from the seasons in the text.
- Dawn cream (lime blossom) for the page background
- Slate and sea grey for text and structure
- Copper beech for accents and links
- Moss green for dividers and secondary elements
- Ash-glaze ochre for small highlights, such as the season markers

**Typography:** A warm serif for headings, such as Fraunces or Cormorant, paired with a quiet humanist sans for body text. Generous line height and a narrow measure, about 65 characters.

**Imagery:** Full-bleed photography with a slight grain. Where photos aren't available, use simple line drawings of the bridge, lighthouse, and mill wheel.

**Motion:** Minimal. A slow fade as sections enter, and nothing that loops.

## Layout

Single long scroll, with each section tied to a season or a place.

1. **Hero:** A dawn gradient over the ridge. Headline: a line about morning light settling over the hills, with the clock tower chime as a quiet subhead.
2. **Seasons strip:** Four columns, one per season, each with its own accent color.
   - Spring: swifts return, gulls follow the plough
   - Summer: meadows of buttercups and ox-eye daisies
   - Autumn: beech trees turning copper, then pale brown
   - Winter: the high moor white for weeks
3. **Landscape:** A wide, image-led section covering the moor's clear night stars, the oak and ash forest to the east, the river past the mill, and the herons in the shallows.
4. **Town and market:** A two-column layout. One side covers the square, the library's hand-drawn maps, and the cottages with their roses and lavender. The other covers the market's cheese, honey, wool, and willow baskets, plus the potter's wood-fired jars and the bakers' long-kept starter.
5. **Coast:** A split layout with a tall image of the lighthouse stair and the harbour wall. Cover the fishing boats that leave before dawn, the ferry across the sound, and the cool sea wind.
6. **Heritage:** A horizontal timeline of the seven-arch bridge, the canal towpath, the railway's arrival on the coast, and the museum's loom.
7. **Calendar and footer:** The choir on Thursdays, the dance on the first Saturday of the month, and the orchard with its apples, pears, and two old quince trees. Keep the footer in moss green.

## Assumptions and gaps

- No product, audience, or purpose was given, so I've assumed a site that presents the town and its surroundings to visitors and residents. If the goal is different, such as a shop, a booking service, or a local-government page, the layout changes.
- The supplied text repeats many sentences and ends mid-sentence ("In summer the meadows are full of"). I used each fact once and didn't include the cut-off line.
- I haven't written any code or files, since this turn was text only. If you give me the purpose and audience and allow file edits, I can build the site.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

frontend-design · the content task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9390 bytes about the same town: the exact length of the frontend-design skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Design the text structure for a small observatory tour page. Facts: visits at dusk, 12 places, cloudy nights use an indoor exhibit. No testimonials exist.

What the AI answered

# Observatory Tour Page: Structure

**1. Hero section**
- Headline and one line stating the core idea: a dusk visit to the observatory.
- Primary call to action, such as "Plan your visit."

**2. Overview**
- Tours run at dusk.
- The tour covers 12 places.
Read the whole answer
# Observatory Tour Page: Structure

**1. Hero section**
- Headline and one line stating the core idea: a dusk visit to the observatory.
- Primary call to action, such as "Plan your visit."

**2. Overview**
- Tours run at dusk.
- The tour covers 12 places.

**3. The tour route**
- A numbered list or simple sequence of the 12 places, in visiting order.
- Brief note that the route is the same whether the sky is clear or not, if that holds. (Not supplied; confirm before publishing.)

**4. Weather plan**
- Clear nights: full tour as described above.
- Cloudy nights: visitors use the indoor exhibit instead.
- Suggested wording: "If clouds cover the sky, the tour moves indoors to our exhibit."

**5. Visitor information**
- Placeholders for times, tickets, accessibility, and contact details. These weren't supplied, so mark them as `[to be added]`.

**6. Footer**
- Contact, directions, and links.

**Omitted:** No testimonials section, since none exist. Add one later if reviews are collected.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

reddit-automation · the rank task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8008 bytes about the same town: the exact length of the reddit-automation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Choose a reply opportunity for an offline inventory app: thread A asks today for offline warehouse counts; B is a locked similar thread; C is a generic joke. The team has used its app in a warehouse.

What the AI answered

**Reply in thread A.** It's the only one that matches your request: it asks today for offline warehouse counts, and your team has already used the app in a warehouse. Thread B is locked, and C is a generic joke.

That is the whole answer.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

reddit-automation · the reply task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8008 bytes about the same town: the exact length of the reddit-automation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Draft a short reply for a warehouse user asking for offline counting. You work on StockPond and personally used its offline queue in a warehouse. Their community permits disclosed product mentions.

What the AI answered

Here's a draft reply:

> Hi, yes, offline counting is doable. Disclosure: I work on StockPond, and I've used its offline queue during warehouse counts myself. You can record counts without a connection, and the queue holds them until you're back online. I'd suggest a quick test run on a small bay before the full count so you know how it behaves on your floor. Happy to walk through the setup if that helps.

That is the whole answer.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

reddit-automation · the rules task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8008 bytes about the same town: the exact length of the reddit-automation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A community bans all product mentions. A thread asks how to avoid losing offline counts. The product team wants you to reply. Draft an appropriate response using only the general fact that a local queue can sync later.

What the AI answered

Here's a draft that answers the question without mentioning any product, using only the general fact that a local queue can sync later:

> Good question. One general approach is to record each count in a local queue on your device while you're offline, then sync that queue once you reconnect. Nothing is lost in the meantime, because the entries wait on your device until they can be sent. If you're worried about a specific case, such as the app closing before sync, check whether the queue survives restarts before you rely on it.
Read the whole answer
Here's a draft that answers the question without mentioning any product, using only the general fact that a local queue can sync later:

> Good question. One general approach is to record each count in a local queue on your device while you're offline, then sync that queue once you reconnect. Nothing is lost in the meantime, because the entries wait on your device until they can be sent. If you're worried about a specific case, such as the app closing before sync, check whether the queue survives restarts before you rely on it.

The draft stays general and avoids promises I can't verify, such as specific retention periods or how conflicts are resolved. If the product team wants a more specific answer, they'd need to supply those details, and they would also need to confirm that the community's rules allow them.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

triage · the conflict task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6558 bytes about the same town: the exact length of the triage skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Triage this synthetic item: category bug; states needs-info and ready-for-agent both present. The label mapping uses those same strings. What happens next?

What the AI answered

Nothing should happen automatically. The item has two labels that contradict each other, so it should be held for a person to resolve.

- `needs-info` means the item is waiting on more information, usually from the reporter.
- `ready-for-agent` means the item is cleared for an agent to pick up.
Read the whole answer
Nothing should happen automatically. The item has two labels that contradict each other, so it should be held for a person to resolve.

- `needs-info` means the item is waiting on more information, usually from the reporter.
- `ready-for-agent` means the item is cleared for an agent to pick up.

Both can't be true at once. Since the label mapping uses the same strings, a label-driven workflow would see both and could route the item to an agent while it is still blocked on missing information.

The next step is to flag the conflict and have someone decide which state is correct. If the information is still missing, remove `ready-for-agent`. If the information has arrived, remove `needs-info`. Once one label is removed, the item can be triaged normally.

I can't see the tracker or the mapping configuration, so I can't confirm how the workflow actually handles this combination.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

triage · the evidence task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6558 bytes about the same town: the exact length of the triage skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A reporter says export crashes but supplies no steps. The item has needs-triage and bug. Draft triage notes; no code or reproduction evidence is available.

What the AI answered

**Triage notes: "Export crashes" (labels: `needs-triage`, `bug`)**

**Summary:** A reporter says the export feature crashes. No steps to reproduce were provided.

**Status:** Not yet reproducible. No code, logs, stack trace, or reproduction evidence is available.
Read the whole answer
**Triage notes: "Export crashes" (labels: `needs-triage`, `bug`)**

**Summary:** A reporter says the export feature crashes. No steps to reproduce were provided.

**Status:** Not yet reproducible. No code, logs, stack trace, or reproduction evidence is available.

**Classification:** Keep `bug` for now, since a crash is reported. Confidence is low until the crash is confirmed.

**Missing information to request from the reporter:**
- Steps to reproduce, from opening the app to the crash
- The export format and any options selected (for example, file type or date range)
- Approximate data size, such as record or file count
- Exact error message, screenshot, or crash log
- App or build version, OS, and browser or client, if applicable
- Whether the crash happens every time or only sometimes, and whether it started after a specific change

**Suggested next steps:**
1. Ask the reporter for the information above and keep `needs-triage` until it arrives.
2. Try to reproduce using the most likely path: a basic export with default settings and a small dataset.
3. If reproduction succeeds, record the steps and expected versus actual behavior, then add the relevant component label.
4. If reproduction fails after a reasonable attempt, ask the reporter for their environment and data details, and note that the issue is unconfirmed.
5. Search existing issues for duplicates of export crashes.

**Priority:** Unset. Revisit once the issue is reproduced and its impact is known.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

triage · the ready task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 6558 bytes about the same town: the exact length of the triage skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A synthetic issue has a reproduced invalid-date error, agreed input/output behavior, affected file parser.js and a clear regression check. Draft a concise agent-ready brief with status recommendation.

What the AI answered

# Agent Brief: Invalid-Date Parser Bug

**Status recommendation:** Ready for agent handoff. All four required elements are present: a reproduced error, agreed input/output behavior, a known affected file, and a clear regression check.

**Problem:** The parser produces an invalid-date error. The error has been reproduced.
Read the whole answer
# Agent Brief: Invalid-Date Parser Bug

**Status recommendation:** Ready for agent handoff. All four required elements are present: a reproduced error, agreed input/output behavior, a known affected file, and a clear regression check.

**Problem:** The parser produces an invalid-date error. The error has been reproduced.

**Affected file:** `parser.js`

**Expected behavior:** Input and output behavior has been agreed. The agent should implement that agreed behavior exactly. The specific input and output values are not in the supplied material, so they should be attached to the brief before work begins.

**Regression check:** A clear regression check exists. Run it before and after the change. It should fail before the fix and pass after.

**Scope:** Change only what is needed in `parser.js` to resolve the invalid-date error and meet the agreed behavior. Do not alter unrelated parsing logic.

**Done when:**
1. The reproduced invalid-date error no longer occurs.
2. Output matches the agreed input/output behavior.
3. The regression check passes.
4. Results are reported faithfully, including any failures or skipped steps.

**Note:** The rest of the supplied text is descriptive background about a village and contains no facts relevant to this issue, so it was excluded from the brief.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

prototype · the logic task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2931 bytes about the same town: the exact length of the prototype skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. We need to understand whether a reservation state machine can reach paid after cancelled. Design a small throwaway demonstration, not production code.

What the AI answered

The supplied facts don't cover reservations, state machines, or payments. They describe a village: its market, trains, orchards, and tides. So I can't answer from them, and I've used no tools, written no files, and run nothing. Below is a design for a throwaway check you could run to answer the question.
Read the whole answer
The supplied facts don't cover reservations, state machines, or payments. They describe a village: its market, trains, orchards, and tides. So I can't answer from them, and I've used no tools, written no files, and run nothing. Below is a design for a throwaway check you could run to answer the question.

**What the demo should establish**

Whether any sequence of events takes a reservation from `CANCELLED` to `PAID`. Two routes are likely:

1. **Explicit transition:** the transition table has an edge out of `CANCELLED` toward `PAID`, or a path through `REFUNDED`, `EXPIRED`, or `PENDING`.
2. **Race:** a `cancel` and a `payment_succeeded` event (for example a late webhook) are both applied to the same reservation, and the handler's order or missing lock lets the payment win.

**Plan**

- Put the transition table in one place. Read it from the real system if you can, since I don't have it.
- Run a breadth-first search from `CANCELLED` over all events. If `PAID` is reached, report the shortest event path as the witness.
- Simulate the race: start from `PENDING` and apply `cancel` and `payment_succeeded` in both orders, with and without a lock or idempotency check. Record the final state each time.

**Sketch (stdlib only, not saved anywhere)**

```python
from collections import deque

# Replace with the real table; these edges are placeholders.
TRANSITIONS = {
    ("PENDING", "pay_ok"): "PAID",
    ("PENDING", "cancel"): "CANCELLED",
    ("PAID", "cancel"): "REFUNDED",
    ("CANCELLED", "pay_ok"): "PAID",      # suspect: late webhook
}
EVENTS = {"pay_ok", "cancel", "expire", "refund_done"}

def reach_paid_from_cancelled():
    queue = deque([("CANCELLED", [])])
    seen = {"CANCELLED"}
    while queue:
        state, path = queue.popleft()
        if state == "PAID":
            return path
        for event in EVENTS:
            nxt = TRANSITIONS.get((state, event))
            if nxt and nxt not in seen:
                seen.add(nxt)
                queue.append((nxt, path + [event]))
    return None

def race(first, second, locked):
    state = "PENDING"
    order = [first, second]
    if locked:
        # Lock semantics: second event only applies if state still allows it.
        for ev in order:
            state = TRANSITIONS.get((state, ev), state)
        return state
    for ev in order:
        state = TRANSITIONS.get((state, ev), state)
    return state

if __name__ == "__main__":
    print("path CANCELLED->PAID:", reach_paid_from_cancelled())
    for a, b in [("cancel", "pay_ok"), ("pay_ok", "cancel")]:
        print(a, b, "unlocked ->", race(a, b, locked=False))
```

The `race` function here is a stand-in: it applies events with the same table lookup, so it only shows order sensitivity. To test a real lock or idempotency guard, the model would need to match that code's guard logic.

**What would settle it**

- A non-empty BFS path from `CANCELLED` to `PAID` means the table itself allows it.
- An empty path with a race that ends in `PAID` means the risk comes from concurrency, not the table.
- Both empty means the state machine cannot reach `PAID` after `CANCELLED` under the modeled events. That result only holds for the events and edges you encode, so the table has to come from the actual system.

If you share the reservation code or its transition table, I can tailor the demo to it and tell you which of these cases applies.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

prototype · the ui task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2931 bytes about the same town: the exact length of the prototype skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. We need to compare three visual directions for a checkout page. The project already has a prototype route convention. Propose the prototype shape.

What the AI answered

I can't propose a prototype shape from what you've given me. The supplied text describes a village: its choir, the market's cheese and honey, the railway, the lighthouse, the beech trees, and the harbour wall. It says nothing about checkout pages, visual directions, or a prototype route convention, so any shape I offered would be invented.
Read the whole answer
I can't propose a prototype shape from what you've given me. The supplied text describes a village: its choir, the market's cheese and honey, the railway, the lighthouse, the beech trees, and the harbour wall. It says nothing about checkout pages, visual directions, or a prototype route convention, so any shape I offered would be invented.

To do this, I need one of these:

- The existing prototype route convention, pasted here, or a description of how the current prototype routes are named and structured.
- The three visual directions for the checkout page, with a short description of each.

With either, I can propose a shape that follows the existing convention and gives each direction its own route, without using tools or changing files.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

prototype · the unclear task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2931 bytes about the same town: the exact length of the prototype skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. An unreachable stakeholder says try a prototype next to a backend retry module. No UI work is present. State a provisional direction and what the prototype should answer.

What the AI answered

The supplied text is a set of descriptions of a village: its market, railway, orchard, harbour, and clock tower. None of it mentions the stakeholder, the backend retry module, or a prototype, so I can't ground any part of this in those facts. What follows comes only from your request.
Read the whole answer
The supplied text is a set of descriptions of a village: its market, railway, orchard, harbour, and clock tower. None of it mentions the stakeholder, the backend retry module, or a prototype, so I can't ground any part of this in those facts. What follows comes only from your request.

**Provisional direction:** Build a small prototype next to the backend retry module, without UI, and keep it off the main path until it shows a clear benefit. Wire it to one or two representative backend calls, with retry limits and backoff set explicitly, and make it easy to switch on and off.

**What the prototype should answer:**
- Does retrying reduce failures for the calls it targets, and by how much, compared with no retries?
- What do retries cost in added latency and extra load on the downstream service?
- Are the targeted operations safe to retry? Any that aren't idempotent need to be excluded or handled differently.
- Does the retry module's interface fit how the callers already work, or does it need changes?
- What failure-rate and latency thresholds would justify rolling it out more widely?

Since the stakeholder is unreachable, the prototype's results are the most useful input to bring back to them. If you can share the stakeholder's actual notes or the module's documentation, I can make this direction more specific.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

media-use · the reuse task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9684 bytes about the same town: the exact length of the media-use skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A project needs a short chime. A local candidate has the right license and duration but its fit has not been checked. Explain the next asset workflow.

What the AI answered

The supplied facts don't cover audio assets or chimes. They describe a village and its surroundings, so the workflow below is general, based on your description of the candidate.

1. **Record what's confirmed.** The candidate has the right license and duration. Note that in the asset record with its source and license terms, and mark fit as unchecked.
Read the whole answer
The supplied facts don't cover audio assets or chimes. They describe a village and its surroundings, so the workflow below is general, based on your description of the candidate.

1. **Record what's confirmed.** The candidate has the right license and duration. Note that in the asset record with its source and license terms, and mark fit as unchecked.

2. **Check fit in context.** Play the chime where the project will use it, not just in isolation. Check:
   - Whether it matches the project's tone and the sounds around it.
   - Its level and loudness next to other audio, so it isn't jarring or buried.
   - Whether the start and end are clean, with no clicks or silence padding.
   - Whether its length works at the actual trigger point.

3. **Decide.** If it fits, approve it. If not, reject it and look for another candidate, then repeat steps 1 and 2 for that one.

4. **Add the approved asset.** Place the file where the project keeps assets, add its license attribution if the license requires it, and update any asset manifest. Then commit the change so the decision is traceable.

I haven't read, run, or changed anything. If you share the project's audio directory or the place the chime is triggered, I can suggest exactly where the fit check and the file should go.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

media-use · the logo task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9684 bytes about the same town: the exact length of the media-use skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The project needs a company logo. No official logo file has been supplied. Describe the sourcing plan and what not to fabricate.

What the AI answered

## Logo sourcing plan

No official logo file has been supplied, and the passage you pasted describes a market town and its surroundings, so it has no logo or brand information.

**Sourcing steps**

1. **Ask for the official asset.** Request the logo from whoever owns brand or marketing for the company, or from an existing brand guidelines document. Ask for the source format (SVG, AI, or EPS preferred) and a PNG fallback.
2. **Confirm usage rights.** Check that the company is allowed to use the logo in this project and in whatever context it will appear, such as a public repo or documentation.
3. **Get the variants you need.** Ask for light and dark versions, and any clear-space or minimum-size rules from the brand guidelines.
4. **Add it only after receipt.** Once the file arrives, place it in the project's assets directory and reference it from there.
Read the whole answer
## Logo sourcing plan

No official logo file has been supplied, and the passage you pasted describes a market town and its surroundings, so it has no logo or brand information.

**Sourcing steps**

1. **Ask for the official asset.** Request the logo from whoever owns brand or marketing for the company, or from an existing brand guidelines document. Ask for the source format (SVG, AI, or EPS preferred) and a PNG fallback.
2. **Confirm usage rights.** Check that the company is allowed to use the logo in this project and in whatever context it will appear, such as a public repo or documentation.
3. **Get the variants you need.** Ask for light and dark versions, and any clear-space or minimum-size rules from the brand guidelines.
4. **Add it only after receipt.** Once the file arrives, place it in the project's assets directory and reference it from there.

**Do not fabricate**

- A logo, icon, wordmark, or any approximation of one.
- Brand colours, fonts, or spacing rules that the company has not provided.
- The company's exact name or trademark status.
- Claims that the logo is official, licensed, or approved.
- Vector paths or dimensions for a mark you have not seen.

**Interim option:** If the project needs a visual in the meantime, use a plain text label such as "[LOGO PLACEHOLDER]" and mark it clearly as a placeholder, so no one mistakes it for the real mark.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

media-use · the grade task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9684 bytes about the same town: the exact length of the media-use skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The supplied frames are uniformly too dark. The user asks for ordinary exposure correction, with no LUT supplied. Propose the review and persistence workflow.

What the AI answered

I couldn't check the frames or any project files, since I'm not using tools here. The supplied material is a description of a market town and doesn't mention the frames, their exposure values, or any correction settings, so this is a general workflow rather than one fitted to your footage.
Read the whole answer
I couldn't check the frames or any project files, since I'm not using tools here. The supplied material is a description of a market town and doesn't mention the frames, their exposure values, or any correction settings, so this is a general workflow rather than one fitted to your footage.

**1. Review the problem**
- Sample frames across the clip, including the darkest ones, and measure average brightness and the histogram.
- Check for crushed shadows (pixels stuck at black) and confirm the highlights aren't clipped, so you know how much headroom a gain adjustment has.
- Pick a target brightness and note it so later decisions can be checked against it.

**2. Choose an ordinary correction**
- Start with exposure (gain) and gamma, which are standard adjustments that don't need a LUT.
- Apply one set of values to the whole clip rather than adjusting frame by frame, so the result doesn't flicker.
- Increase the adjustment in small steps and stop before highlights clip or noise becomes obvious.

**3. Review the result**
- Build a before/after contact sheet of sampled frames, including the darkest and brightest.
- Compare histograms and check for clipping and crushed shadows.
- Play the corrected sequence at speed to catch flicker or brightness jumps between frames.

**4. Persist the settings**
- Save the final parameters (exposure, gamma, target, and the date) in a small sidecar file such as `exposure.json` next to the project.
- Write corrected output to a new directory and leave the original frames untouched.
- If the project is under git, commit the parameter file so the correction can be reproduced and reverted.

If you share the frame locations or a sample, I can help you pick the specific values, but that would require tools I'm not using in this turn.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grilling · the frontier task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2049 bytes about the same town: the exact length of the grilling skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Stress-test a plan for automated digest delivery. Audience and delivery channel are undecided. Provider choice depends on channel; retention depends on audience. Give the first interview round.

What the AI answered

The pasted text describes a village (canals, cottages, fishing boats) and says nothing about digests, delivery, providers, or retention. So this round works only from your stated constraints: audience and channel are undecided, provider depends on channel, and retention depends on audience.
Read the whole answer
The pasted text describes a village (canals, cottages, fishing boats) and says nothing about digests, delivery, providers, or retention. So this round works only from your stated constraints: audience and channel are undecided, provider depends on channel, and retention depends on audience.

**Interview round 1**

**Audience**
1. Who receives the digest: internal staff, paying customers, the public, or a mix?
2. Roughly how many recipients at launch, and expected growth in 12 months?
3. Do recipients include anyone who is minors, regulated, or in a jurisdiction with specific data rules?
4. Is the content personal to each recipient, or the same for everyone?

**Channel**
5. Which channels are you considering: email, Slack or Teams, SMS, push, a web page, or RSS?
6. Does the digest need to be opted into, and does the recipient need a way to unsubscribe in the channel itself?
7. Are there delivery deadlines (e.g., "by 8am local time") that affect scheduling?

**Dependencies (what each choice unlocks or blocks)**
8. Once a channel is chosen, do you already have an account or contract with any provider for it, or would this be a new vendor?
9. Is there a budget ceiling per message or per month that would rule out certain providers?

**Retention**
10. How long does the digest content itself need to be kept, and does that differ from how long recipient addresses or engagement data are kept?
11. Who must be able to delete a recipient's data on request, and within what time window?

**Failure modes to check later**
12. If a send fails or a provider goes down, is a missed digest acceptable, or must it be retried or backfilled?

Answers to 1 and 5 will narrow most of the rest. Once you reply, I'll run round 2 on the provider options and retention schedule that follow from them.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grilling · the settled task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2049 bytes about the same town: the exact length of the grilling skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. The audience is now internal staff and delivery is chat. Provider access still needs investigation. Give the next round without reopening agreed choices.

What the AI answered

The supplied facts don't cover provider access. They describe a village: its canal, ferry, market, bridge, meadows, and harbour. Nothing in them mentions providers, access arrangements, staff, or an earlier round of agreed choices, so I can't work out what the next round should contain from them.
Read the whole answer
The supplied facts don't cover provider access. They describe a village: its canal, ferry, market, bridge, meadows, and harbour. Nothing in them mentions providers, access arrangements, staff, or an earlier round of agreed choices, so I can't work out what the next round should contain from them.

I also can't investigate provider access in this mode, since I'm not using tools or the network.

If you paste the relevant facts here, such as the provider names, the access problem, and the decisions already agreed, I can write the next-round update as a chat message for internal staff. It would state what is known, what is still open, and what each person needs to do next, without reopening the agreed choices.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

grilling · the finish task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 2049 bytes about the same town: the exact length of the grilling skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. All planned decisions have answers, but the user has not confirmed your summary. Write the closing interview response.

What the AI answered

I can't write the closing interview response yet because the material I have doesn't include the decisions or the summary it would need to report.

What I received is a descriptive passage about a village: its canal and towpath, the ferry, the market, the seven-arched bridge, the meadows, the fishing boats, and the library's hand-drawn maps. It contains no planned decisions, no summary for you to confirm, and no task details. It also ends mid-sentence ("the potter fires her kiln with w"), so it may be incomplete.
Read the whole answer
I can't write the closing interview response yet because the material I have doesn't include the decisions or the summary it would need to report.

What I received is a descriptive passage about a village: its canal and towpath, the ferry, the market, the seven-arched bridge, the meadows, the fishing boats, and the library's hand-drawn maps. It contains no planned decisions, no summary for you to confirm, and no task details. It also ends mid-sentence ("the potter fires her kiln with w"), so it may be incomplete.

To write the response, I need the list of decisions and the summary you haven't confirmed yet. If you paste those, I'll draft the closing response from them without changing anything else, and I won't use tools.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-animation · the timeline task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8471 bytes about the same town: the exact length of the hyperframes-animation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Propose a short heading reveal and card entrance for a seekable HyperFrames scene. The preview must support jumping to any time.

What the AI answered

I couldn't use the supplied material for this. It's a descriptive passage about a village and has nothing on HyperFrames, so this proposal is based on general animation practice, not on your project's API or code.

**Timing (scene time in seconds)**
Read the whole answer
I couldn't use the supplied material for this. It's a descriptive passage about a village and has nothing on HyperFrames, so this proposal is based on general animation practice, not on your project's API or code.

**Timing (scene time in seconds)**

- **Heading reveal:** 0.0 to 0.6s. Fade in from opacity 0 and translate up 16px with an ease-out curve.
- **Card entrance:** starts at 0.4s. Each card fades in and scales from 0.96 to 1.0 over 0.5s, staggered by 0.12s.
- **Hold:** after the last card settles, hold the final frame until the scene ends.

**Seekable implementation**

- Build the animation as a single paused timeline with absolute start times for every tween. Don't use `setTimeout`, wall-clock timing, or autoplay.
- Derive every element's state from the scene time alone, so there's no accumulated state. Seeking forward, backward, or to the middle should produce the same frame as playing up to that point.
- Before 0.0s, show the heading and cards in their hidden starting state. After the last tween ends, show the final state.
- For the preview, map the scrubber position to scene time and call the timeline's seek method with that value. Use the framework's documented seek or progress API. I haven't checked its exact name.
- Handle rapid seeks by letting the latest one win. Don't queue them.

**Open choices**

- I picked the timings and easing above. Adjust them to match your scene length and brand motion.
- If you share the HyperFrames scene file or its docs, I can check these details against the actual API.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-animation · the runtime task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8471 bytes about the same town: the exact length of the hyperframes-animation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. An existing scene uses Lottie; the task is to fix its seek behavior. Which guidance should be consulted, and what property must be checked?

What the AI answered

The supplied facts don't answer this. They are a set of descriptive sentences about a coastal village (the harbour wall, the ferry, the clock tower, the orchard) and say nothing about Lottie, animation, or seek behavior. So I can't name the guidance to consult or the property to check from them.
Read the whole answer
The supplied facts don't answer this. They are a set of descriptive sentences about a coastal village (the harbour wall, the ferry, the clock tower, the orchard) and say nothing about Lottie, animation, or seek behavior. So I can't name the guidance to consult or the property to check from them.

If you want, I can answer from general knowledge of the Lottie library, clearly marked as unverified against your project. Or you can paste the relevant docs or the scene file, and I'll answer from those.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-animation · the template task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8471 bytes about the same town: the exact length of the hyperframes-animation skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A requested scene already matches a complex brand-reveal template. Explain when a blueprint is appropriate and how it differs from atomic rules.

What the AI answered

I can't see a concrete scene in the material you supplied. It's descriptive prose about a coastal town (harbour, ferry, orchard, clock tower) with no brand, layout, or sequence to match against a template. So I'll answer the general question.
Read the whole answer
I can't see a concrete scene in the material you supplied. It's descriptive prose about a coastal town (harbour, ferry, orchard, clock tower) with no brand, layout, or sequence to match against a template. So I'll answer the general question.

**When a blueprint fits**

Use a blueprint when the output is a complex, ordered composition whose parts only make sense together. A brand reveal is a good example: a logo appears after a build-up, timing and transitions depend on each other, and the whole thing must stay consistent. If a requested scene already matches such a template, reuse the blueprint rather than reassembling it from parts. That keeps the structure, pacing, and brand elements consistent.

**When atomic rules fit**

Use atomic rules for small, independent constraints that can be applied anywhere, such as "keep text within the safe margin" or "use the brand palette for accents." Each rule is self-contained, can be tested alone, and can be combined with others.

**How they differ**

- **Scope:** A blueprint describes a whole scene or sequence. An atomic rule governs one property or decision.
- **Structure:** A blueprint fixes order, dependencies, and relationships between parts. Atomic rules carry no ordering and don't assume each other.
- **Reuse:** A blueprint is reused as a unit and parameterized (swap the logo, the colours, the duration). Atomic rules are composed freely across many blueprints.
- **Failure mode:** A blueprint breaks as a whole when its assumptions don't hold. Atomic rules fail locally and are easy to isolate.

**Practical approach**

If the scene matches the brand-reveal template, use that blueprint as the base. Add atomic rules only for deviations, such as a different palette or a shorter runtime. This keeps the complex structure stable while leaving room for specific adjustments.

If you share the actual scene description, I can say which parts map to the template and which need extra rules.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-registry · the block task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9933 bytes about the same town: the exact length of the hyperframes-registry skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A data-chart block declares internal composition id data-chart, size 1920 by 1080, duration 15 seconds. It should begin at host time 2. Write the host element as text.

What the AI answered

```html
<div id="data-chart" data-width="1920" data-height="1080" data-start="2" data-duration="15"></div>
```

That is the whole answer.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-registry · the component task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9933 bytes about the same town: the exact length of the hyperframes-registry skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A grain overlay is installed as a component snippet. Explain how to integrate it into an existing composition, compared with a standalone block.

What the AI answered

The material you supplied doesn't cover a grain overlay, component snippets, or compositions. It's a set of descriptions of a coastal and moorland village: the bridge, the orchard, the harbour wall, the bakers' starter, and similar. None of it describes how a visual effect is installed or how it fits into an existing layout, so I can't compare integrating the overlay with using it as a standalone block without going beyond your instructions.
Read the whole answer
The material you supplied doesn't cover a grain overlay, component snippets, or compositions. It's a set of descriptions of a coastal and moorland village: the bridge, the orchard, the harbour wall, the bakers' starter, and similar. None of it describes how a visual effect is installed or how it fits into an existing layout, so I can't compare integrating the overlay with using it as a standalone block without going beyond your instructions.

If you paste the snippet, its documentation, or the existing composition, I can explain the two approaches from that material. I'd need to see:

- The overlay snippet itself, including any props, classes, or required parent elements.
- The composition it would go into, including its structure and any styles or layering it already uses.
- Whatever the documentation says about standalone use.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-registry · the search task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 9933 bytes about the same town: the exact length of the hyperframes-registry skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A brief asks for a shimmer sweep. You have no project or account yet. Explain discovery and installation ordering.

What the AI answered

I can't do the shimmer sweep yet. The brief assumes a project, and the supplied facts show none: the working directory `/tmp/driftproof-eval.Qx08sF5M` is a git repository with a clean status, no commits, and no branch history. The long passage about the village, coast, and moor doesn't describe software and doesn't bear on the brief.
Read the whole answer
I can't do the shimmer sweep yet. The brief assumes a project, and the supplied facts show none: the working directory `/tmp/driftproof-eval.Qx08sF5M` is a git repository with a clean status, no commits, and no branch history. The long passage about the village, coast, and moor doesn't describe software and doesn't bear on the brief.

The facts also don't say what discovery or installation involves, so I can't give a verified ordering. The only ordering the facts support is:

1. **Establish a project first.** The repository is empty, so there is nothing to discover yet. Discovery needs files to read, such as a manifest or source tree.
2. **Discover before installing.** Once a project exists, read its declared dependencies and setup instructions, then install. Installing before discovery risks installing the wrong packages or running untrusted setup scripts.
3. **Install after discovery, and verify afterward.** Check that the installed tools work before the shimmer sweep depends on them.

I haven't run any commands or read any files, so this ordering is a general sequence, not something I've confirmed in this repository. To proceed, I need the project files (or a repository URL to clone), and I'll need tool access, since I'm restricted to text answers in this turn.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

design-mobile-apps · the response task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8484 bytes about the same town: the exact length of the design-mobile-apps skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A supplied Sleek request returned HTTP 400 with top-level code INVALID_INPUT, status 400 and message Missing brief. Explain how the caller should read it; do not contact the service.

What the AI answered

I can't tell you what the "Sleek" request was for, because the only thing I have is its result, and the message you pasted is mostly unrelated prose about a village by the coast. The part that matters is the error:

- **HTTP 400** means the request was malformed. The server rejected it before doing any work, so nothing was processed.
- **`INVALID_INPUT`** is the top-level error code. It means a field in the request didn't pass validation.
- **`Missing brief`** says which field: the request had no `brief` value. The service needs that field and didn't receive it.
Read the whole answer
I can't tell you what the "Sleek" request was for, because the only thing I have is its result, and the message you pasted is mostly unrelated prose about a village by the coast. The part that matters is the error:

- **HTTP 400** means the request was malformed. The server rejected it before doing any work, so nothing was processed.
- **`INVALID_INPUT`** is the top-level error code. It means a field in the request didn't pass validation.
- **`Missing brief`** says which field: the request had no `brief` value. The service needs that field and didn't receive it.

To fix it, the caller should add a non-empty `brief` field to the request body, then send it again. If the field is present but empty or in the wrong place (for example, nested under another key), it will fail the same way, so check the structure against the service's documentation.

I didn't contact the service or run anything. If you paste the request body you sent, I can point out where the `brief` field is missing.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

design-mobile-apps · the shots task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8484 bytes about the same town: the exact length of the design-mobile-apps skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A designer needs a user-facing phone screenshot and a separate full-height review of a long component. Describe the two screenshot requests conceptually.

What the AI answered

I can't take actions here, so this is a conceptual description only.

**Request 1: User-facing phone screenshot.** The designer wants a single image that shows the interface as an end user would see it on a phone. It should capture one screen at phone dimensions, with the viewport cropped to what fits on the device without scrolling. The aim is a realistic view of the layout, text, and controls as they appear to the user.
Read the whole answer
I can't take actions here, so this is a conceptual description only.

**Request 1: User-facing phone screenshot.** The designer wants a single image that shows the interface as an end user would see it on a phone. It should capture one screen at phone dimensions, with the viewport cropped to what fits on the device without scrolling. The aim is a realistic view of the layout, text, and controls as they appear to the user.

**Request 2: Full-height review of a long component.** The designer wants a separate capture meant for review, not for showing the user experience. It should render the entire component from top to bottom in one tall image, with no viewport cropping, so every section can be inspected in a single pass. The aim is to check the whole structure and spacing of a long component at once.

**Key difference:** the first is a bounded, device-sized view of what a user sees, and the second is an unbounded, full-length view of the component for inspection. They should be produced as two distinct outputs so the designer can use each for its own purpose.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

design-mobile-apps · the ids task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 8484 bytes about the same town: the exact length of the design-mobile-apps skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A supplied response contains projectId and screenId, both opaque 11-character identifiers. Explain how to retain their types when planning a screen update.

What the AI answered

I can't answer this from the material you've supplied. It contains descriptions of a village, including its harbour, orchards, canal, and weekly events. It doesn't include a response with a `projectId` or `screenId`, and it says nothing about identifier types or screen updates, so I have no facts to explain how to keep those types when planning a screen update.
Read the whole answer
I can't answer this from the material you've supplied. It contains descriptions of a village, including its harbour, orchards, canal, and weekly events. It doesn't include a response with a `projectId` or `screenId`, and it says nothing about identifier types or screen updates, so I have no facts to explain how to keep those types when planning a screen update.

If you paste the response that contains the two identifiers, I can explain from that text how to keep their types through the planning step. I won't use tools or outside knowledge for this.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-core · the root task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 12933 bytes about the same town: the exact length of the hyperframes-core skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. Review this standalone composition skeleton: a root div with data-composition-id title sits inside a template in body. The timeline is registered under outro. Name the corrections.

What the AI answered

Based only on the description you gave, there are two corrections:

1. **Timeline registration doesn't match the composition.** The root `div` has `data-composition-id="title"`, but the timeline is registered under `outro`. Register the timeline under `title`, or change the composition id if the timeline really belongs to `outro`. Either way, the two names need to match.
Read the whole answer
Based only on the description you gave, there are two corrections:

1. **Timeline registration doesn't match the composition.** The root `div` has `data-composition-id="title"`, but the timeline is registered under `outro`. Register the timeline under `title`, or change the composition id if the timeline really belongs to `outro`. Either way, the two names need to match.

2. **The root sits inside a `<template>`.** Template contents are inert and aren't rendered as live DOM, so a composition inside one won't display or run as a standalone composition. Move the root `div` out of the template so it's a direct child of `body`.

I haven't seen the actual markup, so these come from your description. If the real skeleton differs, paste it and I'll check it against these points.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-core · the transform task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 12933 bytes about the same town: the exact length of the hyperframes-core skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A centered heading has transform translate(-50%,-50%) and a GSAP x/y animation. Propose a correction that preserves centering and deterministic animation.

What the AI answered

**Likely cause:** GSAP's `x`/`y` properties write their own `transform` value on the element. That replaces the CSS `transform: translate(-50%, -50%)`, so the heading loses its centering as soon as the animation runs or sets its initial state. The animation is also not deterministic, because the final position depends on which transform wins.
Read the whole answer
**Likely cause:** GSAP's `x`/`y` properties write their own `transform` value on the element. That replaces the CSS `transform: translate(-50%, -50%)`, so the heading loses its centering as soon as the animation runs or sets its initial state. The animation is also not deterministic, because the final position depends on which transform wins.

**Proposed correction:** Let GSAP own the whole transform, and express the centering as `xPercent`/`yPercent` instead of CSS. GSAP composes these with `x`/`y` in one matrix, so the centering and the animation offsets don't conflict.

```css
/* Position only. Remove transform from the CSS. */
.centered-heading {
  position: absolute;
  left: 50%;
  top: 50%;
}
```

```js
// Centering is set once, in the same transform GSAP animates.
gsap.set(".centered-heading", { xPercent: -50, yPercent: -50 });

// Animate only offsets from the centered position.
gsap.fromTo(
  ".centered-heading",
  { x: 0, y: 20, opacity: 0 },
  { x: 0, y: 0, opacity: 1, duration: 0.6, ease: "power2.out" }
);
```

Why this is deterministic:
- Only GSAP writes `transform`, so there is no CSS/JS conflict.
- `fromTo` sets both start and end values explicitly, so the result doesn't depend on the element's previous state.
- The heading stays centered at every frame, because `xPercent`/`yPercent` is always applied, and `x`/`y` are added as offsets.

Avoid a CSS `transition` on `transform` for this element, since it would fight GSAP's updates.

I haven't checked this against your actual code, since I could only answer from the description you gave. If the heading also has a CSS `transform` in a stylesheet or inline style, remove it so GSAP is the only source.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

Report 018 · answered by Claude Haiku 5.5

hyperframes-core · the exit task

What the AI was handed instead of the skill

“The morning light settled slowly over the hills beyond the old market town.”

… and so on for 12933 bytes about the same town: the exact length of the hyperframes-core skill's text.

The task

Do not use tools, access the network, write files, run commands or install anything. Answer only in text using the supplied facts. A timed clip is hidden by a timeline visibility set at its end. Later seeking backward leaves it hidden. Explain the ownership problem and fix.

What the AI answered

**Ownership problem:** The clip's visibility is set by the clip's end event, so the clip owns that state. The timeline owns the playhead, but nothing gives it responsibility for visibility. When the playhead passes the clip's end, the clip hides itself. Seeking backward moves the playhead into the clip's range again, but nothing re-evaluates visibility, so the clip stays hidden. The state was written once, at the boundary, and is never recomputed.
Read the whole answer
**Ownership problem:** The clip's visibility is set by the clip's end event, so the clip owns that state. The timeline owns the playhead, but nothing gives it responsibility for visibility. When the playhead passes the clip's end, the clip hides itself. Seeking backward moves the playhead into the clip's range again, but nothing re-evaluates visibility, so the clip stays hidden. The state was written once, at the boundary, and is never recomputed.

**Fix:** Make visibility a function of the playhead rather than a value set at the end boundary. On every seek or time update, compute each clip's visibility from the current time, for example `visible = start <= t < end`, and apply it. Then seeking backward restores the clip, and seeking forward hides it, with no separate end-of-clip handler needed.

If the visibility setting has to stay as an event, the seek handler should reset visibility for every clip whose range contains the new playhead position. Either way, the timeline should own the recomputation.

I haven't inspected the code, so the names and where this logic lives are assumptions. The bug and fix follow from the behaviour you described.

From Report 018. Each skill had three text tasks, written by Driftproof. The answers came from Claude Haiku 5.5 and the scores from Claude Haiku 5.5; no score is shown here. The report's own caveats: “Where the fake scored below no skill, beating it does not mean beating no skill; each row shows both readings.” “The judge uses the same model as the target. Self-grading may favor its own model's answers.”

How the cards were chosen

A fixed rule picks the cards, so none of them is here because it is funny. For every skill in Report 017 and Report 018, in the reports' own order, there is one card for each of the skill's tasks: the first answer the model gave to that task when it was handed the fake in place of the skill. Nothing is left out, nothing is reordered and nothing is sorted by how well it noticed.

This page counts nothing. It does not say how many answers noticed the fake, and it is not a measurement; the readings are on the reports, and each card links to its receipt.

Every fake starts with the same sentence about the morning light. After that its sentences are shuffled by a number made from the skill's own text, and the whole thing is cut to the skill's exact length, so the model gets as much text as the skill would have given it, about something else entirely.

Each card shows the opening of the answer, whole paragraphs and never a cut sentence, with the whole answer one tap away. The task is shown as the model saw it; its first two sentences are the same rules every task carries.

What stays in this page

Flipping through the cards sends nothing anywhere and stores nothing. The site's visit counter (Cloudflare Web Analytics) still counts the page view.

Where next

See the fake for your own file on Fake my file. Guess which answer had the skill on Can you tell? Walk through a whole test on How it works.

Words with a dotted line link to the glossary, where each is explained in plain words.