docs/goals/engine-hardening/goal.md
Implement the three specced engine-hardening issues end-to-end and verified:
open_access/demo opt-in).claude internals from the packaged gem, keep sm-* skillsEach issue's acceptance-criteria checkboxes must be satisfied and the repo gates must be green.
"these 3 issues" — referring to #129, #130, #131, which were just broken out of umbrella #128 (PRD #127) and given codebase-validated Technical Specs via issues-to-specs.
existing_plan — each issue already has a ## Technical Spec with behavior slices, tracer bullet, posture, and acceptance-criteria mapping.source_monitor gem.requested — user wants the work implemented.testopen_access opt-in + dummy-app update landing together, breaking the dummy app and existing controller tests; (3) entangling all three fixes in one commit instead of one coherent commit per issue; (4) "fixing" #130 by deleting toasts rather than scoping/decontextualizing them.ApplicationController#broadcast_flash_toasts for request flashes AND Broadcaster#broadcast_toast for background events) — both must be addressed; the three issues are independent (no blocker ordering) but each is its own vertical slice + commit; CI diff-coverage gate requires tests for every new rescue/fallback branch.The oracle for this goal is:
rbenv exec bin/rails test (incl. new per-issue behavior tests) + rbenv exec bin/rubocop + rbenv exec bin/brakeman --no-pager + cd test/dummy && rbenv exec bundle exec rails zeitwerk:check, ALL green, with each acceptance-criteria checkbox on #129/#130/#131 satisfied by a named test or evidence.
The PM must keep comparing task receipts to this oracle. A passing single issue is not full completion — all three issues must be implemented, verified, and their checkboxes mapped to evidence before full_outcome_complete: true.
existing_plan
Continuous execution. Validate the three specs against HEAD, then implement one coherent reversible Worker package per issue (suggested order: #131 packaging → #130 notifications → #129 auth, lowest-to-highest blast radius), verifying each package against the gates before advancing. Review only at the final completion boundary unless a package's verification is rejected or its behavior turns out ambiguous. Finish only when all three issues are implemented, verified, and audited complete.
CLAUDE.md: Minitest (no RSpec/FactoryBot), create_source!/with_inline_jobs helpers, SourceMonitor.reset_configuration! per test, Tailwind/Hotwire, RuboCop omakase, Brakeman clean.open_access/demo opt-in + dummy-app update + CHANGELOG note must land together in the same package.config/master.key, .env*, credentials, *.key/*.pem).Stop only when a final audit proves all three issues are implemented, verified, and their acceptance criteria are satisfied.
Do not stop after plan validation or after a single issue's package passes — advance to the next issue's package.
Mark a specific package blocked (with a receipt) only if it genuinely needs owner input (e.g. confirming the open_access opt-in name, or whether background toasts should exist at all); keep doing the other safe local packages meanwhile.
One Worker package per issue is the natural vertical slice — each delivers a verified, independently-committable outcome mapped to a real issue. #131 is small but legitimately isolated (gemspec + one test); it is not a "tiny task" anti-pattern. Each Worker completes its whole issue (code + tests + docs/CHANGELOG where the spec requires) before handing back.
Machine truth lives at:
docs/goals/engine-hardening/state.yaml
If this charter and state.yaml disagree, state.yaml wins.
/goal Follow docs/goals/engine-hardening/goal.md.
On every /goal continuation:
state.yaml.state.yaml stays authoritative.full_outcome_complete: true.