Rebuild properties.yml as tier-fragment templates; add repos/lineage map - #17
Merged
Conversation
Ports the properties.yml redesign from ai_vault: modules/setup/properties.py now assembles properties.yml from uniform, same-named tier fragments under modules/setup/templates/properties/*.yml (this repo's own template_python.yml declares just itself, since it's the lineage root) instead of a hardcoded in-module template. The repos key is built additively — each fragment contributes only its own org/repo + lineage edge to its parent — and properties.py is a no-op once properties.yml exists (delete/rename to regenerate) rather than re-stamping on every run. Also adds: - properties.yml's repos/lineage key + a related-repos recognition trigger (.github/instructions/repos.instructions.md, /repos command, .github/skills trigger) - tests/test_markdown_style.py enforcing no stray --- dividers in .github/instructions/*.md (and fixes style.instructions.md's own violation) - tests/test_setup_properties.py for the new properties.py mechanism - Fixes a stale properties.example.yml reference in the /docs command (deleted properties.example.yml in favor of the tracked tier fragments) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
modules/repo/pr_create.py already does this; git.instructions.md never documented it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Force /repos and the related-repos trigger to read repos.instructions.md in full rather than just summarizing properties.yml. Adds "all of the repos" as a trigger phrase (distinct scope from "related/other repos" — includes this repo), and splits the workflow into Phase 1 (apply to every repo, no pushing) -> checkpoint (confirm with the user) -> Phase 2 (ship each one), so a multi-repo request doesn't pipeline straight through to N unattended PRs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ports the properties.yml redesign built in
ai_vaultback to the root template:modules/setup/properties.pynow assemblesproperties.ymlfrom uniform, same-named tier fragments undermodules/setup/templates/properties/*.ymlinstead of a hardcoded in-module template, and adds arepos/lineage map so any descendant repo can look up its own family tree.Changes
modules/setup/properties.pyrebuilt: assemblesproperties.ymlfrom every fragment undermodules/setup/templates/properties/*.yml(this repo's owntemplate_python.ymldeclares just itself, since it's the lineage root — no parent, no lineage edge)reposkey is built additively: each fragment contributes only its own org/repo + the lineage edge to its parent, deep-merged root-to-leaf — a repo only ever learns its own ancestor chain, never a sibling branchmain()is now a no-op onceproperties.ymlexists (delete/rename to regenerate) instead of re-stamping every runproperties.example.yml— superseded by the trackedtemplates/properties/*.ymlfragments.github/instructions/repos.instructions.md, a/reposcommand (all synced dirs), and a.github/skills/repostrigger for recognizing "related repos"/"the repos"/"other repos"tests/test_markdown_style.pyenforcing no stray---dividers in.github/instructions/*.md(and fixedstyle.instructions.md's own violation)tests/test_setup_properties.pyfor the new mechanismproperties.example.ymlreference in the/docscommand's file listTest plan
uv run --no-sync invoke test— ruff, pylint (10/10), pytest (11 passed), yamllint, actionlint all greenproperties.py's_build_initial_content()renders valid, correctly-ordered YAMLmain()is a true no-op whenproperties.ymlalready exists🤖 Generated with Claude Code