@lazyingart/agintiflow 0.20.274 → 0.20.275

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyingart/agintiflow",
3
- "version": "0.20.274",
3
+ "version": "0.20.275",
4
4
  "type": "module",
5
5
  "description": "AgInTiFlow is a project-aware agent workspace for hybrid wet-dry R&D, hardware-aware intelligence, software automation, and industrial workflows.",
6
6
  "license": "Apache-2.0",
@@ -6483,6 +6483,12 @@ try {
6483
6483
  }),
6484
6484
  "a direct clean-worktree assertion was not classified when the traceback omitted the Git helper call"
6485
6485
  );
6486
+ assert(
6487
+ failedTestRequiresCleanRepositoryState({
6488
+ failureSummary: "acceptance failed: repository is not clean",
6489
+ }),
6490
+ "a concise authoritative acceptance failure did not activate repository-state repair"
6491
+ );
6486
6492
  assert(
6487
6493
  !failedTestRequiresCleanRepositoryState({
6488
6494
  failureSummary: "The generated prose says the repository worktree is not clean.",
@@ -2008,6 +2008,54 @@ assert(
2008
2008
  ),
2009
2009
  "repository-state repair did not explain the bounded Git workflow"
2010
2010
  );
2011
+ const conciseRepositoryStateRepairRuntime = nextStepRuntimeConfig(
2012
+ { provider: "deepseek", taskProfile: "slides" },
2013
+ {
2014
+ meta: {
2015
+ projectVerification: {
2016
+ mutationRevision: 18,
2017
+ testRuns: [{
2018
+ command: "python acceptance.py --root .",
2019
+ mutationRevision: 18,
2020
+ passed: false,
2021
+ failureEvidenceVersion: 2,
2022
+ failureSignature: "concise-repository-state-gate",
2023
+ failureSummary: "acceptance failed: repository is not clean",
2024
+ }],
2025
+ },
2026
+ failedTestRecoveryPacket: {
2027
+ packetVersion: 15,
2028
+ mutationRevision: 18,
2029
+ failureSignature: "concise-repository-state-gate",
2030
+ content: "Retained canonical source evidence from the prior content failure.",
2031
+ },
2032
+ toolLoop: {
2033
+ stagnationEpoch: 4,
2034
+ recent: [],
2035
+ },
2036
+ },
2037
+ messages: [],
2038
+ }
2039
+ );
2040
+ assertStrict.equal(
2041
+ conciseRepositoryStateRepairRuntime.testFailureRepositoryStateRepair,
2042
+ true,
2043
+ "a concise acceptance failure remained in canonical-source repair mode"
2044
+ );
2045
+ assertStrict.equal(
2046
+ conciseRepositoryStateRepairRuntime.testFailureRepairMutationRequired,
2047
+ false,
2048
+ "stale retained source evidence overrode a clean-repository repair gate"
2049
+ );
2050
+ sameNames(
2051
+ selectProgressiveTools(allTools, {
2052
+ config: conciseRepositoryStateRepairRuntime,
2053
+ goal: "Commit the accepted presentation and leave the repository clean.",
2054
+ profile: "slides",
2055
+ }),
2056
+ ["run_command", "finish"],
2057
+ "a concise clean-repository acceptance failure exposed content mutation tools"
2058
+ );
2011
2059
  const taskOwnedRepositoryState = {
2012
2060
  meta: {
2013
2061
  goalContract: { revision: 6 },
@@ -6306,6 +6306,9 @@ export function failedTestRequiresCleanRepositoryState(testRun = {}) {
6306
6306
  const directCleanStateAssertion =
6307
6307
  /(?:assertionerror|assert(?:ion)?(?:\s+failed)?)[^.!;]{0,200}(?:(?:project|repository)\s+)?(?:work\s*tree|worktree|repository)[^.!;]{0,80}(?:is\s+not\s+clean|must\s+be\s+clean|expected\s+(?:to\s+be\s+)?clean)\b/i.test(summary);
6308
6308
  if (directCleanStateAssertion) return true;
6309
+ const authoritativeCleanStateFailure =
6310
+ /(?:^|\b)(?:acceptance|validation|verification|contract|test|check)\s+failed\s*:[^.!;]{0,200}(?:(?:project|repository)\s+)?(?:work\s*tree|worktree|repository)[^.!;]{0,80}(?:is\s+not\s+clean|must\s+be\s+clean|expected\s+(?:to\s+be\s+)?clean)\b/i.test(summary);
6311
+ if (authoritativeCleanStateFailure) return true;
6309
6312
  const invokesShortStatus =
6310
6313
  /git[a-z_]*\s*\([^)]*["']status["'][^)]*(?:["']--short["']|["']--porcelain(?:=[^"']+)?["'])[^)]*\)/i.test(summary) ||
6311
6314
  /\bgit\s+status\s+(?:--short|--porcelain(?:=\S+)?)\b/i.test(summary);