Skip to content

Merge develop→main: gap waves 3–6 + GT-540 (evidence seam live, enforcer parity, RAG read+write)#183

Merged
beyondnetPeru merged 20 commits into
mainfrom
develop
Jul 13, 2026
Merged

Merge develop→main: gap waves 3–6 + GT-540 (evidence seam live, enforcer parity, RAG read+write)#183
beyondnetPeru merged 20 commits into
mainfrom
develop

Conversation

@beyondnetPeru

Copy link
Copy Markdown
Contributor

Carries gap-closing waves 3–6 + GT-540 to main after PR #182 (waves 1–2). Single-driver, each increment verified at integration; runs the required checks on the batch.

DONE this batch

  • GT-533 — Quality Signal seam wired live into the evaluation pipeline (received Evidence[] influences the result; missing ⇒ advisory no-evidence). Closes the ADR-0104 loop.
  • GT-513@beyondnet/evolith-contracts SemVer-boundary package + sha256 + drift-failing parity guard; /api/v1/capabilities.
  • GT-535 — structural-review rubric → code-quality skill + deterministic Quality Gate; StructuralReviewProvider registers in the GT-533 registry (probabilistic Evidence).
  • GT-540 — production PgVectorKnowledgeAdapter (IKnowledgePort): cosine top-k over the RAG store via the Qwen3 embedder, ranked chunks + citations; closes the RAG read-side.

Advanced (IN-PROGRESS — code landed, remainder deploy/decision-gated)

  • GT-520 — OAuth 2.1 bearer over Streamable HTTP + ABAC identity (IdP选择 EAG-01 gated).
  • GT-519 — fixed a latent bug: the Composite enforcer was unreachable on all three surfaces (no processRunner injected); now wired CLI/MCP/REST + parity guards + version pinning (CI images deploy-gated).
  • GT-512 — provisioning PA-07 seam (fetch→materialize→restore→scoped analysis) + toolchain-from-manifest; unblocks GT-515/524 at code level (real fetch + OS sandbox deploy-gated).
  • GT-516 — ADR-0002 enforce: pilot (HXA-01..07) + compile→normalize→Violation round-trip (real cross-runtime run GT-512-gated).
  • GT-538 — durable pgvector adapter behind rag-port.mjs (vector(1024)/HNSW/cosine + metadata; live Postgres gated).
  • GT-539 — real Qwen3 embedder behind embed() (sidecar-configurable, hashEmbed offline; running sidecar gated).
  • GT-518 — drift-gate (ADR+owner citation, PR-comment fallback) + SARIF/evidence manifest + waiver state machine (live Checks API + durable store gated).

Board

506 → 510 / 541 done, guard green (541 gaps / 492 closure records).

Verified at integration (per package, all green)

core-domain 1018/1018 · agent-runtime 118/118 · agent-runtime-api 67/67 · infra-providers 109/109 · contracts 13/13 · mcp-server 324/324 · CLI (enforce/evaluate) green · RAG node:tests 38/38.

🤖 Generated with Claude Code

beyondnetPeru and others added 17 commits July 13, 2026 15:26
…(GT-533 · ADR-0111)

Close the ADR-0104/0111 conformance loop: resolveEvidenceSignals had zero
callers, so an EvaluationContext carrying inline qualitySignals was silently
ignored. Now the orchestrator folds context.qualitySignals into the result.

- Add pure foldQualitySignals(evidence) helper (real caller of
  resolveEvidenceSignals): one `present` signal per observed dimension; a single
  `no-evidence` signal for DEFAULT_QUALITY_DIMENSION when no evidence supplied.
- Surface EvaluationResult.qualitySignals (optional EvidenceSignal[]).
- EvaluationOrchestrator.evaluate folds ctx.qualitySignals into the result.
  Core only READS inline Evidence[] — no provider import, stays stateless.
  Missing/empty evidence ⇒ no-evidence signal, never a failure (verdict
  unaffected by absence).
- Tests: fold helper (present/dedup/no-evidence) + orchestrator seam wiring
  (with evidence ⇒ present signal; without ⇒ no-evidence + still PASS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 67c2893f7743f27e8b6a555bca3a2f4e9c9d3e33)
…-15/AC1)

Harden the remote MCP surface: a generic, IdP-agnostic OAuth 2.1
resource-server validator authenticates Streamable HTTP requests before
per-identity ABAC. Verified token claims become the McpUserContext, so the
authorization identity comes from the cryptographically verified bearer, never
a request header.

- oauth-resource-server.ts: verifyOAuthToken (RS/PS/ES via JWKS + HS via shared
  secret; iss/aud/exp/nbf enforced), createJwksResolver (cached, injectable),
  loadOAuthConfig from env (EVOLITH_MCP_OAUTH_ISSUER/JWKS_URI/SECRET/AUDIENCE).
- mcp-server-auth.ts: authenticateHttpRequest orchestrates OAuth-first then the
  existing API-key/local-JWT/dev path; unauthenticated remote requests → 401.
- mcp-server.service.ts: load OAuth config at start(), async HTTP handler wires
  the verified identity into the existing ABAC/audit path; stdio/local path and
  health/metrics endpoints unchanged.
- Tests: no bearer / invalid / expired → 401; valid bearer → identity flows into
  ABAC context; JWKS resolution, alg=none downgrade, wrong iss/aud, HS secret.

IdP selection (which provider, shared vs per-tenant, audience model) stays gated
on EAG-01 in the Tracker; the validator works against any compliant OAuth/OIDC
issuer once its issuer/JWKS/audience are supplied via env.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit a11b7eb882f9bb350a97d948bac338687a9b751a)
…y guard (GT-513)

Publish the versioned public-contract package that external (non-Tracker)
consumers depend on instead of the Core engine:

- MACHINE_CONTRACT_SET / CONTRACT_SET_SHA256 mirror
  evolith-machine-contracts.json and add a first-class `external` consumer,
  closing the single-consumer gap; per-schema sha256 pinned to the real
  rulesets/schema files.
- EXPECTED_CAPABILITY_MANIFEST is the frozen snapshot the live
  GET /api/v1/capabilities (buildCapabilityManifest) must reproduce, with
  checkCapabilityManifestParity/assertCapabilityManifestParity.
- Contract-parity tests bind the package to the live producer and FAIL on
  drift (capability fields, sha256 self-consistency, supported-consumer
  regression) plus a schema-file drift guard. 13/13 green.

Registered in the root tsc -b solution file. REST-only per ADR-0074.

The /capabilities endpoint (CapabilitiesController) and the domain
buildCapabilityManifest landed in prior parallel waves; this closes the
remaining published-package + parity criteria.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 2c81ee1888d6e57a33fab3258effaa5566032a9c)
…h (IN-PROGRESS)

- GT-533 IN-PROGRESS->DONE: quality-signal seam wired live into the evaluation
  pipeline (baf570f) — orchestrator folds ctx.qualitySignals via resolveEvidenceSignals
  onto EvaluationResult.qualitySignals; missing => advisory no-evidence, verdict
  unaffected. Closes the ADR-0104 conformance loop. core-domain 966/966. Closure record.
- GT-513 IN-PROGRESS->DONE: @beyondnet/evolith-contracts SemVer-boundary package + sha256
  + drift-failing parity guard (9f02779); capabilities endpoint already on develop.
  contracts 13/13. Closure record.
- GT-520: OAuth 2.1 bearer over Streamable HTTP wired into MCP auth path + ABAC
  (87645d2, mcp-server 324/324). All code criteria met; stays IN-PROGRESS pending the
  EAG-01 IdP org-decision (env config only, no code).
- Counter 506->508 done, 17->15 in-progress. Guard green (541 gaps / 490 records).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…Quality Gate (GT-535 · ADR-0111)

Encode a strict structural-review methodology (re-expressed from the
community "thermo-nuclear" rubric; attribution respected, no verbatim
copy) as pure domain data: seven structural standards
(layering/boundaries, spaghetti, abstraction, code-judo, DRY, file-size,
dead-code) over one total severity hierarchy.

- domain/rubrics/structural-review-rubric.ts: standards + severity rank
  + attribution constant.
- domain/ports/structural-reviewer.port.ts: IStructuralReviewer — the
  probabilistic (LLM/agent) edge behind a port.
- application/structural-review-provider.ts: StructuralReviewProvider
  (structurally an IQualitySignalProvider) ranks findings by severity and
  emits canonical Evidence with determinism:'probabilistic' + mandatory
  provenance/attribution; registrable in TenantQualitySignalRegistry.
- application/structural-quality-gate.ts: deterministic severity→decision
  gate (block/warn/pass); default policy makes a critical/high structural
  regression blocking.
- default-skills.ts: code-quality-structural-review skill descriptor.

Tests: findings ranked by severity; Evidence carries probabilistic +
provenance; critical regression → blocking; gate mapping deterministic.
agent-runtime tsc: pass. jest: 110/110. skill-registry parity: OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit dfafde2361d67a1b94e56b7db649f6e4fa565cac)
…ain (GT-519)

Close the two remaining GT-519 criteria (OTel metrics already DONE):

PARITY (criterion 1): register the Composite enforcer identically across all
three surfaces by injecting the real NodeProcessRunner into each surface's
RulesetValidatorService factory — CLI (app.module), MCP (domain.module) and
REST (core-domain.module). RulesetValidatorService already wraps its strategy
with createCompositeEnforcerStrategy when a processRunner is present, so this
makes `enforce:`-routed rules reachable identically everywhere. Non-forking:
without enforcer rules the composite delegates to the native/opa strategy.

- enforcer-surface-parity.spec.ts: behavioural parity (same enforcer rule →
  byte-identical results on cli/mcp/rest), a divergence guard pinning the
  pre-fix break (native-only surface drops the enforcer rule), and a
  registration anti-drift guard asserting each real surface module wires a
  NodeProcessRunner into RulesetValidatorService.

REPRODUCIBLE TOOLCHAIN (criterion 2, code part): pin EXACT versions (x.y.z)
in both enforcer-catalog.json and validated-tool-catalog.md §4.3, replacing the
non-reproducible `16.x`/`2.x`/`0.56.x` ranges. New enforcer-catalog-doc-parity
.spec.ts parses both files and fails on any drift (version/runtime/adr) or any
non-exact pin. Per-runtime CI images + vuln scan + Renovate remain deploy-gated.

core-domain tsc clean; enforcement jest 144/144; mcp-server jest 300/300.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 6a44b14ff98eea7506fd19d1a014dc05382c1cf3)
…visioning (GT-512 · PA-07)

Close the CODE-level integration for GT-512: connect a repository source
reader (the "TEXT tarball" of sources with no installed deps) through to
provisionEvaluationEnvironment so an analyzer runs against a RESTORED,
Nx-project-scoped checkout.

core-domain (application/validators/enforcement/provisioning.ts):
- Ports IRepositorySourceReader (fetch → {commitSha, files}) and
  IWorkspaceMaterializer (files → absolute checkout path). Core depends only
  on these; production adapters (GitHub reader, Node materializer) live in infra.
- materializeAndProvisionEnvironment (PA-07): fetch → resolve toolchain from
  the fetched evolith.yaml (PA-05) → materialize → executeRestorePlan via the
  (sandbox-wrapped) IProcessRunner → expose the restored, project-scoped
  analysisPaths. PA-03 cache keyed by the resolved SHA + changed files BEFORE
  any I/O, so a re-eval of the same commit+scope skips fetch/materialize/restore.
- PA-05: resolveRestorePlanFromManifest reads restore/toolchain commands from
  the manifest (explicit toolchain.restore[] or the runtime default) rather than
  hard-coding; provisionEvaluationEnvironment gains an optional restorePlan.
- Public API exports the new ports/functions/types.

infra-providers:
- NodeWorkspaceMaterializer: writes the in-memory tarball to a fresh, isolated
  checkout dir over IFileSystem; path-traversal and absolute-path entries are
  rejected fail-closed. The GitHub network fetch + tar extraction stay
  deploy-gated (tar dep + network).

Tests (stubbed fetch + stubbed runner — no network, no real npm ci):
- core-domain provisioning.spec: +16 (PA-05 manifest plans, PA-07 fetch/
  materialize/restore/scope, cache-hit skip, unscoped, unresolved-runtime skip,
  failed-restore not cached). 969 pass.
- infra workspace-materializer.spec: nested writes, isolation, traversal denial.
  infra 109 pass.

DEPLOY-GATED (unchanged): OS-level sandbox (egress denial, cgroups/namespaces,
ulimits) needs a locked-down container; the real GitHubRepositorySourceReader
network fetch needs the tar dependency + network.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 2e7524bc1f30e0c2948616b2d441b3e3b6507599)
- GT-535 PENDING->DONE: structural-review rubric as pure-domain data + code-quality skill
  + StructuralReviewProvider (registers in the GT-533 registry, probabilistic Evidence) +
  deterministic Quality Gate (d450d96, agent-runtime 110/110). Closure record.
- GT-519 IN-PROGRESS: fixed a latent bug — no surface DI injected a processRunner, so the
  Composite enforcer was unreachable on CLI/MCP/REST; now injected across all three +
  parity/anti-drift guards + exact version pins (f8310fa). Criterion 2 CI-images deploy-gated.
- GT-512 IN-PROGRESS: PA-07 domain-wiring seam fetch->materialize->restore->scoped-analysis +
  toolchain-from-manifest (20f704b, core-domain 986/986 + infra 109/109). Unblocks GT-515/524
  at code level; real network fetch + OS sandbox deploy-gated.
- Counter 508->509 done, 14->13 pending. Guard green (541 gaps / 491 records).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…Violation round-trip

Completes the GT-516 unmet criteria on top of the existing PolicyCompiler,
`enforce:` schema block, and `evolith enforce compile` action:

- adr-0002: add `enforce:` to HXA-03, HXA-06, HXA-07 so all seven HXA rules
  are enforcer-routed. HXA-07 (domain tests must not import a framework test
  harness/testcontainers) compiles to a dependency-cruiser check; HXA-03
  (implements-ports) and HXA-06 (AOP-in-infra-only) are positive/structural
  and take the documented per-rule NATIVE fallback rather than emitting an
  all-matching, false-positive-prone rule.
- policy-compiler.spec: the ADR-0002 pilot now asserts the real partition
  (5 compiled: HXA-01/02/04/05/07; 2 native fallbacks: HXA-03/06).
- policy-compiler.roundtrip.spec: compile ADR-0002 → depcruise forbidden
  config → run through the GT-515 DependencyCruiserAdapter over a
  StubProcessRunner → normalize to canonical Violation. A CLEAN fixture
  corpus yields ZERO violations (0 false positives); a DIRTY fixture proves
  every compiled tool rule id round-trips to a Violation; malformed reports
  produce no spurious findings.

Real cross-runtime tool EXECUTION stays GT-512-sandbox-gated; this exercises
the deterministic compile→normalize contract with a stubbed runner + fixtures.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 084f81ffba0ac41e62410826b1ab9d665b72d5ae)
…trip (IN-PROGRESS)

Populated HXA-01..07 enforce blocks (5 compiled / 2 fallback) + compile->normalize->
Violation round-trip on fixtures (0 FP) via the GT-515 adapter over a stub runner
(806e333, core-domain 990/990 + CLI enforce 20/20). Real cross-runtime execution +
real-corpus 0-FP stay GT-512-gated. Output feeds GT-518.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Register a `durable: true` pgvector adapter with the provider-neutral RAG
port so `createRagAdapter({provider:'pgvector'})` resolves and a live
14-rag-index-sync run persists embeddings instead of failing closed.

- rag-pgvector.mjs: embed (placeholder hashEmbed@1024 — real Qwen3 is
  GT-539), upsert (parameterized INSERT ... ON CONFLICT(id) DO UPDATE with
  ADR-0090 §2 metadata columns), delete (DELETE ... WHERE id = ANY($1)).
  `pg` is not a build dep: accepts an injected `config.client` seam and only
  lazy-imports pg when none is injected, so module load never requires it.
- rag-pgvector.schema.sql: CREATE EXTENSION vector, rag_chunks table with
  embedding vector(1024), HNSW cosine index, and btree indexes on the four
  filter columns (source_file, adr_id, language, corpus_version). Exported as
  PGVECTOR_DDL; a test asserts the constant and file agree (no drift).
- 14-rag-index-sync.mjs: side-effect import to wire the vendor at the CI seam
  (port stays vendor-neutral).
- rag-pgvector.test.mjs: 10 node:test cases (durable, injected stub, 1024-dim
  embeds, parameterized upsert/delete SQL, wrong-dimension rejection, DDL).

Closes the durable-adapter + metadata-filtering criteria at the CI seam; the
live-Postgres run (EVOLITH_RAG_SYNC=true against a real DB) is deploy-gated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit cace611825316ef1608281658b7dea184ded6ece)
…s seam (IN-PROGRESS)

Redone at the correct CI seam (cace6118): rag-pgvector.mjs registers a durable:true
pgvector adapter via registerRagAdapter, vector(1024)+HNSW cosine DDL per ADR-0112,
four ADR-0090 metadata columns, injected-client seam (pg out of build), 10 node:test +
9 regression green. AC2 (metadata) closed; AC1 durable adapter registered + unit-tested
(live Postgres run deploy-gated). Unblocks GT-539/GT-540. Counter 13->12 pending, 15->16 in-progress.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…dence manifest

Close the code-level acceptance criteria of GT-518 (PR/CI drift gate) on top of
the existing SARIF exporter and enforcer-evidence manifest.

core-domain:
- domain/codeowners.ts: CODEOWNERS parser + last-match-wins resolver +
  enrichViolationsWithCodeowners (git-native owner enrichment, mirrors ownership.ts).
- domain/waiver.ts: deterministic waiver state machine (request→approve→version→expire),
  time-derived expiry, IWaiverStore seam + InMemoryWaiverStore, applyWaivers suppression
  with audit trail.
- evaluation/drift-gate.ts: evaluateDriftGate — blocks on retained error violations,
  cites ADR id + owner, suppresses waived findings (marked frozen), emits the evidence
  manifest (EVD-01..03), renders a PR-comment fallback body + non-zero exit code.
  Live Checks-API publish kept behind IChecksPublisher (deploy-gated);
  PrCommentFallbackPublisher is the mandated fallback (never a silent no-op).
- sarif-exporter.ts: extract shared evaluationResultToViolations (reused by drift gate).

cli (evolith evaluate):
- --format drift: run the drift gate, resolve owners from the workspace CODEOWNERS,
  print the PR-comment body, exit non-zero on block.
- --evidence <path>: write the enforcer-evidence manifest (EVD-01..03).

Tests: core-domain 986 pass (+47), cli 969 pass (+2). tsc clean both packages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit e7fe0821824db2f610677739e60ebffb224a97cd)
Replace the hashEmbed placeholder in the durable pgvector adapter with a
real, model-agnostic embedding path that calls a LOCAL inference sidecar
(ADR-0112 §1/§2/§4: Qwen3-Embedding-0.6B, dim 1024, on-perimeter, no
corpus egress).

- rag-embed-qwen3.mjs: injectable-fetch sidecar embedder (env/config-driven
  endpoint + model id + dim). Fails closed on transport error, non-OK
  response, unparseable body, wrong vector count, or any wrong-dimension
  vector (dimension consistency is load-bearing — ADR-0112 §2/§5). Never
  imports a network lib at load time; the network client is an injected seam.
- rag-pgvector.mjs: embed() uses the real model WHEN a sidecar is configured
  and falls back to the deterministic hashEmbed offline default otherwise
  (dry-run/tests unchanged). Exposes embeddingModelId; asserts model dim ==
  store dim (1024) at construction and re-checks per-vector on embed().
- rag-sync.mjs: folds the effective model id into corpus_version so cache
  invalidation tracks a model swap (ADR-0090 §3). chunk_ids are unaffected
  (they never depended on corpus_version), so pruning stays correct; the
  memory stand-in has no embeddingModelId, so existing behavior is unchanged.

Tests (node --test): 38/38 green — 12 embedder unit cases (stubbed sidecar)
+ 8 integration cases (configured ⇒ 1024-dim real path + model id in
corpus_version; unconfigured ⇒ hashEmbed fallback; wrong-dim ⇒ fail closed)
+ the 18 existing rag-sync/rag-pgvector regressions. The live sidecar
(running Qwen3) is deploy-gated and not exercised.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 2ad3bde11d45b3b3c0853af9c5f5a1c807aa8e32)
…3 embed) advanced

- GT-518 (IN-PROGRESS): drift-gate cites ADR+owner via CODEOWNERS + PR-comment fallback,
  evaluate --format sarif + evidence manifest (EVD-01..03) reusing the existing sarif-exporter,
  waiver state machine + applyWaivers (4113556, core-domain 1018/1018 + CLI evaluate 6/6).
  Live Checks-API publish + durable waiver store + CLI waiver subcommand deploy/polish-gated.
- GT-539 PENDING->IN-PROGRESS: real Qwen3 embedder behind rag-port embed() at the .mjs seam,
  sidecar-configurable + hashEmbed offline, model id folded into corpus_version, fail-closed
  dim check (c4e612b, rag node:tests 38/38). Running sidecar + model-registry entry deploy-gated.
- Counter 12->11 pending, 16->17 in-progress. Guard green (541 gaps).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…pter (GT-540 · ADR-0090/0112)

Runtime read-side of the RAG stack. PgVectorKnowledgeAdapter runs cosine top-k
(`<=>`, score = 1 - distance) over the GT-538 `rag_chunks` pgvector store and
returns ranked, fully-cited KnowledgeChunk[] (source_file, adr_id, heading, char
offsets, score), replacing the token-overlap InMemoryKnowledgeAdapter for
production while keeping it as the offline/test default.

Hexagonal edges, nothing hard-wired:
- query embedding is an injected EmbedQuery seam ((text) => Promise<number[1024]>);
  production wires the GT-539 Qwen3 sidecar, tests stub it. Dimension asserted ==
  1024, fail-closed on mismatch (ADR-0112 §2).
- db client is an injected node-postgres-shaped { query(text, params) } seam; no
  compile-time pg dependency, lazy `await import('pg')` only when none injected.
- metadata filters (language/adr_id/source_file/corpus_version) as parameterized WHERE.

Wiring: runtime.factory.resolveKnowledgeAdapter selects pgvector via
AGENT_RUNTIME_KNOWLEDGE_MODE (or a configured EVOLITH_RAG_PG_URL) and fails loud
when pgvector is selected without its store connection + embedder sidecar;
in-memory stays the explicit default in every profile. Knowledge port threaded
onto the runtime bundle (optional dep, in-memory default in bootstrap).

maturity-assessment.md Knowledge/RAG row updated from "Not implemented" to the
delivered adapter. Live pgvector + live Qwen3 sidecar run is deploy-gated.

Tests: agent-runtime 106 pass (8 new adapter unit tests: embeds->cosine SQL->ranked
cited chunks, dimension fail-closed, parameterized filter WHERE, corpus pin,
getDocument, corpusSize); agent-runtime-api 67 pass (8 new selector tests).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 40464149e5133bf1cca6fbedeca55d852ba3eb54)
…d-side)

Production PgVectorKnowledgeAdapter (40464149): cosine top-k over the GT-538 rag_chunks
table via the GT-539 embedder, ranked KnowledgeChunk with score + citation; injected pg
client + embedder seams (no compile-time pg), runtime.factory selects it via env with the
in-memory adapter as default. Both ACs closed; live retrieval deploy-gated (not an AC).
agent-runtime 118/118 + agent-runtime-api 67/67. Closes the RAG read-side. Counter 509->510
done, 11->10 pending. Guard green (541 gaps / 492 records).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📊 Bilingual Coverage Impact

PR Changes

  • Paired EN/ES files modified: 4
  • New EN files needing ES translation: 1

Repository Coverage

Metric Value
Total EN files 545
Total ES files 508
Paired files 0
Coverage 0%

⚠️ Action required: 1 new EN file(s) added without ES counterparts.

To create skeletons:

node .harness/scripts/generate-es-skeleton.mjs <file.md>

Generated by GitHub Actions

…-513)

The new workspace package src/packages/contracts (@beyondnet/evolith-contracts,
GT-513) was never recorded in package-lock.json — the gap agents symlink node_modules
and never run npm install — so CI npm ci failed monorepo-wide (Missing: @beyondnet/
evolith-contracts@1.0.0 from lock file). Synced via npm install --package-lock-only:
adds the contracts workspace entry and corrects a stale @beyondnet/evolith-cli version
(1.0.0->1.0.1) to match its package.json. No node_modules / dependency changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment thread src/packages/core-domain/src/domain/codeowners.ts Fixed
Comment thread src/packages/core-domain/src/domain/codeowners.ts Fixed
Comment thread src/packages/mcp-server/src/mcp/mcp-server-auth.ts
Comment thread src/sdk/cli/src/commands/evaluate/evaluate.command.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 26b0303375

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .harness/scripts/ci/rag-pgvector.mjs Outdated
Comment thread src/apps/agent-runtime-api/src/agent-runtime/runtime.factory.ts Outdated
Comment thread src/packages/agent-runtime/src/adapters/skills/default-skills.ts
Comment thread src/rulesets/adr/adr-0002-hexagonal-architecture.rules.json
beyondnetPeru and others added 2 commits July 13, 2026 17:38
… ReDoS)

CodeQL flagged `^\/+`/`\/+$` (normalizePath) and `#.*$` (parseCodeowners) as
polynomial-backtracking on inputs with many `/` or `#` repetitions. Replace with
linear char-based slash trimming and an indexOf comment strip. Behavior-preserving;
codeowners 10/10 + full core-domain 1018/1018 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…TABASE_URL

Two agentic-review findings on the wave-6 code:
- P1 (GT-538): the pgvector durable store persisted only text_preview (120 chars) in
  content, so retrieval could not ground an agent. Keep the full text in metadataOf and
  bind content = m.text (fallback preview). rag node:tests green.
- P2 (GT-540): resolveKnowledgeAdapter keyed pgvector off the generic DATABASE_URL, which
  commonly points at an unrelated app DB — mis-targeting retrieval / failing loud. Require
  an explicit EVOLITH_RAG_PG_URL / AGENT_RUNTIME_KNOWLEDGE_PG_URL. agent-runtime-api 67/67.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@beyondnetPeru beyondnetPeru merged commit 5736016 into main Jul 13, 2026
40 of 49 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants