Commit graph

754 commits

Author SHA1 Message Date
Snider
26b05a3b47 test(io): fix traversal test to match sanitization behavior
The simplified path() sanitizes .. to . without returning errors.
Update test to verify sanitization works correctly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:27:27 +00:00
Snider
8b41f53657 test(io): fix traversal test to match sanitization behavior
The simplified path() sanitizes .. to . without returning errors.
Update test to verify sanitization works correctly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:27:26 +00:00
Snider
f917ac52e4 test(io): fix traversal test to match sanitization behavior
The simplified path() sanitizes .. to . without returning errors.
Update test to verify sanitization works correctly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:27:25 +00:00
Snider
60b070a7f5 fix(io): remove duplicate method declarations
Clean up the client.go file that had duplicate method declarations
from a bad cherry-pick merge. Now has 127 lines of simple, clean code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:26:27 +00:00
Snider
72739a6ff2 fix(io): remove duplicate method declarations
Clean up the client.go file that had duplicate method declarations
from a bad cherry-pick merge. Now has 127 lines of simple, clean code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:26:26 +00:00
Snider
96a4241ca4 fix(io): remove duplicate method declarations
Clean up the client.go file that had duplicate method declarations
from a bad cherry-pick merge. Now has 127 lines of simple, clean code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:26:25 +00:00
Snider
19ec7450fb fix(io): remove duplicate method declarations
Clean up the client.go file that had duplicate method declarations
from a bad cherry-pick merge. Now has 127 lines of simple, clean code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:25:17 +00:00
Snider
2381013f19 test(io): fix traversal test to match sanitization behavior
The simplified path() sanitizes .. to . without returning errors.
Update test to verify sanitization works correctly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:22:24 +00:00
Snider
388fe747f7 refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:44 +00:00
Snider
5475c8b980 refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:43 +00:00
Snider
f38205d753 refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:42 +00:00
Snider
5304c4d8da refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:41 +00:00
Snider
392d3a23ac refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:41 +00:00
Snider
bb85d99728 refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:40 +00:00
Snider
47e8339486 refactor(io): simplify local Medium implementation
Rewrote to match the simpler TypeScript pattern:
- path() sanitizes and returns string directly
- Each method calls path() once
- No complex symlink validation
- Less code, less attack surface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:17:30 +00:00
Snider
3c85135093 feat(help): add catalog for managing help topics
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:04:19 +00:00
Snider
599012eddf feat(help): add catalog for managing help topics
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 03:04:14 +00:00
Snider
366ba9b66b feat(help): add CLI help command
Adds internal/cmd/help which provides enhanced help functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:59:33 +00:00
Snider
ad313a4c6e feat(help): add CLI help command
Adds internal/cmd/help which provides enhanced help functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:59:27 +00:00
Snider
60dc58d04b style: fix formatting across migrated files
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:49:13 +00:00
Snider
e7df27c0c9 style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:46:17 +00:00
Snider
3bdb14021d style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:46:08 +00:00
Snider
8e290a7048 style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:46:08 +00:00
Snider
85c4c3d370 style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:46:07 +00:00
Snider
a2a135ea14 style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:46:06 +00:00
Snider
d72ae1b967 style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:46:05 +00:00
Snider
a7b5a85726 style: fix formatting in internal/variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:41:36 +00:00
Snider
c7d375aaee fix(updater): resolve PkgVersion duplicate declaration
Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:19:06 +00:00
Snider
90839e9bb0 fix(updater): resolve PkgVersion duplicate declaration
Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:19:05 +00:00
Snider
bf2001c269 fix(updater): resolve PkgVersion duplicate declaration
Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:19:04 +00:00
Snider
3a37795fce fix(updater): resolve PkgVersion duplicate declaration
Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:19:03 +00:00
Snider
5514becdcc fix(updater): resolve PkgVersion duplicate declaration
Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:19:02 +00:00
Snider
561a09dd0e fix(updater): resolve PkgVersion duplicate declaration
Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:18:08 +00:00
Snider
9024b93527 Merge IO batch fixes 2026-02-02 02:04:53 +00:00
Snider
6bde4d60e7 Merge IO batch fixes 2026-02-02 02:04:46 +00:00
Snider
de0c0eda8c Merge IO batch fixes 2026-02-02 02:04:36 +00:00
Snider
ef16dee5fc fix(io): address Copilot review feedback
- Fix MockMedium.Rename: collect keys before mutating maps during iteration
- Fix .git checks to use Exists instead of List (handles worktrees/submodules)
- Fix cmd_sync.go: use DeleteAll for recursive directory removal

Files updated:
- pkg/io/io.go: safe map iteration in Rename
- internal/cmd/setup/cmd_bootstrap.go: Exists for .git checks
- internal/cmd/setup/cmd_registry.go: Exists for .git checks
- internal/cmd/pkgcmd/cmd_install.go: Exists for .git checks
- internal/cmd/pkgcmd/cmd_manage.go: Exists for .git checks
- internal/cmd/docs/cmd_sync.go: DeleteAll for recursive delete

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 02:03:47 +00:00
Snider
9f233f398e Merge IO batch 2026-02-02 01:47:54 +00:00
Snider
eb0b4832c5 Merge IO batch 2026-02-02 01:47:31 +00:00
Snider
bde94ec9f3 Merge IO batch 2026-02-02 01:41:10 +00:00
Snider
e4f7fd43ea Merge Gemini's IO migration work
Combines both IO migration efforts:
- Gemini's migrations: sdk, pkgcmd, workspace, dev, docs, setup
- Extended Medium interface with Delete, DeleteAll, Rename, List, Stat, Exists, IsDir

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:38:19 +00:00
Snider
32458abf1d chore(io): migrate pkg/cli/daemon.go to Medium abstraction
Replaces direct os calls with io.Local:
- os.ReadFile -> io.Local.Read
- os.WriteFile -> io.Local.Write
- os.Remove -> io.Local.Delete
- os.MkdirAll -> io.Local.EnsureDir

Closes #107

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:25:07 +00:00
Snider
f48544331b Merge io-batch to get Medium interface with Delete 2026-02-02 01:24:12 +00:00
Snider
c3e6ebea5a chore(log): migrate pkg/errors imports to pkg/log
Migrates all internal packages from pkg/errors to pkg/log:
- internal/cmd/monitor
- internal/cmd/qa
- internal/cmd/dev
- pkg/agentic

Closes #130

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:19:12 +00:00
Snider
73b8873aae chore(errors): create deprecation alias pointing to pkg/log
Makes pkg/errors a thin compatibility layer that re-exports from pkg/log.
All error handling functions now have canonical implementations in pkg/log.

Migration guide in package documentation:
- errors.Error -> log.Err
- errors.E -> log.E
- errors.Code -> log.NewCode
- errors.New -> log.NewError

Fixes behavior consistency:
- E(op, msg, nil) now creates an error (for errors without cause)
- Wrap(nil, op, msg) returns nil (for conditional wrapping)
- WrapCode returns nil only when both err is nil AND code is empty

Closes #128

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:17:22 +00:00
Snider
a15c7e6441 Merge log-batch to get error helpers for deprecation 2026-02-02 01:13:41 +00:00
Snider
261328a291 feat(log): add error creation and log-and-return helpers
Implements issues #129 and #132:

- Add Err struct with Op, Msg, Err, Code fields for structured errors
- Add E(), Wrap(), WrapCode(), NewCode() for error creation
- Add Is(), As(), NewError(), Join() as stdlib wrappers
- Add Op(), ErrCode(), Message(), Root() for introspection
- Add LogError(), LogWarn(), Must() for combined log-and-return

Closes #129
Closes #132

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:11:46 +00:00
Snider
550d08e03e chore(io): migrate internal/cmd/setup to Medium abstraction
Migrated all direct os.* filesystem calls to use io.Local:
- cmd_repo.go: os.MkdirAll -> io.Local.EnsureDir, os.WriteFile -> io.Local.Write, os.Stat -> io.Local.IsFile
- cmd_bootstrap.go: os.MkdirAll -> io.Local.EnsureDir, os.Stat -> io.Local.IsDir/Exists, os.ReadDir -> io.Local.List
- cmd_registry.go: os.MkdirAll -> io.Local.EnsureDir, os.Stat -> io.Local.Exists
- cmd_ci.go: os.ReadFile -> io.Local.Read
- github_config.go: os.ReadFile -> io.Local.Read, os.Stat -> io.Local.Exists

Refs #116

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:01:01 +00:00
Snider
d0c3874c11 chore(io): migrate internal/cmd/docs and internal/cmd/dev to Medium
- internal/cmd/docs: Replace os.Stat, os.ReadFile, os.WriteFile,
  os.MkdirAll, os.RemoveAll with io.Local equivalents
- internal/cmd/dev: Replace os.Stat, os.ReadFile, os.WriteFile,
  os.MkdirAll, os.ReadDir with io.Local equivalents
- Fix local.Medium to allow absolute paths when root is "/" for
  full filesystem access (io.Local use case)

Refs #113, #114

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 00:52:29 +00:00
Snider
3a429d1585 chore(io): Migrate internal/cmd/sdk, pkgcmd, and workspace to Medium abstraction 2026-02-02 00:49:09 +00:00