<feed xmlns='http://www.w3.org/2005/Atom'>
<title>wg-wrap.git/README.md, branch main</title>
<subtitle>wg-wrap runs commands in network namespaces configured with userspace wireguard tunnels.
</subtitle>
<id>https://git.theodohertyfamily.com/wg-wrap.git/atom?h=main</id>
<link rel='self' href='https://git.theodohertyfamily.com/wg-wrap.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/'/>
<updated>2026-06-14T05:28:47Z</updated>
<entry>
<title>docs: add case study on agentic development workflow</title>
<updated>2026-06-14T05:28:47Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-06-14T05:28:47Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=04349c45dbf2b04ee89c6c99ac90152daa799097'/>
<id>urn:sha1:04349c45dbf2b04ee89c6c99ac90152daa799097</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: update diagnostics description and add healthcheck command to README</title>
<updated>2026-06-13T18:08:14Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-06-13T18:08:14Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=1b23c0acbb6e4f45ce4c4e95ad295218d769f709'/>
<id>urn:sha1:1b23c0acbb6e4f45ce4c4e95ad295218d769f709</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(cli): introduce explicit run/exec subcommands to prevent typo-execution</title>
<updated>2026-06-08T02:57:34Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-06-08T02:57:34Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=f8afb7d5889f5c8b6ea256fd078fa8426d21c7be'/>
<id>urn:sha1:f8afb7d5889f5c8b6ea256fd078fa8426d21c7be</id>
<content type='text'>
Prevent the ambiguity where a mistyped subcommand was interpreted as the target
wrapped process.

- Introduce `run` and `exec` (alias) subcommands for launching wrapped processes.
- Promote internal test commands (`test-ns`, `test-args`, `test-lifecycle`) to explicit subcommands.
- Update CLI routing to return an error for unknown subcommands instead of falling back to the default execution path.
- Update `README.md` usage examples and all test suites to use the new subcommand structure.
</content>
</entry>
<entry>
<title>refactor: simplify architecture and improve documentation</title>
<updated>2026-06-05T02:38:44Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-06-05T02:38:44Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=66b782e261f1cd928ad6a8482788a65fb484db45'/>
<id>urn:sha1:66b782e261f1cd928ad6a8482788a65fb484db45</id>
<content type='text'>
- Extract orchestration logic from `internal/cli` into a new `internal/manager` package for better composability.
- Migrate technical implementation details from README.md to package-level godoc strings.
- Rewrite README.md to be more user-centric, focusing on quick start and usage.
- Add comprehensive documentation for exported structs and fields across the project.
- Verify all changes with `go fmt`, `go vet`, `golangci-lint`, and full E2E test suite.
</content>
</entry>
<entry>
<title>refactor: rename module to git.theodohertyfamily.com/wg-wrap and apply public domain license</title>
<updated>2026-05-30T03:35:21Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-05-30T03:35:21Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=da70b10fbd056f19d892acad542ce96c40c58389'/>
<id>urn:sha1:da70b10fbd056f19d892acad542ce96c40c58389</id>
<content type='text'>
- Update go.mod and all internal imports to reflect the new module path
- Add LICENSE file with the Unlicense (public domain dedication)
- Increase timeouts in e2e lifecycle tests to prevent flaky failures
- Verify all tests, linting, and formatting pass with the new module name
</content>
</entry>
<entry>
<title>feat: implement robust namespace lifecycle and resilience suite</title>
<updated>2026-05-30T00:35:31Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-05-30T00:35:31Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=d4cec92f5690a60b3509ab718bdea72dc520110e'/>
<id>urn:sha1:d4cec92f5690a60b3509ab718bdea72dc520110e</id>
<content type='text'>
- Replace marker-file pinning with kernel bind-mount anchors for reliable namespace persistence.
- Implement atomic "last-man-out" cleanup sequence using ProfileLock, preventing namespace leaks and race conditions.
- Add comprehensive resilience test suite covering:
    - Crash recovery from stale runtime state.
    - Host network change stability.
    - Configuration hot-swap session persistence.
    - Resource exhaustion and high-churn lifecycle stress.
- Align documentation and test expectations with rootless session-based persistence.
- Fix argument integrity and isolation leaks.
- Ensure 100% pass rate for all E2E and integration tests.
</content>
</entry>
<entry>
<title>feat(cli,parser): support custom profile names and overhaul WireGuard .conf parser for robustness</title>
<updated>2026-05-29T23:30:26Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-05-29T23:30:26Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=b1b68a4aa441d9ce39d05f85338e371a704dd601'/>
<id>urn:sha1:b1b68a4aa441d9ce39d05f85338e371a704dd601</id>
<content type='text'>
- CLI:
  - Add optional `[name]` argument to `wg-wrap profile import &lt;path&gt; [name]` to allow overriding the imported profile name. If not provided, it falls back to the derived filename.
  - Update `README.md` command documentation to reflect custom profile names and list the `wg-wrap profile stop &lt;name&gt;` subcommand.
  - Expand `internal/cli/profile_test.go` to cover derived vs custom-named profile imports.

- WG Configuration Parser:
  - Overhaul `pkg/wgconf/wgconf.go` to support case-insensitivity on section headers (e.g. `[peer]`, `[interface]`) and key names (e.g. `privatekey`, `allowedips`).
  - Implement robust trailing comment stripping (both `#` and `;`) while preserving inline comment-like characters in cryptographic keys (e.g. `key-with-hash-inside#123`) using whitespace-padded match logic.
  - Clean up and normalize leading/trailing spaces/tabs on parsed keys, values, and list elements (e.g. `AllowedIPs` and `DNS` fields).
  - Gracefully ignore unrecognized keys (e.g. `MTU`, `ListenPort`, `PresharedKey`) without returning errors.
  - Add comprehensive tests in `pkg/wgconf/wgconf_test.go` covering inline/block comments, formatting variations, unrecognized keys, and case-insensitivity.
</content>
</entry>
<entry>
<title>feat: implement userspace wireguard data-path and unprivileged host fd-passing</title>
<updated>2026-05-29T22:29:12Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-05-29T22:29:12Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=ee2f5d545825752af63da36e2b9ec7a92985a875'/>
<id>urn:sha1:ee2f5d545825752af63da36e2b9ec7a92985a875</id>
<content type='text'>
- Implement complete rootless network namespace bootstrap via C launcher using unshare(CLONE_NEWUSER | CLONE_NEWNS | CLONE_NEWNET).
- Resolve unprivileged network isolation blackhole via host-socket preservation (FD passing): open client UDP sockets on the host pre-isolation, clear O_CLOEXEC, and ingest them via custom `FDBind` inside the sandbox.
- Implement isolated routing table automation over `tun0` (addresses, MTU, default routes).
- Implement persistent, multi-process namespace sharing and joining using reference-counted PID files and the setns system call.
- Write robust, self-contained E2E data plane test suites in `tests/e2e/e2e_test.go` using a mock UDP listener.
- Update project documentation (`README.md` and `AGENTS.md`) to reflect completed milestones.
- Ensure 100% test passing rate and zero lint/staticcheck warnings.
</content>
</entry>
<entry>
<title>docs: add diagnostic commands to README</title>
<updated>2026-05-22T15:39:06Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-05-22T15:39:06Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=2e3a1d07b43e6e942e51ba263c6fcdc2351afc0d'/>
<id>urn:sha1:2e3a1d07b43e6e942e51ba263c6fcdc2351afc0d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Implement automatic namespace lifecycle cleanup with last-man-out reference counting</title>
<updated>2026-05-22T15:12:21Z</updated>
<author>
<name>James O'Doherty</name>
<email>james@theodohertyfamily.com</email>
</author>
<published>2026-05-22T15:12:21Z</published>
<link rel='alternate' type='text/html' href='https://git.theodohertyfamily.com/wg-wrap.git/commit/?id=3b56ccecf46b83fa9b0e4b6c54be6ffda395910c'/>
<id>urn:sha1:3b56ccecf46b83fa9b0e4b6c54be6ffda395910c</id>
<content type='text'>
</content>
</entry>
</feed>
