architect: LP Objections page — UI trigger for the grounding pass (v0.1.0:66)

New admin "LP Objections" page (frontend ObjectionsPage + nav). Pick a segment (or
All LPs) and Run grounding: the Architect mines matched LP emails + notes on the local
model, scrubs every identifier through the redaction boundary, and asks Claude for the
recurring objections + honest rebuttals (substantiated/hand-wavy flagged). Renders the
de-identified draft + an "N identifiers protected" badge; fail-closed statuses
(local_model_unavailable / scrub_unavailable / claude_not_configured / rehydrate_failed)
show a clear message. Uses the existing /api/architect/ground route. Verified in preview:
page + segment selector + Run; the local minimize/scrub legs actually ran against real
Spark on synthetic input and fail-closed correctly at the (key-less) Claude step;
success rendering verified with a mocked ok response.

NOT yet deployed — start-cli RPC to the box hit a transient transport error post a
StartOS hiccup (curl works, start-cli doesn't); CRM healthy at v0.1.0:65 meanwhile.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Keysat
2026-06-08 18:48:24 -05:00
parent 701e37b579
commit c2b84a1f26
4 changed files with 118 additions and 4 deletions
+3 -2
View File
@@ -26,8 +26,9 @@ import { v_0_1_0_62 } from './v0.1.0.62'
import { v_0_1_0_63 } from './v0.1.0.63'
import { v_0_1_0_64 } from './v0.1.0.64'
import { v_0_1_0_65 } from './v0.1.0.65'
import { v_0_1_0_66 } from './v0.1.0.66'
export const versionGraph = VersionGraph.of({
current: v_0_1_0_65,
other: [v_0_1_0_39, v_0_1_0_40, v_0_1_0_41, v_0_1_0_42, v_0_1_0_43, v_0_1_0_44, v_0_1_0_45, v_0_1_0_46, v_0_1_0_47, v_0_1_0_48, v_0_1_0_49, v_0_1_0_50, v_0_1_0_51, v_0_1_0_52, v_0_1_0_53, v_0_1_0_54, v_0_1_0_55, v_0_1_0_56, v_0_1_0_57, v_0_1_0_58, v_0_1_0_59, v_0_1_0_60, v_0_1_0_61, v_0_1_0_62, v_0_1_0_63, v_0_1_0_64],
current: v_0_1_0_66,
other: [v_0_1_0_39, v_0_1_0_40, v_0_1_0_41, v_0_1_0_42, v_0_1_0_43, v_0_1_0_44, v_0_1_0_45, v_0_1_0_46, v_0_1_0_47, v_0_1_0_48, v_0_1_0_49, v_0_1_0_50, v_0_1_0_51, v_0_1_0_52, v_0_1_0_53, v_0_1_0_54, v_0_1_0_55, v_0_1_0_56, v_0_1_0_57, v_0_1_0_58, v_0_1_0_59, v_0_1_0_60, v_0_1_0_61, v_0_1_0_62, v_0_1_0_63, v_0_1_0_64, v_0_1_0_65],
})
+19
View File
@@ -0,0 +1,19 @@
import { VersionInfo } from '@start9labs/start-sdk'
// LP Objections page: a UI trigger for the Architect's grounding pass. An admin picks
// a segment (or All LPs) and runs grounding — the Architect mines matched LP emails and
// notes on the local model, removes every identifier through the redaction boundary,
// and asks Claude for the recurring objections + honest rebuttals. Only de-identified
// themes leave Ten31. Uses the existing /api/architect/ground route; no schema change.
export const v_0_1_0_66 = VersionInfo.of({
version: '0.1.0:66',
releaseNotes: {
en_US: [
'New LP Objections page: run the Architect grounding pass over your matched LP email',
'to surface the recurring objections (and the strongest honest rebuttals) for any',
'segment. Everything sensitive is de-identified on your own hardware before Claude sees',
'it — only objection themes leave Ten31. Results are a draft for your review.',
].join(' '),
},
migrations: { up: async () => {}, down: async () => {} },
})