<feed xmlns='http://www.w3.org/2005/Atom'>
<title>skiff.git/internal/zfsutil/zfsutil.go, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.mikeanthonywild.com/skiff.git/atom?h=master</id>
<link rel='self' href='https://git.mikeanthonywild.com/skiff.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.mikeanthonywild.com/skiff.git/'/>
<updated>2026-08-26T04:04:10Z</updated>
<entry>
<title>Split per-app dataset into OS/data layers, add skiff rebuild</title>
<updated>2026-08-26T04:04:10Z</updated>
<author>
<name>Mike Wild</name>
<email>mike@mikeanthonywild.com</email>
</author>
<published>2026-08-26T04:04:10Z</published>
<link rel='alternate' type='text/html' href='https://git.mikeanthonywild.com/skiff.git/commit/?id=025a365a23f5ed2b3df4df71cbff9689575968d9'/>
<id>urn:sha1:025a365a23f5ed2b3df4df71cbff9689575968d9</id>
<content type='text'>
Each app now gets two ZFS datasets - a disposable OS layer
(zroot/skiff/appbase/&lt;app&gt;) cloned from base, and a persistent data
layer (zroot/skiff/appdata/&lt;app&gt;) holding releases/current/env/
meta.json/data.db. `skiff rebuild --app|--all` discards and reclones
the OS layer to pick up an OS/toolchain/config-template upgrade,
guarded by the same snapshot-and-rollback safety net as deploy and
config changes; the data layer is never touched.

Also fixes stale docs (builds already run via jexec inside the jail,
not on the host; --iface already auto-aliases the jail's IP, so the
manual ifconfig step and its troubleshooting entry are gone) found
while updating the same sections for this feature.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Guard deploys and config changes against leftover state on retry</title>
<updated>2026-08-07T05:03:04Z</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-08-07T05:03:04Z</published>
<link rel='alternate' type='text/html' href='https://git.mikeanthonywild.com/skiff.git/commit/?id=d1e1c226d9a63432c652d373c039a3ae4430f3a2'/>
<id>urn:sha1:d1e1c226d9a63432c652d373c039a3ae4430f3a2</id>
<content type='text'>
- Extract deploy.Run's snapshot -&gt; apply -&gt; restart -&gt; health-check -&gt;
  rollback-on-failure sequence into deploy.GuardedApply, shared with
  cmd/skiff's applyConfigChange, which duplicated it verbatim.
- Clean up the worktree and snapshot a deploy creates when it fails
  before cutover (e.g. a failing release-phase migration), so retrying
  the same sha no longer needs manual cleanup.
- Make checkout and snapshotting idempotent for a same-sha retry after
  a cutover that later got rolled back on a failed health check, where
  the release dir and snapshot are deliberately left behind by design.
- Document the actual cause of a jail not surviving a host reboot:
  FreeBSD ships no /etc/jail.conf, so boot-time `service jail start`
  finds nothing to start regardless of jail.conf.d - only name-targeted
  starts read jail.conf.d directly, which is why manual starts worked.
</content>
</entry>
<entry>
<title>Simplify: centralize paths in layout, dedup zfs snapshot refs, remove dead code</title>
<updated>2026-08-06T04:22:25Z</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-08-06T04:22:25Z</published>
<link rel='alternate' type='text/html' href='https://git.mikeanthonywild.com/skiff.git/commit/?id=fc0c6951d7ac36dd8f30ace929991197dc99ae54'/>
<id>urn:sha1:fc0c6951d7ac36dd8f30ace929991197dc99ae54</id>
<content type='text'>
- Add layout.Config methods (ReleasesDir, PostReceiveHookPath, RCScriptPath,
  RCConfPath) so main.go and jailmgr no longer hand-build paths that layout
  already owns.
- Extract zfsutil.snapRef to replace three inline dataset@tag Sprintfs.
- Remove seven unused exported functions (zfsutil.Exists, jailmgr.Stop,
  sh.RunWithStdinFile, and four dead layout.Config path methods) and their
  now-unused imports.
</content>
</entry>
<entry>
<title>Initial commit of skiff scaffolding</title>
<updated>2026-08-06T04:14:29Z</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-08-06T04:14:29Z</published>
<link rel='alternate' type='text/html' href='https://git.mikeanthonywild.com/skiff.git/commit/?id=9f7c9f2f31acd7bc544dd988af1c8c2fe63ec504'/>
<id>urn:sha1:9f7c9f2f31acd7bc544dd988af1c8c2fe63ec504</id>
<content type='text'>
</content>
</entry>
</feed>
