Skip to content

docs: add label taxonomy and milestone map to PR workflow#2

Merged
shaypal5 merged 1 commit into
docs/add-branch-pr-workflowfrom
docs/pr-workflow-labels-milestones
Apr 18, 2026
Merged

docs: add label taxonomy and milestone map to PR workflow#2
shaypal5 merged 1 commit into
docs/add-branch-pr-workflowfrom
docs/pr-workflow-labels-milestones

Conversation

@shaypal5

Copy link
Copy Markdown
Contributor

Summary

  • Extends the Branch & PR Workflow section in CLAUDE.md with two new required steps: apply labels and assign to a milestone
  • Adds a full label taxonomy (type / layer / status groups) and a milestone map table directly in CLAUDE.md so the rules are self-contained
  • Creates all labels and milestones on GitHub

Labels created (22)

Typetype: feature, type: bugfix, type: docs, type: test, type: refactor, type: ci, type: chore

Layer — 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: recipes

Statusstatus: in progress, status: needs review, status: blocked

Milestones created (6)

Milestone Roadmap scope
v0.1.0 — Repo & CLI skeleton M0
v0.2.0 — First end-to-end world M1–M3
v0.3.0 — Motif variability + exposure modes M4–M6
v0.4.0 — Polished relational output + task export M7–M10
v0.5.0 — CLI-complete release candidate M11–M13
v1.0.0 — Polished OSS release M14–M15

Note

This PR is stacked on top of #1 (branch/PR workflow rules). It should be merged after #1.

🤖 Generated with Claude Code

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>
@shaypal5 shaypal5 added the type: docs Documentation or narrative changes label Apr 18, 2026
@shaypal5 shaypal5 requested a review from Copilot April 18, 2026 06:30
@shaypal5 shaypal5 merged commit 4c918e2 into docs/add-branch-pr-workflow Apr 18, 2026
2 checks passed
@shaypal5 shaypal5 deleted the docs/pr-workflow-labels-milestones branch April 18, 2026 06:30

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.md to 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.

Comment thread .agent-plan.md
## 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 thread CLAUDE.md
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>
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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: docs Documentation or narrative changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants