docs: add label taxonomy and milestone map to PR workflow#2
Merged
shaypal5 merged 1 commit intoApr 18, 2026
Merged
Conversation
Extends the branch/PR workflow in CLAUDE.md with two required steps: apply labels (type + layer taxonomy) and assign to a milestone. Adds the full label taxonomy and a milestone map table to CLAUDE.md. GitHub side: creates 22 labels across type/layer/status groups and 6 milestones (v0.1.0 through v1.0.0) matching the roadmap release gates. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Updates the repo’s contributor workflow documentation to require consistent PR labeling and milestone assignment, and centralizes the label/milestone definitions in CLAUDE.md so the workflow rules remain self-contained.
Changes:
- Adds two mandatory PR steps: apply labels and assign a milestone.
- Documents a label taxonomy (type/layer/status) and a milestone mapping table in
CLAUDE.md. - Updates
.agent-plan.mdto reflect the expanded workflow rules and the existence of GitHub labels/milestones.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| CLAUDE.md | Adds required PR labeling/milestoning steps plus label taxonomy and milestone map table. |
| .agent-plan.md | Updates the “Current System State” to reflect the new workflow requirements and GitHub metadata setup. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| ## Current System State | ||
|
|
||
| Repository initialized. Codebase empty. Architecture, design, and roadmap documents are locked in `docs/`. Agent-context files (`CLAUDE.md`, `llms.txt`, `.agent-plan.md`) are initialized. Branch/PR workflow rules are locked in `CLAUDE.md` and enforced via `.git/hooks/pre-push`. | ||
| Repository initialized. Codebase empty. Architecture, design, and roadmap documents are locked in `docs/`. Agent-context files (`CLAUDE.md`, `llms.txt`, `.agent-plan.md`) are initialized. Branch/PR workflow rules (including label taxonomy and milestone map) are locked in `CLAUDE.md` and enforced via `.git/hooks/pre-push`. GitHub labels and milestones (v0.1–v1.0) are created. |
Comment on lines
+32
to
+39
| | Milestone | Covers | Roadmap | | ||
| |---|---|---| | ||
| | v0.1.0 — Repo & CLI skeleton | M0 | Foundation, CI, package scaffold | | ||
| | v0.2.0 — First end-to-end world | M1–M3 | Config/recipe, narrative, schema | | ||
| | v0.3.0 — Motif variability + exposure modes | M4–M6 | Structure, mechanisms, exposure | | ||
| | v0.4.0 — Polished relational output + task export | M7–M10 | Simulation, observation, render, task | | ||
| | v0.5.0 — CLI-complete release candidate | M11–M13 | CLI, validation harness | | ||
| | v1.0.0 — Polished OSS release | M14–M15 | Sample data, notebooks, docs polish | |
shaypal5
added a commit
that referenced
this pull request
Apr 18, 2026
* docs: add mandatory branch/PR workflow rules to CLAUDE.md Locks the rule that no work goes directly to main. Every unit of work must branch from latest main, commit there, update .agent-plan.md in the same PR, and open a GitHub PR. Also installs a git pre-push hook (.git/hooks/pre-push) that mechanically blocks any push targeting main. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add label taxonomy and milestone map to PR workflow (#2) Extends the branch/PR workflow in CLAUDE.md with two required steps: apply labels (type + layer taxonomy) and assign to a milestone. Adds the full label taxonomy and a milestone map table to CLAUDE.md. GitHub side: creates 22 labels across type/layer/status groups and 6 milestones (v0.1.0 through v1.0.0) matching the roadmap release gates. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * ci: add pr-agent-context CI and refresh workflows Integrates shaypal5/pr-agent-context@v4 with two workflows: - .github/workflows/pr-agent-context.yml Runs on pull_request (opened/synchronize/reopened). Calls the reusable workflow in ci mode with publish_mode=append and include_outdated_review_threads=true so stale-but-unresolved threads always appear in the generated agent context comment. Coverage artifacts are collected under the pr-agent-context-coverage prefix for use by the refresh flow via cross-run lookup. - .github/workflows/pr-agent-context-refresh.yml Triggered by pull_request_review, pull_request_review_comment, and completed non-Actions check_run events. Runs in refresh mode with publish_mode=append (new comment per refresh, previous managed comments hidden), wait_for_reviews_to_settle=true, and enable_cross_run_coverage_lookup=true to reuse coverage artifacts from the CI run on the same head SHA. Both workflows explicitly set include_outdated_review_threads=true per project configuration. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: fix pre-push hook scope note and tighten force-push wording - CLAUDE.md: scope the force-push prohibition to `main` explicitly (`git push --force origin main`) and add a note clarifying that the local pre-push hook is a personal convenience, not a versioned repo-wide enforcement; GitHub branch protection is the team-level guard - .agent-plan.md: correct state description to say "local convenience hook (not versioned) and GitHub branch protection" instead of implying the hook is a reliable repo-wide mechanism Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
shaypal5
added a commit
that referenced
this pull request
May 1, 2026
Review feedback addressed: - Remove primary_task/label_window_days as explicit kwargs from resolve_config() and Generator.from_recipe() — these fields are resolved from recipe YAML and override dict only, not casually overridable, since the generation pipeline doesn't yet support arbitrary task types (Copilot-1, Copilot-3, shaypal5 #1, #2) - Add label_window_days <= horizon_days validation in GenerationConfig.__post_init__ (Copilot-2, shaypal5 #3) - Add tests for invalid primary_task on GenerationConfig: empty string, non-string type (shaypal5 #6, pr-agent-context) - Add tests for invalid label_window_days on Recipe.from_dict: bool, non-positive, float (shaypal5 #7, pr-agent-context) - Add test for label_window_days > horizon_days rejection - Fix existing test using horizon_days=30 (now conflicts with default label_window_days=90) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
shaypal5
added a commit
that referenced
this pull request
May 1, 2026
* feat: carry primary_task and label_window_days into WorldSpec for dataset card Add `primary_task` and `label_window_days` fields to `GenerationConfig` (with defaults preserving current behavior). Propagate through `Recipe.from_dict()`, `resolve_config()`, and `Generator.from_recipe()` so recipe YAML can override them. Update `render_dataset_card()` to read from `world_spec.config` instead of hard-coded string literals. Closes #6 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update .agent-plan.md for WorldSpec task fields (PR #36) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address review feedback — tighten scope, add validation + tests Review feedback addressed: - Remove primary_task/label_window_days as explicit kwargs from resolve_config() and Generator.from_recipe() — these fields are resolved from recipe YAML and override dict only, not casually overridable, since the generation pipeline doesn't yet support arbitrary task types (Copilot-1, Copilot-3, shaypal5 #1, #2) - Add label_window_days <= horizon_days validation in GenerationConfig.__post_init__ (Copilot-2, shaypal5 #3) - Add tests for invalid primary_task on GenerationConfig: empty string, non-string type (shaypal5 #6, pr-agent-context) - Add tests for invalid label_window_days on Recipe.from_dict: bool, non-positive, float (shaypal5 #7, pr-agent-context) - Add test for label_window_days > horizon_days rejection - Fix existing test using horizon_days=30 (now conflicts with default label_window_days=90) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This was referenced May 4, 2026
shaypal5
added a commit
that referenced
this pull request
May 6, 2026
Fold the brutal self-review's findings back into the PR before review. Bugs: - (#1) run_packager validate→write order — both packagers wrote README/metadata on validation failure, leaving corrupt artifacts on disk that would silently get committed. Gated on `errors == ()`; added no-write tests for both packagers. - (#2) Instructor README inlined the public 3-tier README into a 1-tier dataset card. Replaced with a dedicated `INSTRUCTOR_BODY` constant that links to the public dataset and describes only the instructor-specific additions (full-horizon tables, hidden DAG, latent registry, mechanism summary). - (#3) validate_upload_dir_safe also blocks strict descendants of release_dir; `--huggingface-dir release/intro` would otherwise rmtree the intro bundle. Architecture: - (#5) Finished shared-primitives extraction: SOURCE_TREE_BLOCK, validate_readme_substitution, replace_file, replace_dir, load_manifest now live in scripts/_release_common.py. Both packagers reduced to imports. - (#6) Replaced 60-line hand-rolled YAML renderer with yaml.safe_dump + a 4-line _IndentedDumper subclass. - (#7) Removed dead --owner / --dataset-slug CLI flags. - (#8) assemble_upload_dir now takes rendered_readme and writes it. - (#9) build_config_for_tier made pure (no I/O); cheap manifest-stat preflight via _assert_tier_dir_exists. - (#10) --default-config with --variant=instructor errors loudly. CI: - (#4) Added [publish] extra (datasets>=2.14, kaggle>=1.6) so the gated G12.3 / G12.4 / G11.3 tests install in one line. Cleanups: visual cruft (#13–#16), test cruft (#17 — unused tmp_path, dead tag_lines), em-dash YAML round-trip parametrised for the instructor pretty_name. Verification: 1223 tests pass + 5 gated skips; ruff + mypy clean; hash determinism PASS 67/67; leakage probes 0/3 reconstruct on every tier; validate_release_candidate --no-rebuild exits 0. release/{kaggle,huggingface,huggingface-instructor}/dataset-metadata .json|README.md regenerated; audit-artifact-sync tests guard them. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4 tasks
shaypal5
added a commit
that referenced
this pull request
May 6, 2026
* PR 5.2: HuggingFace release packager + load_dataset smoke test
Add `scripts/package_hf_release.py` to generate `release/huggingface/README.md`
with G12.1-compliant YAML frontmatter (pretty_name, license, language,
task_categories, size_categories, tags, three configs with `default: true`
on intermediate per G12.2), inlining the rewritten `release/README.md`
body with HF-specific link rewrites. `--variant=instructor` packages the
companion repo (G12.4) from `release/intermediate_instructor/` into a
separate `release/huggingface-instructor/` upload tree. G12.3 covered
by a parametrised `load_dataset()` smoke test gated on the optional
`datasets` SDK.
Extract shared release-packaging primitives (link rewriter, dir-safety
guard, cover-image validator) into `scripts/_release_common.py`; refactor
the Kaggle packager to import them. `release/kaggle/dataset-metadata.json`
is byte-stable across the refactor.
Delete the legacy `release/HF_DATASET_CARD.md` stub — superseded by the
generated card. Gitignore `release/huggingface{,-instructor}/*` except
the committed README.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* PR 5.2 self-review fixes (Kaggle + HF packagers)
Fold the brutal self-review's findings back into the PR before review.
Bugs:
- (#1) run_packager validate→write order — both packagers wrote
README/metadata on validation failure, leaving corrupt artifacts on
disk that would silently get committed. Gated on `errors == ()`;
added no-write tests for both packagers.
- (#2) Instructor README inlined the public 3-tier README into a
1-tier dataset card. Replaced with a dedicated `INSTRUCTOR_BODY`
constant that links to the public dataset and describes only the
instructor-specific additions (full-horizon tables, hidden DAG,
latent registry, mechanism summary).
- (#3) validate_upload_dir_safe also blocks strict descendants of
release_dir; `--huggingface-dir release/intro` would otherwise
rmtree the intro bundle.
Architecture:
- (#5) Finished shared-primitives extraction: SOURCE_TREE_BLOCK,
validate_readme_substitution, replace_file, replace_dir,
load_manifest now live in scripts/_release_common.py. Both
packagers reduced to imports.
- (#6) Replaced 60-line hand-rolled YAML renderer with yaml.safe_dump
+ a 4-line _IndentedDumper subclass.
- (#7) Removed dead --owner / --dataset-slug CLI flags.
- (#8) assemble_upload_dir now takes rendered_readme and writes it.
- (#9) build_config_for_tier made pure (no I/O); cheap manifest-stat
preflight via _assert_tier_dir_exists.
- (#10) --default-config with --variant=instructor errors loudly.
CI:
- (#4) Added [publish] extra (datasets>=2.14, kaggle>=1.6) so the
gated G12.3 / G12.4 / G11.3 tests install in one line.
Cleanups: visual cruft (#13–#16), test cruft (#17 — unused tmp_path,
dead tag_lines), em-dash YAML round-trip parametrised for the
instructor pretty_name.
Verification: 1223 tests pass + 5 gated skips; ruff + mypy clean;
hash determinism PASS 67/67; leakage probes 0/3 reconstruct on every
tier; validate_release_candidate --no-rebuild exits 0.
release/{kaggle,huggingface,huggingface-instructor}/dataset-metadata
.json|README.md regenerated; audit-artifact-sync tests guard them.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* PR 5.2 Copilot-review fixes (Kaggle + HF packagers)
Fold Copilot's two real findings on the self-review revision back in.
COPILOT-1 — validate_upload_dir_safe was only invoked inside
assemble_upload_dir, which --dry-run skips. A dry-run with
--huggingface-dir release (or .) would write the README into the
unsafe path BEFORE the safety net fired. Hoist the check into
run_packager (both packagers) so it runs before any mkdir or write;
the inner assemble_upload_dir call stays as defence-in-depth for
direct callers. New tests: dry-run with unsafe upload-dir raises
without writing; the same path through main() returns rc=2.
COPILOT-2 — Cover-image path resolution was inconsistent:
validate_cover_image used cover_image as passed, while
assemble_upload_dir did a separate ``release_dir / cover_image.name``
fallback. Diverged for bare-basename inputs (false validation
failures) and two-paths-sharing-a-basename (assembler shadowing the
explicit path). Added resolve_cover_image_path() to
_release_common.py (explicit-wins, release-dir fallback);
run_packager calls it once and threads the resolved path through
validation, the metadata's image field, and assembly. New
tests/scripts/test_release_common.py covers the four resolution
branches; new packager-side tests confirm bare-basename success +
metadata field plumbing.
COPILOT-3 — outdated; already addressed by self-review fix #8 in
commit f2fc4a2. Resolved as already treated; no code change.
Verification: 1232/1232 tests pass + 5 gated skips; ruff + mypy
clean; hash determinism PASS 67/67; leakage probes rc=0 on every
tier; validate_release_candidate --no-rebuild exits 0;
BUNDLE_SCHEMA_VERSION unchanged at 5.
release/{kaggle,huggingface,huggingface-instructor}/* artifacts
regenerated byte-identically.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <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
CLAUDE.mdwith two new required steps: apply labels and assign to a milestoneCLAUDE.mdso the rules are self-containedLabels created (22)
Type —
type: feature,type: bugfix,type: docs,type: test,type: refactor,type: ci,type: choreLayer — one per package module:
layer: core,layer: narrative,layer: schema,layer: structure,layer: mechanisms,layer: simulation,layer: render,layer: exposure,layer: validation,layer: cli,layer: api,layer: recipesStatus —
status: in progress,status: needs review,status: blockedMilestones created (6)
Note
This PR is stacked on top of #1 (branch/PR workflow rules). It should be merged after #1.
🤖 Generated with Claude Code