{"ok":true,"channel":"release","release":"v0.2.60","version":"0.2.60","service":"ksg-api","ts":"2026-11-14T04:30:04.945Z","build":"local","gitBranch":"main","gitCommit":null,"memoryBackend":"arango","baseUrl":"https://api.knowshowgo.com","api":{"publicBaseUrl":"https://api.knowshowgo.com","canonicalPublicBaseUrl":"https://api.knowshowgo.com","siteBaseUrl":"https://knowshowgo.com","prefixes":{"stable":"/api","current":"/api2.0"},"auth":"bearer-token-or-soft-owner-headers","tokenAuth":{"enabled":true,"scheme":"Bearer","header":"Authorization: Bearer ksg_…","portalUrl":"https://knowshowgo.com/developers","note":"Tokens carry ownerUserId; they override X-KSG-Owner for private reads and bind graph writes. Set KSG_REQUIRE_WRITE_TOKEN=1 on public API hosts."},"portalUrl":"https://knowshowgo.com/developers","mcp":{"path":"/mcp","transport":"streamable-http","stateless":true,"protocolVersions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26","2024-11-05"],"auth":"bearer-token","oauth":{"protectedResourceMetadata":"/.well-known/oauth-protected-resource","authorizationServerMetadata":"/.well-known/oauth-authorization-server","registration":"/oauth/register","pkce":["S256"],"grants":["authorization_code","refresh_token"]},"tools":["remember","correct","recall","ask","verify_answer","ground_claim","evaluate","derive","explain","add_rule","list_rules","set_rule_enabled","apply_rule","check_rules","saturate","bind_pattern","close_relation","join_rules","assert_proposition","merge_concepts","unmerge_concept","check_membership","assimilate_exemplar","remember_event","find_events","recall_episodes","describe_event","search_knowledge","upsert_object","get_object","search_procedures","procedure_evaluation","record_procedure_run","feedback","resolve_topic"],"scopes":{"read":["recall","ask","search_knowledge","get_object","search_procedures","procedure_evaluation","resolve_topic","verify_answer","ground_claim","evaluate","explain","list_rules","bind_pattern","close_relation","join_rules","check_membership","find_events","describe_event","recall_episodes"],"write":"all"}},"cors":{"mode":"allowlist","origins":["https://knowshowgo.com","https://www.knowshowgo.com"]},"semantic":{"planSchemaVersions":[1,2]}},"surfaces":{"mvp":[{"method":"GET","path":"/health","operation":"healthCheck","purpose":"Liveness and build metadata"},{"method":"GET","path":"/api/release","operation":"getReleaseManifest","purpose":"Release tag, version, and supported endpoint manifest"},{"method":"POST","path":"/api/topics","operation":"createTopic","purpose":"Create topic ConceptObject with phrase tags and aliases"},{"method":"GET","path":"/api/topics/:uuid","operation":"getTopic","purpose":"Read topic snapshot, tags, and evidence"},{"method":"POST","path":"/api/topics/resolve-tag","operation":"resolveTag","purpose":"Resolve phrase tag to topic candidates"},{"method":"POST","path":"/api/object-categories","operation":"createObjectCategory","purpose":"Create schema-backed category prototype"},{"method":"POST","path":"/api/object-categories/upsert","operation":"upsertObjectCategory","purpose":"Versioned category upsert with lineage"},{"method":"GET","path":"/api/object-categories/:uuid","operation":"getObjectCategory","purpose":"Read category prototype snapshot"},{"method":"POST","path":"/api/prototype-matches/evaluate","operation":"evaluatePrototypeMatch","purpose":"Evaluate and cache an exact object revision against an exact prototype revision"},{"method":"POST","path":"/api/logic-ir/infer","operation":"inferLogicIr","purpose":"Evaluate P1 + P2 ⊢ P3 with the tiny Logic IR inference core"},{"method":"POST","path":"/api/objects/upsert","operation":"upsertObject","purpose":"Create/update object instance with assertion-backed properties"},{"method":"GET","path":"/api/objects/:uuid","operation":"getObject","purpose":"Read object snapshot and propertiesByName; ?matchPrototypes=1 lazily evaluates match contracts; ?infer=1 attaches Logic IR inference when premises+conclusion are present"},{"method":"POST","path":"/api/objects/resolve","operation":"resolveObject","purpose":"Resolve object by tag, title, or embedding query"},{"method":"POST","path":"/api/objects/generalize","operation":"generalizeObject","purpose":"Generalize concrete object into reusable prototype pattern"},{"method":"POST","path":"/api/concept-objects/suggest","operation":"suggestConceptObjects","purpose":"Smart tag / concept suggestions"},{"method":"POST","path":"/api/concept-objects/search","operation":"searchConceptObjects","purpose":"Semantic ConceptObject search"},{"method":"POST","path":"/api/concept-objects/suggest-prototypes","operation":"suggestPrototypes","purpose":"Fuzzy prototype suggestion (\"duck typing\")"},{"method":"POST","path":"/api/composites","operation":"createComposite","purpose":"Create composite object with components"},{"method":"GET","path":"/api/composites/:uuid","operation":"getComposite","purpose":"Read composite and component snapshots"},{"method":"POST","path":"/api/composites/:uuid/components/:componentUuid/update","operation":"updateCompositeComponent","purpose":"Update composite component assertion"},{"method":"POST","path":"/api/assertions","operation":"createAssertion","purpose":"Create subject-predicate-object assertion"},{"method":"GET","path":"/api/assertions","operation":"listAssertions","purpose":"List/filter assertions; uuid= one claim; why=true adds each claim's derivation (sources, versions, contested, inference, status) (WHY1); contested=true lists the open contradictions with both sides' sources and tiers (KSG-2); /api2.0 alias"},{"method":"POST","path":"/api2.0/propositions","operation":"assertProposition","purpose":"KG-P1: claim as a proposition of three ConceptObject uuids (subject instance, Predicate concept, object concept or value node); structural identity, supersede by version"},{"method":"POST","path":"/api2.0/propositions/reconcile","operation":"reconcileInferred","purpose":"CE3d: compare model candidates about a public thing with higher-tier claims about anything of that name; promote matches, mark single-valued disagreements contradicted"},{"method":"GET","path":"/api2.0/propositions/inferred/stats","operation":"inferredStats","purpose":"CE3d: counts of model propositions proposed, reused, refused, confirmed and contradicted since start"},{"method":"POST","path":"/api2.0/logic-ir/closure","operation":"closeRelation","purpose":"KG-P2 / KA4: transitive closure of one relation over the caller's visible claims; each fact cites its claims"},{"method":"POST","path":"/api2.0/logic-ir/joins","operation":"evaluateJoinRules","purpose":"KG-P2 / KA4: rules over binary relations with joins, run in memory to a fixpoint; nothing written"},{"method":"POST","path":"/api2.0/predicates","operation":"ensurePredicate","purpose":"KG-P2 / PR1: the Predicate concept for a name (created once), for Logic IR ConceptRefs"},{"method":"POST","path":"/api/assertions/:id/vote","operation":"voteAssertion","purpose":"Vote on assertion truth/confidence"},{"method":"POST","path":"/api2.0/assertions/reinforce","operation":"reinforceAssertion","purpose":"Same claim from another speaker; bump voteScore + speakers"},{"method":"POST","path":"/api2.0/assertions/contradict","operation":"contradictAssertion","purpose":"Competing claim for the same subject/predicate"},{"method":"POST","path":"/api2.0/assertions/:id/retract","operation":"retractAssertion","purpose":"Soft-delete an assertion from belief resolution"},{"method":"GET","path":"/api2.0/entities/:uuid/beliefs","operation":"getEntityBeliefs","purpose":"Live belief snapshot: winner + alternatives + speakers"},{"method":"GET","path":"/api/entities/:uuid/snapshot","operation":"getEntitySnapshot","purpose":"Resolver-selected current view"},{"method":"GET","path":"/api/entities/:uuid/evidence","operation":"getEntityEvidence","purpose":"Competing claims and provenance trail"},{"method":"GET","path":"/api/entities/:uuid/explain","operation":"explainEntity","purpose":"Explain trace for snapshot resolution"},{"method":"POST","path":"/api/procedures","operation":"createProcedure","purpose":"Create procedure DAG root"},{"method":"GET","path":"/api/procedures/:uuid","operation":"getProcedure","purpose":"Return procedure DAG (dagJson and/or graph compile; ?source=dagJson|graph|both)"},{"method":"PUT","path":"/api/procedures/:uuid/dag","operation":"putProcedureDag","purpose":"Update canonical dagJson snapshot; rematerialize next→ edges"},{"method":"POST","path":"/api/procedures/:uuid/steps","operation":"insertProcedureStep","purpose":"Insert/repair procedure step node"},{"method":"POST","path":"/api/procedures/:uuid/generalize","operation":"generalizeProcedure","purpose":"Generalize concrete procedure"},{"method":"POST","path":"/api/procedures/:uuid/repair-selector","operation":"repairProcedureSelector","purpose":"Repair browser selector on failure"},{"method":"POST","path":"/api/procedures/search","operation":"searchProcedures","purpose":"Search procedures by query"},{"method":"POST","path":"/api/procedures/import-json","operation":"importProcedureJson","purpose":"Import procedure from JSON DAG (stores dagJson + materializes graph)"},{"method":"POST","path":"/api/logic/syllogisms","operation":"createSyllogism","purpose":"Create predicate-logic syllogism DAG"},{"method":"GET","path":"/api/logic/syllogisms/:uuid","operation":"getSyllogism","purpose":"Read syllogism DAG"},{"method":"POST","path":"/api/market/matches/register","operation":"registerMarketMatch","purpose":"Register barter/listing match object"},{"method":"POST","path":"/api/market/matches/search","operation":"searchMarketMatches","purpose":"Search barter matches"},{"method":"POST","path":"/api/channels/subscribe","operation":"subscribeChannel","purpose":"Subscribe to concept-tag channel"},{"method":"POST","path":"/api/channels/messages","operation":"postChannelMessage","purpose":"Post channel message"},{"method":"GET","path":"/api/channels/feed","operation":"getChannelFeed","purpose":"Read channel feed"},{"method":"POST","path":"/api/events/repeating","operation":"createRepeatingEvent","purpose":"Create repeating calendar/event object"},{"method":"POST","path":"/api/ratings/:uuid","operation":"rateEntity","purpose":"Rate entity"},{"method":"GET","path":"/api/ratings/:uuid","operation":"getEntityRatings","purpose":"Read entity ratings"},{"method":"POST","path":"/api/seed/osl-agent","operation":"seedOslAgent","purpose":"Seed OSL agent ontology prototypes"},{"method":"POST","path":"/api/seed/social-layer","operation":"seedSocialLayer","purpose":"Seed social KG category prototypes (UserProfile, TopicSubscription, …)"},{"method":"POST","path":"/api2.0/seed/social-layer","operation":"seedSocialLayer","purpose":"Seed social KG categories (canonical /api2.0)"},{"method":"POST","path":"/api/seed/logic-ir-primitives","operation":"seedLogicIrPrimitives","purpose":"Seed Utterance, Proposition, Claim, and Concept match contracts"},{"method":"POST","path":"/api2.0/seed/logic-ir-primitives","operation":"seedLogicIrPrimitives","purpose":"Seed Logic IR primitive prototypes (canonical /api2.0)"},{"method":"POST","path":"/api/seed/schemaorg","operation":"seedSchemaOrg","purpose":"Seed schema.org types as prototypes and their properties as Predicates (vendored subset, idempotent)"},{"method":"POST","path":"/api2.0/seed/schemaorg","operation":"seedSchemaOrg","purpose":"Seed schema.org prototypes and Predicates (canonical /api2.0)"},{"method":"POST","path":"/api/seed/schemaorg/exemplars","operation":"seedSchemaOrgExemplars","purpose":"SX1: definition vectors, Wikidata exemplars (vendored) and starting centroids for the seeded schema.org prototypes; dryRun counts, apply runs in the background"},{"method":"POST","path":"/api2.0/seed/schemaorg/exemplars","operation":"seedSchemaOrgExemplars","purpose":"SX1 exemplar seed (canonical /api2.0)"},{"method":"GET","path":"/api2.0/seed/schemaorg/exemplars","operation":"seedSchemaOrgExemplarsStatus","purpose":"SX1: state and report of the last exemplar seed run"},{"method":"POST","path":"/api/seed/procedure-run-primitives","operation":"seedProcedureRunPrimitives","purpose":"Seed ProcedureRun / StepRun execution-trace match contracts"},{"method":"POST","path":"/api2.0/seed/procedure-run-primitives","operation":"seedProcedureRunPrimitives","purpose":"Seed ProcedureRun / StepRun prototypes (canonical /api2.0)"}],"legacy":[{"method":"POST","path":"/api/prototypes","operation":"createPrototype","purpose":"Legacy prototype create (pre-semantic-spine)"},{"method":"GET","path":"/api/prototypes/:uuid","operation":"getPrototype","purpose":"Legacy prototype read"},{"method":"POST","path":"/api/concepts","operation":"createConcept","purpose":"Legacy concept create"},{"method":"POST","path":"/api/concepts","operation":"findOrCreateConcept","purpose":"Resolve-before-create; returns preferredUuid (commons canonical) or personal variant linked to it"},{"method":"POST","path":"/api/concepts/resolve","operation":"resolveConcept","purpose":"Resolve label to preferredUuid + optional personalUuid without creating"},{"method":"POST","path":"/api/concepts/find-or-create","operation":"findOrCreateConceptAlias","purpose":"Alias of POST /api/concepts identity path"},{"method":"POST","path":"/api2.0/concepts/resolve","operation":"resolveConceptV2","purpose":"Resolve concept identity (canonical preferred)"},{"method":"POST","path":"/api2.0/concepts/find-or-create","operation":"findOrCreateConceptV2","purpose":"Find-or-create with canonical/personal modes"},{"method":"GET","path":"/api/concepts/:uuid","operation":"getConcept","purpose":"Legacy concept read"},{"method":"POST","path":"/api/concepts/search","operation":"searchConcepts","purpose":"Legacy embedding concept search"},{"method":"POST","path":"/api/knodes","operation":"createKnode","purpose":"Legacy knode create (deprecated)"}],"devExtended":[],"experimental":[],"clientContract":[{"method":"GET","path":"/health","operation":"healthCheck","purpose":"Liveness and build metadata"},{"method":"GET","path":"/api/release","operation":"getReleaseManifest","purpose":"Release tag, version, and supported endpoint manifest"},{"method":"POST","path":"/api/topics","operation":"createTopic","purpose":"Create topic ConceptObject with phrase tags and aliases"},{"method":"GET","path":"/api/topics/:uuid","operation":"getTopic","purpose":"Read topic snapshot, tags, and evidence"},{"method":"POST","path":"/api/topics/resolve-tag","operation":"resolveTag","purpose":"Resolve phrase tag to topic candidates"},{"method":"POST","path":"/api/object-categories","operation":"createObjectCategory","purpose":"Create schema-backed category prototype"},{"method":"POST","path":"/api/object-categories/upsert","operation":"upsertObjectCategory","purpose":"Versioned category upsert with lineage"},{"method":"GET","path":"/api/object-categories/:uuid","operation":"getObjectCategory","purpose":"Read category prototype snapshot"},{"method":"POST","path":"/api/prototype-matches/evaluate","operation":"evaluatePrototypeMatch","purpose":"Evaluate and cache an exact object revision against an exact prototype revision"},{"method":"POST","path":"/api/logic-ir/infer","operation":"inferLogicIr","purpose":"Evaluate P1 + P2 ⊢ P3 with the tiny Logic IR inference core"},{"method":"POST","path":"/api/objects/upsert","operation":"upsertObject","purpose":"Create/update object instance with assertion-backed properties"},{"method":"GET","path":"/api/objects/:uuid","operation":"getObject","purpose":"Read object snapshot and propertiesByName; ?matchPrototypes=1 lazily evaluates match contracts; ?infer=1 attaches Logic IR inference when premises+conclusion are present"},{"method":"POST","path":"/api/objects/resolve","operation":"resolveObject","purpose":"Resolve object by tag, title, or embedding query"},{"method":"POST","path":"/api/objects/generalize","operation":"generalizeObject","purpose":"Generalize concrete object into reusable prototype pattern"},{"method":"POST","path":"/api/concept-objects/suggest","operation":"suggestConceptObjects","purpose":"Smart tag / concept suggestions"},{"method":"POST","path":"/api/concept-objects/search","operation":"searchConceptObjects","purpose":"Semantic ConceptObject search"},{"method":"POST","path":"/api/concept-objects/suggest-prototypes","operation":"suggestPrototypes","purpose":"Fuzzy prototype suggestion (\"duck typing\")"},{"method":"POST","path":"/api/composites","operation":"createComposite","purpose":"Create composite object with components"},{"method":"GET","path":"/api/composites/:uuid","operation":"getComposite","purpose":"Read composite and component snapshots"},{"method":"POST","path":"/api/composites/:uuid/components/:componentUuid/update","operation":"updateCompositeComponent","purpose":"Update composite component assertion"},{"method":"POST","path":"/api/assertions","operation":"createAssertion","purpose":"Create subject-predicate-object assertion"},{"method":"GET","path":"/api/assertions","operation":"listAssertions","purpose":"List/filter assertions; uuid= one claim; why=true adds each claim's derivation (sources, versions, contested, inference, status) (WHY1); contested=true lists the open contradictions with both sides' sources and tiers (KSG-2); /api2.0 alias"},{"method":"POST","path":"/api2.0/propositions","operation":"assertProposition","purpose":"KG-P1: claim as a proposition of three ConceptObject uuids (subject instance, Predicate concept, object concept or value node); structural identity, supersede by version"},{"method":"POST","path":"/api2.0/propositions/reconcile","operation":"reconcileInferred","purpose":"CE3d: compare model candidates about a public thing with higher-tier claims about anything of that name; promote matches, mark single-valued disagreements contradicted"},{"method":"GET","path":"/api2.0/propositions/inferred/stats","operation":"inferredStats","purpose":"CE3d: counts of model propositions proposed, reused, refused, confirmed and contradicted since start"},{"method":"POST","path":"/api2.0/logic-ir/closure","operation":"closeRelation","purpose":"KG-P2 / KA4: transitive closure of one relation over the caller's visible claims; each fact cites its claims"},{"method":"POST","path":"/api2.0/logic-ir/joins","operation":"evaluateJoinRules","purpose":"KG-P2 / KA4: rules over binary relations with joins, run in memory to a fixpoint; nothing written"},{"method":"POST","path":"/api2.0/predicates","operation":"ensurePredicate","purpose":"KG-P2 / PR1: the Predicate concept for a name (created once), for Logic IR ConceptRefs"},{"method":"POST","path":"/api/assertions/:id/vote","operation":"voteAssertion","purpose":"Vote on assertion truth/confidence"},{"method":"POST","path":"/api2.0/assertions/reinforce","operation":"reinforceAssertion","purpose":"Same claim from another speaker; bump voteScore + speakers"},{"method":"POST","path":"/api2.0/assertions/contradict","operation":"contradictAssertion","purpose":"Competing claim for the same subject/predicate"},{"method":"POST","path":"/api2.0/assertions/:id/retract","operation":"retractAssertion","purpose":"Soft-delete an assertion from belief resolution"},{"method":"GET","path":"/api2.0/entities/:uuid/beliefs","operation":"getEntityBeliefs","purpose":"Live belief snapshot: winner + alternatives + speakers"},{"method":"GET","path":"/api/entities/:uuid/snapshot","operation":"getEntitySnapshot","purpose":"Resolver-selected current view"},{"method":"GET","path":"/api/entities/:uuid/evidence","operation":"getEntityEvidence","purpose":"Competing claims and provenance trail"},{"method":"GET","path":"/api/entities/:uuid/explain","operation":"explainEntity","purpose":"Explain trace for snapshot resolution"},{"method":"POST","path":"/api/procedures","operation":"createProcedure","purpose":"Create procedure DAG root"},{"method":"GET","path":"/api/procedures/:uuid","operation":"getProcedure","purpose":"Return procedure DAG (dagJson and/or graph compile; ?source=dagJson|graph|both)"},{"method":"PUT","path":"/api/procedures/:uuid/dag","operation":"putProcedureDag","purpose":"Update canonical dagJson snapshot; rematerialize next→ edges"},{"method":"POST","path":"/api/procedures/:uuid/steps","operation":"insertProcedureStep","purpose":"Insert/repair procedure step node"},{"method":"POST","path":"/api/procedures/:uuid/generalize","operation":"generalizeProcedure","purpose":"Generalize concrete procedure"},{"method":"POST","path":"/api/procedures/:uuid/repair-selector","operation":"repairProcedureSelector","purpose":"Repair browser selector on failure"},{"method":"POST","path":"/api/procedures/search","operation":"searchProcedures","purpose":"Search procedures by query"},{"method":"POST","path":"/api/procedures/import-json","operation":"importProcedureJson","purpose":"Import procedure from JSON DAG (stores dagJson + materializes graph)"},{"method":"POST","path":"/api/logic/syllogisms","operation":"createSyllogism","purpose":"Create predicate-logic syllogism DAG"},{"method":"GET","path":"/api/logic/syllogisms/:uuid","operation":"getSyllogism","purpose":"Read syllogism DAG"},{"method":"POST","path":"/api/market/matches/register","operation":"registerMarketMatch","purpose":"Register barter/listing match object"},{"method":"POST","path":"/api/market/matches/search","operation":"searchMarketMatches","purpose":"Search barter matches"},{"method":"POST","path":"/api/channels/subscribe","operation":"subscribeChannel","purpose":"Subscribe to concept-tag channel"},{"method":"POST","path":"/api/channels/messages","operation":"postChannelMessage","purpose":"Post channel message"},{"method":"GET","path":"/api/channels/feed","operation":"getChannelFeed","purpose":"Read channel feed"},{"method":"POST","path":"/api/events/repeating","operation":"createRepeatingEvent","purpose":"Create repeating calendar/event object"},{"method":"POST","path":"/api/ratings/:uuid","operation":"rateEntity","purpose":"Rate entity"},{"method":"GET","path":"/api/ratings/:uuid","operation":"getEntityRatings","purpose":"Read entity ratings"},{"method":"POST","path":"/api/seed/osl-agent","operation":"seedOslAgent","purpose":"Seed OSL agent ontology prototypes"},{"method":"POST","path":"/api/seed/social-layer","operation":"seedSocialLayer","purpose":"Seed social KG category prototypes (UserProfile, TopicSubscription, …)"},{"method":"POST","path":"/api2.0/seed/social-layer","operation":"seedSocialLayer","purpose":"Seed social KG categories (canonical /api2.0)"},{"method":"POST","path":"/api/seed/logic-ir-primitives","operation":"seedLogicIrPrimitives","purpose":"Seed Utterance, Proposition, Claim, and Concept match contracts"},{"method":"POST","path":"/api2.0/seed/logic-ir-primitives","operation":"seedLogicIrPrimitives","purpose":"Seed Logic IR primitive prototypes (canonical /api2.0)"},{"method":"POST","path":"/api/seed/schemaorg","operation":"seedSchemaOrg","purpose":"Seed schema.org types as prototypes and their properties as Predicates (vendored subset, idempotent)"},{"method":"POST","path":"/api2.0/seed/schemaorg","operation":"seedSchemaOrg","purpose":"Seed schema.org prototypes and Predicates (canonical /api2.0)"},{"method":"POST","path":"/api/seed/schemaorg/exemplars","operation":"seedSchemaOrgExemplars","purpose":"SX1: definition vectors, Wikidata exemplars (vendored) and starting centroids for the seeded schema.org prototypes; dryRun counts, apply runs in the background"},{"method":"POST","path":"/api2.0/seed/schemaorg/exemplars","operation":"seedSchemaOrgExemplars","purpose":"SX1 exemplar seed (canonical /api2.0)"},{"method":"GET","path":"/api2.0/seed/schemaorg/exemplars","operation":"seedSchemaOrgExemplarsStatus","purpose":"SX1: state and report of the last exemplar seed run"},{"method":"POST","path":"/api/seed/procedure-run-primitives","operation":"seedProcedureRunPrimitives","purpose":"Seed ProcedureRun / StepRun execution-trace match contracts"},{"method":"POST","path":"/api2.0/seed/procedure-run-primitives","operation":"seedProcedureRunPrimitives","purpose":"Seed ProcedureRun / StepRun prototypes (canonical /api2.0)"}]},"capabilities":{"schemaVersion":1,"ids":["release","auth-tokens","semantic-memory","episodes-events","facts","assertions","propositions","typed-properties","articles","concepts","topics-tags","knowledge-search","verification","entities","logic","prototypes","taxonomy","objects","procedures","packs","social","private-vaults","capability-model","feedback","seed","admin-ops","deploy-probes"],"features":["kg-p1","ce3d-proposals","bind-pattern","close-relation","evaluate-joins","check-membership","match-prototypes","sx1-exemplars","schemaorg-seed","taxonomy-reader","ce3a-wikidata","ce3c-conceptnet","kl1-procedure-search","rp1-retired-opt-in","kl2-vector-search","kv1-value-types","tb2-versions","kt1-tokens","dh1-supersede","why1-derivation","ksg2-contradictions"],"doc":"docs/CAPABILITIES.md"},"definitions":{"ConceptObject":"Persistent semantic object with UUID, tags/aliases, typed properties, assertions, evidence, embeddings, versions, and resolver snapshots.","phraseTag":"Lexical handle (e.g. #[mountain bike]) that resolves to a canonical ConceptObject ID.","topic":"A ConceptObject representing a canonical subject with primary tag, aliases, and summary.","categoryPrototype":"Schema-style prototype (object category) defining expected typed properties for instances.","objectInstance":"Concrete ConceptObject instance of a category; property values are assertion-backed.","typedMemory":"Role-typed object instance (StandingMandate is_a Task, ScheduledJob is_a Event, …) plus assertion claims about that object. Wrapper over objects/upsert — not a second store.","semanticMemory":"Chat→graph ingestion: immutable MemoryEvent + append-only claims + derived associations with separate belief and salience. remember/recall/ask/correct under /api2.0/semantic/*.","assertion":"Subject-predicate-object claim with provenance, confidence, votes, and lineage; append-only.","snapshot":"Materialized current view selected by the resolver over competing assertions.","evidence":"Historical and competing assertions preserved for audit, voting, and explain traces.","association":"Directed labeled graph edge between ConceptObjects with optional strength weight.","composite":"ConceptObject composed of component objects with versioned component assertions.","procedureDAG":"Executable workflow graph of step nodes with dependencies, selectors, and repair history.","verifiedProcedure":"A procedure with a lifecycle folded from run marks: draft until one verified run, retired after two failures on a site since it last worked, revived by a later verified run (docs/VERIFIED-MEMORY.md).","verifiedFact":"An assertion with status candidate|confirmed and provenance; reads return confirmed only unless asked; corrections keep the old value as history.","capability":"Provider-neutral semantic contract (research.academic, llm.reasoning) stored as a typed object with lineage-stable identity; providers implement capabilities, capability ids never encode providers.","procedureVersion":"Immutable, version-addressable revision of a procedure DAG with computed state (candidate→validated→promoted→retired, from the marks of its own runs; K1), a deprecated hand-set status (draft→dogfood→tested→validated→stable→degraded→deprecated) and recorded, never-overwritten status history.","capabilityModel":"Category prototypes for the composable agent runtime (Capability, ProcedureVersion, Component, ComponentVersion, AgentTemplate, SwarmModule, GraphSpec, observation/test categories) seeded via /api2.0/seed/capability-model.","logicDAG":"Predicate-logic graph (e.g. syllogism) linking premises and conclusions.","prototype":"Legacy type/category node (prefer object-categories on new work).","concept":"Legacy instance node under a prototype (prefer objects/upsert on new work).","KSGObject":"Client-side proxy over server snapshots; not a storage primitive."},"client":{"repo":"lehelkovach/knowshowgo-client","branch":"main","recommendedTag":"v0.2.60-client","recommendedVersion":"0.2.60","peerServerVersion":"0.2.60","submodulePath":"api/","handoffDocs":["docs/RELEASE-v0.2.60.md","docs/CLIENT-SYNC.md"],"connectionSteps":["GET /api/release on the target service and verify release matches your client tag.","Use api.publicBaseUrl from this manifest as the SDK baseUrl (https://api.knowshowgo.com in prod).","Implement wrappers only for surfaces.mvp unless explicitly extending legacy support.","Pin peer dependency to the server version field from this manifest.","Run npm run test:mvp against a live service before publishing the client tag."]},"dogfood":{"scripts":["npm run dogfood:ksg","npm run dogfood:openclaw","npm run dogfood:ocl-oc"],"smoke":"KSG_LIVE_URL=<service> npm run test:live:mvp","remoteMvp":"TEST_REMOTE_API=true REMOTE_API_URL=<dev-service> npm run test:remote:mvp"},"docs":{"apiRoutes":"docs/API-ROUTES.md","capabilities":"docs/CAPABILITIES.md","devApiSurface":"docs/DEV-API-SURFACE.md","clientSync":"docs/CLIENT-SYNC.md"}}