{
  "schemaVersion": 1,
  "status": "passed",
  "verifiedAt": "2026-11-05T19:31:18.856781+00:00",
  "versions": {
    "java": "21",
    "springBoot": "4.0.0",
    "springAi": "2.0.0"
  },
  "sourceSha256": "cf9d696b5fe2ead1108ba05fafdca5ebd92868fc7e8b004dd7a827ffd2d44e61",
  "sourceFileCount": 27,
  "sourceHashAlgorithm": "SHA256 of sorted UTF-8 relative path + NUL + ASCII file SHA256 + LF",
  "maven": {
    "command": "mvn -B -ntp -Pai clean verify",
    "exitCode": 0,
    "summary": {
      "tests": 22,
      "failures": 0,
      "errors": 0,
      "skipped": 1,
      "passed": 21
    },
    "suites": [
      {
        "name": "cn.itfeng.knowledge.ApiIntegrationTest",
        "tests": 16,
        "failures": 0,
        "errors": 0,
        "skipped": 0,
        "cases": [
          {
            "name": "roleFiltersReadAndSearch",
            "status": "passed"
          },
          {
            "name": "deletedDocumentCannotReappearOrBeUpdated",
            "status": "passed"
          },
          {
            "name": "chineseTermsAreRetrievable",
            "status": "passed"
          },
          {
            "name": "citationsAreExactAndVersioned",
            "status": "passed"
          },
          {
            "name": "tenantIsolationForReadUpdateDeleteAndSearch",
            "status": "passed"
          },
          {
            "name": "authenticationRequiredAndWrongPassword",
            "status": "passed"
          },
          {
            "name": "logoutAndExpiryRevokeBearer",
            "status": "passed"
          },
          {
            "name": "roleRevocationAffectsExistingBearer",
            "status": "passed"
          },
          {
            "name": "serverOwnsTenantAndRole",
            "status": "passed"
          },
          {
            "name": "permissionChangeCannotFallBackToPublicOldVersion",
            "status": "passed"
          },
          {
            "name": "updatesNeverSearchOldVersion",
            "status": "passed"
          },
          {
            "name": "unknownRoutesAndMethodsHaveHttpErrors",
            "status": "passed"
          },
          {
            "name": "staleVersionConflicts",
            "status": "passed"
          },
          {
            "name": "readerCannotWrite",
            "status": "passed"
          },
          {
            "name": "unknownQuestionRefusesWithoutCitation",
            "status": "passed"
          },
          {
            "name": "invalidInputsReturn400",
            "status": "passed"
          }
        ]
      },
      {
        "name": "cn.itfeng.knowledge.LiveEmbeddingTest",
        "tests": 1,
        "failures": 0,
        "errors": 0,
        "skipped": 1,
        "cases": [
          {
            "name": "actualProviderReturnsConfiguredDimensions",
            "status": "skipped"
          }
        ]
      },
      {
        "name": "cn.itfeng.knowledge.PersistenceIntegrationTest",
        "tests": 1,
        "failures": 0,
        "errors": 0,
        "skipped": 0,
        "cases": [
          {
            "name": "fileDatabaseSurvivesFullApplicationRestartWithUpdatesAndTombstones",
            "status": "passed"
          }
        ]
      },
      {
        "name": "cn.itfeng.knowledge.PgVectorIntegrationTest",
        "tests": 4,
        "failures": 0,
        "errors": 0,
        "skipped": 0,
        "cases": [
          {
            "name": "currentVersionCheckRejectsStaleMetadataAndLowSimilarityRefuses",
            "status": "passed"
          },
          {
            "name": "updateOverwritesVectorAndNeverFallsBackToOldRoleOrVersion",
            "status": "passed"
          },
          {
            "name": "storesActualVectorAndFiltersTenantAndRoleInsidePostgres",
            "status": "passed"
          },
          {
            "name": "tombstoneRejectsEvenDeliberatelyReintroducedStaleVector",
            "status": "passed"
          }
        ]
      }
    ]
  },
  "httpSmoke": {
    "status": "passed",
    "httpChecks": 23,
    "port": 8085,
    "binding": "127.0.0.1",
    "processRestart": "passed"
  },
  "profiles": {
    "default": "tested: H2 persistence + HTTP + restart",
    "pgvector": "tested: real PostgreSQL vectors with deterministic fixture",
    "springAiCompilation": "tested",
    "liveModelApi": "not tested: no provider key/API call in this verification",
    "semanticRagQuality": "not tested"
  },
  "docker": {
    "image": "pgvector/pgvector:pg17",
    "imageId": "sha256:7d0a41464797aeb9862dfdc0bbf1526b82cfd324cdd8036df19e3545f4a9ccb8",
    "binding": "127.0.0.1:53711",
    "fixtureDimensions": 3,
    "embedding": "deterministic test fixture; no semantic model"
  },
  "evidence": {
    "http-process.log": "d6bf3d6aeb8904e2cb4943aeb0d423c774deb8891199435404ed067a6593b1df",
    "java-version.log": "ad0764d5d661c212283c0a423c1ff4a2c06a12bb2522062e23117a5507426621",
    "junit/TEST-cn.itfeng.knowledge.ApiIntegrationTest.xml": "6ad776e717a6e2a399d148d63ad7d45292442bb1160366119d7f42277e12de35",
    "junit/TEST-cn.itfeng.knowledge.LiveEmbeddingTest.xml": "95bf63bc478033f8437d6515308360ad0bdda0f63807df737c8410cf82a28878",
    "junit/TEST-cn.itfeng.knowledge.PersistenceIntegrationTest.xml": "ba636524f79054715219ae5fbc3c5a6a92a6859d217fe2053a6cf5b203549f05",
    "junit/TEST-cn.itfeng.knowledge.PgVectorIntegrationTest.xml": "32919c39064738b5eb4dbcf369004dacb99b53ffe70bc7682dc2e7f245ecfe4f",
    "junit-default/TEST-cn.itfeng.knowledge.ApiIntegrationTest.xml": "808772aa6333888fe68fd3eee8e40338bc0e0e0833bb3294c1e2c84cbd0d0678",
    "junit-default/TEST-cn.itfeng.knowledge.PersistenceIntegrationTest.xml": "6859d4c223154e66d345c4736d9fbed62415dcc0bf16823bf1a34f54171f05f2",
    "maven-default.log": "f4963bb086496e7bb55c3b309807b51daab64720d62f67b1b77652d4c222852e",
    "maven-version.log": "02913dc8b43141bdd9d314c8d95ba99a262b3abe6971b1649f76c0b9a0047055",
    "maven.log": "48a5bcf9cd924311d8f7ddeda7af8d69ce6301039f76879008110cc47e7d689e",
    "README.md": "c2c2f849fb6fa8037908ee30ed537ed2f6760acc6f89b2ffbdb78f61da332f9f",
    "smoke.json": "d47ebea7cd968e881e94ec49edbe4bb43894ee361b76728e9ad516315ba06f55",
    "source-manifest.json": "2497edd7778af6a7f41daf3f259ce9adad7290654fefa84b529189d1ae278042"
  },
  "defaultMaven": {
    "command": "mvn -B -ntp clean verify",
    "exitCode": 0,
    "summary": {
      "tests": 17,
      "failures": 0,
      "errors": 0,
      "skipped": 0
    }
  },
  "download": {
    "path": "/downloads/knowledge-service.zip",
    "sha256": "6512c0887868207a329780efa87895e7534ad7618ba3fd8033ad01307d19b7ef",
    "bytes": 83817,
    "contents": "verified sources and evidence only; no target/JAR/database/secrets"
  }
}
