...@your-project.iam.gserviceaccount.com), a Google group, or a Workspace
domain — to ops@webgcp.org with the domain you operate
and what you intend to build.bigquery.jobs.create comes from YOUR project
(roles/bigquery.jobUser there), and the scan bytes bill to it.# prove access, from your own project (this query bills ~MBs to you):
bq query --use_legacy_sql=false \
'SELECT entity_type, COUNT(*) n
FROM `webgcporg.catalog.entities`
WHERE deleted_at IS NULL
GROUP BY entity_type ORDER BY n DESC'
webgcporg.catalog — the pillar (entities + edges)~100k entities: skills, roles, profiles, tasks, agencies, sectors, extracted from real corpora and synthetic seeds, each carrying provenance and a pinned-space embedding.
| column | meaning |
|---|---|
entity_id, entity_type | identity + kind (skill, role, profile, task, ...) |
payload (JSON) | the entity body — names/descriptions live here: JSON_VALUE(payload, '$.name') |
synth, synth_provenance | the truth-class flag — synthetic rows are labeled, never hidden (§3) |
embedding (FLOAT REPEATED), embedder_version, embedding_dim | the pinned space: gemini-embedding-2, 3072 dims, COSINE — §5 |
deleted_at | soft delete — every query filters deleted_at IS NULL |
verified_cos, verified_at | embedding-space verification stamps (1.0 = re-embed verified) |
Edge tables (skill↔task, role↔skill, ... — one table per pair) carry via
(the mechanical derivation) and edge_origin. LLM-proposed edges live in
edge_candidates until a curator promotes them — candidates are
never part of the traversal contract.
webgcporg.webgcp_network — the operating graph| table | what |
|---|---|
agent_records, agents_current | registered agents, each with authority (truth class) and activity stamps |
skill_records, role_records, agency_records, sector_records | the published taxonomy; truth_class / side_effect_class ride each row |
role_requires_skill, agent_provides_skill, agent_holds_role | the capability graph |
task_records, task_estimates | demand-side records (per-tenant sharding applies) |
production_outcome_edges, evaluated_for_edges | the evidence lanes — what makes a capability claim proven (§3) |
_
(_stg_*, _bak_*, _repair*) and datasets not named
here are internal staging/ops surfaces — they can change or vanish without notice. Build
only against the tables above.Every row tells you what kind of claim it is. The vocabulary, in descending strength:
canonical (ground truth from the eval or production-outcome lanes) ·
derived (computed views over canonical) · registry/inferred
(self-declared or extracted) · synthetic (seeded; synth=TRUE).
canonical/derived
evidence. If you build matching, scoring, or any learned system on these
datasets, exclude weaker classes from the evidence side — the schema makes that a
one-line WHERE authority IN ('canonical','derived').evaluated_for_edges or production_outcome_edges backs it;
otherwise it is claimed. Copy that discriminator, don't invent one.-- skills matching a keyword, with provenance
SELECT entity_id,
JSON_VALUE(payload, '$.name') AS name,
JSON_VALUE(payload, '$.skill_kind') AS kind,
synth
FROM `webgcporg.catalog.entities`
WHERE entity_type = 'skill' AND deleted_at IS NULL
AND LOWER(JSON_VALUE(payload, '$.name')) LIKE '%column%masking%';
-- a role's required skills (the capability graph)
SELECT r.role_id, r.display_name, rrs.skill_id
FROM `webgcporg.webgcp_network.role_records` r
JOIN `webgcporg.webgcp_network.role_requires_skill` rrs USING (role_id);
-- proven vs claimed skills (the evidence discriminator, verbatim)
SELECT s.skill_id,
EXISTS(SELECT 1 FROM `webgcporg.webgcp_network.evaluated_for_edges` e
WHERE e.skill_id = s.skill_id
AND e.authority IN ('canonical','derived')) AS proven
FROM `webgcporg.webgcp_network.skill_records` s
WHERE s.status = 'active';
The corpus embeddings are pinned to gemini-embedding-2, 3072
dimensions, COSINE distance (embedder_version on every row — trust
the column, not this page, if they ever disagree). To search semantically without our
services, embed your query text in your own project on the same model, then
rank in SQL:
-- 1. your project: embed the query text (Vertex AI, gemini-embedding-2, 3072 dims)
-- 2. then rank against the corpus:
SELECT base.entity_id,
JSON_VALUE(base.payload, '$.name') AS name,
distance
FROM VECTOR_SEARCH(
(SELECT entity_id, payload, embedding
FROM `webgcporg.catalog.entities`
WHERE entity_type = 'skill' AND deleted_at IS NULL),
'embedding',
(SELECT @query_vec AS embedding),
distance_type => 'COSINE', top_k => 10);
embedder_version exactly.embedding scan MBs instead.Everything above needs none of these. When convenience beats self-sufficiency:
POST /webgcp/v0/query — hosted semantic retrieval
(spec §6.4–6.7);POST /webgcp/v0/answer — the task-answer door
(extension draft);Contract tables (§2) evolve additively; renames/removals are announced via this page and the descriptor before they land. Underscore-prefixed tables have no contract. The truth-class vocabulary (§3) is governed by TheNetwork's decision log and does not change silently. Questions, access requests, and breakage reports: ops@webgcp.org.