-`_legacy.rs` deleted; all deprecated shims removed
-`notsecrets` is now a self-contained age encryption/decryption library
-`notstrap` uses `resolve_identities` + `Decryptor` directly; no sops shell-out
-`EnvInjector` changed to `FnOnce`; `main.rs` sets `env_injector: None`
- Example at `crates/notsecrets/examples/age_smoke.rs` demonstrates round-trip encrypt/decrypt
Also done this session (outside notfiles):
- Fixed `~/.config/sops/age/keys.txt` — was `AGE-SECRET-KEY-1TESTKEY` placeholder, now real key from 1Password item `age-key-dotfiles` (UUID `6meypnchchq3tsb32mdnzxtlia`)
-`env.nu` now self-heals `keys.txt` from 1Password on fresh login if missing/placeholder
- Expanded `~/.secrets` to cover 18 keys (AWS, Docker, GitHub, Slack, ElevenLabs, Groq, Mistral, LangChain/Smith, SerpAPI, Twilio, Tavily, Context7) — all via `op://` UUID refs, resolved by `op inject` at shell startup
- Removed duplicate `op read` calls for OPENAI/ANTHROPIC from `env.nu`
- Cleaned up `~/.config/dev-bootstrap/secrets.env` — removed TAVILY/CONTEXT7 (now in `~/.secrets`), kept non-secret MCP config vars
No API token found in 1Password — only login credentials. Add token manually if needed.
### 7. notsecrets is not wire-compatible with standard age
The Encryptor/Decryptor use single-block ChaCha20-Poly1305 rather than the STREAM construction. Files encrypted by `notsecrets` cannot be decrypted by `rage`/`age` CLI and vice versa. This is intentional per the spec but worth documenting.
- Fixed: hyphenated crate names (`my-crate`) were emitted as raw Mermaid IDs (invalid); added `mermaid_id` sanitizer (`-` → `_`) applied to all node IDs, edges, `style` directives, and cycle highlights