Repository navigation
Description
Lane: openreposhape-2 (openRepoShape-2)
(lane openRepoShape-2, 2026-10-13T13:55Z) Filed on Brett Heap's word: his answer "File as v1.0.0 issue" to this lane's question on L2-11, 2026-10-13T13:52Z. It replaces checklist item L2-11 on #459, its parent. The adopt side is #514, fixed in PR #515.
The state. A person scaffolds with scaffold-project.py --pin <product>@<commit> --pin-source <clone>, and YAML reads the product name as a number: 007, 2026 or 1.5.
What happens. This was probed on main 631f087 with local bare remotes and a stub gh.
- The scaffold accepts
007and exits 0. project.yamlgetsneutral_product_pins:then- 007(scaffold-project.py:1259-1260). The project's YAML reader reads that back as[7].- In a recursive clone of the root,
validate-manifest.py --root .saysmanifest ok.validate-pins.py --root .exits 1 withFINDING neutral-pin-entry-malformed: project.yaml neutral_product_pins entry 7 is not a non-empty product name. The root'svalidate.ymlruns it, so the new project's first CI run is red. - The neutral pin template writes
product: {{PIN_PRODUCT}}bare (templates/assembly-root/contracts/neutral-product-pin.yaml:30), socontracts/007-pin.yamlsaysproduct: 007, which also reads back as 7.- No reader compares that field today (
validate-pins.pyreadssource_repository), so it fails nothing yet. - Both the scaffold and adopt render this template.
- No reader compares that field today (
- The
openGlasscontrol passes both validators.
Why v1.0.0. Brett Heap's word. A scaffold that exits 0 makes a root that its own validator refuses. Only a product name that reads as a number reaches it, but --pin accepts one.
Fix direction.
- Render each
neutral_product_pins:entry so the project's reader gets back the text given. adopt-project.py:executewrites eachneutral_product_pins:entry so it reads back as the textplanrecorded, soplan --pin 007@<commit>no longer saysadoption verifiedover a root whose ownvalidate-pins.pyrefusesentry 7(#514) #515 does this for adopt with_neutral_product_pinsand_neutral_pin_entry. The scaffold hasdouble_quoted(templates/assembly-root/project.yaml and the two leg pins write eight text placeholders bare (id,elected_on,visibility,tracking_branch, the two legpaths andsubmodule_paths), so a checked value YAML reads as another type (007,2026,true,null) is misread by the project or refused by the tool; quoting them reads every one back exactly and lets numeric branch names adopt #259). - Plain names such as
openGlassstay byte for byte as they are. - Write the pin file's
product:so that it too reads back as the text, for both tools. - Leave every other line byte for byte as it is.
How to test.
- For
007,2026,1.5andopenGlass, scaffold with--pin <name>@<commit> --pin-source <a local clone>into local bare remotes. - In a recursive clone of the root, assert:
validate-pins.py --root .andvalidate-manifest.py --root .exit 0;neutral_product_pins:reads back as the text given;contracts/<name>-pin.yaml'sproduct:reads back as the text given.
- The first three cases are red on main.
- The pin template is shared, so adopt's
--pintests run too.
Evidence: in opensoft/brett-wip, handoffs/xFactory/attachments/lane-openRepoShape-2/impl514-adopt-neutral-pins-quoted/tools/scaffold-pin.sh and tools/w514-scaffold-probe-631f087.log. See also PR #515's body, "The scaffold side".
Related:
- adopt-project.py:
executewrites eachneutral_product_pins:entry bare, soplan --pin 007@<commit>saysadoption verifiedover a root whose ownvalidate-pins.pyrefusesentry 7#514 and PR adopt-project.py:executewrites eachneutral_product_pins:entry so it reads back as the textplanrecorded, soplan --pin 007@<commit>no longer saysadoption verifiedover a root whose ownvalidate-pins.pyrefusesentry 7(#514) #515: the adopt side. - templates:
project.yaml, the leg pins andfamily.yamlquote their text placeholders, so--id 007,--tracking-branch 2026,--spec-path trueor--org nullread back as typed, andfamily.py addquotes a member id alike (#259) #395: quoted the templates' text placeholders, but not these. - templates/assembly-root/project.yaml and the two leg pins write eight text placeholders bare (
id,elected_on,visibility,tracking_branch, the two legpaths andsubmodule_paths), so a checked value YAML reads as another type (007,2026,true,null) is misread by the project or refused by the tool; quoting them reads every one back exactly and lets numeric branch names adopt #259:double_quoted. - Tracking: setup, scaffold, family and the shared helpers, creating projects and families #459: the parent.
Activity
brettheap commentedon Oct 13, 2026
CLAIMED — lane openRepoShape-2, session 81650e29-c906-4fe8-96c9-55580bfe0c44@Eagle, 2026-10-13T13:56:25Z, for #516
Logged in
lanes/log/openRepoShape-2.mdat40c738aebc102d5065e89a43b5751d1bf0dee157.The three reads (lane-collision-protocol Rule 1):
tests/test_scaffold_pin_and_reuse.py: the scaffold's `--pin` order is…
docs/release-notes/v1.0.0.md: brought up to main d41cc29, so section …
Merge main 89c6a6c into fix/adopt-plan-quote-yaml-keywords (#181)
adopt-project.py: with #514 and #516 merged, `--pin null@<commit>`, `…
adopt-project.py: `y()` quotes what the plan's loader would read as a…