From 86b390d8d4756c57af93fed6781b9851987566ee Mon Sep 17 00:00:00 2001 From: Conduction Release Bot Date: Thu, 10 Sep 2026 07:46:01 +0200 Subject: [PATCH] chore(gate-115): record the two spend-narrative bindings as answered `fetchSpendNarrative()` calls `/apps/openconnector/api/sources/{source}/call` and its spec asserts the path. gate-115 reports both as cross-app lookups naming a retired app id. The comment beside the call already explained why it is not repointed; this adds the machine-readable half so the gate stops re-raising an answered question, and puts the same marker on the assertion that pins the path. Re-verified 2026-09-10 against integriq `development`. The route exists under NEITHER name. SourcesController publishes only test, logs, tripCircuitBreaker and resetCircuitBreaker, and `git log -S "sources/{source}/call"` and `git log -S "sources#call"` over integriq's full 3,960-commit history, which spans the whole openconnector era, both return nothing. The app has no inference endpoint at all. So REQ-SAW-006 waits on an integriq surface that has never been built. Repointing the segment would turn one 404 into another while hiding that gap, on a diff that reads as a fix. Recorded with `@stale-fleet-app-id exclude`, the shared exclusion convention gate-115 reads (.github#738). Comments only. No behaviour changes, and no test assertion changes: the spec still asserts the path the caller actually uses. --- src/services/__tests__/spendAnalytics.spec.js | 5 +++++ src/services/spendAnalytics.js | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/services/__tests__/spendAnalytics.spec.js b/src/services/__tests__/spendAnalytics.spec.js index 4e5521fe..d06c525f 100644 --- a/src/services/__tests__/spendAnalytics.spec.js +++ b/src/services/__tests__/spendAnalytics.spec.js @@ -129,6 +129,11 @@ describe('spendAnalytics data layer', () => { const result = await fetchSpendNarrative({ summary: { total: 100 } }) expect(result).toEqual({ available: true, narrative: 'Spend is up 12%.' }) const [url, body] = axios.post.mock.calls[0] + // @stale-fleet-app-id exclude this pins the path the caller deliberately + // leaves stale. integriq publishes no `/api/sources/{source}/call` under + // either name (re-verified 2026-09-10 by git log -S over its full history), + // so the assertion moves in the same change that gives REQ-SAW-006 a real + // integriq endpoint to call. See fetchSpendNarrative in spendAnalytics.js. expect(url).toContain('/apps/openconnector/') expect(url).not.toContain('11434') // Conduction local-LLM defaults. diff --git a/src/services/spendAnalytics.js b/src/services/spendAnalytics.js index 06519921..dad6511b 100644 --- a/src/services/spendAnalytics.js +++ b/src/services/spendAnalytics.js @@ -244,6 +244,15 @@ export async function fetchSpendNarrative({ summary, timeoutMs = 5000 }) { // `POST /api/datasource/{sourceId}/resolve`, a read-only dashboard value // resolver that dispatches a GET, which is not an inference call. This needs // an integriq-side endpoint before the name here means anything. + // + // @stale-fleet-app-id exclude the route exists under NEITHER name. Re-verified + // 2026-09-10 against integriq `development`: SourcesController publishes only + // test, logs, tripCircuitBreaker and resetCircuitBreaker, and + // `git log -S "sources/{source}/call"` and `git log -S "sources#call"` over its + // full 3,960-commit history, which spans the whole openconnector era, both + // return nothing. The app has no inference endpoint at all. REQ-SAW-006 waits + // on an integriq surface that has never been built, so repointing the segment + // would turn one 404 into another while hiding that gap. const url = generateUrl('/apps/openconnector/api/sources/{source}/call', { source: LLM_SOURCE_ALIAS, })