Skip to content

release(0.5.0): forgekit-* rename, hygiene, alpha#1

Closed
oldnordic wants to merge 9 commits into
masterfrom
release/0.5.0
Closed

release(0.5.0): forgekit-* rename, hygiene, alpha#1
oldnordic wants to merge 9 commits into
masterfrom
release/0.5.0

Conversation

@oldnordic

Copy link
Copy Markdown
Owner

Summary

  • Crate rename: all packages renamed forge-* → forgekit-* (128 files, 982 references), matching crates.io names already owned by oldnordic
  • Project hygiene: untracked 16 internal files, new .gitleaks.toml, CI upgraded (audit/deny/gitleaks/license/alpha/banned-patterns), distinct per-crate READMEs, alpha/WIP framing across all docs
  • CI fix: semgrep nosemgrep on exhaustive enum dispatch (was on wrong line, blocking CI since May 30)
  • Version 0.5.0 across all crates

Verified locally

  • 1568 tests pass (0 failed)
  • clippy clean (-D warnings)
  • fmt clean
  • semgrep clean (0 findings after nosemgrep fix)

GSD Executor added 9 commits June 13, 2026 12:45
…eanup

SDK surface:
- AgentBuilder type-state pattern (.chat_provider().build())
- forge_agent::prelude (22 stable types)
- #[non_exhaustive] + stability contracts on public traits
- chat/: ConversationStore, ContextWindow, PromptTemplate, hooks,
  token tracker, skills loader, retrieval, atheneum/envoy tools

Dependency upgrades:
- thiserror 1.0 -> 2.0 (3 crates)
- sqlitegraph 3.0.7 -> 3.2.5 (SIMD HNSW, parking_lot, streaming)
- magellan 4.2 -> 4.7
- atheneum 0.1.3 -> 0.5.0, envoy 0.1.0 -> 0.2.0
- splice 2.9, llmgrep 3.8, mirage-analyzer 1.8

Internal:
- parking_lot lock migration, AtomicU64 counter
- Mutator forge field + dead methods removed
- AllPolicies/AnyPolicy, generate_summary, unused enum variants deleted
- clippy -D warnings clean, all tests pass
Each stub passed while proving nothing. Per AGENTS.md zero-tolerance
policy, rewrote them to assert observable behavior:

- test_parallel_tasks_both_execute (was _sequential_stub):
  Both tasks now push to a shared log; assert log.len()==2 and both
  IDs present. Proves ParallelTasks actually executes both children.

- test_shell_task_parses_command_and_args (was test_shell_task_stub):
  Asserts parsed YamlTaskType::Shell, command=='echo', args==['hello',
  'world'], plus workflow conversion preserves id/name. Was only
  checking task_count()==1.

- test_insert_reference_and_query (was _placeholder):
  Switched from SQLite (no-op insert) to NativeV3 backend, then
  round-trips: query_references(target) returns the inserted ref with
  correct kind/path/line, and querying an unrelated symbol returns
  empty — proves the query discriminates.

- test_shell_command_task_executes_command (was _stub):
  Runs 'sh -c printf > marker.txt' with working_dir set, then reads
  marker.txt back and asserts content == 'hello world'.
  Added test_shell_command_task_failure_propagates: exit 42 yields
  TaskResult::Failed with code in message.
…-23/26/27)

SPLIT-23: DominatorTree -> cfg/dominators.rs (struct + impl + 3 tests)
SPLIT-26: operations.rs -> analysis/diff.rs (Diff + EditOperation + ops)
SPLIT-27: ImpactData/ImpactAnalysis/CrossReferences/ReferenceChain/
          CallChain -> analysis/impact.rs (5 types extracted from mod.rs)

SPLIT-19 skipped: Custody types do not exist in the codebase (stale plan).

Verified: cargo fmt clean, clippy -D warnings clean, 26 test suites pass
(0 failures), magellan index refreshed (962 symbols, 42 files).
SPLIT-24: PathBuilder + Path merged into cfg/paths.rs (struct + impl + 6 tests
          moved from types.rs, path_builder.rs renamed to paths.rs via git mv)
SPLIT-20: ValidationStatus/ValidationResult/ValidationCheckpoint/RollbackReco
          mmendation + validate_checkpoint/can_proceed/requires_rollback/
          extract_confidence extracted to checkpoint/validation.rs

SPLIT-21 verified already done (tool_compensation.rs + compensation_registry.rs
exist and re-exported). SPLIT-23/26/27 in prior commit.

Verified: fmt clean, clippy -D warnings clean, 26 test suites pass (0 failures),
magellan index refreshed.
…ved limitations

Code Modularization: 10 new bullet points covering executor/tasks/tools/
loop/planner/checkpoint/rollback splits in forge-agent, plus cfg/ and
analysis/ modularization in forge-core (SPLIT-1 through SPLIT-28).

Test Quality: document 4 vacuous-stub replacements with real assertions.

Known Limitations: mark 88 dead-code warnings as RESOLVED (clippy -D warnings
now passes clean).
Q1: Wire AgentConfig.temperature/max_tokens to LlmConfig via
    resolve_chat_config() — .forge.toml [agent] values apply as defaults,
    explicit LlmConfig values always win. 4 tests added. (task 9434)

Q2: MockEvidenceRecorder migrated to parking_lot::Mutex — eliminates
    6 .unwrap() calls from production recorder path. (task 9435)

Q3: Resolved 3 inline TODOs — WithCompensation semantics documented
    (ConditionalTask: then-branch; TryCatchTask: return without catch).
    timeout.rs test comment clarified. (task 9436)

Q4: Split executor/tests.rs (1347 LOC) into tests/ directory with 10
    thematic submodules + shared MockTask in mod.rs. 51 tests preserved. (task 9437)

Verified: cargo fmt OK, clippy --all-features -D warnings clean,
1575 tests pass, stub-scan clean, magellan refreshed.
…isoning-panic surface

BREAKING: SharedSandbox (pub type alias, re-exported at chat) now wraps
parking_lot::Mutex instead of std::sync::Mutex. shared_sandbox() constructor
updated. No downstream consumers exist, and no caller manually locks it outside
builtins.rs, so the breaking type change required zero call-site rewrites.

Also completes the prior non-breaking migrations (private Mutex fields):
  - TokenTracker       4x .lock().expect() -> .lock()   (per-LLM-response path)
  - RecordingTool      4x .lock().expect() -> .lock()   (pub test-support mock)
  - MockChatProvider   4x .lock().expect() -> .lock()   (pub test-support mock)
  - builtins.rs        3x .lock().expect() -> .lock()   (FileRead/FileWrite/ShellExec)

Inclusive scan (rg '\.lock\(\)\.(unwrap|expect)\(' over non-test src/) confirms
zero production poisoning-panic sites remain; 15 .lock().unwrap() left are all
in #[cfg(test)] modules. Production Mutex poisoning-panic limitation: RESOLVED.

Verified: fmt clean, clippy -D warnings clean, 0 test failures (all features).
Zero-tolerance policy cleanup. `rg '#[allow(' src/ --type rust` now returns 0
hits without a documented `reason=`.

Deleted (dead code):
- 5 test-only builder methods (with_dep/with_compensation) + dead compensation
  field in workflow mock structs (deadlock.rs, dag/tests.rs, rollback/tests.rs)
- 2 deserialized-but-unread response fields (role, thinking) in ollama.rs

Refactored (type aliases):
- pub(crate) type CompensateFn — shared undo/compensation closure signature —
  replaces 3x type_complexity in task.rs/tool_compensation.rs
- type WatchHandle replaces 1x type_complexity in watcher.rs

BREAKING (forge_core public API):
- KnowledgeGraph::add_symbol: 9 params -> 6 via new SourceSpan{file,line,
  byte_start, byte_end} struct (re-exported at crate::knowledge::SourceSpan),
  removing the last too_many_arguments. All 26 call sites (test-only) updated.
  add_symbol has no production callers.

Verified: fmt OK, clippy -D warnings clean, 26 test suites / 0 failures,
allow-scan 0, stub-scan clean (false positives only).
…release

Crate rename (forge-* -> forgekit-*):
- All 4 packages renamed to forgekit prefix, matching crates.io names
  already owned by oldnordic (forgekit-core/agent/runtime registered,
  forgekit-reasoning is a new name)
- 128 files updated, 982 import/dependency references
- Directories renamed via git mv (history preserved)
- Magellan registry + DB files aligned to new names

Project hygiene:
- Untrack 16 internal files (AGENTS.md, CLAUDE.md, STATE.md, PUBLISH.md,
  SPLICE_INTEGRATION.md, .hermes/plans/, docs/superpowers/)
- New .gitleaks.toml secret-scanning config
- CI upgraded: check, clippy, test, audit, deny, gitleaks, license check,
  alpha-status check, banned-pattern scan
- Distinct per-crate READMEs (runtime/agent were byte-identical copies)
- Alpha/WIP framing across all docs and READMEs
- Fix CI: semgrep nosemgrep on lib.rs enum dispatch (was on wrong line)
- Fix doctest: unimplemented!() placeholder -> real construction

Version 0.5.0 across all crates:
- forgekit-core 0.3.0 -> 0.5.0
- forgekit-agent 0.4.0 -> 0.5.0
- forgekit-runtime 0.1.2 -> 0.5.0
- forgekit-reasoning 0.1.2 -> 0.5.0

Verified: 1568 tests pass, clippy clean, fmt clean, semgrep clean.
@oldnordic

Copy link
Copy Markdown
Owner Author

Superseded by new PR from squashed branch release/v0.5.0-2 (includes CI typo fix)

@oldnordic oldnordic closed this Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant