Skip to content

refactor: load presets from core runtime.yaml (eliminate drift)#127

Merged
donbader merged 1 commit into
mainfrom
refactor/dynamic-presets
Jun 8, 2026
Merged

refactor: load presets from core runtime.yaml (eliminate drift)#127
donbader merged 1 commit into
mainfrom
refactor/dynamic-presets

Conversation

@donbader

@donbader donbader commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Problem

The hardcoded Presets map in dockerfile.go duplicated core/presets/*/runtime.yaml and drifted. This caused pi to install @anthropic-ai/claude-code instead of the correct packages. Every preset update required a CLI code change — violating the "plugins are pure data" principle.

Changes

Dynamic presets (main fix)

  • New preset.go with LoadPresets(coreDir) — reads runtime.yaml files from fetched core
  • Removed hardcoded Presets map entirely
  • Generator loads presets at construction time from core directory
  • RenderDockerfile accepts presets as parameter instead of referencing global state
  • Added SetPresets() for tests without a core directory

Download retry (bonus)

  • download() in fetcher.go retries up to 3 times with backoff on 5xx errors
  • Fixes flaky CI failures from transient GitHub 504s

Result

Preset updates now take effect on next generate without any CLI release. True data-driven presets.

- Remove hardcoded Presets map from dockerfile.go (was drifting from
  core/presets/*/runtime.yaml — caused pi to install wrong packages)
- Add preset.go with LoadPresets() that reads runtime.yaml files from
  the fetched core directory at generate time
- Thread presets through Generator → RenderDockerfile
- Add SetPresets() for tests that don't have a core directory
- Add retry with backoff (3 attempts, 2s/4s delay) for core download
  to handle transient GitHub 504s in CI

Preset updates now take effect immediately on next generate without
any CLI code changes — true data-driven presets.
@donbader donbader force-pushed the refactor/dynamic-presets branch from 012814f to d95f252 Compare June 8, 2026 14:55
@donbader donbader merged commit e5335ef into main Jun 8, 2026
12 of 14 checks passed
@donbader donbader deleted the refactor/dynamic-presets branch June 8, 2026 15:05
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.

1 participant