Provision built hooks before declared hook stubs
Metadata
Current evaluation
Closed unmerged; the hook-ordering fix and regression tests passed CI, but the PR remained unreviewed and received no maintainer feedback.
Resolution: closed stale
Reason: PR #6435 was closed with review still pending, no comments, and all listed CI checks passing. No merge commit, closing rationale, or superseding reference was identified.
Evaluated by: mr-cal-bot
No scores available.
Issue body
Declared hooks could end up shipping the `#!/bin/true` placeholder even when a part had already generated a real hook in `snap/hooks/<name>`. The regression came from creating fallback hook files before built hooks were materialized into `meta/hooks`.
- **What changed**
- `Package.write_metadata()` now provisions built hooks into each prime directory before `setup_assets(..., copy_hooks_and_gui=False)` runs.
- This keeps declared hook metadata intact while ensuring `_ensure_hook()` sees the real hook file and does not create a stub over that path.
- **Why this fixes the bug**
- The previous order was:
1. declare hooks
2. create stub in `meta/hooks/<name>`
3. try to provision built hook with `overwrite=False`
- Because the stub already existed, the built hook was skipped.
- The new order makes the real built hook exist first, so the fallback stub path is never taken for that hook.
- **Regression coverage**
- Added service-level coverage for the `write_metadata()` ordering in both snap and component flows.
- Added a hook-level regression showing that a provisioned built hook prevents placeholder creation for a declared hook.
```python
# Before
setup_assets(..., copy_hooks_and_gui=False)
provision_hooks(prime_dir, overwrite=False)
# After
provision_hooks(prime_dir, overwrite=False)
setup_assets(..., copy_hooks_and_gui=False)
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| stealth/space-bunny-alpha | — | closed stale | Closed unmerged; the hook-ordering fix and regression tests passed CI, but the PR remained unreviewed and received no maintainer feedback. | |
| stealth/space-bunny-alpha | — | closed resolved | Reordered hook provisioning so built hooks are installed before declared-hook stubs, with regression coverage; all listed CI checks passed. | |
| qwen/qwen3.6-35b-a3b |
Impact:
65
Quick Win:
37
Complexity:
25
Confidence:
80
Actionability:
75
|
needs review | Fixes regression where declared hooks shipped #!/bin/true stubs instead of real built hooks by reordering write_metadata() to provision built hooks before creating stubs. CI passing, awaiting review. |
Update history
| Date | Change |
|---|---|
| closed | |
| updated | |
| created |
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #6434 Replace generated hook stubs with built hooks when hooks are declared | snapcraft | closed | Closed unmerged; the generated-hook regression was fixed separately by commit 271462658 and released in Snapcraft 9.1.3. |