release(0.5.0): forgekit-* rename, hygiene, alpha#1
Closed
oldnordic wants to merge 9 commits into
Closed
Conversation
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.
Owner
Author
|
Superseded by new PR from squashed branch release/v0.5.0-2 (includes CI typo fix) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verified locally