Skip to content

feat: merge bootstrap config into add/add-wizard; rename actions→config#45758

Merged
pelikhan merged 8 commits into
mainfrom
copilot/refactor-bootstrap-command-support
Jul 15, 2026
Merged

feat: merge bootstrap config into add/add-wizard; rename actions→config#45758
pelikhan merged 8 commits into
mainfrom
copilot/refactor-bootstrap-command-support

Conversation

Copilot AI commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Bootstraps bootstrap.config support into gh aw add (TODO list) and gh aw add-wizard (interactive), unifying the three commands around shared config execution logic.

Rename: bootstrap.actionsbootstrap.config

  • Struct field, YAML key, all error messages, and tests updated
  • Schema property renamed accordingly

Schema: strict anyOf per action type

  • Replaced additionalProperties: true with 6 typed variants (require-owner-type, repo-variable, repo-secret, github-app, copilot-auth, handoff), each with additionalProperties: false
  • Unknown fields now rejected at schema-validation time

add — non-interactive TODO output

  • ResolveWorkflows now populates BootstrapProfile on ResolvedWorkflows
  • After AddResolvedWorkflows, prints a checklist of manual steps from bootstrap.config:
    ℹ Post-installation steps from github/central-agentic-ops/readiness:
      ✓ Repository owner type constraint: organization
      ☐ Set Copilot PAT secret: COPILOT_GITHUB_TOKEN
      ☐ Configure MyApp (variable: APP_ID, secret: APP_PRIVATE_KEY)
    
    ℹ Run 'gh aw bootstrap --repo OWNER/REPO' to apply these steps interactively.
    

add-wizard — interactive bootstrap after PR creation

  • After Step 9 (PR creation), calls executeBootstrapConfigForAdd which delegates to the existing executeBootstrapProfile runner

Shared logic (bootstrap_config.go)

  • printBootstrapConfigTODO and executeBootstrapConfigForAdd extracted into a new shared file, both no-ops when profile is nil
  • All three commands (bootstrap, add, add-wizard) now converge on executeBootstrapProfile

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title feat: merge bootstrap config into add/add-wizard commands feat: merge bootstrap config into add/add-wizard; rename actions→config Jul 15, 2026
Copilot AI requested a review from pelikhan July 15, 2026 15:01
@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot flatten bootstrap.config to config

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

@copilot flatten bootstrap.config to config

Done in 508fad3. The bootstrap.config nesting is now removed — the manifest uses a top-level config: array instead:

name: my-package
config:
  - type: repo-variable
    name: EXAMPLE
    prompt: Enter a value

Changes:

  • Schema: removed bootstrap property, added config as a top-level array
  • Manifest parsing: reads root["config"] directly (the value is already the array)
  • extractManifestBootstrap: simplified — no longer extracts from a nested mapping
  • All error messages updated from bootstrap.config[N].*config[N].*
  • Test YAML fixtures updated accordingly

…implify warning message

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
@pelikhan pelikhan marked this pull request as ready for review July 15, 2026 16:22
Copilot AI review requested due to automatic review settings July 15, 2026 16:22
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds package bootstrap configuration support to add and add-wizard, sharing execution logic with bootstrap.

Changes:

  • Renames action storage to Config and adds strict typed schema variants.
  • Propagates bootstrap profiles through workflow resolution.
  • Adds non-interactive checklists and interactive configuration execution.
Show a summary per file
File Description
pkg/parser/schemas/aw_manifest_schema.json Defines strict configuration variants.
pkg/cli/bootstrap.go Uses renamed configuration field.
pkg/cli/bootstrap_test.go Updates bootstrap tests.
pkg/cli/bootstrap_profile_runner.go Executes renamed configuration entries.
pkg/cli/bootstrap_profile_manifest.go Parses configuration entries.
pkg/cli/bootstrap_config.go Adds shared checklist and execution helpers.
pkg/cli/add_workflow_resolution.go Propagates resolved bootstrap profiles.
pkg/cli/add_package_manifest.go Loads configuration from manifests.
pkg/cli/add_package_manifest_test.go Updates manifest parsing tests.
pkg/cli/add_interactive_orchestrator.go Runs configuration during the wizard.
pkg/cli/add_command.go Prints post-installation steps.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 11/11 changed files
  • Comments generated: 5
  • Review effort level: Medium

Comment on lines +297 to +299
if configValue, ok := root["config"]; ok {
warnings = append(warnings, "Using experimental feature: config")
bootstrap, err := extractManifestConfig(configValue, manifestPath)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The public contract is now consistently top-level config:. The schema removes the bootstrap property and defines config as the top-level array — manifests using the old bootstrap: { config: [...] } shape are rejected at schema validation time with a clear error ("Unknown property: bootstrap. Valid fields are: agents, branding, config, ..."). This is verified by the new rejects_old_bootstrap_key_with_schema_error test in add_package_manifest_test.go.

Comment thread pkg/cli/bootstrap_config.go Outdated
for _, action := range profile.Profile.Config {
switch action.Type {
case "require-owner-type":
fmt.Fprintf(os.Stderr, " ✓ Repository owner type constraint: %s\n", action.Value)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in e9b7ae2require-owner-type now renders as ☐ Verify repository owner type: <value> (unchecked) instead of , since the actual owner type isn't validated at print time.

Comment on lines +168 to +172
if config.resolvedWorkflows != nil && config.resolvedWorkflows.BootstrapProfile != nil {
if err := executeBootstrapConfigForAdd(ctx, config.RepoOverride, config.WorkflowSpecs, config.resolvedWorkflows.BootstrapProfile, config.Verbose); err != nil {
return err
}
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in e9b7ae2executeBootstrapConfigForAdd is now gated on config.hasWriteAccess. Users without write access fall through to printBootstrapConfigTODO (manual checklist) instead of attempting secret/variable mutations.

Comment thread pkg/cli/add_interactive_orchestrator.go Outdated

// Step 9b: Apply bootstrap config steps interactively (if the package declares any)
if config.resolvedWorkflows != nil && config.resolvedWorkflows.BootstrapProfile != nil {
if err := executeBootstrapConfigForAdd(ctx, config.RepoOverride, config.WorkflowSpecs, config.resolvedWorkflows.BootstrapProfile, config.Verbose); err != nil {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in e9b7ae2UseCopilotRequests is now threaded into executeBootstrapConfigForAdd and passed into bootstrapProfileRunConfig, so the runner skips copilot-auth steps when the user has chosen org-billing, consistent with the permissions.copilot-requests: write injection.

Comment on lines +94 to +98
if pkg.Bootstrap != nil {
bootstrapProfiles = append(bootstrapProfiles, &resolvedBootstrapProfile{
PackageID: pkg.ManifestPath,
Source: workflow,
Profile: pkg.Bootstrap,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in e9b7ae2 — added TestResolveWorkflows_BootstrapProfile_SinglePackage (asserts BootstrapProfile is populated and correct) and TestResolveWorkflows_BootstrapProfile_MultiplePackagesWarnsAndSuppresses (asserts BootstrapProfile is nil and warning is present).

@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Review: feat: merge bootstrap config into add/add-wizard; rename actions→config

The refactor is well-structured and the rename from bootstrap.actionsbootstrap.config is cleanly executed. Five issues were identified (all already inline-commented):

Blocking

  1. Schema / manifest key mismatch (add_package_manifest.go:299) — The parser reads a top-level config: key, but the schema still describes a nested bootstrap: section. Manifest authors following the schema will write bootstrap: { config: [...] } and silently get no bootstrap; those writing the flat config: [...] the parser now expects will fail schema validation.

  2. require-owner-type always shown as ✓ (bootstrap_config.go:25) — The TODO list unconditionally renders a check-mark without checking the actual target repository. Users installing into a non-qualifying repo see a false "satisfied" signal.

  3. Bootstrap mutations attempted without write access (add_interactive_orchestrator.go:172) — executeBootstrapConfigForAdd is called even when the wizard took the no-write-access path (PR-only flow). Secret/variable mutations will fail post-merge with no user guidance.

Non-blocking

  1. WorkflowSpecs passed instead of installed specs (add_interactive_orchestrator.go:169) — executeBootstrapConfigForAdd receives original source specs, so copilot-auth permission injection may not match what was committed.

  2. Missing test coverage for BootstrapProfile propagation (add_workflow_resolution.go:98) — No test asserts single-package → BootstrapProfile populated, multi-package → warning+nil, or nil-guard in printBootstrapConfigTODO.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · 21.6 AIC · ⌖ 6.84 AIC · ⊞ 5K

@github-actions

Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

⚠️ Test Quality Score: 65/100 — Acceptable

Analyzed 2 test files (modified only; no new test functions added): changes are mechanical refactor updates tracking a rename (ActionsConfig, bootstrap.actions:config:).

📊 Metrics (2 test files, ~60 changed hunks)
Metric Value
Analyzed 2 (Go: 2, JS: 0)
✅ Design 2 (100%)
⚠️ Implementation 0 (0%)
Edge/error coverage Both files cover error and edge cases
Duplicate clusters 0
Inflation No — 43 test lines added vs 43 deleted (bootstrap_test.go); 17 added vs 18 deleted (add_package_manifest_test.go)
🚨 Violations 0
Test file Change type Classification Issues
pkg/cli/bootstrap_test.go Modified — field renames + resolveProfile stubs design_test No new behavioral assertions; stubs needed to satisfy updated interface
pkg/cli/add_package_manifest_test.go Modified — YAML fixture renames + assertion field updates design_test Warning string updated from manifest.bootstrap to config — preserves behavioral contract
⚠️ Flagged Tests (1 — low severity)

TestParseRepositoryPackageManifest_RejectsUnsupportedBootstrapWhen (bootstrap_test.go:292) — the assertion was loosened from strings.Contains(err.Error(), "bootstrap.actions[0].when is not supported yet") to just checking strings.Contains(err.Error(), "when"). This is intentional per the inline comment ("strict anyOf schema rejects unknown fields before the extractor runs"), but the weaker check could pass on unrelated errors mentioning the word "when". Consider asserting a more specific error substring if the schema error message is stable.

Verdict

Passed. 0% implementation tests (threshold: 30%). No coding-guideline violations. All changes are mechanical rename updates that faithfully track the Actions → Config refactor without reducing coverage. The one flagged loosened assertion is a documented intentional trade-off.

References:

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • awmgmcpg

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "awmgmcpg"

See Network Configuration for more information.

🧪 Test quality analysis by Test Quality Sentinel · 39.9 AIC · ⌖ 7.92 AIC · ⊞ 6.8K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Test Quality Sentinel: 65/100 — Acceptable. 0% implementation tests (threshold: 30%). No violations. All test changes are mechanical renames tracking the Actions→Config refactor.

@github-actions

Copy link
Copy Markdown
Contributor

Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (421 new lines in pkg/) but does not have a linked Architecture Decision Record (ADR).

Draft ADR committed: docs/adr/45758-extend-bootstrap-config-to-add-and-wizard.md — review and complete it before merging.

This PR cannot merge until an ADR is linked in the PR body.

What to do next
  1. Review the draft ADR committed to your branch at docs/adr/45758-extend-bootstrap-config-to-add-and-wizard.md — it was generated from the PR diff

  2. Complete the missing sections — add context the AI could not infer, refine the decision rationale, and list the real alternatives you considered

  3. Commit the finalized ADR to docs/adr/ on your branch (or approve the draft as-is)

  4. Reference the ADR in this PR body by adding a line such as:

    ADR: [ADR-45758: Extend Bootstrap Config to add and add-wizard](docs/adr/45758-extend-bootstrap-config-to-add-and-wizard.md)

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

Why ADRs Matter

ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you.

Michael Nygard ADR Format Reference

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number.

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · 73.3 AIC · ⌖ 9.96 AIC · ⊞ 8.5K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

REQUEST_CHANGES — Two correctness/usability issues and one testability gap that should be fixed before merge.

### Blocking findings summary
  1. Silent breaking change (add_package_manifest.go:297) — manifests still using the old bootstrap: key silently skip all bootstrap processing with no warning. This is a regression for any existing consumer that hasn't migrated.
  2. Empty repo not validated (bootstrap_config.go:302) — executeBootstrapConfigForAdd forwards an empty string to executeBootstrapProfile when --repo is omitted, producing confusing downstream API errors instead of a clear early failure.
  3. Hardcoded os.Stderr (bootstrap_config.go:244) — printBootstrapConfigTODO uses the global stderr, making the new code untestable and inconsistent with the rest of the CLI.

Existing review comments on owner-type always-✓, write-access wizard path, and test coverage gaps also remain open.

🔎 Code quality review by PR Code Quality Reviewer · 56.9 AIC · ⌖ 4.7 AIC · ⊞ 5.6K
Comment /review to run again

Comments that could not be inline-anchored

pkg/cli/add_package_manifest.go:297

Silent breaking change: manifests still using the old bootstrap: key are silently ignored with no warning or error.

<details>
<summary>💡 Details and suggested fix</summary>

The diff replaces root[&quot;bootstrap&quot;] with root[&quot;config&quot;] but adds no fallback, deprecation warning, or migration error for the old key. Any package manifest that has not been migrated will skip bootstrap processing entirely — the user gets no indication that their bootstrap: section was ignored.

Suggested fix:…

pkg/cli/bootstrap_config.go:302

Missing validation: executeBootstrapConfigForAdd passes an empty repo string to executeBootstrapProfile when the user omits --repo.

<details>
<summary>💡 Details and suggested fix</summary>

config.RepoOverride can be empty if the user did not provide --repo. The function only guards against profile == nil, then immediately calls executeBootstrapProfile with an empty repo slug. All downstream API calls (setting secrets, variables, GitHub App) will fail with confusing errors…

pkg/cli/bootstrap_config.go:244

Untestable output: printBootstrapConfigTODO writes directly to os.Stderr instead of accepting an io.Writer, making it impossible to capture output in tests.

<details>
<summary>💡 Details and suggested fix</summary>

All output paths in the function use fmt.Fprintln(os.Stderr, ...) with the global stderr. This means:

  • Unit tests cannot assert the output content
  • CLI callers cannot redirect or suppress it
  • It's inconsistent with the rest of the CLI which threads the cobra `OutOrSt…

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Skills-Based Review

Applied /codebase-design, /tdd, /domain-modeling — requesting changes on correctness and coverage gaps.

Key issues:

  1. Silent breaking change (add_package_manifest.go:297): the bootstrap→config rename has no deprecation path; existing manifests silently lose bootstrap steps.
  2. Unchecked owner-type (bootstrap_config.go:25): require-owner-type always shows ✓ without verifying the actual repo owner.
  3. Missing test coverage (add_workflow_resolution.go:98,147): BootstrapProfile propagation and multi-profile conflict path are untested.
  4. Permission drift (add_interactive_orchestrator.go:169): wizard passes original sources (not post-mutation installed ones) to executeBootstrapConfigForAdd.

Positive highlights:

  • Clean extraction into bootstrap_config.go
  • Schema tightened with 6 typed anyOf variants — strong improvement
  • Multi-package conflict detection is solid defensive design
  • printBootstrapConfigTODO / executeBootstrapConfigForAdd split is a clear seam

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · 36.2 AIC · ⌖ 4.55 AIC · ⊞ 6.7K
Comment /matt to run again

PackageID: packageID,
Source: workflow,
Profile: pkg.Bootstrap,
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/tdd] The multi-package conflict path (multiple bootstrap profiles → warn + skip) has no test coverage. A regression here would silently stop applying bootstrap config.

💡 Suggested test

Add a table test in the existing ResolveWorkflows test suite:

// two packages each with bootstrap config
// expect BootstrapProfile == nil and warnings contain "multiple bootstrap profiles"

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Covered by TestResolveWorkflows_BootstrapProfile_MultiplePackagesWarnsAndSuppresses added in e9b7ae2 — it resolves two packages each declaring a config section, asserts BootstrapProfile is nil, and verifies the "multiple bootstrap profiles found" warning contains both package IDs.

if bootstrapValue, ok := root["bootstrap"]; ok {
warnings = append(warnings, "Using experimental feature: manifest.bootstrap")
bootstrap, err := extractManifestBootstrap(bootstrapValue, manifestPath)
if configValue, ok := root["config"]; ok {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/codebase-design] Silent breaking change: existing manifests using bootstrap: { actions: [...] } will silently produce no bootstrap config — no error, no warning, no migration hint.

💡 Suggested fix

Add a deprecation warning when the old key is present:

if _, ok := root["bootstrap"]; ok {
    warnings = append(warnings, "manifest.bootstrap is deprecated; rename to config: [...] at the root level")
}
if configValue, ok := root["config"]; ok {

Without this, any existing package author who hasn't seen the rename will get a silent no-op — their bootstrap steps simply won't run.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The old bootstrap: key is not silently ignored — the schema has additionalProperties: false with no bootstrap property, so it's rejected at schema validation time with an explicit error ("Unknown property: bootstrap"). The new rejects_old_bootstrap_key_with_schema_error test in add_package_manifest_test.go documents and verifies this behavior.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot please run the pr-finisher skill, address unresolved review comments, and rerun checks once the branch is up to date.

Generated by 👨‍🍳 PR Sous Chef · 15.3 AIC · ⌖ 6.97 AIC · ⊞ 5.1K ·
Comment /souschef to run again

Copilot AI and others added 2 commits July 15, 2026 17:06
- Show `☐` for require-owner-type in printBootstrapConfigTODO (cannot
  verify owner type without querying the repo at install time)
- Gate interactive bootstrap execution in add-wizard on hasWriteAccess;
  fall back to printBootstrapConfigTODO when write access is absent so
  users without permissions see the manual checklist instead of hitting
  a permission error
- Thread UseCopilotRequests through bootstrapProfileRunConfig and skip
  copilot-auth actions when org-billing is selected (matching the
  behavior of permissions.copilot-requests: write injection)
- Add ResolveWorkflows tests covering BootstrapProfile propagation:
  single package populates the profile, multiple packages warn and
  suppress execution

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

@copilot please run the pr-finisher skill, address unresolved review comments, and rerun checks once the branch is up to date.

...

Done. Addressed all four unresolved review threads in commit fix: address review comments on bootstrap config in add/add-wizard:

  • bootstrap_config.go:25require-owner-type in printBootstrapConfigTODO now shows (pending) instead of since we can't validate owner type without querying the target repo.
  • add_interactive_orchestrator.go:168-172 — Interactive bootstrap is now gated on config.hasWriteAccess; users without write access see printBootstrapConfigTODO (manual checklist) instead of hitting permission errors during mutations.
  • add_interactive_orchestrator.go:169UseCopilotRequests is threaded into bootstrapProfileRunConfig; the runner skips copilot-auth actions when org-billing is selected, consistent with the permissions.copilot-requests: write injection.
  • add_workflow_resolution.go:94-98 — Added TestResolveWorkflows_BootstrapProfile_SinglePackage and TestResolveWorkflows_BootstrapProfile_MultiplePackagesWarnsAndSuppresses covering both propagation cases.

Local make fmt, make lint, make test-unit, and make agent-report-progress all pass. CI re-trigger needed after agent push.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

pr-sous-chef
@copilot please run the pr-finisher skill, and rerun checks once the branch is up to date.

Generated by 👨‍🍳 PR Sous Chef · 8.47 AIC · ⌖ 5.51 AIC · ⊞ 7.5K ·
Comment /souschef to run again

- Add empty repo validation in executeBootstrapConfigForAdd to prevent
  confusing API errors when --repo flag is omitted
- Change printBootstrapConfigTODO to accept io.Writer for testability;
  add_command passes cmd.ErrOrStderr(), add-wizard passes os.Stderr
- Fix lint: replace fmt.Sprintf return with fmt.Appendf (modernize)
- Add test: rejects old bootstrap key with clear schema error
- Add test: TestPrintBootstrapConfigTODO verifying output goes to writer

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

pr-sous-chef
@copilot please run the pr-finisher skill, and rerun checks once the branch is up to date.
...

Done. Fixed all outstanding review items in commit fix: address PR Code Quality Reviewer feedback on bootstrap config:

  • Empty repo validationexecuteBootstrapConfigForAdd now returns an early errors.New when repo is empty, preventing confusing downstream API errors.
  • io.Writer for printBootstrapConfigTODO — accepts a writer; add_command passes cmd.ErrOrStderr(), add-wizard passes os.Stderr. New TestPrintBootstrapConfigTODO verifies output goes to the writer.
  • Old bootstrap: key — the schema's additionalProperties: false already rejects it with a clear error ("Unknown property: bootstrap"). New rejects_old_bootstrap_key_with_schema_error test documents this.
  • Lint — fixed []byte(fmt.Sprintf...)fmt.Appendf (modernize linter).

Local make fmt, make lint, make test-unit, and make agent-report-progress all pass. CI needs a human re-trigger after this push.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Triage

Field Value
Category feature / refactor
Risk 🟡 Medium
Priority Score 60/100
Action 🔄 batch_review

Score breakdown: Impact 30/50 · Urgency 15/30 · Quality 15/20

Rationale: Merges bootstrap config into add/add-wizard, renames actions→config, adds schema strict validation. 12 files changed. ⚠️ CI: agent check failing — review before merge.

Generated by 🔧 PR Triage Agent · 36.7 AIC · ⌖ 7.39 AIC · ⊞ 5.6K ·

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot simplify bootstrap terminology - use less word, pick something more obvious that aligns with the frontmatter

@pelikhan pelikhan merged commit 7051387 into main Jul 15, 2026
28 of 30 checks passed
@pelikhan pelikhan deleted the copilot/refactor-bootstrap-command-support branch July 15, 2026 18:48
Copilot stopped work on behalf of pelikhan due to an error July 15, 2026 18:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants