You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
Copy file name to clipboardExpand all lines: www/assess.md
+45-4Lines changed: 45 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,10 +20,16 @@ and which metadata vocabulary the project isn't asking for but would profit from
20
20
21
21
1. Repo access (required). For monorepos: which subdirectory/service to scope to.
22
22
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
25
31
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.
27
33
**Never create `.metaobjects/`** — that directory is the marker of an adopted project.
28
34
29
35
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
81
87
`horizon: "later"` in JSON and never counted in the benefit numbers. Omitting a real
82
88
option a deep adopter would take is a scored defect, just like inventing one.
83
89
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
+
84
115
---
85
116
86
117
## The passes — run all of these BEFORE writing the report
@@ -243,7 +274,8 @@ this table worked row-by-row is invalid output):
243
274
| Backend language outside TS/Java/Kotlin/C#/Python | NOT A FIT (codegen/runtime); prompt pillar only if a portable sidecar makes sense — usually no |
244
275
| No relational store | persistence + `--db` N/A; assess prompt + value/projection pillars on their own merits |
245
276
| 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.**|
247
279
| Schema owned by another team (DBA-gated) | migrate pillar restricted; model read-only ("metadata follows the schema"); flag the org constraint |
248
280
| Deep hand-tuned ORM investment | churn warning, not a disqualifier: the plan must reproduce those mappings (`@column`/`@table`/`@dbColumnType`) and price it |
249
281
| 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
336
368
authoring debt is real — price the wave-0 reconciliation; early `verify --db` runs will
337
369
surface legacy oddities — triage as findings, not noise.
338
370
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
+
339
377
---
340
378
341
379
## 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
463
501
464
502
## Final self-check before writing
465
503
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.
466
507
1. Disqualifier table worked row-by-row? (Invalid output otherwise.)
467
508
2. Census reconciliation block present, with predicted `object.entity` anchored to live
0 commit comments