Commit Graph

111 Commits

Author SHA1 Message Date
d9f476ff79 chore(repo): remove nested agent worktree marker
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
2026-07-11 23:53:42 -04:00
Joseph O'Brien
4b4b1df5db Merge pull request #20 from 89jobrien/chore/sort-cargo-manifests
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
chore(manifests): sort Cargo.toml dependencies
2026-07-11 23:49:24 -04:00
0cfa0d9b3c fix(ci): install nushell for integration tests 2026-07-11 23:44:04 -04:00
1a3aaf2dd9 feat(notforge): add Gitea API foundation 2026-07-11 23:33:24 -04:00
3a475bc25b chore(repo): stop tracking macOS artifacts 2026-07-11 23:33:04 -04:00
039f8d808d chore(manifests): sort Cargo.toml dependencies 2026-07-11 22:10:48 -04:00
ca7c035ea5 docs(handoff): log 2026-07-08 — hexagonal architecture refactor, adapters, integration tests, notsecrets cleanup
- Completed hexagonal architecture refactor with adapter pattern
- Added comprehensive integration tests
- Cleaned up notsecrets integration
- Moved config payload to notfiles-config repo

Commits: 6427d18, 25624c9
2026-07-08 15:22:59 -04:00
25624c9f2b chore(nushell): move config payload out of tool repo 2026-07-08 13:28:57 -04:00
6427d188e6 feat(notfiles): hexagonal architecture refactor with adapters, integration tests, and notsecrets cleanup
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
- Extract FileStore port and InMemoryFileStore/FileStoreImpl/Reporter adapters
- Add Reporter trait to notcore with TerminalReporter and JsonReporter
- Refactor linker, package, status modules to use FileStore port
- Add integration test suite with dotfiles fixtures
- Add cross-crate integration tests
- Remove ssh_rsa identity/recipient (unsupported)
- Add rustqual.toml, .sccignore, notfiles.toml config files
- Update CLAUDE.md, README.md, AGENTS.md with current architecture
2026-07-08 13:07:42 -04:00
12ad322608 feat(nushell): add x alias for cargo xtask
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
2026-07-07 05:43:59 -04:00
cb732c24ce chore: add TODO roadmap, nf alias, and install recipe
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
2026-06-14 00:35:39 -04:00
268c981545 feat(notfiles): add detect subcommand for stow/chezmoi/notfiles auto-detection
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
2026-06-14 00:30:27 -04:00
32cb5f7516 feat(nushell): adopt full nushell config from dotfiles
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
Moves config.nu, env.nu, and all autoload/*.nu files into the
notfiles nushell package. All symlinks in ~/.config/nushell/ now
point to notfiles instead of dotfiles.
2026-06-14 00:24:05 -04:00
02ed15d6ee feat(nushell): add nu_libs autoload package
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
fix(notgraph): replace sort_by with sort_by_key (clippy)
2026-06-14 00:19:21 -04:00
50ff598684 refactor(notstrap): replace EnvInjector with SecretResolver
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
Remove the EnvInjector closure and replace with a secrets_config path
that loads notsecrets.toml and uses SecretResolver for env injection.
Existing parse_env_line validation (blocked keys, null bytes) is
preserved in the injection loop.
2026-06-06 09:57:20 -04:00
1359def673 feat(notsecrets): add multi-provider secret resolution system
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
Add a config-driven, strongly-typed secret/env resolution system to
notsecrets with 11 provider backends. The system supports explicit
key bindings with typed SecretRef enums and a priority chain fallback.

Tier 1 providers (implemented): Env, 1Password, dotenvx, SOPS, GSM
Tier 2 providers (stubbed): nuenv, direnv, mise, Bitwarden, Vault, dotenvy

New types: Provider, ProviderConfig, SecretRef, SecretsConfig,
SecretsError, SecretSource, EnumerableSecretSource, SecretResolver

Config lives in notsecrets.toml with typed serde deserialization.
ISP split: EnumerableSecretSource for backends that support bulk
enumeration, SecretSource for single-key lookup only.

Includes conformance test suite, 33 new tests (161 workspace total).
notstrap EnvInjector migration deferred to follow-up.
2026-06-06 09:49:05 -04:00
Joseph O'Brien
65d1a2dc2e fix(preflight): make preflight.nu script executable (#2) 2026-04-18 09:47:57 -04:00
Joseph O'Brien
da89fab58a docs: update handoff 2026-04-17 18:56:22 -04:00
Joseph O'Brien
c7c074d48b feat: add notnet crate and YubikeySource, thread Tailscale into notstrap
- New crates/notnet: TailscaleOptions, ensure_connected(), auth key chain
  (TS_AUTHKEY env → YubiKey PIV 9d → interactive prompt), install via
  apt/brew/pacman or official install.sh, peer reachability verification
- notsecrets: YubikeySource implementing IdentitySource, reads age key from
  PIV slot 9c; gated behind optional `yubikey` feature
- notstrap: Tailscale step inserted between prerequisites and clone;
  BootstrapOptions.tailscale controls override/skip; NotstrapConfig gains
  optional [tailscale] section; dotfiles_repo is now Option<String> (Tailscale
  gitea_url takes precedence); identity chain adds YubikeySource before
  Bitwarden
- Updated workspace Cargo.toml: notnet added to members and workspace deps
- Integration tests: tailscale: Some(None) to skip Tailscale in all test opts
2026-04-17 00:01:50 -04:00
Joseph O'Brien
dfdd9ca6d3 docs: add Tailscale integration design spec 2026-04-16 23:55:43 -04:00
Joseph O'Brien
b38bacb2b5 ci: add affected-crate release workflow
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Has been cancelled
2026-04-16 01:59:10 -04:00
Joseph O'Brien
a1d584b9dc docs: update handoff 2026-04-15 21:29:34 -04:00
Joseph O'Brien
67f20eef2d Refactor: Formalize ports and update related files 2026-04-15 21:27:25 -04:00
Joseph O'Brien
4b344621bc docs: note absorption of pj into notfiles workspace 2026-04-14 08:54:51 -04:00
Joseph O'Brien
ac0672f64f chore: add just workspace recipe 2026-04-12 20:30:11 -04:00
Joseph O'Brien
aadb1570a3 refactor: formalize FileStore and IdentitySource ports in notfiles
- Create FileStore trait in crates/notfiles/src/ports.rs capturing all file I/O
  operations (read, write, rename, remove, metadata, symlink, etc.)
- Create FileStoreImpl adapter in crates/notfiles/src/adapters/fs.rs wrapping std::fs
- Update linker.rs State::load/save and link_package/unlink_package to accept
  FileStore parameter for dependency injection
- Create IdentitySource port in crates/notsecrets/src/ports.rs
- Move IdentitySource trait from sources/mod.rs to ports.rs, maintain backward
  compatibility via re-export
- Update all source implementations to import from ports
- Update lib.rs in both crates to re-export ports
- Pass FileStoreImpl through call chain in main.rs and lib.rs public API

Maintains 100% backward compatible public API; FileStore dependency is internal.
2026-04-12 16:35:53 -04:00
Joseph O'Brien
19e74b4a1b security: audit Command call sites; confirm no argument injection
Closes #18

All six Command::new call sites audited:
- bitwarden.rs (sh -c): shell string is a hardcoded literal; no user data.
- bitwarden.rs (bw unlock): all args hardcoded.
- bitwarden.rs (bw get): item_name and session passed as discrete .args() elements; no shell.
- nothooks/runner.rs (nu/sh/etc): interp and script path passed as discrete args; no shell.
- notstrap/repo.rs (git clone): url and dest passed as discrete .arg() calls; no shell.
- notfiles/tests/integration.rs: test harness with hardcoded args only.

Added SAFETY comments on the three sites that handle user-controlled config values.
2026-04-11 23:52:40 -04:00
Joseph O'Brien
822abd9c88 fix(notfiles): atomic state file writes via temp-file + rename
Closes #17
2026-04-11 23:51:43 -04:00
Joseph O'Brien
bdc6582aea merge: fix unlink validation and HookRunner state batching (closes #10, #13) 2026-04-11 23:41:16 -04:00
Joseph O'Brien
83008c5353 fix(notstrap): wire age identity to decryption; fix parse_env_line quoting
Closes #14, closes #16
2026-04-11 23:40:47 -04:00
Joseph O'Brien
0d60583c65 fix(notfiles,nothooks): validate package on unlink; batch state I/O in HookRunner
Closes #10, closes #13
2026-04-11 23:40:40 -04:00
Joseph O'Brien
3e7135a398 fix(notfiles): save state on partial link failure; skip re-copy of unchanged files
Closes #8, closes #9
2026-04-11 23:40:32 -04:00
Joseph O'Brien
11d329c5a2 security: fix Bitwarden password exposure and ChaCha nonce hardening
Issue 12: pass bw unlock password via stdin (--passwordstdin) instead of
as a CLI arg, preventing it from appearing in /proc/<pid>/cmdline or ps output.

Issue 11: replace Nonce::default() (all-zero) with the first 12 bytes of the
16-byte random payload nonce. The key-nonce pair was already unique per message
(HKDF salt), but using an explicit non-zero nonce removes the latent risk of
accidental key reuse and makes the safety invariant self-documenting.

Closes #11, closes #12
2026-04-11 23:38:41 -04:00
Joseph O'Brien
41d19a6988 ci: standardize CI workflows and git hooks
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Failing after 7s
Add ci.yml (compile/fmt/lint/test/audit/machete), nightly.yml (geiger
unsafe audit), deny.toml (license/ban/source policy), and Justfile with
pre-commit, prepush, ci, and install-hooks recipes.
2026-04-06 20:06:25 -04:00
Joseph O'Brien
ea1ad58bd7 chore: add .remember/ to gitignore
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Failing after 5s
2026-04-04 18:38:00 -04:00
Joseph O'Brien
ebb8a5946d refactor(nothooks): make hook runner language-agnostic
Some checks failed
Public Repo Readiness / Check Public Repo Readiness (push) Failing after 6s
Remove hardcoded nu interpreter. HookSpec gains an optional interpreter
field; runner infers from file extension (.sh, .nu, .py, .rb, .zsh,
.bash) when not set. Integration tests now use sh — no nu runtime dep
on CI.
2026-04-04 01:14:29 -04:00
Joseph O'Brien
6f24eb0030 docs: fix garbled <important> block, add notgraph crate to workspace table 2026-04-04 00:49:38 -04:00
Joseph O'Brien
b9c48f59de docs: mark all notgraph plan tasks complete; close notfile-3 2026-04-03 19:11:01 -04:00
Joseph O'Brien
d86dc59b4c docs: mark notfile-1 and notfile-2 done in handoff 2026-04-03 19:09:07 -04:00
Joseph O'Brien
3f529e9ed5 style: replace emoji with [OK] in workflow summary; cargo fmt integration tests 2026-04-03 19:07:47 -04:00
Joseph O'Brien
4a010559d2 docs: create HANDOFF.yaml — initial session handoff with 3 open items 2026-04-03 18:48:28 -04:00
Joseph O'Brien
1e2f240f14 docs: add notgraph implementation plan 2026-04-03 11:59:46 -04:00
Joseph O'Brien
09b56959e0 docs: update HANDOFF for session 3, add notgraph extension roadmap, ignore librust_out.rlib 2026-04-03 11:59:42 -04:00
Joseph O'Brien
b4bb5760d6 fix(notgraph): sanitize hyphenated crate IDs in Mermaid output; add graph feature integration tests 2026-04-03 11:44:20 -04:00
Joseph O'Brien
82f84d52bb fix(notgraph): replace :: with / in module graph node labels to fix Mermaid parse error 2026-04-02 21:56:18 -04:00
Joseph O'Brien
17a321c227 fix(notgraph): add closing %% to module graph mermaid init directives 2026-04-02 21:54:54 -04:00
Joseph O'Brien
b5a27108d0 feat(notgraph): heatmap coloring, symbol counts, per-crate module graphs, cycle callouts 2026-04-02 20:53:07 -04:00
Joseph O'Brien
5c14230935 feat(notgraph): group crates into Core/Features/Tools subgraphs 2026-04-02 04:02:50 -04:00
Joseph O'Brien
f5b0dd87f8 fix(notgraph): replace vis.js with Mermaid for clean static flowchart 2026-04-02 03:50:53 -04:00
Joseph O'Brien
a2dcb123e8 fix(notgraph): reverse edge direction to dependency -> dependent 2026-04-02 03:19:19 -04:00