@vantageos/backend-doctor 0.1.0
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/README.md +88 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +94 -0
- package/dist/contract.d.ts +18 -0
- package/dist/contract.js +29 -0
- package/dist/coverage-cli.d.ts +2 -0
- package/dist/coverage-cli.js +17 -0
- package/dist/coverage.d.ts +32 -0
- package/dist/coverage.js +77 -0
- package/dist/detectors/oracle-axis1.d.ts +86 -0
- package/dist/detectors/oracle-axis1.js +221 -0
- package/dist/detectors/oracle-axis2.d.ts +22 -0
- package/dist/detectors/oracle-axis2.js +149 -0
- package/dist/detectors/predicates.d.ts +19 -0
- package/dist/detectors/predicates.js +334 -0
- package/dist/detectors/shared.d.ts +56 -0
- package/dist/detectors/shared.js +103 -0
- package/dist/detectors/source/_scan.d.ts +43 -0
- package/dist/detectors/source/_scan.js +82 -0
- package/dist/detectors/source/backfill.d.ts +27 -0
- package/dist/detectors/source/backfill.js +211 -0
- package/dist/detectors/source/contract.d.ts +33 -0
- package/dist/detectors/source/contract.js +385 -0
- package/dist/detectors/source/identity.d.ts +47 -0
- package/dist/detectors/source/identity.js +410 -0
- package/dist/detectors/source/jobs.d.ts +10 -0
- package/dist/detectors/source/jobs.js +209 -0
- package/dist/detectors/source/lifecycle.d.ts +6 -0
- package/dist/detectors/source/lifecycle.js +147 -0
- package/dist/detectors/source/readbudget.d.ts +6 -0
- package/dist/detectors/source/readbudget.js +133 -0
- package/dist/detectors/source/refusal.d.ts +6 -0
- package/dist/detectors/source/refusal.js +125 -0
- package/dist/detectors/source/security.d.ts +37 -0
- package/dist/detectors/source/security.js +392 -0
- package/dist/detectors/source/writesafety.d.ts +14 -0
- package/dist/detectors/source/writesafety.js +345 -0
- package/dist/detectors/standard/_doc.d.ts +66 -0
- package/dist/detectors/standard/_doc.js +152 -0
- package/dist/detectors/standard/r41-frontier.d.ts +58 -0
- package/dist/detectors/standard/r41-frontier.js +176 -0
- package/dist/detectors/standard/r46-returns-validator.d.ts +61 -0
- package/dist/detectors/standard/r46-returns-validator.js +474 -0
- package/dist/detectors/standard/standard-doc.d.ts +12 -0
- package/dist/detectors/standard/standard-doc.js +271 -0
- package/dist/detectors/structural.d.ts +14 -0
- package/dist/detectors/structural.js +83 -0
- package/dist/engine-types.d.ts +10 -0
- package/dist/engine-types.js +1 -0
- package/dist/not-checkable.d.ts +22 -0
- package/dist/not-checkable.js +37 -0
- package/dist/oracle.d.ts +33 -0
- package/dist/oracle.js +133 -0
- package/dist/registry.d.ts +11 -0
- package/dist/registry.js +140 -0
- package/dist/report.d.ts +35 -0
- package/dist/report.js +138 -0
- package/dist/severity.d.ts +30 -0
- package/dist/severity.js +121 -0
- package/dist/tally.d.ts +57 -0
- package/dist/tally.js +152 -0
- package/dist/trigger.d.ts +47 -0
- package/dist/trigger.js +143 -0
- package/fixtures/backend-standard-51ec7af1.md +648 -0
- package/fixtures/backend-standard-a9d7877b.md +629 -0
- package/fixtures/mcp-app-standard-a74a042b.md +279 -0
- package/fixtures/mcp-extension-standard-a74a042b.md +259 -0
- package/fixtures/mcp-server-standard-a74a042b.md +434 -0
- package/fixtures/mcp-standard-a74a042b.md +354 -0
- package/fixtures/vp-1200-green/.pin +1 -0
- package/fixtures/vp-1200-green/convex/migrations.ts +350 -0
- package/fixtures/vp-1200-green/convex/schema.ts +1243 -0
- package/fixtures/vp-1200-red/.pin +1 -0
- package/fixtures/vp-1200-red/convex/migrations.ts +239 -0
- package/fixtures/vp-1200-red/convex/schema.ts +1243 -0
- package/fixtures/vp-by-tool-day158.csv +190 -0
- package/fixtures/vp-convex/.github/workflows/npm-publish.yml +163 -0
- package/fixtures/vp-convex/.pin +1 -0
- package/fixtures/vp-convex/bun.lock +783 -0
- package/fixtures/vp-convex/convex/auth.config.ts +8 -0
- package/fixtures/vp-convex/convex/briefingNotes.ts +321 -0
- package/fixtures/vp-convex/convex/convex.config.ts +14 -0
- package/fixtures/vp-convex/convex/credentials.ts +591 -0
- package/fixtures/vp-convex/convex/crons.ts +72 -0
- package/fixtures/vp-convex/convex/dashboard.ts +199 -0
- package/fixtures/vp-convex/convex/gumroadWebhook.ts +815 -0
- package/fixtures/vp-convex/convex/issues.ts +544 -0
- package/fixtures/vp-convex/convex/kb.ts +305 -0
- package/fixtures/vp-convex/convex/kbMutations.ts +192 -0
- package/fixtures/vp-convex/convex/kbShared.ts +56 -0
- package/fixtures/vp-convex/convex/licenses.ts +443 -0
- package/fixtures/vp-convex/convex/memories.ts +406 -0
- package/fixtures/vp-convex/convex/memoriesScoped.ts +220 -0
- package/fixtures/vp-convex/convex/messages.ts +971 -0
- package/fixtures/vp-convex/convex/migrations.ts +239 -0
- package/fixtures/vp-convex/convex/missionTemplates.ts +369 -0
- package/fixtures/vp-convex/convex/oauth.ts +1608 -0
- package/fixtures/vp-convex/convex/oauthMigrations.ts +96 -0
- package/fixtures/vp-convex/convex/okfBundleNode.ts +1031 -0
- package/fixtures/vp-convex/convex/recurringTasks.ts +386 -0
- package/fixtures/vp-convex/convex/schema.ts +1229 -0
- package/fixtures/vp-convex/convex/tasks.ts +2782 -0
- package/fixtures/vp-r31-green/.pin +1 -0
- package/fixtures/vp-r31-green/convex/migrations.ts +350 -0
- package/fixtures/vp-r31-red/.pin +1 -0
- package/fixtures/vp-r31-red/convex/migrations.ts +286 -0
- package/fixtures/vr-by-tool-day159.csv +89 -0
- package/package.json +39 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
table,outil,T2_verdict,T2_composant_cible,crud,operation_detail,search_mecanisme,surface,rbac_qui,scope_enforcement,namespace_ou_org,tokens_estime_contexte,doublon_alias,rbac_coherence_table,rbac_adjustment_needed,table_purpose,table_conserver_supprimer,statut_suppression
|
|
2
|
+
agentEngine/wakeupPool::globals,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
3
|
+
agentEngine/wakeupPool::internalState,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
4
|
+
agentEngine/wakeupPool::payload,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
5
|
+
agentEngine/wakeupPool::pendingCancelation,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
6
|
+
agentEngine/wakeupPool::pendingCompletion,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
7
|
+
agentEngine/wakeupPool::pendingStart,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
8
|
+
agentEngine/wakeupPool::runStatus,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
9
|
+
agentEngine/wakeupPool::work,(aucun — component-owned agentEngine/wakeupPool),COMPONENT-OWNED,agentEngine/wakeupPool,n/a,,,component,n/a,n/a,component:agentEngine/wakeupPool,0,,n/a,n/a — non exposee MCP,Wakeup pool du agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
10
|
+
agentEngine/workflow/workpool::globals,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
11
|
+
agentEngine/workflow/workpool::internalState,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
12
|
+
agentEngine/workflow/workpool::payload,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
13
|
+
agentEngine/workflow/workpool::pendingCancelation,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
14
|
+
agentEngine/workflow/workpool::pendingCompletion,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
15
|
+
agentEngine/workflow/workpool::pendingStart,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
16
|
+
agentEngine/workflow/workpool::runStatus,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
17
|
+
agentEngine/workflow/workpool::work,(aucun — component-owned agentEngine/workflow/workpool),COMPONENT-OWNED,agentEngine/workflow/workpool,n/a,,,component,n/a,n/a,component:agentEngine/workflow/workpool,0,,n/a,n/a — non exposee MCP,Workpool du workflow agent-engine,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
18
|
+
agentEngine/workflow::config,(aucun — component-owned agentEngine/workflow),COMPONENT-OWNED,agentEngine/workflow,n/a,,,component,n/a,n/a,component:agentEngine/workflow,0,,n/a,n/a — non exposee MCP,Workflow durable du agent-engine,"CONSERVER: table interne du component @convex-dev/workflow, geree par la librairie",
|
|
19
|
+
agentEngine/workflow::events,(aucun — component-owned agentEngine/workflow),COMPONENT-OWNED,agentEngine/workflow,n/a,,,component,n/a,n/a,component:agentEngine/workflow,0,,n/a,n/a — non exposee MCP,Workflow durable du agent-engine,"CONSERVER: table interne du component @convex-dev/workflow, geree par la librairie",
|
|
20
|
+
agentEngine/workflow::onCompleteFailures,(aucun — component-owned agentEngine/workflow),COMPONENT-OWNED,agentEngine/workflow,n/a,,,component,n/a,n/a,component:agentEngine/workflow,0,,n/a,n/a — non exposee MCP,Workflow durable du agent-engine,"CONSERVER: table interne du component @convex-dev/workflow, geree par la librairie",
|
|
21
|
+
agentEngine/workflow::steps,(aucun — component-owned agentEngine/workflow),COMPONENT-OWNED,agentEngine/workflow,n/a,,,component,n/a,n/a,component:agentEngine/workflow,0,,n/a,n/a — non exposee MCP,Workflow durable du agent-engine,"CONSERVER: table interne du component @convex-dev/workflow, geree par la librairie",
|
|
22
|
+
agentEngine/workflow::workflows,(aucun — component-owned agentEngine/workflow),COMPONENT-OWNED,agentEngine/workflow,n/a,,,component,n/a,n/a,component:agentEngine/workflow,0,,n/a,n/a — non exposee MCP,Workflow durable du agent-engine,"CONSERVER: table interne du component @convex-dev/workflow, geree par la librairie",
|
|
23
|
+
agentEngine::agents,(aucun — component-owned agentEngine),COMPONENT-OWNED,agentEngine,n/a,,,component,n/a,n/a,component:agentEngine,0,,n/a,n/a — non exposee MCP,Moteur d'agents durable (sessions/jobs/agents),"CONSERVER: table interne du component @vantageos/agent-engine, geree par la librairie",
|
|
24
|
+
agentEngine::callerStepInvocations,(aucun — component-owned agentEngine),COMPONENT-OWNED,agentEngine,n/a,,,component,n/a,n/a,component:agentEngine,0,,n/a,n/a — non exposee MCP,Moteur d'agents durable (sessions/jobs/agents),"CONSERVER: table interne du component @vantageos/agent-engine, geree par la librairie",
|
|
25
|
+
agentEngine::durableJobs,(aucun — component-owned agentEngine),COMPONENT-OWNED,agentEngine,n/a,,,component,n/a,n/a,component:agentEngine,0,,n/a,n/a — non exposee MCP,Moteur d'agents durable (sessions/jobs/agents),"CONSERVER: table interne du component @vantageos/agent-engine, geree par la librairie",
|
|
26
|
+
agentEngine::sessionEvents,(aucun — component-owned agentEngine),COMPONENT-OWNED,agentEngine,n/a,,,component,n/a,n/a,component:agentEngine,0,,n/a,n/a — non exposee MCP,Moteur d'agents durable (sessions/jobs/agents),"CONSERVER: table interne du component @vantageos/agent-engine, geree par la librairie",
|
|
27
|
+
agentEngine::sessions,(aucun — component-owned agentEngine),COMPONENT-OWNED,agentEngine,n/a,,,component,n/a,n/a,component:agentEngine,0,,n/a,n/a — non exposee MCP,Moteur d'agents durable (sessions/jobs/agents),"CONSERVER: table interne du component @vantageos/agent-engine, geree par la librairie",
|
|
28
|
+
agentEngine::toolApprovals,(aucun — component-owned agentEngine),COMPONENT-OWNED,agentEngine,n/a,,,component,n/a,n/a,component:agentEngine,0,,n/a,n/a — non exposee MCP,Moteur d'agents durable (sessions/jobs/agents),"CONSERVER: table interne du component @vantageos/agent-engine, geree par la librairie",
|
|
29
|
+
briefingNotes,create_briefing_note,CORE,coeur,CREATE,insere 1 ligne briefingNotes,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),106,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,"Notes de decision org-scope, BM25",CONSERVER,
|
|
30
|
+
briefingNotes,get_briefing_note,CORE,coeur,READ-GET,lit 1 briefing note par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,88,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),"Notes de decision org-scope, BM25",CONSERVER,
|
|
31
|
+
briefingNotes,list_briefing_notes,CORE,coeur,READ-LIST,liste briefing notes filtrees topic/org,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,153,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),"Notes de decision org-scope, BM25",CONSERVER,
|
|
32
|
+
briefingNotes,search_briefing_notes_by_keyword,CORE,coeur,SEARCH,BM25 Convex searchIndex sur content,BM25 keyword (Convex searchIndex search_content) | index Convex | pas de curseur (.take) | defaut:20 max:200,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,168,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),"Notes de decision org-scope, BM25",CONSERVER,
|
|
33
|
+
briefingNotes,update_briefing_note,CORE,coeur,UPDATE,patch champs briefingNotes,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),97,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,"Notes de decision org-scope, BM25",CONSERVER,
|
|
34
|
+
businessUnits,create_bu,COMPOSANT-FAIBLE,business-units,CREATE,insere 1 ligne businessUnits,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=orchestratorId),139,,INCOHERENT read=org write=identite+master,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Registre des business units ElPi Corp,CONSERVER,
|
|
35
|
+
businessUnits,delete_bu,COMPOSANT-FAIBLE,business-units,DELETE,supprime 1 business unit,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,70,,INCOHERENT read=org write=identite+master,"OK — fleet-interne, scope master approprie",Registre des business units ElPi Corp,CONSERVER,
|
|
36
|
+
businessUnits,get_bu,COMPOSANT-FAIBLE,business-units,READ-GET,lit 1 business unit par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,70,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Registre des business units ElPi Corp,CONSERVER,
|
|
37
|
+
businessUnits,list_bus,COMPOSANT-FAIBLE,business-units,READ-LIST,liste business units,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,110,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Registre des business units ElPi Corp,CONSERVER,
|
|
38
|
+
businessUnits,update_bu,COMPOSANT-FAIBLE,business-units,UPDATE,patch champs business unit,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),110,,INCOHERENT read=org write=identite+master,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Registre des business units ElPi Corp,CONSERVER,
|
|
39
|
+
chunks,(aucun — table orpheline hors schema),HORS-SCHEMA,orphelin-legacy,n/a,,,hors-MCP,n/a,n/a,n/a,0,,n/a,n/a — non exposee MCP,"Chunks RAG legacy (component app, hors schema.ts)","SUPPRIMER: orpheline hors schema.ts, aucune ref code, RAG reel vit sous le component rag",
|
|
40
|
+
client_org_mapping,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,orgId,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Source de verite du scope multi-tenant (withOrgScope),CONSERVER,
|
|
41
|
+
components,delete_component,COMPOSANT-FAIBLE,fleet-registry,DELETE,supprime 1 composant,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,71,,INCOHERENT read=org write=identite+master,"OK — fleet-interne, scope master approprie",Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",
|
|
42
|
+
components,get_component,COMPOSANT-FAIBLE,fleet-registry,READ-GET,lit 1 composant par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,75,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",
|
|
43
|
+
components,list_components,COMPOSANT-FAIBLE,fleet-registry,READ-LIST,liste composants filtres par type,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,113,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",
|
|
44
|
+
components,register_component,COMPOSANT-FAIBLE,fleet-registry,CREATE,insere 1 ligne components (registry),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),95,,INCOHERENT read=org write=identite+master,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",
|
|
45
|
+
components,search_components,COMPOSANT-FAIBLE,fleet-registry,SEARCH,alias deprecie de search_components_by_keyword,"substring scan (.collect()+.includes(), AUCUN index) | table entiere en memoire | pas de curseur | defaut:50 max:non-borne",MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,78,GARDER — supprimer search_components_by_keyword (usage flotte: search_components 4 / search_components_by_keyword 0),INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",
|
|
46
|
+
components,search_components_by_keyword,COMPOSANT-FAIBLE,fleet-registry,SEARCH,scan substring nom/team (pas d'index),"substring scan (.collect()+.includes(), AUCUN index) | table entiere en memoire | pas de curseur | defaut:50 max:non-borne",MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,88,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: search_components)
|
|
47
|
+
components,update_component,COMPOSANT-FAIBLE,fleet-registry,UPDATE,patch champs composant,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,80,,INCOHERENT read=org write=identite+master,"OK — fleet-interne, scope master approprie",Registre backup agents/skills/hooks fleet,"SUPPRIMER (a confirmer): doublon de VantageRegistry (source canonique composants), 0 donnee prod",
|
|
48
|
+
credentialsAuditLog,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Audit append-only d'emission de bearer,CONSERVER,
|
|
49
|
+
credentialsRateLimits,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Rate limit d'emission de credentials,CONSERVER,
|
|
50
|
+
diary,create_diary,CORE,coeur,CREATE,alias de write_diary,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=author),97,SUPPRIMER — doublon; garder write_diary (usage flotte: create_diary 0 / write_diary 24),INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Journal quotidien des orchestrateurs,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: write_diary)
|
|
51
|
+
diary,get_diary,CORE,coeur,READ-GET,lit 1 entree diary,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,75,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Journal quotidien des orchestrateurs,CONSERVER,
|
|
52
|
+
diary,list_diaries,CORE,coeur,READ-LIST,liste entrees diary par orchestrateur,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,84,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Journal quotidien des orchestrateurs,CONSERVER,
|
|
53
|
+
diary,write_diary,CORE,coeur,CREATE,insere/upsert entree diary du jour,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=orchestrator),90,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Journal quotidien des orchestrateurs,CONSERVER,
|
|
54
|
+
errorLogs,get_error,AMBIGU,coeur,READ-GET,lit 1 erreur par id,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,78,,COHERENT(master),"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Log dedupe d'erreurs -> spawn auto-IRP,CONSERVER,
|
|
55
|
+
errorLogs,list_errors,AMBIGU,coeur,READ-LIST,liste erreurs par deployment/severite,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,90,,COHERENT(master),"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Log dedupe d'erreurs -> spawn auto-IRP,CONSERVER,
|
|
56
|
+
errorMonitorConfig,(aucun — hors surface MCP),COMPOSANT,deployment-monitoring,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,n/a — non exposee MCP,Config key/value du sous-systeme error-monitor,CONSERVER,
|
|
57
|
+
errorMonitorFilterRules,(aucun — hors surface MCP),COMPOSANT,deployment-monitoring,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,n/a — non exposee MCP,Regles de filtrage de l'auto-IRP bot,CONSERVER,
|
|
58
|
+
fixAttempts,add_fix_attempt,COMPOSANT,issue-tracking,CREATE,insere 1 ligne fixAttempts liee au pattern,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),100,,COHERENT(identite),CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Tentatives de fix (enfant de fixPatterns),CONSERVER,
|
|
59
|
+
fixAttempts,create_fix_attempt,COMPOSANT,issue-tracking,CREATE,alias de add_fix_attempt,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),108,SUPPRIMER — doublon; garder add_fix_attempt (usage flotte: create_fix_attempt 0 / add_fix_attempt 2),COHERENT(identite),CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Tentatives de fix (enfant de fixPatterns),CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: add_fix_attempt)
|
|
60
|
+
fixPatterns,check_fix,COMPOSANT,issue-tracking,RPC,alias de validate_fix,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,93,SUPPRIMER — doublon; garder validate_fix (usage flotte: check_fix 0 / validate_fix 2),INCOHERENT read=org write=identite+master,"OK — fleet-interne, scope master approprie",Base de connaissance root-cause (RAG),CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: validate_fix)
|
|
61
|
+
fixPatterns,create_fix_pattern,COMPOSANT,issue-tracking,CREATE,insere 1 ligne fixPatterns,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),117,,INCOHERENT read=org write=identite+master,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Base de connaissance root-cause (RAG),CONSERVER,
|
|
62
|
+
fixPatterns,get_fix_pattern,COMPOSANT,issue-tracking,READ-GET,lit 1 pattern par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,89,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Base de connaissance root-cause (RAG),CONSERVER,
|
|
63
|
+
fixPatterns,link_issue_to_pattern,COMPOSANT,issue-tracking,RPC,ajoute issueId a linkedIssueIds,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,84,,INCOHERENT read=org write=identite+master,"OK — fleet-interne, scope master approprie",Base de connaissance root-cause (RAG),CONSERVER,
|
|
64
|
+
fixPatterns,list_fix_patterns,COMPOSANT,issue-tracking,READ-LIST,liste patterns par projet,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,83,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Base de connaissance root-cause (RAG),CONSERVER,
|
|
65
|
+
fixPatterns,search_fix_patterns,COMPOSANT,issue-tracking,SEARCH,alias deprecie de search_fix_patterns_by_semantic,"vectoriel cosine (embeddings RAG 1536d, namespace fixpatterns) | RAG namespace | pas de curseur | defaut:10 max:non-borne",MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,85,GARDER — supprimer search_fix_patterns_by_semantic (usage flotte: search_fix_patterns 3 / search_fix_patterns_by_semantic 0),INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Base de connaissance root-cause (RAG),CONSERVER,
|
|
66
|
+
fixPatterns,search_fix_patterns_by_semantic,COMPOSANT,issue-tracking,SEARCH,vector RAG namespace fixpatterns + hydrate DB,"vectoriel cosine (embeddings RAG 1536d, namespace fixpatterns) | RAG namespace | pas de curseur | defaut:10 max:non-borne",MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,93,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Base de connaissance root-cause (RAG),CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: search_fix_patterns)
|
|
67
|
+
fixPatterns,validate_fix,COMPOSANT,issue-tracking,RPC,patch validatedFix sur le pattern,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,89,,INCOHERENT read=org write=identite+master,"OK — fleet-interne, scope master approprie",Base de connaissance root-cause (RAG),CONSERVER,
|
|
68
|
+
githubRepoMapping,add_repo_mapping,COMPOSANT,issue-tracking,CREATE,insere mapping repo<->orchestrateur,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,90,,INCOHERENT read=org write=master,"OK — fleet-interne, scope master approprie",Routage repo -> orchestrateur/projet,CONSERVER,
|
|
69
|
+
githubRepoMapping,delete_repo_mapping,COMPOSANT,issue-tracking,DELETE,alias de remove_repo_mapping,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,88,SUPPRIMER — doublon; garder remove_repo_mapping (usage flotte: delete_repo_mapping 0 / remove_repo_mapping 1),INCOHERENT read=org write=master,"OK — fleet-interne, scope master approprie",Routage repo -> orchestrateur/projet,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: remove_repo_mapping)
|
|
70
|
+
githubRepoMapping,get_repo_mapping,COMPOSANT,issue-tracking,READ-GET,lit 1 mapping par repo,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,83,,INCOHERENT read=org write=master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Routage repo -> orchestrateur/projet,CONSERVER,
|
|
71
|
+
githubRepoMapping,list_repo_mappings,COMPOSANT,issue-tracking,READ-LIST,liste mappings repo GitHub,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,84,,INCOHERENT read=org write=master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Routage repo -> orchestrateur/projet,CONSERVER,
|
|
72
|
+
githubRepoMapping,register_repo_mapping,COMPOSANT,issue-tracking,CREATE,alias de add_repo_mapping,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,100,SUPPRIMER — doublon; garder add_repo_mapping (usage flotte: register_repo_mapping 0 / add_repo_mapping 1),INCOHERENT read=org write=master,"OK — fleet-interne, scope master approprie",Routage repo -> orchestrateur/projet,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: add_repo_mapping)
|
|
73
|
+
githubRepoMapping,remove_repo_mapping,COMPOSANT,issue-tracking,DELETE,supprime 1 mapping repo,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,80,,INCOHERENT read=org write=master,"OK — fleet-interne, scope master approprie",Routage repo -> orchestrateur/projet,CONSERVER,
|
|
74
|
+
iframeEmbedSessions,(aucun — hors surface MCP),COMPOSANT-FAIBLE,iframe-embed,n/a,,,hors-MCP,fleet_interne,n/a,orgId,0,,n/a,n/a — non exposee MCP,Sessions de l'embed Gen UI iframe (SEP-1865),"SUPPRIMER (a confirmer): feature iframe embed non deployee, 0 donnee prod",
|
|
75
|
+
issueStats,(aucun — hors surface MCP),COMPOSANT,issue-tracking,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,n/a — non exposee MCP,Metriques par repo du cluster issues,CONSERVER,
|
|
76
|
+
issues,get_issue,COMPOSANT,issue-tracking,READ-GET,lit 1 issue par repo+numero,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,81,,COHERENT(master),"OK — fleet-interne, scope master approprie",Issues GitHub (dev-ops),CONSERVER,
|
|
77
|
+
issues,issue_stats,COMPOSANT,issue-tracking,RPC,"agrege {open,fixed,closed,total} par repo",,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,71,,COHERENT(master),"OK — fleet-interne, scope master approprie",Issues GitHub (dev-ops),CONSERVER,
|
|
78
|
+
issues,link_commit_to_issue,COMPOSANT,issue-tracking,RPC,ajoute commitSha a fixCommits,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,94,,COHERENT(master),"OK — fleet-interne, scope master approprie",Issues GitHub (dev-ops),CONSERVER,
|
|
79
|
+
issues,list_issues,COMPOSANT,issue-tracking,READ-LIST,liste issues GitHub par orchestrateur,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,87,,COHERENT(master),"OK — fleet-interne, scope master approprie",Issues GitHub (dev-ops),CONSERVER,
|
|
80
|
+
issues,update_issue_status,COMPOSANT,issue-tracking,TRANSITION,patch status issue uniquement,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,83,,COHERENT(master),"OK — fleet-interne, scope master approprie",Issues GitHub (dev-ops),CONSERVER,
|
|
81
|
+
issues,verify_issue,COMPOSANT,issue-tracking,RPC,status -> verified + verifiedBy,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,84,,COHERENT(master),"OK — fleet-interne, scope master approprie",Issues GitHub (dev-ops),CONSERVER,
|
|
82
|
+
kbUploads,generate_upload_url,AMBIGU,coeur,RPC,"mint URL upload Convex storage, orgId lie",,MCP-public,toutes_orgs(namespace-derived),"resolveOrgContext(in-handler, fail-closed AUTH_NO_ORG_ID)",namespace(derive orgId via oauthCtx),144,,COHERENT(org-derive),"OK — patron de reference (org derive de l'identite verifiee, fail-closed); a generaliser fleet-wide",Ownership des docs KB (auth-gating anti cross-tenant),CONSERVER,
|
|
83
|
+
licenses,(aucun — hors surface MCP),COMPOSANT,licensing-selfhost,n/a,,,hors-MCP,fleet_interne,n/a,orgId,0,,n/a,n/a — non exposee MCP,Licences produit VantagePeers Self-host,"SUPPRIMER: appartient au produit Self-host (regle absolue CLAUDE.md), pas au Cloud multi-tenant",
|
|
84
|
+
mandates,accept_mandate,AMBIGU,coeur,TRANSITION,statut mandate -> accepted,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),83,,INCOHERENT read=org write=identite+public,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
85
|
+
mandates,check_mandate_spending,AMBIGU,coeur,RPC,alias de validate_mandate_spending,,MCP-public,toutes_orgs,AUCUN(public_no_scope_check),aucun,91,SUPPRIMER — doublon; garder validate_mandate_spending (usage flotte: check_mandate_spending 0 / validate_mandate_spending 0),INCOHERENT read=org write=identite+public,"OK — sans etat, aucun acces donnee",Mandats de service payant inter-orchestrateur,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: validate_mandate_spending)
|
|
86
|
+
mandates,create_mandate,AMBIGU,coeur,CREATE,insere 1 ligne mandates (budget),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=requestedBy),88,,INCOHERENT read=org write=identite+public,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
87
|
+
mandates,get_mandate,AMBIGU,coeur,READ-GET,lit 1 mandate par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,89,,INCOHERENT read=org write=identite+public,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
88
|
+
mandates,list_mandates,AMBIGU,coeur,READ-LIST,liste mandates filtres,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,88,,INCOHERENT read=org write=identite+public,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
89
|
+
mandates,settle_mandate,AMBIGU,coeur,TRANSITION,cloture mandate + finalCost,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),89,,INCOHERENT read=org write=identite+public,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
90
|
+
mandates,update_mandate,AMBIGU,coeur,UPDATE,patch champs mandate,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),90,,INCOHERENT read=org write=identite+public,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
91
|
+
mandates,validate_mandate_spending,AMBIGU,coeur,RPC,"calcule solde vs limites, sans ecriture",,MCP-public,toutes_orgs,AUCUN(public_no_scope_check),aucun,83,,INCOHERENT read=org write=identite+public,"OK — sans etat, aucun acces donnee",Mandats de service payant inter-orchestrateur,CONSERVER,
|
|
92
|
+
mcpTenants,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,orgId,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Routage bearer -> deploiement Convex (VIP),CONSERVER,
|
|
93
|
+
memories,export_okf_bundle,CORE,coeur,RPC,exporte namespace en tarball OKF signe,,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),70,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
94
|
+
memories,get_episode,CORE,coeur,READ-GET,lit episode via memories:getMemory,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,95,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
95
|
+
memories,get_memory,CORE,coeur,READ-GET,lit 1 memoire par memoryId,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,79,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
96
|
+
memories,hybrid_search,CORE,coeur,SEARCH,fusion RRF vector+BM25 via RAG,hybrid RRF (fusion vector+BM25 RAG) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),158,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
97
|
+
memories,import_okf_bundle,CORE,coeur,RPC,"importe bundle OKF, dedup par contenu",,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceWrite),namespace(arg=targetNamespace),89,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
98
|
+
memories,list_episodes,CORE,coeur,READ-LIST,liste episodes via memories:listMemories,,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),75,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
99
|
+
memories,list_memories,CORE,coeur,READ-LIST,liste memories filtrees namespace/type,,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),85,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
100
|
+
memories,recall,CORE,coeur,SEARCH,"vector search RAG, seuil score 0.15",vectoriel cosine (embeddings RAG 1536d text-embedding-3-small) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),149,GARDER — supprimer search_memories_by_semantic (usage flotte: recall 310 / search_memories_by_semantic 0),INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
101
|
+
memories,search_episodes_by_keyword,CORE,coeur,SEARCH,BM25 RAG sur episodes (memories),BM25 keyword (RAG) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),100,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
102
|
+
memories,search_episodes_by_semantic,CORE,coeur,SEARCH,vector RAG sur episodes (memories),vectoriel cosine (embeddings RAG 1536d) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),101,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
103
|
+
memories,search_memories_by_keyword,CORE,coeur,SEARCH,BM25 full-text RAG sur content memories,BM25 keyword (RAG) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),96,SUPPRIMER — doublon; garder text_search (usage flotte: search_memories_by_keyword 0 / text_search 48),INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: text_search)
|
|
104
|
+
memories,search_memories_by_semantic,CORE,coeur,SEARCH,alias de recall (vector cosine RAG),vectoriel cosine (embeddings RAG 1536d) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),95,SUPPRIMER — doublon; garder recall (usage flotte: search_memories_by_semantic 0 / recall 310),INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: recall)
|
|
105
|
+
memories,soft_delete_document,CORE,coeur,DELETE,marque isLatest=false sur tous les chunks docId,,MCP-public,toutes_orgs(namespace-derived),"resolveOrgContext(in-handler, fail-closed AUTH_NO_ORG_ID)",namespace(derive orgId via oauthCtx),115,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,"OK — patron de reference (org derive de l'identite verifiee, fail-closed); a generaliser fleet-wide",Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
106
|
+
memories,soft_delete_memory,CORE,coeur,DELETE,"marque isLatest=false, conserve la ligne",,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,81,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
107
|
+
memories,store_document_chunked,CORE,coeur,CREATE,"extrait texte, chunk ~512tok, insere memories",,MCP-public,toutes_orgs(namespace-derived),"resolveOrgContext(in-handler, fail-closed AUTH_NO_ORG_ID)",namespace(derive orgId via oauthCtx),198,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,"OK — patron de reference (org derive de l'identite verifiee, fail-closed); a generaliser fleet-wide",Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
108
|
+
memories,store_episode,CORE,coeur,CREATE,insere episode dans memories (type=episode),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),106,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
109
|
+
memories,store_memory,CORE,coeur,CREATE,insere 1 ligne memories + embedding RAG,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),92,,INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
110
|
+
memories,text_search,CORE,coeur,SEARCH,alias de search_memories_by_keyword (BM25 RAG),BM25 keyword (RAG) | RAG namespace | pas de curseur | defaut:10 max:non-borne,MCP-public,toutes_orgs(scope-filtered),bearer_scope_profile(checkNamespaceRead),namespace(arg=namespace),151,GARDER — supprimer search_memories_by_keyword (usage flotte: text_search 48 / search_memories_by_keyword 0),INCOHERENT read=ns+org write=identite+master+ns+org-derive,CORRIGER: lier le namespace a l'orgId verifie; refuser un namespace cross-org (namespace fourni = risque de fuite),Memoire typee multi-tenant (produit central) + RAG,CONSERVER,
|
|
111
|
+
memoryEmbeddings,(aucun — table orpheline hors schema),HORS-SCHEMA,orphelin-legacy,n/a,,,hors-MCP,n/a,n/a,n/a,0,,n/a,n/a — non exposee MCP,"Embeddings RAG legacy (component app, hors schema.ts)","SUPPRIMER: RAG legacy hors schema.ts, aucune ref code (RAG reel sous component rag)",
|
|
112
|
+
memorySearch,(aucun — table orpheline hors schema),HORS-SCHEMA,orphelin-legacy,n/a,,,hors-MCP,n/a,n/a,n/a,0,,n/a,n/a — non exposee MCP,"Index recherche RAG legacy (component app, hors schema.ts)","SUPPRIMER: RAG legacy hors schema.ts, aucune ref code (RAG reel sous component rag)",
|
|
113
|
+
messageReceipts,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,namespace,0,,n/a,n/a — non exposee MCP,Accuses de lecture (enfant de messages),CONSERVER,
|
|
114
|
+
messages,check_messages,CORE,coeur,READ-LIST,renvoie enveloppe messages non lus,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,83,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
115
|
+
messages,delete_message,CORE,coeur,DELETE,supprime 1 message par id,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),85,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
116
|
+
messages,get_message,CORE,coeur,READ-GET,lit 1 message par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,106,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
117
|
+
messages,list_broadcast_status,CORE,coeur,READ-LIST,statut lecture d'un message broadcast,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,85,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
118
|
+
messages,list_messages,CORE,coeur,READ-LIST,liste messages filtres channel/from/day,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,76,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
119
|
+
messages,mark_as_read,CORE,coeur,TRANSITION,insere messageReceipt readAt=now,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),81,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
120
|
+
messages,search_messages_by_keyword,CORE,coeur,SEARCH,BM25 Convex searchIndex sur content,BM25 keyword (Convex searchIndex search_content) | index Convex | pas de curseur (.take) | defaut:20 max:200,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,95,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
121
|
+
messages,send_message,CORE,coeur,RPC,insere message + receipts par destinataire,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=from),93,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Messagerie inter-orchestrateur/client tenant-scopee,CONSERVER,
|
|
122
|
+
missionTemplates,get_mission_template,CORE,coeur,READ-GET,lit 1 template par nom,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,75,,INCOHERENT read=org write=identite+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Templates de mission (IRP),CONSERVER,
|
|
123
|
+
missionTemplates,instantiate_template_into_mission,CORE,coeur,RPC,"lit template, cree mission+tasks depuis steps",,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,102,,INCOHERENT read=org write=identite+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Templates de mission (IRP),CONSERVER,
|
|
124
|
+
missionTemplates,update_mission_template,CORE,coeur,UPDATE,upsert template (create-if-absent),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),94,,INCOHERENT read=org write=identite+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Templates de mission (IRP),CONSERVER,
|
|
125
|
+
missions,create_mission,CORE,coeur,CREATE,insere 1 ligne missions,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),101,,INCOHERENT read=org write=identite+master,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Conteneur de travail org-scope,CONSERVER,
|
|
126
|
+
missions,get_mission,CORE,coeur,READ-GET,lit 1 mission par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,78,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Conteneur de travail org-scope,CONSERVER,
|
|
127
|
+
missions,list_missions,CORE,coeur,READ-LIST,liste missions filtrees project/pilot/status,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,92,,INCOHERENT read=org write=identite+master,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Conteneur de travail org-scope,CONSERVER,
|
|
128
|
+
missions,update_mission,CORE,coeur,UPDATE,patch champs mission (statut/pilot/etc),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=pilot),83,,INCOHERENT read=org write=identite+master,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Conteneur de travail org-scope,CONSERVER,
|
|
129
|
+
missions,update_mission_status,CORE,coeur,TRANSITION,patch status mission uniquement,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,80,,INCOHERENT read=org write=identite+master,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Conteneur de travail org-scope,CONSERVER,
|
|
130
|
+
monitoredDeployments,add_deployment,COMPOSANT,deployment-monitoring,CREATE,insere 1 ligne monitoredDeployments,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,112,,COHERENT(master),"OK — fleet-interne, scope master approprie",Registre des deploiements Convex surveilles,CONSERVER,
|
|
131
|
+
monitoredDeployments,delete_deployment,COMPOSANT,deployment-monitoring,DELETE,alias de remove_deployment,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,81,SUPPRIMER — doublon; garder remove_deployment (usage flotte: delete_deployment 0 / remove_deployment 1),COHERENT(master),"OK — fleet-interne, scope master approprie",Registre des deploiements Convex surveilles,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: remove_deployment)
|
|
132
|
+
monitoredDeployments,register_deployment,COMPOSANT,deployment-monitoring,CREATE,alias de add_deployment,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,121,SUPPRIMER — doublon; garder add_deployment (usage flotte: register_deployment 0 / add_deployment 1),COHERENT(master),"OK — fleet-interne, scope master approprie",Registre des deploiements Convex surveilles,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: add_deployment)
|
|
133
|
+
monitoredDeployments,remove_deployment,COMPOSANT,deployment-monitoring,DELETE,supprime 1 deployment surveille,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,74,,COHERENT(master),"OK — fleet-interne, scope master approprie",Registre des deploiements Convex surveilles,CONSERVER,
|
|
134
|
+
n/a,validate_okf_bundle,N/A,hors-table(stateless),RPC,"verifie conformite bundle OKF, sans import",,MCP-public,toutes_orgs,AUCUN(public_no_scope_check),aucun,94,,COHERENT(public),"OK — sans etat, aucun acces donnee","Outils stateless sans table (validators, whoami)",CONSERVER,
|
|
135
|
+
n/a,validate_task_payload,N/A,hors-table(stateless),RPC,"linter statique payload create_task, sans DB",,MCP-public,toutes_orgs,AUCUN(public_no_scope_check),aucun,104,,COHERENT(public),"OK — sans etat, aucun acces donnee","Outils stateless sans table (validators, whoami)",CONSERVER,
|
|
136
|
+
n/a,whoami,N/A,hors-table(stateless),RPC,renvoie scope resolu du caller,,MCP-public,toutes_orgs,AUCUN(public_no_scope_check),aucun,95,,COHERENT(public),"OK — sans etat, aucun acces donnee","Outils stateless sans table (validators, whoami)",CONSERVER,
|
|
137
|
+
oauthClients,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",2e impl OAuth 2.1 DCR (doublon oauth_clients),"SUPPRIMER (a confirmer): doublon OAuth 2.1 DCR de oauth_clients, consolider sur oauth_* (0 donnee prod)",
|
|
138
|
+
oauthTokens,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Tokens OAuth 2.1 DCR (doublon oauth_access_tokens),"SUPPRIMER (a confirmer): doublon de oauth_access_tokens, consolider sur oauth_* (0 donnee prod)",
|
|
139
|
+
oauth_access_tokens,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Tokens d'acces OAuth — gate chaque appel MCP,CONSERVER,
|
|
140
|
+
oauth_audit_log,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Audit des mutations de scope admin,CONSERVER,
|
|
141
|
+
oauth_authorization_codes,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Codes d'autorisation OAuth (courts),CONSERVER,
|
|
142
|
+
oauth_clients,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Clients OAuth DCR (integrations externes),CONSERVER,
|
|
143
|
+
oauth_refresh_tokens,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Refresh tokens OAuth,CONSERVER,
|
|
144
|
+
oauth_scope_profiles,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Profils de scope/permissions OAuth,CONSERVER,
|
|
145
|
+
okfDurableExportEntries,(aucun — hors surface MCP),AMBIGU,coeur,n/a,,,hors-MCP,toutes_orgs(scope-filtered),n/a,namespace,0,,n/a,n/a — non exposee MCP,Sortie serialisee de l'export OKF,CONSERVER,
|
|
146
|
+
okfDurableExportProgress,(aucun — hors surface MCP),AMBIGU,coeur,n/a,,,hors-MCP,toutes_orgs(scope-filtered),n/a,namespace,0,,n/a,n/a — non exposee MCP,Progression du job d'export OKF durable,CONSERVER,
|
|
147
|
+
profiles,get_profile,CORE,coeur,READ-GET,lit 1 profil orchestrateur,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,70,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Identite des orchestrateurs (infra fleet),CONSERVER,
|
|
148
|
+
profiles,list_peers,CORE,coeur,READ-LIST,liste profils pairs actifs,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,81,,INCOHERENT read=org write=identite,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Identite des orchestrateurs (infra fleet),CONSERVER,
|
|
149
|
+
profiles,set_summary,CORE,coeur,UPDATE,upsert resume dynamique du profil,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=orchestratorId),92,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Identite des orchestrateurs (infra fleet),CONSERVER,
|
|
150
|
+
profiles,update_profile,CORE,coeur,UPDATE,upsert profil (identite + specialite),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=orchestratorId),89,,INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Identite des orchestrateurs (infra fleet),CONSERVER,
|
|
151
|
+
profiles,update_summary,CORE,coeur,UPDATE,alias de set_summary (profiles:updateDynamic),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=orchestratorId),99,SUPPRIMER — doublon; garder set_summary (usage flotte: update_summary 0 / set_summary 64),INCOHERENT read=org write=identite,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Identite des orchestrateurs (infra fleet),CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: set_summary)
|
|
152
|
+
rag/workpool::globals,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
153
|
+
rag/workpool::internalState,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
154
|
+
rag/workpool::payload,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
155
|
+
rag/workpool::pendingCancelation,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
156
|
+
rag/workpool::pendingCompletion,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
157
|
+
rag/workpool::pendingStart,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
158
|
+
rag/workpool::runStatus,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
159
|
+
rag/workpool::work,(aucun — component-owned rag/workpool),COMPONENT-OWNED,rag/workpool,n/a,,,component,n/a,n/a,component:rag/workpool,0,,n/a,n/a — non exposee MCP,Workpool interne du component rag,"CONSERVER: table interne du component @convex-dev/workpool, geree par la librairie",
|
|
160
|
+
rag::chunks,(aucun — component-owned rag),COMPONENT-OWNED,rag,n/a,,,component,n/a,n/a,component:rag,0,,n/a,n/a — non exposee MCP,Store RAG (namespaces/entries/chunks/content),"CONSERVER: table interne du component @convex-dev/rag, geree par la librairie",
|
|
161
|
+
rag::content,(aucun — component-owned rag),COMPONENT-OWNED,rag,n/a,,,component,n/a,n/a,component:rag,0,,n/a,n/a — non exposee MCP,Store RAG (namespaces/entries/chunks/content),"CONSERVER: table interne du component @convex-dev/rag, geree par la librairie",
|
|
162
|
+
rag::entries,(aucun — component-owned rag),COMPONENT-OWNED,rag,n/a,,,component,n/a,n/a,component:rag,0,,n/a,n/a — non exposee MCP,Store RAG (namespaces/entries/chunks/content),"CONSERVER: table interne du component @convex-dev/rag, geree par la librairie",
|
|
163
|
+
rag::namespaces,(aucun — component-owned rag),COMPONENT-OWNED,rag,n/a,,,component,n/a,n/a,component:rag,0,,n/a,n/a — non exposee MCP,Store RAG (namespaces/entries/chunks/content),"CONSERVER: table interne du component @convex-dev/rag, geree par la librairie",
|
|
164
|
+
recurringTasks,create_recurring_task,CORE,coeur,CREATE,insere 1 ligne recurringTasks (cron),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),93,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Generateur cron de taches,CONSERVER,
|
|
165
|
+
recurringTasks,delete_recurring_task,CORE,coeur,DELETE,supprime 1 tache recurrente,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,76,,INCOHERENT read=org write=identite+master+org,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Generateur cron de taches,CONSERVER,
|
|
166
|
+
recurringTasks,get_recurring_task,CORE,coeur,READ-GET,lit 1 tache recurrente par id,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,112,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Generateur cron de taches,CONSERVER,
|
|
167
|
+
recurringTasks,list_recurring_tasks,CORE,coeur,READ-LIST,liste taches recurrentes,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,85,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Generateur cron de taches,CONSERVER,
|
|
168
|
+
recurringTasks,pause_recurring_task,CORE,coeur,TRANSITION,isActive -> false,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,74,,INCOHERENT read=org write=identite+master+org,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Generateur cron de taches,CONSERVER,
|
|
169
|
+
recurringTasks,resume_recurring_task,CORE,coeur,TRANSITION,isActive -> true,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,72,,INCOHERENT read=org write=identite+master+org,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Generateur cron de taches,CONSERVER,
|
|
170
|
+
recurringTasks,update_recurring_task,CORE,coeur,UPDATE,patch champs recurringTasks,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,90,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Generateur cron de taches,CONSERVER,
|
|
171
|
+
taskClosureConfig,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,global,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Config du gate de cloture/facturation,CONSERVER,
|
|
172
|
+
tasks,add_task_dependency,CORE,coeur,RPC,ajoute id a dependsOn via tasks:update,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),88,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
173
|
+
tasks,billing_summary_by_project,CORE,coeur,RPC,agrege actualMinutes par projet/periode,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,237,,INCOHERENT read=org write=identite+master+org,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Unite de travail + gate de facturation,CONSERVER,
|
|
174
|
+
tasks,block_task,CORE,coeur,TRANSITION,statut -> blocked + raison,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),91,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
175
|
+
tasks,bulk_complete_tasks,CORE,coeur,RPC,complete N tasks par filtre (dry-run defaut),,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,341,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Unite de travail + gate de facturation,CONSERVER,
|
|
176
|
+
tasks,checkout_task,CORE,coeur,TRANSITION,claim atomique todo -> in_progress,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),87,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
177
|
+
tasks,complete_task,CORE,coeur,TRANSITION,todo/in_progress -> done + completionNote,,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),102,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
178
|
+
tasks,create_task,CORE,coeur,CREATE,"insere 1 ligne tasks, status initial",,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=createdBy),92,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
179
|
+
tasks,create_task_dependency,CORE,coeur,RPC,alias de add_task_dependency (dependsOn),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),97,SUPPRIMER — doublon; garder add_task_dependency (usage flotte: create_task_dependency 0 / add_task_dependency 142),INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,SUPPRIMÉ @ PR#1169 303cd48 day159 (survivor: add_task_dependency)
|
|
180
|
+
tasks,delete_task,CORE,coeur,DELETE,supprime 1 tache (createdBy ou system),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),77,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
181
|
+
tasks,get_task,CORE,coeur,READ-GET,lit 1 tache par id (string non-typed),,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,105,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Unite de travail + gate de facturation,CONSERVER,
|
|
182
|
+
tasks,improvisation_digest,CORE,coeur,RPC,scan tasks+messages+memories sans footer VP-Sources,,MCP-public,fleet_interne,bearer_scope_profile(isMasterScope),global,173,,INCOHERENT read=org write=identite+master+org,"REVOIR: master contourne le scope tenant sur une table client-facing; confirmer admin-only, jamais un token client",Unite de travail + gate de facturation,CONSERVER,
|
|
183
|
+
tasks,list_tasks,CORE,coeur,READ-LIST,liste tasks filtrees org/status/assignee,,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,143,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Unite de travail + gate de facturation,CONSERVER,
|
|
184
|
+
tasks,list_tasks_by_mission,CORE,coeur,READ-LIST,"liste tasks d'une mission, pagine",,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,90,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Unite de travail + gate de facturation,CONSERVER,
|
|
185
|
+
tasks,search_tasks_by_keyword,CORE,coeur,SEARCH,BM25 Convex searchIndex sur title,BM25 keyword (Convex searchIndex search_title) | index Convex | pas de curseur (.take) | defaut:20 max:200,MCP-public,toutes_orgs(in-handler-filtered),"filterByOrgScope(in-handler, post-query)",orgId/allowedOrchestrators,90,,INCOHERENT read=org write=identite+master+org,OK lecture org-scopee; requete indexee sur orgId au lieu d'un filtre post-query (perf),Unite de travail + gate de facturation,CONSERVER,
|
|
186
|
+
tasks,start_task,CORE,coeur,TRANSITION,"todo -> in_progress, verifie dependances",,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),77,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
187
|
+
tasks,update_task,CORE,coeur,UPDATE,patch champs tasks (titre/statut/etc),,MCP-public,toutes_orgs(identity-gated),bearer_scope_profile(checkFromAllowed),clerkUserId/orchestratorId(arg=callerOrchestrator),84,,INCOHERENT read=org write=identite+master+org,CORRIGER: scoper l'ecriture sur orgId (withOrgScope); aujourd'hui basee sur l'arg orchestrateur fourni = aucune frontiere tenant,Unite de travail + gate de facturation,CONSERVER,
|
|
188
|
+
userBearerTokens,(aucun — hors surface MCP),CORE,coeur,n/a,,,hors-MCP,fleet_interne,n/a,clerkUserId,0,,n/a,"n/a — primitive d'auth, non exposee MCP (applique le scope pour les autres)",Echange bearer Clerk JWT (webapp/extension),CONSERVER,
|
|
189
|
+
vp_migrations,(aucun — table orpheline hors schema),HORS-SCHEMA,orphelin-legacy,n/a,,,hors-MCP,n/a,n/a,n/a,0,,n/a,n/a — non exposee MCP,"Table de migration legacy (component app, hors schema.ts)","SUPPRIMER: table migration legacy hors schema.ts, aucune ref code",
|
|
190
|
+
TOTAL,,,,,,,,,,,10721,,,,,,
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
name: Publish to npm
|
|
2
|
+
|
|
3
|
+
# Two trigger paths:
|
|
4
|
+
# 1. release.published — fires when a GitHub release is published. The release
|
|
5
|
+
# body MUST contain `ETA_APPROVED_TASK_ID=k<32hex>` and
|
|
6
|
+
# `ETA_APPROVED_COMMIT_SHA=<7-40 hex>` (one per line, case-insensitive keys).
|
|
7
|
+
# Both tokens are extracted and feed the SAME verification steps as the
|
|
8
|
+
# workflow_dispatch path — release.published is NOT a trusted bypass.
|
|
9
|
+
# 2. workflow_dispatch — manual path with Eta-approval inputs. Mirrors the
|
|
10
|
+
# Day 82 npm publish protocol (ETA_APPROVED_TASK_ID + ETA_APPROVED_COMMIT_SHA)
|
|
11
|
+
# so orchestrators can get OIDC --provenance attestation without publishing
|
|
12
|
+
# from a local sandbox (which refuses --provenance with "Automatic provenance
|
|
13
|
+
# generation not supported for provider: null").
|
|
14
|
+
#
|
|
15
|
+
# Validation order (BOTH paths):
|
|
16
|
+
# a. checked-out SHA == resolved ETA_APPROVED_COMMIT_SHA (single source of truth)
|
|
17
|
+
# b. Feature D HTTP action /api/eta/verify-publish-token verifies the VP task
|
|
18
|
+
# exists, is closed by eta with [ETA-APPROVED] marker, is ≤60 min old,
|
|
19
|
+
# and cites the same SHA. Same gate as the local enforce-eta-approval hook.
|
|
20
|
+
# c. Only then build + publish.
|
|
21
|
+
|
|
22
|
+
on:
|
|
23
|
+
release:
|
|
24
|
+
types: [published]
|
|
25
|
+
|
|
26
|
+
workflow_dispatch:
|
|
27
|
+
inputs:
|
|
28
|
+
eta_approved_task_id:
|
|
29
|
+
description: 'VP task id closed by Eta with [ETA-APPROVED] marker (e.g. k177qvth538kvc8txt38zsdzzd88m7j8)'
|
|
30
|
+
required: true
|
|
31
|
+
type: string
|
|
32
|
+
eta_approved_commit_sha:
|
|
33
|
+
description: 'Git HEAD SHA at the time Eta issued the APPROVED verdict (must match workflow checkout)'
|
|
34
|
+
required: true
|
|
35
|
+
type: string
|
|
36
|
+
|
|
37
|
+
jobs:
|
|
38
|
+
publish:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
environment: npm
|
|
41
|
+
permissions:
|
|
42
|
+
id-token: write
|
|
43
|
+
contents: read
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
- name: Checkout (workflow_dispatch — at the Eta-approved SHA)
|
|
47
|
+
if: github.event_name == 'workflow_dispatch'
|
|
48
|
+
uses: actions/checkout@v4
|
|
49
|
+
with:
|
|
50
|
+
ref: ${{ inputs.eta_approved_commit_sha }}
|
|
51
|
+
|
|
52
|
+
- name: Checkout (release — at the release tag)
|
|
53
|
+
if: github.event_name == 'release'
|
|
54
|
+
uses: actions/checkout@v4
|
|
55
|
+
|
|
56
|
+
- name: Extract Eta-approval tokens from release body (release only)
|
|
57
|
+
id: extract_release_tokens
|
|
58
|
+
if: github.event_name == 'release'
|
|
59
|
+
env:
|
|
60
|
+
RELEASE_BODY: ${{ github.event.release.body }}
|
|
61
|
+
run: |
|
|
62
|
+
set -eu
|
|
63
|
+
# Case-insensitive line-anchored regex match for the two tokens.
|
|
64
|
+
TASK_ID=$(printf '%s\n' "$RELEASE_BODY" | grep -iEo '^[[:space:]]*ETA_APPROVED_TASK_ID[[:space:]]*=[[:space:]]*k[0-9a-f]{32}[[:space:]]*$' | head -n1 | sed -E 's/^[[:space:]]*[Ee][Tt][Aa]_[Aa][Pp][Pp][Rr][Oo][Vv][Ee][Dd]_[Tt][Aa][Ss][Kk]_[Ii][Dd][[:space:]]*=[[:space:]]*//' | tr -d '[:space:]' || true)
|
|
65
|
+
SHA=$(printf '%s\n' "$RELEASE_BODY" | grep -iEo '^[[:space:]]*ETA_APPROVED_COMMIT_SHA[[:space:]]*=[[:space:]]*[0-9a-f]{7,40}[[:space:]]*$' | head -n1 | sed -E 's/^[[:space:]]*[Ee][Tt][Aa]_[Aa][Pp][Pp][Rr][Oo][Vv][Ee][Dd]_[Cc][Oo][Mm][Mm][Ii][Tt]_[Ss][Hh][Aa][[:space:]]*=[[:space:]]*//' | tr -d '[:space:]' || true)
|
|
66
|
+
if [ -z "${TASK_ID:-}" ]; then
|
|
67
|
+
echo "::error::Release body missing or malformed ETA_APPROVED_TASK_ID (expected line: ETA_APPROVED_TASK_ID=k<32hex>)."
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
if [ -z "${SHA:-}" ]; then
|
|
71
|
+
echo "::error::Release body missing or malformed ETA_APPROVED_COMMIT_SHA (expected line: ETA_APPROVED_COMMIT_SHA=<7-40 hex>)."
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
echo "Extracted ETA_APPROVED_TASK_ID : ${TASK_ID}"
|
|
75
|
+
echo "Extracted ETA_APPROVED_COMMIT_SHA : ${SHA}"
|
|
76
|
+
echo "task_id=${TASK_ID}" >> "$GITHUB_OUTPUT"
|
|
77
|
+
echo "sha=${SHA}" >> "$GITHUB_OUTPUT"
|
|
78
|
+
|
|
79
|
+
- name: Resolve Eta-approval tokens (event-agnostic)
|
|
80
|
+
id: resolve_tokens
|
|
81
|
+
run: |
|
|
82
|
+
set -eu
|
|
83
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
84
|
+
TASK_ID='${{ inputs.eta_approved_task_id }}'
|
|
85
|
+
SHA='${{ inputs.eta_approved_commit_sha }}'
|
|
86
|
+
else
|
|
87
|
+
TASK_ID='${{ steps.extract_release_tokens.outputs.task_id }}'
|
|
88
|
+
SHA='${{ steps.extract_release_tokens.outputs.sha }}'
|
|
89
|
+
fi
|
|
90
|
+
if [ -z "${TASK_ID}" ] || [ -z "${SHA}" ]; then
|
|
91
|
+
echo "::error::Unresolved Eta-approval tokens (event=${{ github.event_name }})."
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
echo "task_id=${TASK_ID}" >> "$GITHUB_OUTPUT"
|
|
95
|
+
echo "sha=${SHA}" >> "$GITHUB_OUTPUT"
|
|
96
|
+
|
|
97
|
+
- name: Verify checked-out SHA matches Eta-approved SHA
|
|
98
|
+
env:
|
|
99
|
+
EXPECTED_SHA: ${{ steps.resolve_tokens.outputs.sha }}
|
|
100
|
+
run: |
|
|
101
|
+
set -eu
|
|
102
|
+
ACTUAL_SHA=$(git rev-parse HEAD)
|
|
103
|
+
echo "Actual HEAD : ${ACTUAL_SHA}"
|
|
104
|
+
echo "Eta APPROVED SHA: ${EXPECTED_SHA}"
|
|
105
|
+
# For release path, the body SHA may be the 7-char short form. Accept
|
|
106
|
+
# exact match OR prefix match (expected is a prefix of actual).
|
|
107
|
+
if [ "${ACTUAL_SHA}" != "${EXPECTED_SHA}" ] && [ "${ACTUAL_SHA#${EXPECTED_SHA}}" = "${ACTUAL_SHA}" ]; then
|
|
108
|
+
echo "::error::SHA mismatch — checkout resolved ${ACTUAL_SHA} but Eta approved ${EXPECTED_SHA}."
|
|
109
|
+
exit 1
|
|
110
|
+
fi
|
|
111
|
+
echo "OK — SHA in lockstep with Eta verdict."
|
|
112
|
+
|
|
113
|
+
- name: Verify Eta approval via VP HTTP action
|
|
114
|
+
env:
|
|
115
|
+
CONVEX_URL: https://compassionate-goldfinch-737.convex.cloud
|
|
116
|
+
ETA_TASK: ${{ steps.resolve_tokens.outputs.task_id }}
|
|
117
|
+
ETA_SHA: ${{ steps.resolve_tokens.outputs.sha }}
|
|
118
|
+
run: |
|
|
119
|
+
set -eu
|
|
120
|
+
BODY=$(jq -nc --arg t "$ETA_TASK" --arg s "$ETA_SHA" '{taskId:$t, expectedSha:$s}')
|
|
121
|
+
RESP=$(curl -sS -X POST "${CONVEX_URL}/api/eta/verify-publish-token" \
|
|
122
|
+
-H "Content-Type: application/json" \
|
|
123
|
+
-d "$BODY")
|
|
124
|
+
echo "Response: $RESP"
|
|
125
|
+
APPROVED=$(echo "$RESP" | jq -r '.approved // false')
|
|
126
|
+
if [ "$APPROVED" != "true" ]; then
|
|
127
|
+
REASON=$(echo "$RESP" | jq -r '.reason // "unknown"')
|
|
128
|
+
echo "::error::Eta approval rejected by Feature D — reason: ${REASON}"
|
|
129
|
+
exit 1
|
|
130
|
+
fi
|
|
131
|
+
echo "OK — Eta approval token valid."
|
|
132
|
+
|
|
133
|
+
- name: Setup Node.js
|
|
134
|
+
uses: actions/setup-node@v4
|
|
135
|
+
with:
|
|
136
|
+
node-version: '20'
|
|
137
|
+
registry-url: 'https://registry.npmjs.org'
|
|
138
|
+
|
|
139
|
+
- name: Install dependencies
|
|
140
|
+
working-directory: mcp-server
|
|
141
|
+
# NOT `npm ci`. The root package.json declares `workspaces: ["apps/*",
|
|
142
|
+
# "mcp-server"]`, so npm resolves mcp-server as a workspace CHILD and
|
|
143
|
+
# looks for the lockfile at the workspace ROOT — which has only
|
|
144
|
+
# `bun.lock`. `mcp-server/package-lock.json` is therefore ignored, and
|
|
145
|
+
# `npm ci` dies with EUSAGE ("can only install with an existing
|
|
146
|
+
# package-lock.json"). Measured with a control: the ONLY difference
|
|
147
|
+
# between failure and success is the presence of the root package.json.
|
|
148
|
+
# Committing a root package-lock.json would fix `npm ci` (verified: 320
|
|
149
|
+
# entries, both `npm ci` paths exit 0) but `.gitignore:5` deliberately
|
|
150
|
+
# ignores package-lock.json — bun.lock is this repo's source of truth.
|
|
151
|
+
# Flipping that is a policy call, not a workflow patch. See task
|
|
152
|
+
# k1760430nv0z96ptzjg00685e18a9avz.
|
|
153
|
+
run: npm install --no-audit --no-fund
|
|
154
|
+
|
|
155
|
+
- name: Build
|
|
156
|
+
working-directory: mcp-server
|
|
157
|
+
run: npm run build
|
|
158
|
+
|
|
159
|
+
- name: Publish (with OIDC provenance attestation)
|
|
160
|
+
working-directory: mcp-server
|
|
161
|
+
env:
|
|
162
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
163
|
+
run: npm publish --provenance --access public
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f62c9e6fe0dbc96ffbdd8cc3e31bd4db501a3d6b
|