전체 문서
이 페이지 목차
태스크·자산·탐색 PostgreSQL 객체
task, asset, scope, exploration graph와 activity의 물리 객체를 전수 참조한다.
기준 · core
db/schema.sql은 PostgreSQL 49개 table·최종 column 합집합 520개·명시 index 97개·function 4개·trigger 22개다. startup 보조 ledgerllm_records와llm_usage가 2개 table·31개 column·5개 index를 더해 선언 총계는 51개 table·551개 column·102개 index다.Ensure*Table실패는 로그 후 계속되므로 보조 ledger 존재는 core startup 보장이 아니다. Traffic은 별도 SQLite 3개 일반 table·FTS5 virtual table 1개·index 6개다. 아래 DDL은 고정 source revision의 선언이며 실제 운영 DB 적용 상태는 관찰하지 않았다.
객체 색인
| 객체 | 저장소 | 목적 |
|---|---|---|
companies |
PostgreSQL | companies 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
assets |
PostgreSQL | 전역 자산 graph의 정규화된 자산과 관찰 속성·task 연계를 저장한다. |
company_scope |
PostgreSQL | 회사별 domain/IP/CIDR/ICP/keyword scope를 저장한다. |
explorations |
PostgreSQL | 태스크별 탐색 graph root와 round를 소유한다. |
exploration_nodes |
PostgreSQL | goal/intent/fact/finding/hint/digest 노드와 상태·우선순위·payload를 저장한다. |
exploration_edges |
PostgreSQL | 노드 사이 rel을 저장한다. |
exploration_anchors |
PostgreSQL | 탐색 노드와 asset의 anchor를 저장한다. |
task_constraints |
PostgreSQL | task_constraints 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
activity |
PostgreSQL | activity 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
main_sessions |
PostgreSQL | main_sessions 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
task_categories |
PostgreSQL | task_categories 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
tasks |
PostgreSQL | 태스크의 사용자 입력, 실행 상태, timeout, queue, LLM chain, 분류와 archive 표지를 소유한다. |
task_templates |
PostgreSQL | task_templates 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
task_relations |
PostgreSQL | task_relations 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
task_asset_links |
PostgreSQL | task_asset_links 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
task_llm_profiles |
PostgreSQL | task_llm_profiles 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다. |
task_scope |
PostgreSQL | task에서 사용하는 root_domain/subdomain/IP/CIDR/company scope를 저장한다. |
companies
companies · 관계
이 대상을 사용하는 기능·모듈·계약 · 5개
- 계약 사용 · 자산이 들어오는 경로 · DB.SearchChatMentionsPage: read FROM; CompanyStore.CreateCompanyWithScope: write INSERT; CompanyStore.DeleteCompanyWithAssets: write DELETE; CompanyStore.GetCompany: read FROM; CompanyStore.GetCompanyByName: read FROM; CompanyStore.ListCompanies: read FROM; CompanyStore.UpsertCompany: write INSERT; ensureCompanyExistsTx: read FROM; AssetStore.ListTaskScopeWithSources: read JOIN; AssetStore.BuildCoverageGraph: read FROM; AssetStore.ListTaskScope: read JOIN; insertTaskCompanies: read JOIN · db-pg-access-companies-027ee36311 · db-pg-access-companies-8a08847bd5 · db-pg-access-companies-5d7af36dbc · db-pg-access-companies-82f2f97b5f · db-pg-access-companies-5a99aca97f · db-pg-access-companies-9c33327a89 · db-pg-access-companies-5558ff7874 · db-pg-access-companies-1c607bde47 · db-pg-access-companies-e2feb4cf84 · db-pg-access-companies-26853e3459 · db-pg-access-companies-83c7ae4ebd · db-pg-access-companies-592d9370e6
- 계약 사용 · Reporter, retest, export · DB.attachCompanyNodes: read FROM · db-pg-access-companies-e668bfbdce
- 계약 사용 · 삭제·archive·보존 경계 · rowExists: read FROM · db-pg-access-companies-451348e66d
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_companies_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-companies-upd
- 의존 / 실행 · trg_companies_upd · fire table `companies` · db-ddl-trigger-trg-companies-upd
companies 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS companies (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
nkey TEXT NOT NULL UNIQUE,
logo TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
인덱스
CREATE INDEX IF NOT EXISTS idx_companies_nkey ON companies(nkey);
의미·소비·운영 경계
companies 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
assets
assets · 관계
이 대상을 사용하는 기능·모듈·계약 · 8개
- 계약 사용 · Agent write와 provenance · AssetStore.CountDSL: read FROM; AssetStore.GetByIDsInScope: read FROM; AssetStore.QueryDSL: read FROM; AssetStore.QueryDSLInScope: read FROM; AssetStore.AppendIPBoundDomain: write UPDATE; AssetStore.AppendIPPort: write UPDATE; AssetStore.CountByCompany: read FROM; AssetStore.CountByTask: read FROM; AssetStore.CountByType: read FROM; AssetStore.CountsByType: read FROM; AssetStore.CountsByTypeForTask: read FROM; AssetStore.DeleteByCompanyID: write DELETE; AssetStore.DeleteByHost: write DELETE; AssetStore.DeleteByIDs: write DELETE; AssetStore.DeleteByTaskID: write DELETE/UPDATE; AssetStore.GetByIDs: read FROM; AssetStore.HostsByTask: read FROM; AssetStore.QueryByCompany: read FROM; AssetStore.QueryByTask: read FROM; AssetStore.QueryByType: read FROM; AssetStore.UpsertApp: write INSERT; AssetStore.UpsertEndpoint: write INSERT; AssetStore.UpsertHTTPService: write INSERT; AssetStore.UpsertIP: write INSERT; AssetStore.UpsertOtherService: write INSERT; AssetStore.UpsertRootDomain: write INSERT; AssetStore.UpsertSubdomain: write INSERT; hostsForTaskDeletion: read FROM; DB.SearchChatMentionsPage: read FROM; CompanyStore.DeleteCompanyWithAssets: write DELETE; CompanyStore.ListCompanies: read JOIN; malformedIPAssetWarning: read FROM; recomputeAttributionTx: read/write FROM/UPDATE; AssetStore.AttachAssetsToTask: read/write FROM/UPDATE; AssetStore.DetachAssetFromTask: write UPDATE; AssetStore.IntentAssets: read JOIN; AssetStore.RegisterTaskAssetScopes: read FROM; AssetStore.SetTaskAssetSource: read JOIN; AssetStore.HostsByTaskWithSources: read FROM; AssetStore.ListUntestedAssetsWithSources: read FROM; AssetStore.TaskCoverageWithSources: read FROM; AssetStore.BuildCoverageGraph: read FROM; AssetStore.ListUntestedAssets: read FROM; AssetStore.TaskCoverage: read FROM; DB.DeleteTaskCascadePrepared: lock/read/write DELETE/FROM/LOCK/UPDATE; insertTaskCompanies: read/write FROM/UPDATE · db-pg-access-assets-ac89e52754 · db-pg-access-assets-bfe357fb46 · db-pg-access-assets-c2af0e3866 · db-pg-access-assets-08e4edbca3 · db-pg-access-assets-b7f549daa9 · db-pg-access-assets-920527bebb · db-pg-access-assets-34e71511f9 · db-pg-access-assets-3407544ec0 · db-pg-access-assets-f73d325aea · db-pg-access-assets-ec341d7f00 · db-pg-access-assets-474e1ac90a · db-pg-access-assets-689a6eff52 · db-pg-access-assets-3c600226f2 · db-pg-access-assets-b189a1320e · db-pg-access-assets-0e43349555 · db-pg-access-assets-fabc282c04 · db-pg-access-assets-9727e52143 · db-pg-access-assets-381590ebb9 · db-pg-access-assets-2ef5a4abe7 · db-pg-access-assets-292f7c7f0e · db-pg-access-assets-3d08c5ef9a · db-pg-access-assets-49f3abc241 · db-pg-access-assets-d244c644c2 · db-pg-access-assets-1c56c5bc53 · db-pg-access-assets-7bb8deead0 · db-pg-access-assets-f45086ef34 · db-pg-access-assets-5d280f205c · db-pg-access-assets-ac91a2052c · db-pg-access-assets-9923205705 · db-pg-access-assets-67058e4a73 · db-pg-access-assets-08131b651c · db-pg-access-assets-1568fdd7ed · db-pg-access-assets-697813c1b5 · db-pg-access-assets-c773b403af · db-pg-access-assets-9b183fabbc · db-pg-access-assets-71a2b29744 · db-pg-access-assets-52bc975351 · db-pg-access-assets-067d17d02d · db-pg-access-assets-32bf6ec1b3 · db-pg-access-assets-4e75062863 · db-pg-access-assets-e1e6c3d434 · db-pg-access-assets-4cfef63802 · db-pg-access-assets-046fd89c65 · db-pg-access-assets-429d7e60de · db-pg-access-assets-439a90dd4a · db-pg-access-assets-cab0f39b8c
- 계약 사용 · Reporter, retest, export · DB.loadAssetsByHost: read FROM; DB.loadFindingAssetRows: read FROM; DB.CreateFindingRetest: read FROM; FindingFilter.where: read JOIN; DB.NotificationAssetNames: read FROM · db-pg-access-assets-f45cca9cff · db-pg-access-assets-12f762afa6 · db-pg-access-assets-4563afa922 · db-pg-access-assets-494ba72146 · db-pg-access-assets-b49b77c116
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; archiveAssetIDsQuery: read FROM; archiveAssetMetadata: read FROM; DB.CompleteTaskArchive: lock/write DELETE/LOCK/UPDATE; findArchiveAssetNaturalID: read FROM; restoreArchiveAssets: write INSERT/UPDATE; rowExists: read FROM · db-pg-access-assets-1cd2a35e08 · db-pg-access-assets-b1e13d04c1 · db-pg-access-assets-266516fe7e · db-pg-access-assets-42719fef02 · db-pg-access-assets-8ccea69ea4 · db-pg-access-assets-4552dc4867 · db-pg-access-assets-f214bc708b
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_av2_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-av2-upd
- 계약 사용 · try_inet() · read/transform; columns ip, domain; company/task scope query에서 자유 text를 안전하게 inet 변환; provenance: production SQL call sites · db-try-inet-use-assets-1568fdd7ed · db-try-inet-use-assets-697813c1b5 · db-try-inet-use-assets-32bf6ec1b3 · db-try-inet-use-assets-4e75062863 · db-try-inet-use-assets-e1e6c3d434 · db-try-inet-use-assets-4cfef63802 · db-try-inet-use-assets-046fd89c65 · db-try-inet-use-assets-429d7e60de
- 계약 사용 · sync_task_asset_links() · read trigger row; columns id, task_ids; AFTER INSERT OR UPDATE OF task_ids의 NEW row; provenance: trigger row/table declaration · db-ddl-trigger-trg-assets-task-links
- 의존 / 실행 · trg_av2_upd · fire table `assets` · db-ddl-trigger-trg-av2-upd
- 의존 / 실행 · trg_assets_task_links · fire table `assets` · db-ddl-trigger-trg-assets-task-links
전역 자산 graph의 정규화된 자산과 관찰 속성·task 연계를 저장한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS assets (
id BIGSERIAL PRIMARY KEY,
type TEXT NOT NULL CHECK (type IN (
'root_domain','ip','subdomain','app','service','endpoint'
)),
company_id BIGINT REFERENCES companies(id) ON DELETE SET NULL,
-- explicit: caller/user selected the company; scope: derived from company_scope.
-- Existing installations are conservatively migrated as explicit so a scope
-- rebuild can never erase a historical manual association.
company_source TEXT NOT NULL DEFAULT 'explicit'
CHECK (company_source IN ('explicit','scope')),
task_ids BIGINT[] NOT NULL DEFAULT '{}',
domain TEXT,
root_domain TEXT,
ip TEXT,
c_segment CIDR,
port INTEGER CHECK (port BETWEEN 1 AND 65535),
icp TEXT,
bound_domains TEXT[] NOT NULL DEFAULT '{}',
open_ports JSONB[] NOT NULL DEFAULT '{}',
record_type TEXT,
record_value TEXT[],
bundle_id TEXT,
app_name TEXT,
category TEXT,
app_description TEXT,
app_icp TEXT,
url TEXT,
service_type TEXT CHECK (service_type IN ('http','other')),
service_name TEXT,
favicon_mmh3 TEXT,
status_code INTEGER,
content_length BIGINT,
page_title TEXT,
technologies TEXT[] NOT NULL DEFAULT '{}',
auth JSONB[] NOT NULL DEFAULT '{}',
method TEXT,
params JSONB[] NOT NULL DEFAULT '{}',
extra JSONB NOT NULL DEFAULT '{}',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
last_seen TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
후속 변경·제약
ALTER TABLE assets ADD COLUMN IF NOT EXISTS company_source TEXT;ALTER TABLE assets ALTER COLUMN company_source SET DEFAULT 'explicit';ALTER TABLE assets ALTER COLUMN company_source SET NOT NULL;ALTER TABLE assets DROP CONSTRAINT IF EXISTS assets_company_source_check;ALTER TABLE assets ADD CONSTRAINT assets_company_source_check CHECK (company_source IN ('explicit','scope'));
Startup은 null company_source를 explicit로 backfill한 뒤 default/not-null/CHECK를 적용한다. CHECK는 매 startup drop/recreate되어 기존 row를 재검증하며, explicit/scope 외 legacy 값은 startup transaction을 실패시킨다. migration 경계
인덱스
CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_root_domain ON assets(domain) WHERE type = 'root_domain';CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_ip ON assets(ip) WHERE type = 'ip';CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_subdomain ON assets(domain, COALESCE(record_type,'')) WHERE type = 'subdomain';CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_app_bundle ON assets(bundle_id) WHERE type = 'app' AND bundle_id IS NOT NULL;CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_app_name ON assets(app_name) WHERE type = 'app' AND bundle_id IS NULL;CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_service_http ON assets(url) WHERE type = 'service' AND service_type = 'http';CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_service_other ON assets(COALESCE(domain,''), COALESCE(ip,''), port, service_name) WHERE type = 'service' AND service_type = 'other';CREATE UNIQUE INDEX IF NOT EXISTS uq_av2_endpoint ON assets(url, method) WHERE type = 'endpoint';CREATE INDEX IF NOT EXISTS idx_av2_company ON assets(company_id) WHERE company_id IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_av2_company_type ON assets(company_id, type) WHERE company_id IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_av2_task_ids ON assets USING GIN(task_ids);CREATE INDEX IF NOT EXISTS idx_av2_domain ON assets(domain) WHERE domain IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_av2_root_domain ON assets(root_domain) WHERE root_domain IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_av2_ip ON assets(ip) WHERE ip IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_av2_c_segment ON assets USING GIST(c_segment inet_ops) WHERE c_segment IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_av2_technologies ON assets USING GIN(technologies) WHERE type = 'service';CREATE INDEX IF NOT EXISTS idx_av2_bound_domains ON assets USING GIN(bound_domains) WHERE type = 'ip';CREATE INDEX IF NOT EXISTS idx_av2_open_ports ON assets USING GIN(open_ports) WHERE type = 'ip';CREATE INDEX IF NOT EXISTS idx_av2_last_seen ON assets(last_seen DESC);CREATE INDEX IF NOT EXISTS idx_av2_type_seen ON assets(type, last_seen DESC);
의미·소비·운영 경계
assets 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
company_scope
company_scope · 관계
이 대상을 사용하는 기능·모듈·계약 · 3개
- 계약 사용 · Company scope와 task scope · CompanyStore.GetScope: read FROM; CompanyStore.UpdateScopeInputsChecked: write DELETE; insertScopeRuleTx: write INSERT; recomputeAttributionTx: read JOIN; resolveCompanyWithICP: read FROM · db-pg-access-company-scope-7e40c33b76 · db-pg-access-company-scope-5d479bbe19 · db-pg-access-company-scope-cc48b3bcc4 · db-pg-access-company-scope-2dcedff17b · db-pg-access-company-scope-910c65209a
- 계약 사용 · try_inet() · read predicate; columns net; `net >>= try_inet(assets.ip)` attribution predicate; provenance: production SQL call sites · db-try-inet-use-company-scope-2dcedff17b
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `company_scope` · db-table-constraints
회사별 domain/IP/CIDR/ICP/keyword scope를 저장한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS company_scope (
id BIGSERIAL PRIMARY KEY,
company_id BIGINT NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
kind TEXT NOT NULL CHECK (kind IN ('domain','ip','cidr','icp','keyword')),
domain TEXT,
net CIDR,
value TEXT,
raw TEXT NOT NULL,
reason TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT uq_sv2_domain UNIQUE (company_id, domain),
CONSTRAINT uq_sv2_net UNIQUE (company_id, net),
CONSTRAINT ck_company_scope_payload CHECK (
(kind = 'domain' AND domain IS NOT NULL AND net IS NULL AND value IS NULL)
OR (kind IN ('ip','cidr') AND domain IS NULL AND net IS NOT NULL AND value IS NULL)
OR (kind IN ('icp','keyword') AND domain IS NULL AND net IS NULL AND value IS NOT NULL)
)
);
후속 변경·제약
ALTER TABLE company_scope ADD COLUMN IF NOT EXISTS value TEXT;ALTER TABLE company_scope DROP CONSTRAINT IF EXISTS company_scope_kind_check;ALTER TABLE company_scope ADD CONSTRAINT company_scope_kind_check CHECK (kind IN ('domain','ip','cidr','icp','keyword'));ALTER TABLE company_scope DROP CONSTRAINT IF EXISTS ck_company_scope_payload;ALTER TABLE company_scope ADD CONSTRAINT ck_company_scope_payload CHECK ( (kind = 'domain' AND domain IS NOT NULL AND net IS NULL AND value IS NULL) OR (kind IN ('ip','cidr') AND domain IS NULL AND net IS NOT NULL AND value IS NULL) OR (kind IN ('icp','keyword') AND domain IS NULL AND net IS NULL AND value IS NOT NULL) );
Kind/payload CHECK는 매 startup drop/recreate되며 NOT VALID가 아니라 legacy row를 전수 재검증한다. invalid row는 schema transaction을 abort하고 ALTER lock은 concurrent writer를 block할 수 있다. migration 경계
인덱스
CREATE INDEX IF NOT EXISTS idx_sv2_domain ON company_scope(domain) WHERE kind = 'domain';CREATE INDEX IF NOT EXISTS idx_sv2_net ON company_scope USING GIST(net inet_ops) WHERE kind IN ('ip','cidr');CREATE UNIQUE INDEX IF NOT EXISTS uq_sv2_value ON company_scope(company_id, kind, value) WHERE kind IN ('icp','keyword');CREATE INDEX IF NOT EXISTS idx_sv2_icp ON company_scope(value) WHERE kind = 'icp';CREATE INDEX IF NOT EXISTS idx_sv2_company ON company_scope(company_id);
의미·소비·운영 경계
company_scope 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
explorations
explorations · 관계
이 대상을 사용하는 기능·모듈·계약 · 4개
- 계약 사용 · 1. 접수와 부트스트랩 · ExplorationStore.BumpRound: write UPDATE; ExplorationStore.RoundNo: read FROM; DB.CreateExploration: write INSERT; DB.ExplorationDiag: read FROM; ExplorationStore.Root: read FROM; DB.CreateTaskWithOptions: write INSERT; DB.DeleteTaskCascadePrepared: write DELETE · db-pg-access-explorations-1cde922da3 · db-pg-access-explorations-d6a6e892aa · db-pg-access-explorations-148ac9d22a · db-pg-access-explorations-0ffe72b87c · db-pg-access-explorations-d750c727e6 · db-pg-access-explorations-7b5ecbeb86 · db-pg-access-explorations-ab3e7603f2
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; DB.CompleteTaskArchive: write UPDATE; DB.DeleteTaskArchiveStub: write DELETE; restoreExplorationStub: write UPDATE · db-pg-access-explorations-f87592c5a7 · db-pg-access-explorations-0f43bc3f8d · db-pg-access-explorations-11808b0f2b · db-pg-access-explorations-e10c8a676c
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_exp_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-exp-upd
- 의존 / 실행 · trg_exp_upd · fire table `explorations` · db-ddl-trigger-trg-exp-upd
태스크별 탐색 graph root와 round를 소유한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS explorations (
id BIGSERIAL PRIMARY KEY,
description TEXT,
goal TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'open'
CHECK (status IN ('open','achieved','failed')),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
후속 변경·제약
ALTER TABLE explorations ADD COLUMN IF NOT EXISTS round_no BIGINT NOT NULL DEFAULT 0;
의미·소비·운영 경계
explorations 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
exploration_nodes
exploration_nodes · 관계
이 대상을 사용하는 기능·모듈·계약 · 10개
- 계약 사용 · Agent trigger orchestration · DB.MetGoals: read FROM; DB.NewFindingsSince: read FROM · db-pg-access-exploration-nodes-4cfc48ba13 · db-pg-access-exploration-nodes-b88407dcf9
- 계약 사용 · Reporter, retest, export · DB.DeleteFinding: write DELETE; ExplorationStore.AddFindingFollowUpIntent: read/write INSERT/JOIN · db-pg-access-exploration-nodes-83a9bdd4a8 · db-pg-access-exploration-nodes-cd4bdba419
- 계약 사용 · Finding writeback transaction · RecordFindingTx: read/write FROM/INSERT; DB.setFindingCol: write UPDATE · db-pg-access-exploration-nodes-edfd3215f9 · db-pg-access-exploration-nodes-642d5e2f77
- 계약 사용 · Side Question(/btw) · lockSideParent: read FROM · db-pg-access-exploration-nodes-b6cbb6ada7
- 계약 사용 · 2. admission과 동시성 · ExplorationStore.DiscardOpenIntent: write DELETE · db-pg-access-exploration-nodes-6e9acab90e
- 계약 사용 · 3. 자율 feedback loop · hostsForTaskDeletion: read JOIN; ExplorationStore.ActiveDigests: read FROM; ExplorationStore.AddDigest: write INSERT; ExplorationStore.ApplyStampOps: write UPDATE; ExplorationStore.ColdStamps: read FROM; ExplorationStore.ContentVersions: read FROM; ExplorationStore.CoveredMembers: read JOIN; ExplorationStore.NodeAssets: read JOIN; ExplorationStore.SupersedeDigests: write UPDATE; DB.GoalCountsAll: read FROM; DB.TaskListMetricsAll: read FROM; ExplorationStore.ActivityByIDsForTerminalIntents: read JOIN; ExplorationStore.ActivityListForTerminalIntent: read JOIN; ExplorationStore.ActivityPageForTerminalIntent: read JOIN; ExplorationStore.ActivityTraceForTerminalIntent: read JOIN; ExplorationStore.ActivityTraceSearchForTerminalIntent: read JOIN; ExplorationStore.ActivityTraceSearchTerminalIntents: read JOIN; ExplorationStore.AddNode: write INSERT; ExplorationStore.AssetRefs: read JOIN; ExplorationStore.CancelIntent: read/write DELETE/FROM; ExplorationStore.ClaimIntent: write UPDATE; ExplorationStore.CompareAndSetIntentState: write UPDATE; ExplorationStore.CountFinishedIntents: read FROM; ExplorationStore.CountOpenIntents: read FROM; ExplorationStore.DeleteGoal: write DELETE; ExplorationStore.FactsYielded: read JOIN; ExplorationStore.FindingIntents: read JOIN; ExplorationStore.FindingIntentsTerminal: read JOIN; ExplorationStore.FindingLineage: read FROM; ExplorationStore.Frontier: read FROM; ExplorationStore.GetNode: read FROM; ExplorationStore.HasActiveIntent: read FROM; ExplorationStore.HasOpenGoal: read FROM; ExplorationStore.ListByKind: read FROM; ExplorationStore.ListByKindPage: read FROM; ExplorationStore.Nodes: read FROM; ExplorationStore.NodesByIDs: read FROM; ExplorationStore.NodesPage: read FROM; ExplorationStore.OriginFactID: read FROM; ExplorationStore.ReopenBlockedIntents: write UPDATE; ExplorationStore.ReopenIntent: write UPDATE; ExplorationStore.ResetRunningIntents: write UPDATE; ExplorationStore.SetIntentState: write UPDATE; ExplorationStore.SetNodeState: write UPDATE; ExplorationStore.SoftDeleteIntent: read/write FROM/UPDATE; ExplorationStore.Stats: read FROM; ExplorationStore.TokenStatsBySession: read JOIN; ExplorationStore.UpdateGoalPayload: write UPDATE; ExplorationStore.countByKindFiltered: read FROM; ExplorationStore.listByKindPageFiltered: read FROM; AssetStore.IntentAssets: read JOIN; AssetStore.HostsByTaskWithSources: read JOIN; AssetStore.ListUntestedAssetsWithSources: read JOIN; AssetStore.TaskCoverageWithSources: read JOIN; ExplorationStore.ReopenIntentsByBlockedReason: write UPDATE; ExplorationStore.SetIntentBlockedReason: write UPDATE; AssetStore.BuildCoverageGraph: read JOIN; AssetStore.ListUntestedAssets: read JOIN; AssetStore.TaskCoverage: read JOIN; DB.CreateTaskWithOptions: write INSERT; DB.DeleteTaskCascadePrepared: read JOIN · db-pg-access-exploration-nodes-f98e35c886 · db-pg-access-exploration-nodes-6451d26bf7 · db-pg-access-exploration-nodes-d30caf782b · db-pg-access-exploration-nodes-5e28c79b6c · db-pg-access-exploration-nodes-6f36c45653 · db-pg-access-exploration-nodes-4f0f2e9ad3 · db-pg-access-exploration-nodes-2c30687866 · db-pg-access-exploration-nodes-a66e196ed3 · db-pg-access-exploration-nodes-fa614862de · db-pg-access-exploration-nodes-e128b07ee9 · db-pg-access-exploration-nodes-4e01ec1291 · db-pg-access-exploration-nodes-f5d9cecafa · db-pg-access-exploration-nodes-68eecf0476 · db-pg-access-exploration-nodes-6a188d9e75 · db-pg-access-exploration-nodes-2cd50148b3 · db-pg-access-exploration-nodes-e7118eba8d · db-pg-access-exploration-nodes-ad73ed6b38 · db-pg-access-exploration-nodes-2d8c2df3cf · db-pg-access-exploration-nodes-8ccc10e56b · db-pg-access-exploration-nodes-460d830d77 · db-pg-access-exploration-nodes-f7fa8c573c · db-pg-access-exploration-nodes-e8f89c3ef6 · db-pg-access-exploration-nodes-1d9b978960 · db-pg-access-exploration-nodes-076c07639d · db-pg-access-exploration-nodes-067cf150f2 · db-pg-access-exploration-nodes-3cdf4329cb · db-pg-access-exploration-nodes-fc89be98dd · db-pg-access-exploration-nodes-bcff87f031 · db-pg-access-exploration-nodes-dea2424b70 · db-pg-access-exploration-nodes-c17cfcbbb8 · db-pg-access-exploration-nodes-296f47bb59 · db-pg-access-exploration-nodes-343fca7e02 · db-pg-access-exploration-nodes-da339303ec · db-pg-access-exploration-nodes-2eec126b66 · db-pg-access-exploration-nodes-94d3101018 · db-pg-access-exploration-nodes-2d45067d9e · db-pg-access-exploration-nodes-20fa484c5f · db-pg-access-exploration-nodes-7f95ad8387 · db-pg-access-exploration-nodes-6707a6e6ff · db-pg-access-exploration-nodes-a2896c79b4 · db-pg-access-exploration-nodes-e65799314b · db-pg-access-exploration-nodes-01572f975f · db-pg-access-exploration-nodes-dbfee56565 · db-pg-access-exploration-nodes-8c7782306f · db-pg-access-exploration-nodes-19ae98bf02 · db-pg-access-exploration-nodes-fdb7c0ee53 · db-pg-access-exploration-nodes-13feab6dd0 · db-pg-access-exploration-nodes-36e1c80def · db-pg-access-exploration-nodes-86286e352e · db-pg-access-exploration-nodes-fe309e4470 · db-pg-access-exploration-nodes-2d8095d714 · db-pg-access-exploration-nodes-0c1dd0c452 · db-pg-access-exploration-nodes-6dd02d4e13 · db-pg-access-exploration-nodes-f08f896542 · db-pg-access-exploration-nodes-4dd0047815 · db-pg-access-exploration-nodes-51cd9bfd51 · db-pg-access-exploration-nodes-36117988d4 · db-pg-access-exploration-nodes-2492aca0a0 · db-pg-access-exploration-nodes-0353afaaa2 · db-pg-access-exploration-nodes-3571e6f425 · db-pg-access-exploration-nodes-f22b29e5cd
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM/JOIN; archiveAssetIDsQuery: read JOIN; archiveAssetMetadata: read JOIN; DB.CompleteTaskArchive: read/write DELETE/JOIN; insertArchiveRows: write INSERT · db-pg-access-exploration-nodes-23d5e526fc · db-pg-access-exploration-nodes-73ee4ed5d8 · db-pg-access-exploration-nodes-3d946355b9 · db-pg-access-exploration-nodes-f63769614e · db-pg-access-exploration-nodes-9f2aa43be3
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_expnodes_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-expnodes-upd
- 의존 / 실행 · trg_expnodes_upd · fire table `exploration_nodes` · db-ddl-trigger-trg-expnodes-upd
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `exploration_nodes` · db-table-constraints
goal/intent/fact/finding/hint/digest 노드와 상태·우선순위·payload를 저장한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS exploration_nodes (
id BIGSERIAL PRIMARY KEY,
exploration_id BIGINT NOT NULL REFERENCES explorations(id) ON DELETE CASCADE,
kind TEXT NOT NULL,
payload JSONB NOT NULL DEFAULT '{}',
priority INT NOT NULL DEFAULT 0,
state TEXT NOT NULL DEFAULT 'open',
origin TEXT,
owner TEXT,
blocked_reason TEXT,
delete_reason TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
completed_at TIMESTAMPTZ,
CONSTRAINT ck_node_kind CHECK (kind IN ('begin','goal','intent','fact','finding','hint','digest')),
CONSTRAINT ck_node_state CHECK (
(kind='begin' AND state IN ('open')) OR
(kind='intent' AND state IN ('open','running','paused','done','blocked','exhausted','stopped','deleted')) OR
(kind='goal' AND state IN ('open','met','abandoned')) OR
(kind='fact' AND state IN ('confirmed','dismissed','origin')) OR
(kind='finding' AND state IN ('confirmed','dismissed')) OR
(kind='hint' AND state IN ('active','consumed')) OR
(kind='digest' AND state IN ('active','superseded'))
)
);
후속 변경·제약
ALTER TABLE exploration_nodes ADD COLUMN IF NOT EXISTS blocked_reason TEXT;ALTER TABLE exploration_nodes ADD COLUMN IF NOT EXISTS delete_reason TEXT;ALTER TABLE exploration_nodes ADD COLUMN IF NOT EXISTS content_version INT NOT NULL DEFAULT 0;ALTER TABLE exploration_nodes ADD COLUMN IF NOT EXISTS cold_since_round BIGINT;
인덱스
CREATE INDEX IF NOT EXISTS idx_expnodes_part ON exploration_nodes(exploration_id, kind);CREATE INDEX IF NOT EXISTS idx_expnodes_frontier ON exploration_nodes(exploration_id, priority DESC) WHERE kind='intent' AND state='open';
의미·소비·운영 경계
exploration_nodes 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
exploration_edges
exploration_edges · 관계
이 대상을 사용하는 기능·모듈·계약 · 5개
- 계약 사용 · Reporter, retest, export · ExplorationStore.AddFindingFollowUpIntent: write INSERT · db-pg-access-exploration-edges-a5f6b5b826
- 계약 사용 · Finding writeback transaction · RecordFindingTx: write INSERT · db-pg-access-exploration-edges-d307a68e3d
- 계약 사용 · 3. 자율 feedback loop · ExplorationStore.AddDigest: write INSERT; ExplorationStore.CoveredMembers: read FROM; ExplorationStore.DigestMembers: read FROM; ExplorationStore.SupersedeDigests: write DELETE; ExplorationStore.CancelIntent: read FROM; ExplorationStore.Edges: read FROM; ExplorationStore.EdgesTouching: read FROM; ExplorationStore.FactsYielded: read FROM; ExplorationStore.FindingIntents: read FROM; ExplorationStore.FindingIntentsTerminal: read FROM; ExplorationStore.FindingLineage: read FROM; ExplorationStore.Link: write INSERT · db-pg-access-exploration-edges-81bd2096a6 · db-pg-access-exploration-edges-015f60f999 · db-pg-access-exploration-edges-9223b53392 · db-pg-access-exploration-edges-8224e1bd48 · db-pg-access-exploration-edges-76b94df119 · db-pg-access-exploration-edges-9ebe84819c · db-pg-access-exploration-edges-c4d236d501 · db-pg-access-exploration-edges-8d33d00bf4 · db-pg-access-exploration-edges-917a32807b · db-pg-access-exploration-edges-447406e91e · db-pg-access-exploration-edges-9c53251fb5 · db-pg-access-exploration-edges-4a837468d6
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; insertArchiveRows: write INSERT · db-pg-access-exploration-edges-7848b19d51 · db-pg-access-exploration-edges-3370ec36d7
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `exploration_edges` · db-table-constraints
노드 사이 rel을 저장한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS exploration_edges (
exploration_id BIGINT NOT NULL REFERENCES explorations(id) ON DELETE CASCADE,
src_id BIGINT NOT NULL REFERENCES exploration_nodes(id) ON DELETE CASCADE,
dst_id BIGINT NOT NULL REFERENCES exploration_nodes(id) ON DELETE CASCADE,
rel TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (exploration_id, src_id, rel, dst_id),
CONSTRAINT ck_edge_noself CHECK (src_id <> dst_id),
CONSTRAINT ck_edge_rel CHECK (rel IN ('spawns','derived_from','yields','proves','covers'))
);
인덱스
CREATE INDEX IF NOT EXISTS idx_expedges_src ON exploration_edges(src_id, rel);CREATE INDEX IF NOT EXISTS idx_expedges_dst ON exploration_edges(dst_id, rel);
의미·소비·운영 경계
exploration_edges 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
exploration_anchors
exploration_anchors · 관계
이 대상을 사용하는 기능·모듈·계약 · 5개
- 계약 사용 · Coverage 분모와 tested 신호 · hostsForTaskDeletion: read FROM; ExplorationStore.NodeAssets: read FROM; ExplorationStore.AddNode: write INSERT; ExplorationStore.Anchor: write INSERT; ExplorationStore.AssetRefs: read FROM; AssetStore.IntentAssets: read JOIN; AssetStore.HostsByTaskWithSources: read FROM; AssetStore.ListUntestedAssetsWithSources: read FROM/JOIN; AssetStore.TaskCoverageWithSources: read FROM/JOIN; AssetStore.BuildCoverageGraph: read FROM/JOIN; AssetStore.ListUntestedAssets: read FROM; AssetStore.TaskCoverage: read FROM; DB.DeleteTaskCascadePrepared: lock/read FROM/LOCK · db-pg-access-exploration-anchors-5a27ac6eca · db-pg-access-exploration-anchors-cddd26dae2 · db-pg-access-exploration-anchors-834586a2d0 · db-pg-access-exploration-anchors-f5ce264565 · db-pg-access-exploration-anchors-a45cbd8b32 · db-pg-access-exploration-anchors-8a1db68a70 · db-pg-access-exploration-anchors-6bdbe05e5c · db-pg-access-exploration-anchors-94dc4ab10f · db-pg-access-exploration-anchors-ef2bc724eb · db-pg-access-exploration-anchors-a6e404bec9 · db-pg-access-exploration-anchors-386313636a · db-pg-access-exploration-anchors-8e3b76a0f7 · db-pg-access-exploration-anchors-fc3554358c
- 계약 사용 · Reporter, retest, export · ExplorationStore.AddFindingFollowUpIntent: read/write FROM/INSERT · db-pg-access-exploration-anchors-1f6ef5ecee
- 계약 사용 · Finding writeback transaction · RecordFindingTx: write INSERT · db-pg-access-exploration-anchors-0bdf8724cf
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; archiveAssetIDsQuery: read FROM; archiveAssetMetadata: read FROM; DB.CompleteTaskArchive: lock/read FROM/LOCK; insertArchiveRows: write INSERT · db-pg-access-exploration-anchors-be474215d0 · db-pg-access-exploration-anchors-05cdec3c1d · db-pg-access-exploration-anchors-fa433a48a2 · db-pg-access-exploration-anchors-a71aa2d014 · db-pg-access-exploration-anchors-fe5a2c95b9
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `exploration_anchors` · db-table-constraints
탐색 노드와 asset의 anchor를 저장한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS exploration_anchors (
node_id BIGINT NOT NULL REFERENCES exploration_nodes(id) ON DELETE CASCADE,
asset_id BIGINT NOT NULL REFERENCES assets(id) ON DELETE CASCADE,
PRIMARY KEY (node_id, asset_id)
);
인덱스
CREATE INDEX IF NOT EXISTS idx_anchor_asset ON exploration_anchors(asset_id);
의미·소비·운영 경계
exploration_anchors 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_constraints
task_constraints · 관계
이 대상을 사용하는 기능·모듈·계약 · 3개
- 계약 사용 · Reporter, retest, export · DB.CreateFindingRetest: read FROM · db-pg-access-task-constraints-7ade884b9f
- 계약 사용 · 1. 접수와 부트스트랩 · ExplorationStore.AddConstraint: write INSERT; ExplorationStore.DeleteConstraint: write DELETE; ExplorationStore.ListConstraints: read FROM; ExplorationStore.UpdateConstraint: write UPDATE · db-pg-access-task-constraints-d43b115d37 · db-pg-access-task-constraints-e7c316fe99 · db-pg-access-task-constraints-1966fa44c7 · db-pg-access-task-constraints-9d935e4a11
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; DB.CompleteTaskArchive: write DELETE; insertArchiveRows: write INSERT · db-pg-access-task-constraints-91f41f4c8e · db-pg-access-task-constraints-ac6211dfde · db-pg-access-task-constraints-b779165144
task_constraints 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_constraints (
id BIGSERIAL PRIMARY KEY,
exploration_id BIGINT NOT NULL REFERENCES explorations(id) ON DELETE CASCADE,
kind TEXT NOT NULL CHECK (kind IN ('allow','deny')),
text TEXT NOT NULL,
origin TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
인덱스
CREATE INDEX IF NOT EXISTS idx_task_constraints_exp ON task_constraints(exploration_id);
의미·소비·운영 경계
task_constraints 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
activity
activity · 관계
이 대상을 사용하는 기능·모듈·계약 · 6개
- 계약 사용 · Agent trigger orchestration · DB.NewToolCallsSince: read FROM/JOIN · db-pg-access-activity-44974d0f5e
- 계약 사용 · Reporter, retest, export · ExplorationStore.AddFindingFollowUpIntent: write INSERT · db-pg-access-activity-e9d0dcc600
- 계약 사용 · Context와 장기 상태 · DB.ListCommands: read FROM/JOIN; DB.LastActivityAll: read FROM; DB.TaskListMetricsAll: read FROM; DB.TokenDailyAll: read FROM; DB.TokenTotalsAll: read FROM; ExplorationStore.ActivityByIDs: read FROM; ExplorationStore.ActivityByIDsForTerminalIntents: read FROM; ExplorationStore.ActivityDetail: read FROM; ExplorationStore.ActivityList: read FROM; ExplorationStore.ActivityListForTerminalIntent: read FROM; ExplorationStore.ActivityMaxID: read FROM; ExplorationStore.ActivityPage: read FROM; ExplorationStore.ActivityPageForTerminalIntent: read FROM; ExplorationStore.ActivityTrace: read FROM; ExplorationStore.ActivityTraceForTerminalIntent: read FROM; ExplorationStore.ActivityTraceSearch: read FROM; ExplorationStore.ActivityTraceSearchExcluding: read FROM; ExplorationStore.ActivityTraceSearchForTerminalIntent: read FROM; ExplorationStore.ActivityTraceSearchTerminalIntents: read FROM; ExplorationStore.AppendActivity: write INSERT; ExplorationStore.CancelIntent: write DELETE/INSERT; ExplorationStore.TokenStatsBySession: read FROM; ExplorationStore.TokenStatsByWorker: read FROM; ExplorationStore.TokenTotal: read FROM; intentTokenRollup: read FROM; ExplorationStore.DiscardOpenIntent: write DELETE · db-pg-access-activity-e60a1bb046 · db-pg-access-activity-06873ea5ba · db-pg-access-activity-5bad9011aa · db-pg-access-activity-3a8fbeae9a · db-pg-access-activity-5667024f17 · db-pg-access-activity-b8a7471493 · db-pg-access-activity-c6ab40468d · db-pg-access-activity-8dee84ba63 · db-pg-access-activity-cdc07f17b4 · db-pg-access-activity-ee8260e4b6 · db-pg-access-activity-16be78d8ef · db-pg-access-activity-0d669b74a9 · db-pg-access-activity-614aa5e140 · db-pg-access-activity-01e7477130 · db-pg-access-activity-04de768c7d · db-pg-access-activity-6906efe726 · db-pg-access-activity-a7b6b38455 · db-pg-access-activity-3cba83cb26 · db-pg-access-activity-463f0ca1de · db-pg-access-activity-fcba803edd · db-pg-access-activity-b51fa97fd0 · db-pg-access-activity-3c8b33d651 · db-pg-access-activity-4798d96f03 · db-pg-access-activity-511cbb267f · db-pg-access-activity-db5d149f27 · db-pg-access-activity-2799bfe0df
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; DB.CompleteTaskArchive: write DELETE; insertArchiveRows: write INSERT · db-pg-access-activity-36e48e8d45 · db-pg-access-activity-66abc87251 · db-pg-access-activity-90da0128e3
- 계약 사용 · Tool intercept·승인·실행 trace · DB.GetInterceptExecution: read FROM · db-pg-access-activity-d1733afaac
- 계약 사용 · 도구 catalog·조립·승인 모듈 · DB.ToolStats: read FROM/JOIN · db-pg-access-activity-72ffb7dbac
activity 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS activity (
id BIGSERIAL PRIMARY KEY,
exploration_id BIGINT NOT NULL REFERENCES explorations(id) ON DELETE CASCADE,
node_id BIGINT REFERENCES exploration_nodes(id) ON DELETE SET NULL,
worker TEXT,
kind TEXT,
tool TEXT,
tool_use_id TEXT,
is_error BOOLEAN NOT NULL DEFAULT false,
summary TEXT,
detail TEXT,
metadata JSONB NOT NULL DEFAULT '{}',
input_tokens INTEGER,
output_tokens INTEGER,
cache_read_tokens INTEGER,
cache_write_tokens INTEGER,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
후속 변경·제약
ALTER TABLE activity ADD COLUMN IF NOT EXISTS metadata JSONB NOT NULL DEFAULT '{}';ALTER TABLE activity ADD COLUMN IF NOT EXISTS main_seg INTEGER;
인덱스
CREATE INDEX IF NOT EXISTS idx_act_node ON activity(exploration_id, node_id, id);CREATE INDEX IF NOT EXISTS idx_act_since ON activity(exploration_id, id);CREATE INDEX IF NOT EXISTS idx_act_tool_call ON activity(exploration_id, tool_use_id, id) WHERE kind IN ('tool_use', 'tool_result');CREATE INDEX IF NOT EXISTS idx_act_worker ON activity(exploration_id, worker, id);CREATE INDEX IF NOT EXISTS idx_act_main_seg ON activity(exploration_id, main_seg, id) WHERE worker='mainagent';CREATE INDEX IF NOT EXISTS idx_act_result_usage ON activity(exploration_id) INCLUDE (input_tokens, output_tokens, cache_read_tokens, cache_write_tokens) WHERE kind='result';CREATE INDEX IF NOT EXISTS idx_act_latest ON activity(exploration_id, created_at DESC);
의미·소비·운영 경계
activity 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
main_sessions
main_sessions · 관계
이 대상을 사용하는 기능·모듈·계약 · 2개
- 계약 사용 · Task Main Agent · ExplorationStore.CurrentMainSeg: read FROM; ExplorationStore.ListMainSessions: read FROM; ExplorationStore.NewMainSession: read/write FROM/INSERT · db-pg-access-main-sessions-2d68551366 · db-pg-access-main-sessions-c3b14e96fc · db-pg-access-main-sessions-a1f2093b65
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `main_sessions` · db-table-constraints
main_sessions 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS main_sessions (
exploration_id BIGINT NOT NULL REFERENCES explorations(id) ON DELETE CASCADE,
seq INTEGER NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (exploration_id, seq)
);
의미·소비·운영 경계
main_sessions 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_categories
task_categories · 관계
이 대상을 사용하는 기능·모듈·계약 · 4개
- 계약 사용 · 1. 접수와 부트스트랩 · DB.CreateTaskCategory: write INSERT; DB.DeleteTaskCategory: write DELETE; DB.GetTaskCategory: read FROM; DB.ListTaskCategories: read FROM; DB.RenameTaskCategory: write UPDATE; DB.SetTaskCategory: read FROM; DB.SetTasksCategory: read FROM; DB.CreateTaskWithOptions: read FROM; DB.GetTask: read FROM; DB.ListTasks: read FROM; DB.UpdateTask: read FROM · db-pg-access-task-categories-5f5c62108f · db-pg-access-task-categories-5039981c71 · db-pg-access-task-categories-e4397f0b2b · db-pg-access-task-categories-13b86938bc · db-pg-access-task-categories-9b40170af7 · db-pg-access-task-categories-2b61f93d04 · db-pg-access-task-categories-20d6932241 · db-pg-access-task-categories-efec7c8eca · db-pg-access-task-categories-a8eac8736c · db-pg-access-task-categories-861bb451e0 · db-pg-access-task-categories-863a216fc0
- 계약 사용 · 삭제·archive·보존 경계 · DB.QueueTaskArchive: read JOIN; rowExists: read FROM · db-pg-access-task-categories-1268f5e175 · db-pg-access-task-categories-7a889cb87a
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_categories_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-categories-upd
- 의존 / 실행 · trg_task_categories_upd · fire table `task_categories` · db-ddl-trigger-trg-task-categories-upd
task_categories 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_categories (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
nkey TEXT NOT NULL UNIQUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
인덱스
CREATE INDEX IF NOT EXISTS idx_task_categories_name ON task_categories(name, id);
의미·소비·운영 경계
task_categories 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
tasks
tasks · 관계
이 대상을 사용하는 기능·모듈·계약 · 12개
- 계약 사용 · Agent trigger orchestration · DB.MetGoals: read JOIN; DB.NewFindingsSince: read JOIN; DB.NewTasksSince: read FROM; DB.NewToolCallsSince: read JOIN; DB.TimedOutTasksSince: read FROM · db-pg-access-tasks-fcd04a1917 · db-pg-access-tasks-b62fdd7c0a · db-pg-access-tasks-c789c9fa36 · db-pg-access-tasks-617cfacb9c · db-pg-access-tasks-9f83ca08f3
- 계약 사용 · Reporter, retest, export · DB.buildFindingAssetTree: read JOIN; DB.CreateFindingRetest: read JOIN; DB.FindingStats: read JOIN; DB.GetFinding: read JOIN; DB.ListFindingGroups: read JOIN; DB.ListFindings: read JOIN; DB.ListFindingsForExport: read JOIN; DB.ListFindingsPage: read JOIN; ExplorationStore.AddFindingFollowUpIntent: read JOIN · db-pg-access-tasks-51d90c8c39 · db-pg-access-tasks-285686da7d · db-pg-access-tasks-c4bd1d9850 · db-pg-access-tasks-a87ac240c2 · db-pg-access-tasks-8caabeef48 · db-pg-access-tasks-acb75322e7 · db-pg-access-tasks-cb09df0b12 · db-pg-access-tasks-2e37a25486 · db-pg-access-tasks-94e899c2d9
- 계약 사용 · Finding writeback transaction · RecordFindingTx: read FROM · db-pg-access-tasks-238786c0cf
- 계약 사용 · Side Question(/btw) · lockSideParent: read FROM · db-pg-access-tasks-d1c6ac536d
- 계약 사용 · 1. 접수와 부트스트랩 · AssetStore.GetByIDsInScope: read FROM; AssetStore.QueryDSLInScope: read FROM; hostsForTaskDeletion: read FROM/JOIN; DB.ExplorationDiag: read FROM; DB.TaskListMetricsAll: read FROM; ExplorationStore.DirectSourceStores: read FROM/JOIN; ExplorationStore.TaskID: read FROM; AssetStore.AttachAssetsToTask: read FROM; AssetStore.IntentAssets: read FROM/JOIN; AssetStore.RegisterTaskAssetScopes: read FROM; AssetStore.SetTaskAssetSource: read FROM; AssetStore.HostsByTaskWithSources: read FROM/JOIN; AssetStore.ListTaskScopeWithSources: read FROM/JOIN; AssetStore.ListUntestedAssetsWithSources: read FROM/JOIN; AssetStore.TaskCoverageWithSources: read FROM/JOIN; DB.GetTaskCategory: read JOIN; DB.ListTaskCategories: read JOIN; DB.RenameTaskCategory: read FROM; DB.SetTaskCategory: read/write FROM/UPDATE; DB.SetTasksCategory: read/write JOIN/UPDATE; DB.TaskSources: read JOIN; DB.hydrateTasksContext: read FROM; AssetStore.BuildCoverageGraph: read FROM/JOIN; AssetStore.CoverageEnabled: read FROM; DB.CreateTaskWithOptions: write INSERT; DB.DeleteTaskCascadePrepared: read/write DELETE/FROM/JOIN; DB.Dequeue: write UPDATE; DB.Enqueue: write UPDATE; DB.GetTask: read FROM; DB.ListTasks: read FROM; DB.SetParentRef: write UPDATE; DB.SetPaused: write UPDATE; DB.SetStatus: write UPDATE; DB.SetTerminalStatusGuarded: write UPDATE; DB.StampFirstRun: write UPDATE; DB.UpdateTask: write UPDATE; insertTaskRelations: read FROM; Manager.ApplyTaskAdmission: write UPDATE; Manager.ApplyTaskPause: write UPDATE; Manager.EnqueueTask: write UPDATE · db-pg-access-tasks-082ddb7a18 · db-pg-access-tasks-ad016247fc · db-pg-access-tasks-d66aa3ecdf · db-pg-access-tasks-b78a0ff81d · db-pg-access-tasks-1ebf46408f · db-pg-access-tasks-a783b00be6 · db-pg-access-tasks-8ffa4ed35f · db-pg-access-tasks-16de64d10e · db-pg-access-tasks-be683256d2 · db-pg-access-tasks-2ca07e02ce · db-pg-access-tasks-6e199db471 · db-pg-access-tasks-ee3e318216 · db-pg-access-tasks-fd61c8099e · db-pg-access-tasks-389b085ad4 · db-pg-access-tasks-d5cc808761 · db-pg-access-tasks-8c021898d6 · db-pg-access-tasks-67c49edeec · db-pg-access-tasks-3adf94a2ce · db-pg-access-tasks-fb40a4c990 · db-pg-access-tasks-239b123626 · db-pg-access-tasks-4520f8c9cf · db-pg-access-tasks-169672238e · db-pg-access-tasks-8da3043006 · db-pg-access-tasks-43ca5ea2c9 · db-pg-access-tasks-9857397f13 · db-pg-access-tasks-57cae4cf7e · db-pg-access-tasks-63ac846350 · db-pg-access-tasks-644bdbe575 · db-pg-access-tasks-4a928fa293 · db-pg-access-tasks-65d521c111 · db-pg-access-tasks-9432c2263f · db-pg-access-tasks-f4077b39a2 · db-pg-access-tasks-49a557bbce · db-pg-access-tasks-7c3c56d040 · db-pg-access-tasks-e121890883 · db-pg-access-tasks-15a2889c12 · db-pg-access-tasks-a1dc99d2be · db-pg-access-tasks-102eda9f17 · db-pg-access-tasks-53c393734c · db-pg-access-tasks-aa5f830b72
- 계약 사용 · 트래픽에서 증거 snapshot까지 · LockTaskEvidenceTx: read FROM · db-pg-access-tasks-66fca018a0
- 계약 사용 · Provider routing과 failover · DB.deleteProfile: read/write FROM/JOIN/UPDATE; DB.ReplaceTaskLLMProfiles: read/write FROM/UPDATE; DB.markTaskLLMProfileQuotaExhausted: read/write FROM/UPDATE; DB.taskLLMContext: read FROM · db-pg-access-tasks-f552395a40 · db-pg-access-tasks-530db8c688 · db-pg-access-tasks-6fd7255485 · db-pg-access-tasks-62adc688f8
- 계약 사용 · 삭제·archive·보존 경계 · DB.IsTaskArchiveRestored: read JOIN; DB.QueueTaskArchive: read FROM/JOIN; DB.TaskArchiveBlockers: read JOIN; DB.snapshotTaskArchive: read FROM; archiveAssetMetadata: read FROM/JOIN; DB.ArchivedAggregateStats: read JOIN; DB.CompleteTaskArchive: read/write FROM/JOIN/UPDATE; DB.DeleteTaskArchiveStub: read/write DELETE/JOIN; DB.restoreTaskArchive: read JOIN; liveTaskExists: read FROM; restoreTaskStub: write UPDATE; rowExists: read FROM · db-pg-access-tasks-a258fa1c09 · db-pg-access-tasks-86e858b2d2 · db-pg-access-tasks-bce6f349e4 · db-pg-access-tasks-bf13420619 · db-pg-access-tasks-8780d3ae20 · db-pg-access-tasks-a24f5ae001 · db-pg-access-tasks-a535f79192 · db-pg-access-tasks-daf6800154 · db-pg-access-tasks-27c6ab021c · db-pg-access-tasks-7548bd98bc · db-pg-access-tasks-9968d6ad75 · db-pg-access-tasks-25085d9fcb
- 계약 사용 · Tool intercept·승인·실행 trace · DB.GetInterceptExecution: read FROM · db-pg-access-tasks-823cf1ab14
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_tasks_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-tasks-upd
- 계약 사용 · sync_task_asset_links() · read; columns id, deleted_at; 요청 task id 중 live task만 선택; provenance: function body DDL · db-ddl-function-sync-task-asset-links
- 의존 / 실행 · trg_tasks_upd · fire table `tasks` · db-ddl-trigger-trg-tasks-upd
태스크의 사용자 입력, 실행 상태, timeout, queue, LLM chain, 분류와 archive 표지를 소유한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS tasks (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL DEFAULT '',
category_id BIGINT REFERENCES task_categories(id) ON DELETE SET NULL,
description TEXT NOT NULL,
goal TEXT NOT NULL,
exploration_id BIGINT NOT NULL UNIQUE
REFERENCES explorations(id) ON DELETE RESTRICT,
status TEXT NOT NULL DEFAULT 'created'
CHECK (status IN ('created','running','paused','done','failed','timeout')),
paused BOOLEAN NOT NULL DEFAULT false,
queued BOOLEAN NOT NULL DEFAULT false,
queued_at TIMESTAMPTZ,
queue_mode TEXT NOT NULL DEFAULT '',
llm_profile_id BIGINT REFERENCES llm_profiles(id) ON DELETE SET NULL,
active_llm_profile_id BIGINT REFERENCES llm_profiles(id) ON DELETE SET NULL,
llm_chain_revision BIGINT NOT NULL DEFAULT 0,
company_id BIGINT REFERENCES companies(id) ON DELETE SET NULL,
parent_ref TEXT,
timeout_seconds INTEGER NOT NULL DEFAULT 0,
plan_heartbeat_seconds INTEGER NOT NULL DEFAULT 300,
coverage_enabled BOOLEAN NOT NULL DEFAULT true,
pinned_at TIMESTAMPTZ,
first_run_at TIMESTAMPTZ,
deadline_at TIMESTAMPTZ,
archived_at TIMESTAMPTZ,
deleted_at TIMESTAMPTZ,
completed_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
후속 변경·제약
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS plan_heartbeat_seconds INTEGER NOT NULL DEFAULT 300;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS queued BOOLEAN NOT NULL DEFAULT false;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS coverage_enabled BOOLEAN NOT NULL DEFAULT true;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS queued_at TIMESTAMPTZ;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS queue_mode TEXT NOT NULL DEFAULT '';ALTER TABLE tasks ADD COLUMN IF NOT EXISTS name TEXT NOT NULL DEFAULT '';ALTER TABLE tasks ADD COLUMN IF NOT EXISTS category_id BIGINT REFERENCES task_categories(id) ON DELETE SET NULL;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS pinned_at TIMESTAMPTZ;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS active_llm_profile_id BIGINT REFERENCES llm_profiles(id) ON DELETE SET NULL;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS llm_chain_revision BIGINT NOT NULL DEFAULT 0;ALTER TABLE tasks ADD COLUMN IF NOT EXISTS archived_at TIMESTAMPTZ;
인덱스
CREATE INDEX IF NOT EXISTS idx_tasks_alive ON tasks(created_at DESC) WHERE deleted_at IS NULL;CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status) WHERE deleted_at IS NULL;CREATE INDEX IF NOT EXISTS idx_tasks_category ON tasks(category_id, created_at DESC) WHERE deleted_at IS NULL AND category_id IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_tasks_pinned ON tasks(pinned_at DESC) WHERE deleted_at IS NULL AND pinned_at IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_tasks_archived ON tasks(archived_at DESC) WHERE archived_at IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_tasks_llm_profile ON tasks(llm_profile_id) WHERE llm_profile_id IS NOT NULL;CREATE INDEX IF NOT EXISTS idx_tasks_active_llm_profile ON tasks(active_llm_profile_id) WHERE active_llm_profile_id IS NOT NULL;
의미·소비·운영 경계
tasks 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_templates
task_templates · 관계
이 대상을 사용하는 기능·모듈·계약 · 3개
- 계약 사용 · 1. 접수와 부트스트랩 · DB.CreateTaskTemplate: write INSERT; DB.DeleteTaskTemplate: write DELETE; DB.GetTaskTemplate: read FROM; DB.ListTaskTemplates: read FROM; DB.PatchTaskTemplate: write UPDATE · db-pg-access-task-templates-06536e50c1 · db-pg-access-task-templates-7c04ed6ce4 · db-pg-access-task-templates-4d3f9d6b53 · db-pg-access-task-templates-544047bc2c · db-pg-access-task-templates-63621524a5
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_templates_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-templates-upd
- 의존 / 실행 · trg_task_templates_upd · fire table `task_templates` · db-ddl-trigger-trg-task-templates-upd
task_templates 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_templates (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
nkey TEXT NOT NULL UNIQUE,
description TEXT NOT NULL,
goal TEXT NOT NULL,
-- 预设的任务分类;分类删除时置空(与 tasks.category_id 一致,不阻断)。
category_id BIGINT REFERENCES task_categories(id) ON DELETE SET NULL,
-- 预设的任务级拦截/允许规则快照(AssetInterceptRuleInput 数组);应用模板时灌进新任务。
intercept_rules JSONB NOT NULL DEFAULT '[]',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
후속 변경·제약
ALTER TABLE task_templates ADD COLUMN IF NOT EXISTS category_id BIGINT REFERENCES task_categories(id) ON DELETE SET NULL;ALTER TABLE task_templates ADD COLUMN IF NOT EXISTS intercept_rules JSONB NOT NULL DEFAULT '[]';
인덱스
CREATE INDEX IF NOT EXISTS idx_task_templates_updated ON task_templates(updated_at DESC, id DESC);
의미·소비·운영 경계
task_templates 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_relations
task_relations · 관계
이 대상을 사용하는 기능·모듈·계약 · 3개
- 계약 사용 · 1. 접수와 부트스트랩 · AssetStore.GetByIDsInScope: read FROM; AssetStore.QueryDSLInScope: read FROM; ExplorationStore.DirectSourceStores: read JOIN; AssetStore.IntentAssets: read FROM; AssetStore.HostsByTaskWithSources: read FROM; AssetStore.ListTaskScopeWithSources: read FROM; AssetStore.ListUntestedAssetsWithSources: read FROM; AssetStore.TaskCoverageWithSources: read FROM; DB.TaskSourceIDs: read FROM; DB.TaskSources: read FROM; DB.hydrateTasksContext: read FROM; AssetStore.BuildCoverageGraph: read FROM; insertTaskRelations: write INSERT · db-pg-access-task-relations-fc0739399a · db-pg-access-task-relations-d6b7cacb96 · db-pg-access-task-relations-c78896528c · db-pg-access-task-relations-e4cba26040 · db-pg-access-task-relations-2253a6eef8 · db-pg-access-task-relations-f795b2d481 · db-pg-access-task-relations-1e4cb6ca17 · db-pg-access-task-relations-53f3016317 · db-pg-access-task-relations-e914b0805b · db-pg-access-task-relations-b90594ba7d · db-pg-access-task-relations-94aa196e22 · db-pg-access-task-relations-e0f81ca749 · db-pg-access-task-relations-8545d44a48
- 계약 사용 · 삭제·archive·보존 경계 · DB.QueueTaskArchive: read FROM; DB.TaskArchiveBlockers: read FROM; DB.snapshotTaskArchive: read FROM; DB.CompleteTaskArchive: read/write DELETE/FROM; restoreTaskRelations: write INSERT · db-pg-access-task-relations-4204004634 · db-pg-access-task-relations-bcd7bf888b · db-pg-access-task-relations-d4dd843674 · db-pg-access-task-relations-17a9fa6cfc · db-pg-access-task-relations-9ed25a7ca3
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `task_relations` · db-table-constraints
task_relations 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_relations (
task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
source_task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (task_id, source_task_id),
CONSTRAINT ck_task_relation_not_self CHECK (task_id <> source_task_id)
);
인덱스
CREATE INDEX IF NOT EXISTS idx_task_relations_source ON task_relations(source_task_id);
의미·소비·운영 경계
task_relations 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_asset_links
task_asset_links · 관계
이 대상을 사용하는 기능·모듈·계약 · 6개
- 계약 사용 · Agent write와 provenance · AssetStore.AttachAssetsToTask: write INSERT; AssetStore.IntentAssets: read JOIN; AssetStore.SetTaskAssetSource: write INSERT; AssetStore.hydrateTaskAssetSources: read FROM; insertTaskCompanies: write INSERT · db-pg-access-task-asset-links-0ea29c2581 · db-pg-access-task-asset-links-13253489dd · db-pg-access-task-asset-links-49ecbd9233 · db-pg-access-task-asset-links-ce059baee2 · db-pg-access-task-asset-links-5a2f3376f0
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; archiveAssetIDsQuery: read FROM; DB.CompleteTaskArchive: write DELETE; insertArchiveRows: write INSERT · db-pg-access-task-asset-links-8fdbe1bf14 · db-pg-access-task-asset-links-845cf63947 · db-pg-access-task-asset-links-1da1eb7080 · db-pg-access-task-asset-links-b7665de9b5
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_asset_links_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-asset-links-upd
- 계약 사용 · sync_task_asset_links() · write; columns task_id, asset_id, source, source_summary; link insert/do-nothing + NEW.task_ids 밖 link delete; provenance: function body DDL · db-ddl-function-sync-task-asset-links
- 의존 / 실행 · trg_task_asset_links_upd · fire table `task_asset_links` · db-ddl-trigger-trg-task-asset-links-upd
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `task_asset_links` · db-table-constraints
task_asset_links 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_asset_links (
task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
asset_id BIGINT NOT NULL REFERENCES assets(id) ON DELETE CASCADE,
source TEXT NOT NULL DEFAULT 'system',
source_summary TEXT NOT NULL DEFAULT '',
source_node_id BIGINT REFERENCES exploration_nodes(id) ON DELETE SET NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (task_id, asset_id)
);
인덱스
CREATE INDEX IF NOT EXISTS idx_task_asset_links_asset ON task_asset_links(asset_id, task_id);CREATE INDEX IF NOT EXISTS idx_task_asset_links_node ON task_asset_links(source_node_id) WHERE source_node_id IS NOT NULL;
의미·소비·운영 경계
task_asset_links 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_llm_profiles
task_llm_profiles · 관계
이 대상을 사용하는 기능·모듈·계약 · 5개
- 계약 사용 · Provider routing과 failover · DB.deleteProfile: read/write DELETE/FROM; DB.ReplaceTaskLLMProfiles: write DELETE; DB.TaskLLMProfiles: read FROM; DB.hydrateTasksContext: read JOIN; DB.markTaskLLMProfileQuotaExhausted: read/write FROM/UPDATE; DB.taskLLMContext: read JOIN; insertTaskLLMProfiles: write INSERT · db-pg-access-task-llm-profiles-0d9ee1601d · db-pg-access-task-llm-profiles-511b963d68 · db-pg-access-task-llm-profiles-9891428a2e · db-pg-access-task-llm-profiles-3454e63b94 · db-pg-access-task-llm-profiles-89576d006e · db-pg-access-task-llm-profiles-6ec5c4a784 · db-pg-access-task-llm-profiles-d62d6248f4
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; DB.CompleteTaskArchive: write DELETE; restoreTaskLLMProfiles: write INSERT · db-pg-access-task-llm-profiles-31a774dab0 · db-pg-access-task-llm-profiles-39289b56b8 · db-pg-access-task-llm-profiles-125e1281e9
- 계약 사용 · set_updated_at() · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_llm_profiles_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-llm-profiles-upd
- 의존 / 실행 · trg_task_llm_profiles_upd · fire table `task_llm_profiles` · db-ddl-trigger-trg-task-llm-profiles-upd
- 계약 사용 · PostgreSQL table-level constraint matrix · fresh table-level constraint contract for `task_llm_profiles` · db-table-constraints
task_llm_profiles 도메인의 영속 상태를 저장한다. 정확한 의미는 필드 정의와 사용 모듈을 함께 본다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_llm_profiles (
task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
profile_id BIGINT NOT NULL REFERENCES llm_profiles(id) ON DELETE CASCADE,
position INTEGER NOT NULL CHECK (position >= 0),
status TEXT NOT NULL DEFAULT 'ready'
CHECK (status IN ('ready','quota_exhausted')),
last_error TEXT,
exhausted_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (task_id, profile_id),
UNIQUE (task_id, position)
);
인덱스
CREATE INDEX IF NOT EXISTS idx_task_llm_profiles_order ON task_llm_profiles(task_id, position);CREATE INDEX IF NOT EXISTS idx_task_llm_profiles_profile ON task_llm_profiles(profile_id, task_id);
의미·소비·운영 경계
task_llm_profiles 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.
task_scope
task_scope · 관계
이 대상을 사용하는 기능·모듈·계약 · 3개
- 계약 사용 · Company scope와 task scope · AssetStore.GetByIDsInScope: read JOIN; AssetStore.QueryDSLInScope: read JOIN; AssetStore.HostsByTaskWithSources: read JOIN; AssetStore.ListTaskScopeWithSources: read FROM; AssetStore.ListUntestedAssetsWithSources: read JOIN; AssetStore.TaskCoverageWithSources: read FROM/JOIN; DB.TaskCompanyIDs: read FROM; DB.hydrateTasksContext: read FROM; AssetStore.BuildCoverageGraph: read JOIN; AssetStore.DeleteTaskScope: write DELETE; AssetStore.ListTaskScope: read FROM; AssetStore.ListUntestedAssets: read JOIN; AssetStore.TaskCoverage: read FROM/JOIN; AssetStore.upsertTaskScopeResult: write INSERT; insertTaskCompanies: write INSERT · db-pg-access-task-scope-d270c90e96 · db-pg-access-task-scope-2050f94c23 · db-pg-access-task-scope-e03dcb28ba · db-pg-access-task-scope-205ddab78f · db-pg-access-task-scope-00288db9f0 · db-pg-access-task-scope-bb64288ddc · db-pg-access-task-scope-f3d7ab74f1 · db-pg-access-task-scope-4663d5f3d5 · db-pg-access-task-scope-3038821322 · db-pg-access-task-scope-d4523a62f2 · db-pg-access-task-scope-a749a30b74 · db-pg-access-task-scope-d824d02d68 · db-pg-access-task-scope-c99ebf71ad · db-pg-access-task-scope-6fe50806ec · db-pg-access-task-scope-8ffdf9a4ad
- 계약 사용 · 삭제·archive·보존 경계 · DB.snapshotTaskArchive: read FROM; DB.CompleteTaskArchive: write DELETE; restoreTaskScopes: write INSERT · db-pg-access-task-scope-508d51a85a · db-pg-access-task-scope-be504fc9c1 · db-pg-access-task-scope-0488ce89d1
- 계약 사용 · try_inet() · read predicate; columns net; coverage/scope predicate에서 assets text 변환; provenance: production SQL call sites · db-try-inet-use-task-scope-e03dcb28ba · db-try-inet-use-task-scope-00288db9f0 · db-try-inet-use-task-scope-bb64288ddc · db-try-inet-use-task-scope-3038821322 · db-try-inet-use-task-scope-d824d02d68 · db-try-inet-use-task-scope-c99ebf71ad
task에서 사용하는 root_domain/subdomain/IP/CIDR/company scope를 저장한다.
정의 원본은 db/schema.sql다. 등록 근거
CREATE TABLE IF NOT EXISTS task_scope (
id BIGSERIAL PRIMARY KEY,
task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
kind TEXT NOT NULL CHECK (kind IN ('company','root_domain','subdomain','ip','cidr','icp','keyword')),
company_id BIGINT REFERENCES companies(id) ON DELETE CASCADE, -- kind='company'
domain TEXT, -- root_domain / subdomain
net CIDR, -- ip / cidr
value TEXT, -- icp / keyword
source TEXT NOT NULL DEFAULT 'auto' CHECK (source IN ('auto','agent','manual')),
reason TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
후속 변경·제약
ALTER TABLE task_scope ADD COLUMN IF NOT EXISTS value TEXT;ALTER TABLE task_scope DROP CONSTRAINT IF EXISTS task_scope_kind_check;ALTER TABLE task_scope ADD CONSTRAINT task_scope_kind_check CHECK (kind IN ('company','root_domain','subdomain','ip','cidr','icp','keyword'));
Startup은 old uq_task_scope를 drop한 뒤 value까지 포함한 uq_task_scope_v2를 만들고 kind CHECK를 drop/recreate한다. Legacy duplicate/invalid row가 있으면 index/CHECK 생성이 실패하고 schema transaction이 rollback된다. migration 경계
인덱스
CREATE UNIQUE INDEX IF NOT EXISTS uq_task_scope_v2 ON task_scope( task_id, kind, COALESCE(domain,''), COALESCE(net::text,''), COALESCE(company_id,0), COALESCE(value,''));CREATE INDEX IF NOT EXISTS idx_ts_domain ON task_scope(domain) WHERE kind IN ('root_domain','subdomain');CREATE INDEX IF NOT EXISTS idx_ts_net ON task_scope USING GIST(net inet_ops) WHERE kind IN ('ip','cidr');CREATE INDEX IF NOT EXISTS idx_ts_company ON task_scope(company_id) WHERE kind = 'company';
의미·소비·운영 경계
task_scope 필드 의미, reader/writer, index 비용과 retention 판정에서 물리 DDL과 별도로 C/A/U를 확인한다. 운영 DB 적용·row 규모·query plan·role은 관찰하지 않았다.