Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 3, 2026

Campaign Feature Stabilization - Complete ✅

Goal: Make tracker-label optional while keeping the project board as the canonical source of campaign membership.

Implementation Summary

Successfully implemented minimal, campaign-focused changes to make the tracker-label field optional throughout the campaigns feature. The project board is now clearly documented as the canonical source of campaign membership, with tracker-label serving as an optional ingestion hint.

Changes Completed

  • Validation Logic (pkg/campaign/validation.go)

    • Removed mandatory validation that required tracker-label to be present
    • Kept format validation (colon-separated pattern) when tracker-label is provided
    • Added comment explaining that tracker-label is optional and project board is canonical
  • Validation Tests (pkg/campaign/validation_test.go)

    • Updated TestValidateSpec_MissingTrackerLabel to expect validation success (no problems)
    • Kept TestValidateSpec_InvalidTrackerLabelFormat to ensure format validation still works
  • JSON Schema (pkg/campaign/schemas/campaign_spec_schema.json)

    • Updated description to emphasize tracker-label is an "optional ingestion hint"
    • Clarified that project board is the canonical source of campaign membership
  • Code Documentation (pkg/campaign/spec.go)

    • Updated TrackerLabel field comment to clarify it's optional
    • Emphasized project board as canonical source
    • Fixed formatting (trailing whitespace)
  • User Documentation

    • docs/src/content/docs/guides/campaigns.md - Updated to clarify project board is canonical source
    • docs/src/content/docs/guides/campaigns/specs.md - Updated core fields, diagrams, and descriptions

Verification Results

All campaign tests pass (71 tests in pkg/campaign/)
CLI commands work correctly

  • gh aw campaign lists campaigns successfully
  • gh aw campaign validate validates both existing campaigns without issues
  • gh aw campaign status shows correct status including optional tracker-label
    Linting passes (make lint)

Validation behavior verified

  • Campaign specs without tracker-label pass validation
  • Campaign specs with invalid tracker-label format are correctly rejected
  • Existing campaigns with tracker-label continue to validate successfully

Backward compatibility maintained

  • Existing campaigns still work (both have tracker-labels)
  • Status code already handled empty tracker-label gracefully (FetchItemCounts)
  • Orchestrator already conditionally includes tracker-label in generated markdown
  • Templates already use {{if .TrackerLabel}} for conditional rendering

Code Quality

  • No changes to MCP servers/tools/schemas/tests (as required)
  • No workflow recompilations performed (as required)
  • Only campaign-scoped changes in pkg/campaign/ and related docs
  • Minimal surgical changes - only what was necessary
  • All existing functionality preserved
  • Code properly formatted and linted

Key Design Decisions

  1. Project board is canonical: The GitHub Project board URL is the required field that defines campaign membership
  2. Tracker-label is a hint: When provided, it helps discovery/ingestion but is not required for campaign operation
  3. Format validation preserved: When tracker-label is provided, we still validate it follows the namespaced pattern (e.g., campaign:id)
  4. Graceful degradation: All campaign functionality works correctly whether tracker-label is present or not
Original prompt

Implement the minimal changes required to add or fix the “campaigns” feature in this repository, assuming no prior context. Keep the work strictly campaign-scoped: modify only campaign-related code, schemas, docs, and tests (prefer pkg/campaign/**) and avoid unrelated refactors. Enforce these rules: the campaign project board is the canonical source of campaign membership, and tracker-label is optional (only validate/mention it when provided). Do not change anything related to MCP servers/tools/schemas/tests, and do not run or commit workflow recompilations (no make recompile, no broad .lock.yml updates). Run only targeted campaign tests; if any unrelated failures appear outside campaigns, do not fix them—document them as out of scope.

no, focus on the features

Implement and stabilize the campaigns feature set with the smallest possible, campaign-focused changes. Make campaigns work end-to-end: campaign orchestration, spec/schema validation, and user-facing prompts/docs, plus the minimal tests needed to prove correctness. Treat the campaign project board as the canonical source of campaign membership, and make tracker-label an optional ingestion hint (only validate/use it when present). Keep all edits confined to campaign-related areas (prefer pkg/campaign/**) and avoid unrelated refactors.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

- Remove mandatory validation for tracker-label
- Keep format validation when tracker-label is provided
- Update schema description to emphasize optional nature
- Update documentation to clarify project board is canonical source
- All campaign tests pass

Co-authored-by: mnkiefer <[email protected]>
Copilot AI changed the title [WIP] Add and stabilize campaigns feature with minimal changes Make tracker-label optional in campaign specs Jan 3, 2026
Copilot AI requested a review from mnkiefer January 3, 2026 05:20
@mnkiefer mnkiefer marked this pull request as ready for review January 3, 2026 05:25
@mnkiefer
Copy link
Contributor

mnkiefer commented Jan 3, 2026

@copilot: make lint

Copy link
Contributor Author

Copilot AI commented Jan 3, 2026

@copilot: make lint

Linting completed successfully. Fixed formatting issue (trailing whitespace in comments) in commit ce49955.

@mnkiefer mnkiefer merged commit 7249bc1 into main Jan 3, 2026
91 checks passed
@mnkiefer mnkiefer deleted the copilot/add-campaigns-feature branch January 3, 2026 05:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants