Plan: Production readiness — v0.1.0 release blockers #11
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
residual/config#11
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Overview
Full production-readiness audit completed 2026-09-20. The original 7 items from #3 are all implemented. This issue tracks the remaining gaps identified during audit.
Issue Tracker
// indirect0o700→0o777map[string]T+map[string]anysupportPhase 1 — Quick wins (4 trivial fixes in one commit)
#4: Fix go.mod
go mod tidy— fixes yaml.v3// indirectgrep yaml go.modshould NOT show// indirect#9: Fix mkdir permissions
core/load.go:75— change0o700to0o777#6: Document cmd/ as internal
#10: Known Limitations
Phase 2 — CI workflow
#5: GitHub Actions
Create
.github/workflows/ci.yml:.golangci-lint.ymlwith minimal configPhase 3 — Non-string slice env vars
#8: Extend setSlice
core/env.go— add[]int,[]bool,[]float64parsingcore/env_test.go— tests for each type + parse error casesPhase 4 — Map support
#7: map[string]T + map[string]any
core/write.go— nil map check for omitempty in structToMapPhase 5 — Conf tag validation
#2: Panic on double-quote conf tags
core/tag.gobuildShadowType— panic with descriptive message"config: FATAL: field %q has conf tag containing a double quote (%q) — this produces malformed struct tags and breaks decoding. Remove the double quote from the conf tag value."Phase 6 — Final verification
Commit Strategy
Verification
After each phase:
✅ All phases complete
All 8 production-readiness issues are resolved and closed. Here's what was delivered:
Commits (in order)
8acff19— fix: go.mod deps, mkdir perms, README limitations and internal tools note (Phase 1: #4, #9, #6, #10)12320de— ci: add GitHub Actions with go vet, test -race, and golangci-lint (Phase 2: #5)e419f67— feat: support []int, []bool, []float64 env var overlays (Phase 3: #8)4b37031— feat: add map[string]T and map[string]any support with tests (Phase 4: #7)00ded01— feat: panic on conf tag values containing double quotes (Phase 5: #2)What each phase delivered
.github/workflows/ci.yml(build/vet/test-race) +.golangci-lint.ymlsetSliceextended for[]int,[]bool,[]float64— 6 new testsbuildShadowTypeif conf tag contains"(note: Go'sLookuptruncates at first", so this is defense-in-depth)Test results
Known limitations (documented in README)
MergeWithRuleswildcards match leaf field name only, not dotted pathmap[string]Tonly)