@@ -183,6 +183,51 @@ quiet failure mode is a config that keeps running the PACKAGED generator while y
183183the ejected file — and never named the dependency the ejected file imports, so the
184184adopter's own `tsc` reported TS2307 on the file the CLI had just said they owned.
185185
186+ **Second review round.** Seven more findings, and the two worth naming share a shape with
187+ the first round's: a change that was RIGHT drew its line one notch too wide, and nothing
188+ could see the difference. **The retargeting split took four ports' `own*()` guidance with
189+ it.** Moving `meta eject` and the `metaobjects.config.ts` keys out of the port-agnostic
190+ `SKILL.md` was correct — a Python project runs `metaobjects gen` and has no eject command,
191+ so those adopters' agents were being handed a procedure their toolchain cannot execute.
192+ But the same move carried off the ADR-0039 section, whose per-port own↔resolving **table
193+ is port-agnostic by construction**: its entire content is the OTHER ports' accessor names,
194+ including the trap that TS `attr()` resolves while Python `attr()` is own. It landed in
195+ `references/typescript.md`, the one page a Java, Python or C# adopter never installs,
196+ while `metaobjects-authoring` still told them to go read it there. And `SKILL.md` closed
197+ by sending every reader to "this skill's `references/` fragment for your server language",
198+ which for four of the five contains no retargeting content at all — a pointer to nothing,
199+ where before the split there had at least been a procedure (a wrong one, which is what the
200+ split fixed). The three port-agnostic sections are back in `SKILL.md`, and the closing
201+ pointer now says what is true per port, including that the other ports have **no** eject
202+ command and owning a generator there means implementing that port's generator interface.
203+
204+ **`meta init` claimed a stub it had just decided not to write.** Its next-steps block was
205+ one static string describing the scaffolded `src/db.ts` in the imperative, printed on every
206+ run — including the `meta init --force` in a project keeping its own config, where the
207+ write is deliberately skipped. Worse was the silence beside it: `wroteScaffoldedConfig` is
208+ only *"no config existed"*, so it is false for the config `init` itself wrote one command
209+ earlier, and a scaffolded project whose `src/db.ts` is deleted lands in the same branch as
210+ a project that owns its config — nothing written, nothing preserved, **nothing said**, and
211+ the next `tsc` reporting `TS2307` on a file the command had just chosen not to restore. It
212+ warns now rather than writing, because dropping a file into a project that owns its config
213+ is the unilateral host-project touch FR-040 §4.4 lists as a defect.
214+
215+ Also from the round: `meta eject` **stated which import a project currently has**, which
216+ it never checks and which is wrong for exactly the four `meta init` scaffolds — the
217+ `--force` re-sync case — so it names the goal and the three branches instead; its
218+ dependency notes could not see a subpath import and reported a **peer-declared package as
219+ missing**, advice that if followed adds the competing physical copy this repo has been
220+ bitten by twice; and **nothing gated `clientDirective` on the generated form**, the one
221+ client artifact the RSC story centres on. That last one is the round's own theme again,
222+ and the proof is sharper than the finding: with the directive dropped from a reference
223+ template alone — the two halves genuinely different — `reference-byte-identical` stays
224+ **green**, because it generates with the knob off, where the call is a no-op and removing
225+ it changes no byte it compares. The equivalence gate cannot see that defect in either
226+ direction. Both UI packages now run the knob against the built-in and the reference
227+ template, and each package's template coverage is a `Record` keyed by ejectable name whose
228+ keys are the proof and whose values are the wiring — so a tenth template is a **compile**
229+ error, not a hand-maintained list that can be edited to claim a gate nobody wrote.
230+
186231### Fixed — eight defects found by adopting the product from scratch, twice
187232
188233Two adoption runs against the published `0.24.4`, docs followed literally and nothing fixed
0 commit comments