Commit graph

10 commits

Author SHA1 Message Date
Snider
6db0ad26e3 fix(registry): idempotent Unregister/Release when file missing
The coreio.Local.Delete error wraps the underlying os.ErrNotExist
through core.E, so the prior os.IsNotExist check on the registry
Unregister path never matched. Same wrapping broke the daemon
Stop path that relied on pidfile.Release being a no-op for absent
files.

Switch both to coreio.Local.Exists before Delete, which is the
idempotent pattern the callers already assume. Adds coverage for
TestPIDFile_Release_MissingIsNoop and fixes TestRegistry_Unregister
MissingIsNoop.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-14 19:44:06 +01:00
Snider
e9b85ae817 fix(pidfile): replace path.Dir with filepath.Dir for cross-platform compat
- pidfile.go: use filepath.Dir instead of POSIX-only path.Dir (line 55)
- pidfile.go: simplify redundant bytes/string conversions to strings.TrimSpace (lines 44, 105)
- docs/RFC.md: add language identifiers to four untyped fenced code blocks (MD040)
- specs/api/RFC.md: update NewProvider signature to 3-arg form matching implementation

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-07 08:59:29 +01:00
Snider
e41799b320 merge: resolve github/main conflicts keeping dappco.re module paths
Merged github/main into dev to resolve PR #2 conflict. Took github/main
code for all conflicted files (new features: signal, wait, start/run API,
UI streaming, process_global). Resolved go.mod by keeping dappco.re module
paths and using api v0.2.0 (dappco.re-compatible). go mod tidy confirms clean.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-07 08:29:01 +01:00
Virgil
cdc8bfe502 feat(process): add readiness accessors and AX examples
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-04 00:39:27 +00:00
Virgil
8a85c3cd86 fix(ax): complete Agent Experience service alignment 2026-03-30 06:34:42 +00:00
Claude
a09ca4f408
chore: migrate to dappco.re vanity import path
Module path: forge.lthn.ai/core/go-process -> dappco.re/go/core/process

Import path updates:
- forge.lthn.ai/core/go-log -> dappco.re/go/core/log
- forge.lthn.ai/core/go-io -> dappco.re/go/core/io
- forge.lthn.ai/core/go-ws -> dappco.re/go/core/ws
- forge.lthn.ai/core/go-process (self) -> dappco.re/go/core/process
- forge.lthn.ai/core/api left as-is (not yet migrated)

Local replace directives added until vanity URL server is configured.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:49:08 +00:00
Snider
87ef2dbe16 fix(dx): audit CLAUDE.md, error handling, and test coverage
- Update CLAUDE.md: document Detach, DisableCapture, ShutdownTimeout,
  auto-registration, graceful shutdown, and error handling conventions;
  add missing go-log and go-io dependencies
- Replace ServiceError type in process_global.go with coreerr.E()
  sentinel errors for consistency with the rest of the package
- Wrap raw error returns in Registry.Register, Registry.Unregister,
  and PIDFile.Release with coreerr.E() for proper context
- Add tests for Service.Kill, Service.Output, Service.OnShutdown,
  Service.OnStartup, Service.RunWithOptions, Service.Running,
  Process.Signal, Daemon.Run (context cancellation),
  Daemon.Stop (idempotent), DisableCapture, Detach, env vars,
  exec.WithDir, exec.WithEnv, exec.WithStdin/Stdout/Stderr,
  exec.RunQuiet
- Coverage: root 82.7% → 88.3%, exec/ 61.9% → 87.3%

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 08:42:56 +00:00
Snider
d73dfa3d73 refactor(process): replace fmt.Errorf and errors.New with coreerr.E()
Replace all 27 instances of fmt.Errorf/errors.New in production code
with coreerr.E() from forge.lthn.ai/core/go-log for structured error
context (op, message, cause). Promote go-log from indirect to direct
dependency in go.mod.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 20:38:08 +00:00
Snider
715c14f048 refactor(process): replace os file ops with coreio.Local in pidfile and registry
Replace all os.ReadFile, os.WriteFile, os.MkdirAll, os.Remove calls in
pidfile.go and registry.go with coreio.Local equivalents (Read, Write,
EnsureDir, Delete). Add forge.lthn.ai/core/go-io v0.1.2 as a direct dependency.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 18:31:35 +00:00
Snider
7ea523ee7b feat: add PIDFile for single-instance enforcement
PIDFile manages a process ID lock file with Acquire/Release semantics.
Detects stale PIDs via signal(0) probe, creates parent directories
automatically. Includes standalone ReadPID helper for checking if a
PID file's process is still alive.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 13:53:58 +00:00