refactor: restructure project layout ahead of the full harness rebuild#9
Conversation
Renames scripts/ -> forge/ and references/ -> grimoire/, reorganizes both into pipeline-stage/functional subfolders, differentiates naming from the shared upstream lineage, and drops the stale PROMOTION.md. Verified via forge/tests/test_pipeline.py (19/19 pass) with zero broken references.
There was a problem hiding this comment.
Code Review
This pull request reorganizes the project structure by moving documentation and rubrics from references/ to grimoire/, and relocating scripts from scripts/ to subdirectories under forge/. It also updates all internal references, help messages, error messages, and tests to reflect these new paths, and deletes the promotion playbook. The reviewer feedback correctly identifies several instances in documentation, CLI help text, warning messages, and error messages where the new forge/ or grimoire/ path prefixes were missed, ensuring complete consistency across the codebase.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| - References: detail-inventory.md, character-reconstruction.md, likeness-maximization.md; procedural-patterns.md detail + character recipes; validation-rubric.md character suitability branch. | ||
| - Scripts: build_detail_inventory.py, extract_reference_landmarks.py, solve_reference_camera.py, delight_reference.py, bake_projected_texture.py. | ||
| - Gates: stage2_spec/validate_sculpt_spec.py detail-inventory gate (count + component/material linkage + gloss/fastener checks) and character track gate (anatomy + character feature targets); both backward compatible. | ||
| - References: intake/detail_inventory.md, character/reconstruction.md, character/likeness_maximization.md; build/geometry_patterns.md detail + character recipes; intake/validation_rubric.md character suitability branch. |
There was a problem hiding this comment.
The references listed here are missing the grimoire/ prefix. To maintain consistency with the rest of the document and the actual file structure, they should be prefixed with grimoire/.
| - References: intake/detail_inventory.md, character/reconstruction.md, character/likeness_maximization.md; build/geometry_patterns.md detail + character recipes; intake/validation_rubric.md character suitability branch. | |
| - References: grimoire/intake/detail_inventory.md, grimoire/character/reconstruction.md, grimoire/character/likeness_maximization.md; grimoire/build/geometry_patterns.md detail + character recipes; grimoire/intake/validation_rubric.md character suitability branch. |
| expected = completed_passes_from_history(spec, pass_order_ids or build_pass_ids) | ||
| if list(completed) != expected: | ||
| warnings.append("sculptPipeline.completedPasses is out of sync with reviewHistory; run sculpt_pass_orchestrator.py sync") | ||
| warnings.append("sculptPipeline.completedPasses is out of sync with reviewHistory; run stage3_build/orchestrate_passes.py sync") |
There was a problem hiding this comment.
The warning message suggests running stage3_build/orchestrate_passes.py sync, but since scripts are executed from the skill root, it should include the forge/ prefix to match the actual file structure.
| warnings.append("sculptPipeline.completedPasses is out of sync with reviewHistory; run stage3_build/orchestrate_passes.py sync") | |
| warnings.append("sculptPipeline.completedPasses is out of sync with reviewHistory; run forge/stage3_build/orchestrate_passes.py sync") |
| parser.add_argument("--delit-image", help="Path to a de-lit albedo produced by stage1_intake/delight_albedo.py, if available") | ||
| parser.add_argument("--camera", help="Path to a referenceCamera JSON produced by stage1_intake/solve_camera_pose.py") |
There was a problem hiding this comment.
The help messages for --delit-image and --camera refer to script paths without the forge/ prefix. Since scripts are executed from the skill root, these paths should be prefixed with forge/ to avoid confusion.
parser.add_argument("--delit-image", help="Path to a de-lit albedo produced by forge/stage1_intake/delight_albedo.py, if available")\n parser.add_argument("--camera", help="Path to a referenceCamera JSON produced by forge/stage1_intake/solve_camera_pose.py")| raise ValueError( | ||
| f"build pass {requested_pass!r} is locked; complete {previous!r} first with " | ||
| "append_sculpt_review.py action=continue and browser screenshot evidence" | ||
| "stage4_review/append_review.py action=continue and browser screenshot evidence" |
There was a problem hiding this comment.
The error message is missing the forge/ prefix for stage4_review/append_review.py. It should be updated to forge/stage4_review/append_review.py to match the execution path from the skill root.
| "stage4_review/append_review.py action=continue and browser screenshot evidence" | |
| "forge/stage4_review/append_review.py action=continue and browser screenshot evidence" |
| raise ValueError( | ||
| "visual pass cannot use action=continue without --comparison-image; " | ||
| "create one with make_visual_comparison_sheet.py" | ||
| "create one with stage4_review/make_comparison_sheet.py" |
There was a problem hiding this comment.
The error message is missing the forge/ prefix for stage4_review/make_comparison_sheet.py. It should be updated to forge/stage4_review/make_comparison_sheet.py to match the execution path from the skill root.
| "create one with stage4_review/make_comparison_sheet.py" | |
| "create one with forge/stage4_review/make_comparison_sheet.py" |
Renames scripts/ -> forge/ and references/ -> grimoire/, reorganizes both into pipeline-stage/functional subfolders, differentiates naming from the shared upstream lineage, and drops the stale PROMOTION.md. Verified via forge/tests/test_pipeline.py (19/19 pass) with zero broken references.