Skip to content
This repository was archived by the owner on May 13, 2026. It is now read-only.

refactor(atom): use simple KeyMetadata name in Molecule field types - #679

Merged
shiba4life merged 1 commit into
mainfrom
phase-3b/fix-molecule-super-refs
May 1, 2026
Merged

refactor(atom): use simple KeyMetadata name in Molecule field types#679
shiba4life merged 1 commit into
mainfrom
phase-3b/fix-molecule-super-refs

Conversation

@shiba4life

Copy link
Copy Markdown
Collaborator

Summary

`utoipa::ToSchema` derives the `$ref` from the path expression at the field site, not the type's effective name. So `super::KeyMetadata` produces `#/components/schemas/super.KeyMetadata` and `crate::atom::KeyMetadata` produces `#/components/schemas/crate.atom.KeyMetadata` — neither matches the registered component name (`KeyMetadata`).

Downstream, fold_db_node's drift check (`npm run generate:api`) fails:

```
✘ Can't resolve $ref at #/components/schemas/MoleculeRange/properties/key_metadata/additionalProperties
✘ Can't resolve $ref at #/components/schemas/Molecule/properties/key_metadata/allOf/0
✘ Can't resolve $ref at #/components/schemas/MoleculeHash/properties/key_metadata/additionalProperties
✘ Can't resolve $ref at #/components/schemas/MoleculeHashRange/properties/key_metadata/additionalProperties/additionalProperties
```

Fix: add `KeyMetadata` to each file's `super::{...}` (or `crate::atom::{...}`) imports and reference it bare at the field site. utoipa then emits the canonical `#/components/schemas/KeyMetadata` ref.

Follow-up to #678 (which added `ToSchema` derives to these types but missed the simple-name issue).

Test plan

  • `cargo check -p fold_db` clean
  • 88 atom-module tests pass
  • `cargo fmt --all` clean
  • CI green
  • After cascade lands in fold_db_node, `npm run generate:api` succeeds with Molecule family in `components(schemas(...))`

🤖 Generated with Claude Code

`utoipa::ToSchema` derives the `$ref` for a field's referenced type from
the path expression used at the field site. So
`super::KeyMetadata` produces `#/components/schemas/super.KeyMetadata`,
and `crate::atom::KeyMetadata` produces
`#/components/schemas/crate.atom.KeyMetadata` — neither matches the
component registration name (`KeyMetadata`), so downstream consumers
(e.g. fold_db_node's `npm run generate:api`) fail with unresolved $refs:

```
✘ Can't resolve $ref at #/components/schemas/MoleculeRange/properties/key_metadata/additionalProperties
✘ Can't resolve $ref at #/components/schemas/Molecule/properties/key_metadata/allOf/0
✘ Can't resolve $ref at #/components/schemas/MoleculeHash/properties/key_metadata/additionalProperties
✘ Can't resolve $ref at #/components/schemas/MoleculeHashRange/properties/key_metadata/additionalProperties/additionalProperties
```

Fix by adding `KeyMetadata` to the `super::{...}` imports in each
file (or `crate::atom::{...}` for `molecule_hash_range.rs`) and using
the bare name at the field site. utoipa now emits the canonical
`#/components/schemas/KeyMetadata` ref.

No behavior change — the runtime serialisation is identical. Verified
by running 88 atom-module tests and `cargo check -p fold_db`. Follow-up
to #678 (which added `ToSchema` derives to these types in the first
place).
@shiba4life
shiba4life enabled auto-merge May 1, 2026 23:27
@shiba4life
shiba4life added this pull request to the merge queue May 1, 2026
Merged via the queue into main with commit 2396adb May 1, 2026
14 checks passed
@shiba4life
shiba4life deleted the phase-3b/fix-molecule-super-refs branch May 1, 2026 23:32
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant