Written 2026-08-08 against guides/asheville-2026/entries/*.json, guide.json, and categories/itinerary/. Proposals only — nothing here has been applied.
Read this first: this analysis can do about a quarter of what the Washington DC one did, and the missing three-quarters is not recoverable. Asheville ran 16–18 July. Its entries were first committed 24 July — six days after the trip ended — so the corpus version was never the plan anyone travelled with. There are 14 plan items and zero outcome values, zero provenance notes, zero confidence blocks, and no trip rules. The changelog says so in its own words: "any account of how the trip went is memory alone."
So: nothing here contradicts your account of how the trip ran, because there is no record of how it ran. What the record can still do is describe what you were given — 38 places, 14 plan items, and the shape of the roster. That turns out to be enough for one real finding, and it is the one you asked about.
"we enjoy local-elevated / local-upscale … less local-crafty. In short — we're wanting the kinds of 'goods' and 'crafts' that look like boutique DTC, not like boutique farmers market."
This is the one claim the corpus can test, because a roster is a record even when outcomes are not. Nine shop places, classified from their own desc fields rather than from my impression of the names:
| the "farmers market" end | what its own desc says |
|---|---|
| Woolworth Walk | "170+ local artists in the restored Woolworth's" |
| Marquee · River Arts District | "200+ local artists and vintage dealers" |
| Battery Park Book Exchange + Grove Arcade | "a makers' market out front on nice days" |
| Asheville Raven & Crone + Points of Light | "metaphysical shop (crystals, herbs, tarot)" |
| Mast General Store | "Old-timey mercantile … scoop-your-own penny candy" |
| Hip Replacements + Honeypot Vintage + Static Age | "true 60s–90s vintage" |
| the "boutique DTC" end | what its own desc says |
|---|---|
| East Fork | "The cult Asheville-made pottery. The Mug has a waitlist online; here it's on a shelf." |
Two more — Malaprop's and Harvest Records + Firestorm Books — are indie bookshops and records, which sit outside the axis entirely.
One of nine shop entries is the thing you now say you want. Six are the thing you say you want less of. And East Fork's description is already written in the vocabulary you used from memory three weeks later — cult, waitlist online — which is a small sign the distinction was legible at authoring time and simply was not the organising principle.
This is a genuine planning input and it did not require outcomes to find. It also could not have been found from your account alone: you knew the preference, you did not know the roster ran six-to-one against it.
What I still cannot tell you is whether you enjoyed East Fork, or whether Woolworth Walk was the disappointment that produced the insight. No outcomes exist. The finding is about the shape of what you were offered, not about what happened in the shops — and those are different claims.
I recommended this exercise almost entirely for the per-traveler section. That section is empty:
"postmortem": {
"completed": "2026-08-08",
"verdict": "Good trip. Learned a lot about what we want.",
"what_worked": "Learned that enjoy-local is pretty specific …"
}
No what_to_change, no per_traveler, and guide.json carries no travelers roster at all — which is why the session packet printed "No roster" where DC printed six profiles.
Said plainly: this pass produced one real finding and no traveler evidence. The thing it was meant to do — give a second, independent recollection to test DC's per-traveler inferences against — did not get done. The profiles are no better supported tonight than they were this morning.
That is not a criticism of a two-sentence account. It is a statement of what the next step would need, and it is small: four short notes, one per traveler, in the boxes that are already there.
None available. Causes are read from outcome and outcome_note; Asheville has zero of both across 14 plan items. This section cannot be written.
For contrast, DC's 31 outcome notes yielded a countable distribution — late starts, rideshare failures, heat, one closure. That distribution is the single most useful planning output of a post-mortem, and it costs one enum value per item to produce.
No proposed edits. There is nothing to propose from.
per_traveler content in the account.travelers roster on the guide.for is filled on 0 of 38 places; skip on 0 of 38; orders on 12 of 38 and every one is keyed "all" rather than by traveler id.The DC analysis proposed edits for Beckett, Malcolm, Sarah and Stella, each resting on two independent citations. Those proposals are unchanged and still uncorroborated — Asheville neither supports nor weakens them. A second trip agreeing would have moved them from "supported by one trip" to "supported by two," which is the difference between an inference and a pattern.
Untestable, and for a more basic reason than missing outcomes: most of the conventions do not exist in this guide.
| convention | status in Asheville |
|---|---|
if_time (○) stops | no stops roster on any of 38 places — 0 tiers exist |
| anchors survived | no brief on the guide, so nothing was declared an anchor |
| early vs late in a day | needs outcomes; none recorded |
| alternates | alt / alt_kind on 0 of 14 plan items |
So the ●○·× tier convention, which the DC analysis flagged as never having been measured, is not merely unmeasured here — it was never applied. Asheville predates it. That is worth stating because it means the convention has now gone three guides without producing a single piece of evidence, and the fix (a stop-level outcome) is still the only thing that would change that.
Asheville has no brief at all. guide.json carries category, days, id, kind_extensions, lifecycle, outputs, postmortem, subtitle, title — and no brief key. So the question this section normally asks ("what did the road discover that a question would have surfaced?") has a different answer here: everything, because nothing was asked.
One proposal, and it comes directly from §1.1 rather than from a gap in the form:
{ "key": "shopping_register", "label": "Shopping Register",
"prompt": "When a place is known for shopping — what register? Designer/DTC brands, indie boutiques, vintage and thrift, artist markets and craft co-ops, outlets. Name what you want AND what you don't.",
"type": "prose" }
The DC brief asked for "Shopping (especially cool brands for teens)" under direction.prioritize, which got the audience right and left the register unstated. Asheville shows why that matters: a roster can be entirely on-brief and still six-to-one wrong, because "local shopping" spans East Fork and a 170-artist craft co-op and the brief has no vocabulary to separate them. This is the clearest brief gap either trip has produced, and it is the only one supported by two guides rather than one.
This section survives the missing outcomes intact, because it reads structure rather than history.
kind is declared as eat | do | shop | photo. Asheville uses sweets on 7 places — Dobra Tea, Double D's, French Broad Chocolate Lounge, Old Europe Pastries, Sunshine Sammies, The Hop, The Soda Fountain.
This is the same class of defect as the DC class-missing bug, one level down: not an undeclared key but an undeclared value. The schema note warns that a key the schema does not declare "renders nowhere and rides in no packet." An out-of-enum value has the same failure mode and no validation catches it.
Meanwhile do is declared and used zero times across 38 places. So the category declares a shelf nobody uses and omits one that seven places need.
Proposed: decide which way to resolve it — add sweets to the enum, or re-file those seven as eat. Then add enum-value validation, which is a one-rule change that would have caught this in July.
ref — including "River Arts District", "The drum circle", "Downtown loop", and "Ooh la la curiosity market", every one of which has a matching place entry sitting in the corpus.The schema calls ref "the join replaces duplication." Here the join is absent on more than half the items, so the itinerary and the shelves are effectively two unconnected documents. DC had the same shape less severely (18 of 53 places orphaned). Proposed: warn when a place is referenced by nothing, and when a plan_item naming a place in its title has no ref.
Across 38 places and 14 plan items, these declared fields are filled zero times: lat, lng, area, address, for, skip, stops, stop_groups, getting_there, slot, alt, alt_kind, outcome, outcome_note.
lat/lng is the one with a visible consequence: its prompt says it "powers Nearby distance sort," so Nearby does not work for Asheville at all. DC has 48 of 53 filled because of a dated backfill pass on 2026-07-24 — the same day Asheville was migrated, which did not receive one.
Every Asheville entry carries created, id, list, order, seed_note, sources, status, updated, visuals — none declared by the schema, exactly as in DC. sources and visuals are filled on 0 of 61, same as DC.
The interesting difference: Asheville has no provenance and no confidence at all. Both were invented later. So the DC finding — that the two richest authored fields in the corpus are declared by no schema — has a corollary here: they are also unevenly present, and any tooling that assumes them will silently treat Asheville as a guide where nothing was ever decided. The changelog already does exactly this, reporting "61 of 61 entry changes carry no stated reason."
Still zero, and Asheville cannot change that.
The guide has no trip_rules — the concept postdates it. The DC analysis held all four DC rules at n=1 pending a second instrumented trip. Asheville is not one: it has no outcomes to test a rule against and no rules of its own to compare. Rule graduation waits for the next trip that records outcomes on the road.
One near-miss worth noting: your DC account said "we tried to account for this after Asheville but obviously need more checks" about closures — so Asheville did teach a lesson that was carried forward informally and never written down anywhere. There is no Asheville entry, note, or commit recording it. If you want it in the record, it would have to be authored now, from memory, and marked as such.
Noting this so I do not re-propose it, and because it is the first evidence the loop works: not_taken was added to the outcome enum in commit 33b212a (2026-08-08, 21:00), which was §6.6 of the DC analysis. Ten DC alternates were re-marked from skipped to not_taken — and d6-blagden was correctly left as skipped, because its note reads "Sadly ran out of time." That is the distinction doing exactly the work it was proposed to do.
Consequence worth flagging: the DC analysis's headline totals are now stale. It reported "17 skipped"; the corpus now holds 6 real skipped + 1 alternate skipped + 10 not_taken. A framework change silently invalidates the numbers in every prior analysis that quoted the old shape. That is an argument for the ledger recording which analyses its changes invalidate — worth adding to the post-mortem loop spec.
Everything in §2, §3, §4, and most of §1 — but the causes are worth separating, because they need different fixes: