Skip to content

Commit 717f8bc

Browse files
committed
site: republish assess.md — the M8 trajectory fix
The hosted assessment prompt no longer lets a small repo yield a flat NOT A FIT. Trajectory ("will this grow?") is now an elicited input, stated as a fact that is NOT in the code; the size row is conditional; unanswered means both branches, never a guess. Regenerated from the skill (metaobjects 92709fb8). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hd5NWZ1rKau63vJzrBSpLb
1 parent d223576 commit 717f8bc

1 file changed

Lines changed: 45 additions & 4 deletions

File tree

www/assess.md

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,16 @@ and which metadata vocabulary the project isn't asking for but would profit from
2020

2121
1. Repo access (required). For monorepos: which subdirectory/service to scope to.
2222
2. Stack confirmation (detect, then confirm): language(s), DB, ORM, web framework.
23-
3. Whether an LLM/prompt surface exists (scopes pillar 4).
24-
4. Org constraints that gate verdicts: who owns the schema (DBA-gated?); is generated
23+
3. **Trajectory — you MUST ask; it is NOT in the code (see M8).** Is this system expected to
24+
**grow** (more entities, a second language or service, an LLM surface, a team beyond one
25+
person), or is it feature-complete and stable at its current size? Is it long-lived, or
26+
disposable? A repo that will triple and a repo that is finished look **identical in git**
27+
and this is the single fact that decides the size-based verdict. If the human doesn't
28+
answer, do not guess: state the assumption you made and mark the verdict conditional on it.
29+
4. Whether an LLM/prompt surface exists (scopes pillar 4).
30+
5. Org constraints that gate verdicts: who owns the schema (DBA-gated?); is generated
2531
code in the repo acceptable?
26-
5. Where to write output. Default: `metaobjects-fit/` at the target repo root.
32+
6. Where to write output. Default: `metaobjects-fit/` at the target repo root.
2733
**Never create `.metaobjects/`** — that directory is the marker of an adopted project.
2834

2935
No secrets, no live-DB connection. You read code and migrations only; `verify --db` is
@@ -81,6 +87,31 @@ for the target's port (§ P5-b) in one clearly-labeled paragraph, tagged
8187
`horizon: "later"` in JSON and never counted in the benefit numbers. Omitting a real
8288
option a deep adopter would take is a scored defect, just like inventing one.
8389

90+
**M8 — The verdict-deciding fact is not always in the code. Size you can count;
91+
TRAJECTORY you cannot.** The honest NOT-A-FIT splits in two, and only one half is
92+
observable:
93+
- **Structural disqualifiers ARE in the repo** — language outside the five ports, no
94+
relational store, a non-entity-shaped domain, a DBA-gated schema. Read them, cite them,
95+
rule on them. These are the only grounds on which you may write a flat `NOT A FIT`.
96+
- **The economic disqualifier is NOT in the repo.** "Too small for the tooling to pay"
97+
depends on whether the system will **grow** — and a 3-entity app that will become 90 is
98+
byte-identical in git to a 3-entity app that is finished forever. **Never infer "this will
99+
never grow" from a small codebase.** Absence of growth-so-far is not evidence of
100+
no-growth-to-come (a young repo is small *because it is young*). This is the one place your
101+
evidence discipline (M2) actively misleads you: there is no `file:line` for intent.
102+
103+
So: **ask** (Input 3). If answered, rule on it and say whose answer it was. If unanswered,
104+
do NOT pick a side — emit **both branches** explicitly, e.g.: *"At 4 entities today the
105+
spine's leverage does not repay the tooling — if this system is done, don't adopt. If you
106+
expect it to grow past ~10 entities, add a second language, or add an LLM surface, adopt at
107+
that point; and note adoption gets more expensive later, because you will be retrofitting a
108+
spine onto more drift, not less."* Tag such claims `confidence: low` and
109+
`checkable: false` — they are conditional on a fact you were not given.
110+
111+
Corollary for scoring/QA: a "negative control" for this assessment cannot be *any small
112+
repo* — it must be one whose trajectory is **known** (e.g. retrospectively: it stayed small
113+
for years). Anything else tests a fact the code does not contain.
114+
84115
---
85116

86117
## The passes — run all of these BEFORE writing the report
@@ -243,7 +274,8 @@ this table worked row-by-row is invalid output):
243274
| Backend language outside TS/Java/Kotlin/C#/Python | NOT A FIT (codegen/runtime); prompt pillar only if a portable sidecar makes sense — usually no |
244275
| No relational store | persistence + `--db` N/A; assess prompt + value/projection pillars on their own merits |
245276
| DB not Postgres/SQLite/D1 | schema pillar (`migrate`, `verify --db`) OUT — say so plainly; data-access unaffected |
246-
| < ~3 entities or non-entity-shaped domain | MARGINAL/NOT A FIT — leverage won't pay for tooling |
277+
| Non-entity-shaped domain (no persistent typed records to speak of) | NOT A FIT — structural, and visible in the code |
278+
| Few entities today (< ~5) | **NOT a flat verdict — this is the M8 trap.** Small-today ≠ small-forever, and git cannot tell you which. Use the trajectory answer (Input 3): *done at this size* → MARGINAL/NOT A FIT (say so plainly — the leverage won't repay the tooling); *expected to grow / add a language / add an LLM surface* → FIT, and note adopting later costs more (you'd retrofit a spine onto more drift). **Unanswered → emit both branches, never guess.** |
247279
| Schema owned by another team (DBA-gated) | migrate pillar restricted; model read-only ("metadata follows the schema"); flag the org constraint |
248280
| Deep hand-tuned ORM investment | churn warning, not a disqualifier: the plan must reproduce those mappings (`@column`/`@table`/`@dbColumnType`) and price it |
249281
| Team rejects generated code in the repo | flag; regen-every-build works but `verify --codegen` semantics differ — call the tradeoff |
@@ -336,6 +368,12 @@ MetaObjects at runtime (local-first) but adopting means owning a codegen step; m
336368
authoring debt is real — price the wave-0 reconciliation; early `verify --db` runs will
337369
surface legacy oddities — triage as findings, not noise.
338370

371+
**State this limit explicitly in §R7 (M8):** *this assessment can read your code, not your
372+
roadmap.* It counts what exists; it cannot see whether the system will grow, and growth is
373+
what decides the size-based verdict. Where the trajectory answer was given, name who gave it;
374+
where it wasn't, say which branch you assumed. An assessment that quietly converts "small
375+
today" into "not worth it, ever" is exactly the false negative this section exists to prevent.
376+
339377
---
340378

341379
## Report contract — `fit-assessment.md`, sections in this order
@@ -463,6 +501,9 @@ Every prose prediction gets a claim. Ceiling statements (P5-b) MUST carry
463501

464502
## Final self-check before writing
465503

504+
0. **Trajectory (M8): did you ASK, or did you infer "won't grow" from a small repo?** A flat
505+
NOT-A-FIT is legal ONLY on a structural disqualifier. If the size row is doing the work and
506+
the trajectory answer is missing, you must show both branches — not a verdict.
466507
1. Disqualifier table worked row-by-row? (Invalid output otherwise.)
467508
2. Census reconciliation block present, with predicted `object.entity` anchored to live
468509
tables, not ORM classes?

0 commit comments

Comments
 (0)