@lamentis/naome 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/Cargo.lock +2 -2
  2. package/README.md +108 -47
  3. package/bin/naome-node.js +2 -1579
  4. package/bin/naome.js +34 -5
  5. package/crates/naome-cli/Cargo.toml +1 -1
  6. package/crates/naome-cli/src/dispatcher.rs +7 -2
  7. package/crates/naome-cli/src/main.rs +37 -22
  8. package/crates/naome-cli/src/quality_commands.rs +317 -10
  9. package/crates/naome-cli/src/workflow_commands.rs +21 -1
  10. package/crates/naome-core/Cargo.toml +1 -1
  11. package/crates/naome-core/src/decision/checks.rs +64 -0
  12. package/crates/naome-core/src/decision/idle.rs +67 -0
  13. package/crates/naome-core/src/decision/json.rs +36 -0
  14. package/crates/naome-core/src/decision/states.rs +165 -0
  15. package/crates/naome-core/src/decision.rs +131 -353
  16. package/crates/naome-core/src/git.rs +4 -2
  17. package/crates/naome-core/src/install_plan.rs +4 -0
  18. package/crates/naome-core/src/lib.rs +12 -6
  19. package/crates/naome-core/src/paths.rs +3 -1
  20. package/crates/naome-core/src/quality/adapter_support.rs +89 -0
  21. package/crates/naome-core/src/quality/adapters.rs +20 -67
  22. package/crates/naome-core/src/quality/baseline.rs +8 -0
  23. package/crates/naome-core/src/quality/cache.rs +153 -0
  24. package/crates/naome-core/src/quality/checks/duplicate_blocks.rs +25 -11
  25. package/crates/naome-core/src/quality/checks/near_duplicates.rs +4 -2
  26. package/crates/naome-core/src/quality/checks.rs +7 -8
  27. package/crates/naome-core/src/quality/cleanup.rs +48 -3
  28. package/crates/naome-core/src/quality/config.rs +8 -15
  29. package/crates/naome-core/src/quality/config_support.rs +24 -0
  30. package/crates/naome-core/src/quality/mod.rs +72 -6
  31. package/crates/naome-core/src/quality/scanner/analysis/normalize.rs +78 -0
  32. package/crates/naome-core/src/quality/scanner/analysis.rs +160 -0
  33. package/crates/naome-core/src/quality/scanner/repo_paths.rs +39 -3
  34. package/crates/naome-core/src/quality/scanner.rs +200 -215
  35. package/crates/naome-core/src/quality/semantic/checks.rs +134 -0
  36. package/crates/naome-core/src/quality/semantic/extract.rs +158 -0
  37. package/crates/naome-core/src/quality/semantic/model.rs +85 -0
  38. package/crates/naome-core/src/quality/semantic/route.rs +52 -0
  39. package/crates/naome-core/src/quality/semantic.rs +68 -0
  40. package/crates/naome-core/src/quality/structure/adapters.rs +84 -0
  41. package/crates/naome-core/src/quality/structure/checks/basic.rs +153 -0
  42. package/crates/naome-core/src/quality/structure/checks/directory.rs +134 -0
  43. package/crates/naome-core/src/quality/structure/checks/pairing.rs +63 -0
  44. package/crates/naome-core/src/quality/structure/checks.rs +124 -0
  45. package/crates/naome-core/src/quality/structure/classify/roles.rs +188 -0
  46. package/crates/naome-core/src/quality/structure/classify.rs +146 -0
  47. package/crates/naome-core/src/quality/structure/config.rs +89 -0
  48. package/crates/naome-core/src/quality/structure/defaults.rs +107 -0
  49. package/crates/naome-core/src/quality/structure/mod.rs +77 -0
  50. package/crates/naome-core/src/quality/structure/model.rs +131 -0
  51. package/crates/naome-core/src/quality/types.rs +43 -2
  52. package/crates/naome-core/src/route/builtin_checks.rs +141 -0
  53. package/crates/naome-core/src/route/builtin_context.rs +73 -0
  54. package/crates/naome-core/src/route/builtin_integrity.rs +49 -0
  55. package/crates/naome-core/src/route/builtin_require.rs +40 -0
  56. package/crates/naome-core/src/route/context.rs +180 -0
  57. package/crates/naome-core/src/route/execution.rs +96 -0
  58. package/crates/naome-core/src/route/execution_baselines.rs +146 -0
  59. package/crates/naome-core/src/route/execution_support.rs +57 -0
  60. package/crates/naome-core/src/route/execution_tasks.rs +71 -0
  61. package/crates/naome-core/src/route/git_ops.rs +72 -0
  62. package/crates/naome-core/src/route/quality_gate.rs +73 -0
  63. package/crates/naome-core/src/route/quality_gate_config.rs +126 -0
  64. package/crates/naome-core/src/route/quality_gate_snapshot.rs +69 -0
  65. package/crates/naome-core/src/route/worktree.rs +75 -0
  66. package/crates/naome-core/src/route/worktree_files.rs +32 -0
  67. package/crates/naome-core/src/route/worktree_plan.rs +131 -0
  68. package/crates/naome-core/src/route.rs +44 -1217
  69. package/crates/naome-core/src/verification.rs +1 -0
  70. package/crates/naome-core/src/workflow/doctor.rs +144 -0
  71. package/crates/naome-core/src/workflow/mod.rs +2 -0
  72. package/crates/naome-core/src/workflow/mutation.rs +1 -2
  73. package/crates/naome-core/tests/decision.rs +24 -118
  74. package/crates/naome-core/tests/harness_health.rs +2 -0
  75. package/crates/naome-core/tests/install_plan.rs +2 -0
  76. package/crates/naome-core/tests/quality.rs +26 -123
  77. package/crates/naome-core/tests/quality_performance.rs +231 -0
  78. package/crates/naome-core/tests/quality_structure.rs +116 -0
  79. package/crates/naome-core/tests/quality_structure_adapters.rs +98 -0
  80. package/crates/naome-core/tests/quality_structure_policy.rs +144 -0
  81. package/crates/naome-core/tests/quality_structure_support/mod.rs +249 -0
  82. package/crates/naome-core/tests/repo_support/mod.rs +16 -0
  83. package/crates/naome-core/tests/repo_support/repo.rs +113 -0
  84. package/crates/naome-core/tests/repo_support/repo_factories.rs +99 -0
  85. package/crates/naome-core/tests/repo_support/repo_helpers.rs +123 -0
  86. package/crates/naome-core/tests/repo_support/routes.rs +81 -0
  87. package/crates/naome-core/tests/repo_support/verification.rs +168 -0
  88. package/crates/naome-core/tests/repo_support/verification_values.rs +135 -0
  89. package/crates/naome-core/tests/route.rs +1 -1376
  90. package/crates/naome-core/tests/route_baseline.rs +86 -0
  91. package/crates/naome-core/tests/route_completion.rs +141 -0
  92. package/crates/naome-core/tests/route_harness_refresh.rs +135 -0
  93. package/crates/naome-core/tests/route_user_diff.rs +202 -0
  94. package/crates/naome-core/tests/route_worktree.rs +54 -0
  95. package/crates/naome-core/tests/semantic_legacy.rs +140 -0
  96. package/crates/naome-core/tests/task_state.rs +60 -432
  97. package/crates/naome-core/tests/task_state_compact_support/repo.rs +1 -1
  98. package/crates/naome-core/tests/task_state_support/mod.rs +163 -0
  99. package/crates/naome-core/tests/task_state_support/states.rs +84 -0
  100. package/crates/naome-core/tests/verification.rs +4 -45
  101. package/crates/naome-core/tests/verification_contract.rs +22 -78
  102. package/crates/naome-core/tests/workflow_doctor.rs +24 -0
  103. package/crates/naome-core/tests/workflow_policy.rs +6 -1
  104. package/crates/naome-core/tests/workflow_support/mod.rs +1 -1
  105. package/installer/agents.js +90 -0
  106. package/installer/context.js +67 -0
  107. package/installer/filesystem.js +166 -0
  108. package/installer/flows.js +84 -0
  109. package/installer/git-boundary.js +171 -0
  110. package/installer/git-hook-content.js +36 -0
  111. package/installer/git-hooks.js +134 -0
  112. package/installer/git-local.js +2 -0
  113. package/installer/git-shared.js +35 -0
  114. package/installer/harness-file-ops.js +140 -0
  115. package/installer/harness-files.js +56 -0
  116. package/installer/harness-verification.js +123 -0
  117. package/installer/install-plan.js +66 -0
  118. package/installer/main.js +25 -0
  119. package/installer/manifest-state.js +167 -0
  120. package/installer/native-build.js +24 -0
  121. package/installer/native-format.js +6 -0
  122. package/installer/native.js +162 -0
  123. package/installer/output.js +131 -0
  124. package/installer/version.js +32 -0
  125. package/native/darwin-arm64/naome +0 -0
  126. package/native/linux-x64/naome +0 -0
  127. package/package.json +2 -1
  128. package/templates/naome-root/.naome/bin/check-harness-health.js +3 -3
  129. package/templates/naome-root/.naome/bin/check-task-state.js +3 -3
  130. package/templates/naome-root/.naome/bin/naome.js +32 -21
  131. package/templates/naome-root/.naome/manifest.json +5 -3
  132. package/templates/naome-root/.naome/repository-structure.json +90 -0
  133. package/templates/naome-root/.naome/verification.json +1 -0
  134. package/templates/naome-root/.naomeignore +1 -0
  135. package/templates/naome-root/docs/naome/agent-workflow.md +16 -14
  136. package/templates/naome-root/docs/naome/index.md +4 -3
  137. package/templates/naome-root/docs/naome/repository-quality.md +66 -4
  138. package/templates/naome-root/docs/naome/repository-structure.md +51 -0
  139. package/templates/naome-root/docs/naome/testing.md +2 -1
@@ -0,0 +1,140 @@
1
+ mod repo_support;
2
+
3
+ use naome_core::{check_semantic_legacy, semantic_route_for_finding, QualityMode};
4
+
5
+ use repo_support::TestRepo;
6
+
7
+ #[test]
8
+ fn report_groups_repeated_config_fixture_shapes_across_repository() {
9
+ let repo = semantic_repo("semantic-report-groups");
10
+ repo.write_file("scripts/a.test.js", &fixture_object("qualityConfig"));
11
+ repo.write_file(
12
+ "scripts/b.test.js",
13
+ &fixture_object("repositoryQualityConfig"),
14
+ );
15
+ repo.commit_all("baseline");
16
+
17
+ let report = check_semantic_legacy(repo.path(), QualityMode::DeepReport).unwrap();
18
+
19
+ let finding = report
20
+ .findings
21
+ .iter()
22
+ .find(|finding| finding.kind == "copied-config-object")
23
+ .expect("expected copied config finding");
24
+ assert_eq!(finding.occurrences.len(), 2);
25
+ assert!(finding
26
+ .occurrences
27
+ .iter()
28
+ .any(|occurrence| occurrence.path == "scripts/a.test.js"));
29
+ assert!(finding
30
+ .cleanup_route
31
+ .agent_instructions
32
+ .iter()
33
+ .any(|instruction| instruction.contains("every occurrence")));
34
+ }
35
+
36
+ #[test]
37
+ fn changed_check_blocks_new_inline_legacy_fixture_only() {
38
+ let repo = semantic_repo("semantic-changed-only");
39
+ repo.write_file("scripts/old.test.js", &fixture_object("oldQualityConfig"));
40
+ repo.commit_all("baseline");
41
+ repo.write_file("README.md", "# harmless change\n");
42
+
43
+ let unrelated = check_semantic_legacy(repo.path(), QualityMode::Changed).unwrap();
44
+ assert!(unrelated.ok, "{:#?}", unrelated.findings);
45
+
46
+ repo.write_file("scripts/new.test.js", &fixture_object("newQualityConfig"));
47
+
48
+ let changed = check_semantic_legacy(repo.path(), QualityMode::Changed).unwrap();
49
+ assert!(!changed.ok);
50
+ assert!(changed
51
+ .findings
52
+ .iter()
53
+ .any(|finding| finding.kind == "inline-legacy-fixture"));
54
+ }
55
+
56
+ #[test]
57
+ fn changed_check_allows_shared_fixture_factory_objects() {
58
+ let repo = semantic_repo("semantic-shared-factory");
59
+ repo.commit_all("baseline");
60
+ repo.write_file(
61
+ "scripts/test-support.js",
62
+ &[
63
+ "function verificationContract() {",
64
+ " return {",
65
+ " schema: \"naome.verification.v1\",",
66
+ " version: 1,",
67
+ " status: \"ready\",",
68
+ " checks: [],",
69
+ " changeTypes: [],",
70
+ " releaseGates: []",
71
+ " };",
72
+ "}",
73
+ "",
74
+ ]
75
+ .join("\n"),
76
+ );
77
+
78
+ let report = check_semantic_legacy(repo.path(), QualityMode::Changed).unwrap();
79
+
80
+ assert!(report.ok, "{:#?}", report.findings);
81
+ }
82
+
83
+ #[test]
84
+ fn semantic_route_returns_complete_agent_cleanup_task() {
85
+ let repo = semantic_repo("semantic-route");
86
+ repo.write_file("scripts/a.test.js", &fixture_object("qualityConfig"));
87
+ repo.write_file(
88
+ "scripts/b.test.js",
89
+ &fixture_object("repositoryQualityConfig"),
90
+ );
91
+ repo.commit_all("baseline");
92
+ let report = check_semantic_legacy(repo.path(), QualityMode::DeepReport).unwrap();
93
+ let finding_id = report.findings[0].id.clone();
94
+
95
+ let finding = semantic_route_for_finding(&report, &finding_id).unwrap();
96
+
97
+ assert_eq!(finding.id, finding_id);
98
+ assert!(!finding.cleanup_route.target_suggestion.is_empty());
99
+ assert!(finding
100
+ .cleanup_route
101
+ .required_checks
102
+ .contains(&"naome semantic check --changed".to_string()));
103
+ }
104
+
105
+ fn semantic_repo(name: &str) -> TestRepo {
106
+ let repo = TestRepo::new(name);
107
+ repo.init_git();
108
+ repo.write_file("README.md", "# Semantic fixture\n");
109
+ repo.write_naome_json(
110
+ "repository-quality.json",
111
+ serde_json::json!({"schema":"naome.repository-quality.v1","version":1,"status":"ready","limits":{"maxFileLines":450,"maxNewFileLines":300,"maxDiffAddedLines":180,"maxFunctionLines":100,"maxTopLevelSymbols":30,"duplicateBlockLines":10,"nearDuplicateSimilarity":0.9},"enabledAdapters":[],"disabledChecks":[],"ignoredPaths":[],"generatedPaths":[],"pathRules":[]}),
112
+ );
113
+ repo
114
+ }
115
+
116
+ fn fixture_object(name: &str) -> String {
117
+ [
118
+ format!("const {name} = {{"),
119
+ " schema: \"naome.repository-quality.v1\",".to_string(),
120
+ " version: 1,".to_string(),
121
+ " status: \"ready\",".to_string(),
122
+ " limits: {".to_string(),
123
+ " maxFileLines: 450,".to_string(),
124
+ " maxNewFileLines: 300,".to_string(),
125
+ " maxDiffAddedLines: 180,".to_string(),
126
+ " maxFunctionLines: 100,".to_string(),
127
+ " maxTopLevelSymbols: 30,".to_string(),
128
+ " duplicateBlockLines: 10,".to_string(),
129
+ " nearDuplicateSimilarity: 0.9".to_string(),
130
+ " },".to_string(),
131
+ " enabledAdapters: [],".to_string(),
132
+ " disabledChecks: [],".to_string(),
133
+ " ignoredPaths: [],".to_string(),
134
+ " generatedPaths: [],".to_string(),
135
+ " pathRules: []".to_string(),
136
+ "};".to_string(),
137
+ String::new(),
138
+ ]
139
+ .join("\n")
140
+ }