fix: oracle review fixes — resolver exit code, dead include, pointer compose

- Exit code: plan.missing.empty() ? 0 : 1 (was always returning 0)
- Removed dead <algorithm> include from plan.cpp
- BuildStep now composes config::ResolvedPackage instead of duplicating
  features/config fields; PackageDef stored as const pointer
This commit is contained in:
2026-07-30 00:47:50 -04:00
parent ee9f280346
commit 72e582eb15
2 changed files with 8 additions and 10 deletions
+3 -3
View File
@@ -270,9 +270,9 @@ int main(int argc, char* argv[]) {
for (auto& step : plan.steps) { for (auto& step : plan.steps) {
std::cout << " " << step.name << " (" << step.dependencies.size() std::cout << " " << step.name << " (" << step.dependencies.size()
<< " deps"; << " deps";
if (!step.features.empty()) { if (!step.resolved.features.empty()) {
std::cout << ", features:"; std::cout << ", features:";
for (auto& [k, f] : step.features) { for (auto& [k, f] : step.resolved.features) {
if (f.enabled && !f.flag.empty()) { if (f.enabled && !f.flag.empty()) {
std::cout << " " << k; std::cout << " " << k;
} }
@@ -280,7 +280,7 @@ int main(int argc, char* argv[]) {
} }
std::cout << ")\n"; std::cout << ")\n";
} }
return plan.steps.empty() && plan.missing.empty() ? 0 : 0; return plan.missing.empty() ? 0 : 1;
} catch (const std::runtime_error& e) { } catch (const std::runtime_error& e) {
handle_parse_error(file_arg, source, e); handle_parse_error(file_arg, source, e);
return 1; return 1;
+5 -7
View File
@@ -1,7 +1,6 @@
#include "kappa/resolve/plan.hpp" #include "kappa/resolve/plan.hpp"
#include "kappa/config/merge.hpp" #include "kappa/config/merge.hpp"
#include <algorithm>
#include <queue> #include <queue>
namespace kappa::resolve { namespace kappa::resolve {
@@ -23,15 +22,14 @@ BuildPlan resolve(const dsl::SystemConfig& cfg, const Registry& registry) {
BuildStep step; BuildStep step;
step.name = pkg.name; step.name = pkg.name;
step.package = pkg; step.package = &pkg;
step.features = resolved.features; step.resolved = std::move(resolved);
step.config = resolved.config;
for (auto& dep : pkg.depends) { for (auto& dep : pkg.depends) {
if (!dep.feature.empty()) { if (!dep.feature.empty()) {
auto fit = step.features.find(dep.feature); auto fit = step.resolved.features.find(dep.feature);
if (fit == step.features.end() || !fit->second.enabled) { if (fit == step.resolved.features.end() || !fit->second.enabled) {
continue; // feature-gated and disabled continue;
} }
} }
step.dependencies.push_back({dep.name, dep.version}); step.dependencies.push_back({dep.name, dep.version});