Phases 1-5 + rooms/floors, accounts, custom types, users, notifications

Data model
- Properties, rooms (+optional floors), assets (typed custom fields + Zod
  runtime validator + move history), documents (polymorphic scope)
- Projects -> work packages -> tasks -> subtasks
- Decision events (scoped to project/property/asset/work_package)
- Checklist templates + instances, maintenance schedules (time + usage) with
  auto-materialized checklists on event recording
- Wiki (global + per-project) with revisions + tsvector FTS
- Property accounts (utility/meter numbers by kind)
- Notifications table + per-user channel prefs

Infra
- RBAC guards (requireCompany / requireAdmin)
- Storage abstraction: LocalDiskStorage (HMAC signed URLs) + S3Storage
  behind the same interface, switchable via STORAGE_BACKEND
- CSV export for assets / maintenance / decisions
- QR labels: /api/qr SVG endpoint + printable /assets/[id]/label
- Notifications: in-app + SMTP (own server via nodemailer) + Matrix
  (Client-Server API, per-company room) with opt-in per user
- Company switcher + auto-select first company on login

UI
- Topbar: bell with unread count, theme toggle, name, Sign Out (flat)
- Sidebar: main nav + dedicated Admin section (Asset types, Users, Company)
- Nested-route tabs on property / project / asset detail pages
- Admin UIs for users (invite, role, reset pw, deactivate) and company
  settings (default currency, Matrix room id)
- Custom asset type creation + field-def editor with immutable key/type
  guard and auto-deprecate when removing a field still referenced

Graph
- graphify-out/ committed: GRAPH_REPORT.md, graph.html, graph.json
This commit is contained in:
2026-04-23 15:18:11 +07:00
parent ad155d6344
commit b59904fdae
387 changed files with 70371 additions and 82 deletions
-13
View File
@@ -1,13 +0,0 @@
DATABASE_URL=postgres://postgres:postgres@localhost:5432/buildfor_life_ops
SESSION_SECRET=replace-with-at-least-32-random-bytes-hex
PUBLIC_BASE_URL=http://localhost:5173
STORAGE_BACKEND=local
STORAGE_LOCAL_ROOT=./storage
STORAGE_SIGNING_SECRET=replace-with-at-least-32-random-bytes-hex
OIDC_ENABLED=false
OIDC_ISSUER=
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_REDIRECT_URI=
@@ -0,0 +1,140 @@
CREATE TABLE "asset_field_defs" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"asset_type_id" uuid NOT NULL,
"key" varchar(64) NOT NULL,
"label" varchar(128) NOT NULL,
"type" "field_type" NOT NULL,
"required" boolean DEFAULT false NOT NULL,
"order" integer DEFAULT 0 NOT NULL,
"enum_values" text[],
"unit" varchar(32),
"placeholder" varchar(255),
"help_text" text,
"deprecated_at" timestamp with time zone,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "asset_location_history" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"asset_id" uuid NOT NULL,
"from_kind" "container_kind",
"from_project_id" uuid,
"from_property_id" uuid,
"to_kind" "container_kind" NOT NULL,
"to_project_id" uuid,
"to_property_id" uuid,
"moved_by" uuid,
"moved_at" timestamp with time zone DEFAULT now() NOT NULL,
"reason" text
);
--> statement-breakpoint
CREATE TABLE "asset_logs" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"asset_id" uuid NOT NULL,
"author_id" uuid,
"body" text NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "asset_types" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid,
"parent_id" uuid,
"name" varchar(128) NOT NULL,
"slug" varchar(128) NOT NULL,
"icon" varchar(64),
"description" text,
"schema_version" integer DEFAULT 1 NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "assets" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"asset_type_id" uuid NOT NULL,
"name" varchar(255) NOT NULL,
"tag" varchar(64),
"serial_number" varchar(128),
"manufacturer" varchar(128),
"model" varchar(128),
"purchased_at" timestamp with time zone,
"current_container_kind" "container_kind" NOT NULL,
"current_project_id" uuid,
"current_property_id" uuid,
"custom_fields" jsonb DEFAULT '{}'::jsonb NOT NULL,
"search_tsv" text,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "documents" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"scope_type" "doc_scope" NOT NULL,
"scope_id" uuid NOT NULL,
"filename" varchar(512) NOT NULL,
"mime_type" varchar(128) NOT NULL,
"size_bytes" bigint NOT NULL,
"sha256" varchar(64) NOT NULL,
"storage_key" varchar(512) NOT NULL,
"uploaded_by" uuid,
"uploaded_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "properties" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"name" varchar(255) NOT NULL,
"kind" varchar(64),
"address_line1" varchar(255),
"address_line2" varchar(255),
"city" varchar(128),
"region" varchar(128),
"postal_code" varchar(32),
"country_code" varchar(2),
"lat" numeric(9, 6),
"lng" numeric(9, 6),
"notes" text,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
ALTER TABLE "asset_field_defs" ADD CONSTRAINT "asset_field_defs_asset_type_id_asset_types_id_fk" FOREIGN KEY ("asset_type_id") REFERENCES "public"."asset_types"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "asset_location_history_asset_id_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "asset_location_history_from_property_id_properties_id_fk" FOREIGN KEY ("from_property_id") REFERENCES "public"."properties"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "asset_location_history_to_property_id_properties_id_fk" FOREIGN KEY ("to_property_id") REFERENCES "public"."properties"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "asset_location_history_moved_by_users_id_fk" FOREIGN KEY ("moved_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_logs" ADD CONSTRAINT "asset_logs_asset_id_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_logs" ADD CONSTRAINT "asset_logs_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_types" ADD CONSTRAINT "asset_types_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "assets" ADD CONSTRAINT "assets_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "assets" ADD CONSTRAINT "assets_asset_type_id_asset_types_id_fk" FOREIGN KEY ("asset_type_id") REFERENCES "public"."asset_types"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "assets" ADD CONSTRAINT "assets_current_property_id_properties_id_fk" FOREIGN KEY ("current_property_id") REFERENCES "public"."properties"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "assets" ADD CONSTRAINT "assets_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "documents" ADD CONSTRAINT "documents_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "documents" ADD CONSTRAINT "documents_uploaded_by_users_id_fk" FOREIGN KEY ("uploaded_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "properties" ADD CONSTRAINT "properties_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "properties" ADD CONSTRAINT "properties_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
CREATE UNIQUE INDEX "asset_field_defs_type_key_uq" ON "asset_field_defs" USING btree ("asset_type_id","key");--> statement-breakpoint
CREATE INDEX "asset_field_defs_by_type" ON "asset_field_defs" USING btree ("asset_type_id","order");--> statement-breakpoint
CREATE INDEX "alh_by_asset" ON "asset_location_history" USING btree ("asset_id","moved_at");--> statement-breakpoint
CREATE INDEX "asset_logs_by_asset" ON "asset_logs" USING btree ("asset_id","created_at");--> statement-breakpoint
CREATE UNIQUE INDEX "asset_types_company_slug_uq" ON "asset_types" USING btree ("company_id","slug");--> statement-breakpoint
CREATE INDEX "asset_types_by_parent" ON "asset_types" USING btree ("parent_id");--> statement-breakpoint
CREATE INDEX "assets_by_company" ON "assets" USING btree ("company_id");--> statement-breakpoint
CREATE INDEX "assets_by_type" ON "assets" USING btree ("asset_type_id");--> statement-breakpoint
CREATE INDEX "assets_by_project" ON "assets" USING btree ("current_project_id");--> statement-breakpoint
CREATE INDEX "assets_by_property" ON "assets" USING btree ("current_property_id");--> statement-breakpoint
CREATE UNIQUE INDEX "assets_company_tag_uq" ON "assets" USING btree ("company_id","tag");--> statement-breakpoint
CREATE UNIQUE INDEX "assets_company_serial_uq" ON "assets" USING btree ("company_id","serial_number");--> statement-breakpoint
CREATE INDEX "docs_by_scope" ON "documents" USING btree ("scope_type","scope_id");--> statement-breakpoint
CREATE INDEX "docs_by_company" ON "documents" USING btree ("company_id");--> statement-breakpoint
CREATE INDEX "docs_by_hash" ON "documents" USING btree ("sha256");--> statement-breakpoint
CREATE UNIQUE INDEX "docs_storage_key_uq" ON "documents" USING btree ("storage_key");--> statement-breakpoint
CREATE INDEX "properties_by_company" ON "properties" USING btree ("company_id");
@@ -0,0 +1,112 @@
-- Phase 1 follow-up: integrity constraints, FTS, GIN, partial FK,
-- and updated_at + asset_types.schema_version triggers.
-- Drizzle-kit can't express any of these from the TS schema, so they live here.
-- ---------------------------------------------------------------------------
-- 1. assets.current_container_kind XOR location FK
-- ---------------------------------------------------------------------------
ALTER TABLE "assets" ADD CONSTRAINT "assets_location_xor" CHECK (
(current_container_kind = 'project' AND current_project_id IS NOT NULL AND current_property_id IS NULL)
OR
(current_container_kind = 'property' AND current_property_id IS NOT NULL AND current_project_id IS NULL)
);
--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "alh_to_xor" CHECK (
(to_kind = 'project' AND to_project_id IS NOT NULL AND to_property_id IS NULL)
OR
(to_kind = 'property' AND to_property_id IS NOT NULL AND to_project_id IS NULL)
);
--> statement-breakpoint
-- ---------------------------------------------------------------------------
-- 2. Self-referential FK on asset_types.parent_id
-- ---------------------------------------------------------------------------
ALTER TABLE "asset_types" ADD CONSTRAINT "asset_types_parent_id_fk"
FOREIGN KEY ("parent_id") REFERENCES "asset_types"("id") ON DELETE SET NULL;
--> statement-breakpoint
-- ---------------------------------------------------------------------------
-- 3. JSONB GIN index on assets.custom_fields
-- ---------------------------------------------------------------------------
CREATE INDEX "assets_custom_fields_gin" ON "assets" USING GIN ("custom_fields" jsonb_path_ops);
--> statement-breakpoint
-- ---------------------------------------------------------------------------
-- 4. Full-text search on assets (tsvector + trigger + GIN)
-- ---------------------------------------------------------------------------
ALTER TABLE "assets" ALTER COLUMN "search_tsv" TYPE tsvector USING NULL::tsvector;
--> statement-breakpoint
CREATE OR REPLACE FUNCTION assets_tsv_trigger() RETURNS trigger AS $$
BEGIN
NEW.search_tsv :=
setweight(to_tsvector('simple', coalesce(NEW.name, '')), 'A') ||
setweight(to_tsvector('simple', coalesce(NEW.tag, '')), 'B') ||
setweight(to_tsvector('simple', coalesce(NEW.serial_number, '')), 'B') ||
setweight(to_tsvector('simple', coalesce(NEW.manufacturer, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(NEW.model, '')), 'C');
RETURN NEW;
END $$ LANGUAGE plpgsql;
--> statement-breakpoint
CREATE TRIGGER assets_tsv_upd BEFORE INSERT OR UPDATE
ON "assets" FOR EACH ROW EXECUTE FUNCTION assets_tsv_trigger();
--> statement-breakpoint
CREATE INDEX "assets_search_tsv_gin" ON "assets" USING GIN ("search_tsv");
--> statement-breakpoint
-- ---------------------------------------------------------------------------
-- 5. Generic updated_at trigger, attached to every Phase-0/1 table that has it
-- ---------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION set_updated_at() RETURNS trigger AS $$
BEGIN
NEW.updated_at := now();
RETURN NEW;
END $$ LANGUAGE plpgsql;
--> statement-breakpoint
CREATE TRIGGER companies_set_updated_at BEFORE UPDATE ON "companies"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER users_set_updated_at BEFORE UPDATE ON "users"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER properties_set_updated_at BEFORE UPDATE ON "properties"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER asset_types_set_updated_at BEFORE UPDATE ON "asset_types"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER asset_field_defs_set_updated_at BEFORE UPDATE ON "asset_field_defs"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER assets_set_updated_at BEFORE UPDATE ON "assets"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
-- ---------------------------------------------------------------------------
-- 6. Bump asset_types.schema_version when its field defs change
-- (cache key for the runtime Zod validator)
-- ---------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION bump_asset_type_schema_version() RETURNS trigger AS $$
DECLARE
target_id uuid;
BEGIN
IF TG_OP = 'DELETE' THEN
target_id := OLD.asset_type_id;
ELSE
target_id := NEW.asset_type_id;
END IF;
UPDATE asset_types
SET schema_version = schema_version + 1,
updated_at = now()
WHERE id = target_id;
RETURN NULL;
END $$ LANGUAGE plpgsql;
--> statement-breakpoint
CREATE TRIGGER asset_field_defs_bump_version
AFTER INSERT OR UPDATE OR DELETE ON "asset_field_defs"
FOR EACH ROW EXECUTE FUNCTION bump_asset_type_schema_version();
@@ -0,0 +1,109 @@
CREATE TABLE "checklist_instances" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"template_id" uuid,
"scope_type" "checklist_scope" NOT NULL,
"scope_id" uuid,
"title" varchar(255),
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"completed_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "checklist_items" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"instance_id" uuid NOT NULL,
"text" varchar(500) NOT NULL,
"done" boolean DEFAULT false NOT NULL,
"done_at" timestamp with time zone,
"done_by" uuid,
"required" boolean DEFAULT false NOT NULL,
"order" integer DEFAULT 0 NOT NULL,
"note" text
);
--> statement-breakpoint
CREATE TABLE "checklist_template_items" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"template_id" uuid NOT NULL,
"text" varchar(500) NOT NULL,
"order" integer DEFAULT 0 NOT NULL,
"required" boolean DEFAULT false NOT NULL
);
--> statement-breakpoint
CREATE TABLE "checklist_templates" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"name" varchar(255) NOT NULL,
"description" text,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "maintenance_events" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"asset_id" uuid NOT NULL,
"schedule_id" uuid,
"performed_at" timestamp with time zone NOT NULL,
"performed_by" uuid,
"notes" text,
"usage_reading" numeric(18, 4),
"checklist_instance_id" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "maintenance_schedules" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"asset_id" uuid NOT NULL,
"name" varchar(255) NOT NULL,
"kind" "schedule_kind" NOT NULL,
"interval_value" integer NOT NULL,
"interval_unit" interval_unit NOT NULL,
"last_serviced_at" timestamp with time zone,
"next_due_at" timestamp with time zone,
"next_due_usage" numeric(18, 4),
"checklist_template_id" uuid,
"active" boolean DEFAULT true NOT NULL,
"notes" text,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "usage_readings" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"asset_id" uuid NOT NULL,
"reading" numeric(18, 4) NOT NULL,
"unit" interval_unit NOT NULL,
"recorded_at" timestamp with time zone DEFAULT now() NOT NULL,
"recorded_by" uuid,
"notes" text
);
--> statement-breakpoint
ALTER TABLE "checklist_instances" ADD CONSTRAINT "checklist_instances_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_instances" ADD CONSTRAINT "checklist_instances_template_id_checklist_templates_id_fk" FOREIGN KEY ("template_id") REFERENCES "public"."checklist_templates"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_instances" ADD CONSTRAINT "checklist_instances_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_items" ADD CONSTRAINT "checklist_items_instance_id_checklist_instances_id_fk" FOREIGN KEY ("instance_id") REFERENCES "public"."checklist_instances"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_items" ADD CONSTRAINT "checklist_items_done_by_users_id_fk" FOREIGN KEY ("done_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_template_items" ADD CONSTRAINT "checklist_template_items_template_id_checklist_templates_id_fk" FOREIGN KEY ("template_id") REFERENCES "public"."checklist_templates"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_templates" ADD CONSTRAINT "checklist_templates_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "checklist_templates" ADD CONSTRAINT "checklist_templates_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_events" ADD CONSTRAINT "maintenance_events_asset_id_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_events" ADD CONSTRAINT "maintenance_events_schedule_id_maintenance_schedules_id_fk" FOREIGN KEY ("schedule_id") REFERENCES "public"."maintenance_schedules"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_events" ADD CONSTRAINT "maintenance_events_performed_by_users_id_fk" FOREIGN KEY ("performed_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_events" ADD CONSTRAINT "maintenance_events_checklist_instance_id_checklist_instances_id_fk" FOREIGN KEY ("checklist_instance_id") REFERENCES "public"."checklist_instances"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_schedules" ADD CONSTRAINT "maintenance_schedules_asset_id_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_schedules" ADD CONSTRAINT "maintenance_schedules_checklist_template_id_checklist_templates_id_fk" FOREIGN KEY ("checklist_template_id") REFERENCES "public"."checklist_templates"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "maintenance_schedules" ADD CONSTRAINT "maintenance_schedules_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "usage_readings" ADD CONSTRAINT "usage_readings_asset_id_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "usage_readings" ADD CONSTRAINT "usage_readings_recorded_by_users_id_fk" FOREIGN KEY ("recorded_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "ci_by_scope" ON "checklist_instances" USING btree ("scope_type","scope_id");--> statement-breakpoint
CREATE INDEX "ci_by_company" ON "checklist_instances" USING btree ("company_id");--> statement-breakpoint
CREATE INDEX "cit_by_instance" ON "checklist_items" USING btree ("instance_id","order");--> statement-breakpoint
CREATE INDEX "cti_by_template" ON "checklist_template_items" USING btree ("template_id","order");--> statement-breakpoint
CREATE INDEX "ct_by_company" ON "checklist_templates" USING btree ("company_id");--> statement-breakpoint
CREATE INDEX "me_by_asset_time" ON "maintenance_events" USING btree ("asset_id","performed_at");--> statement-breakpoint
CREATE INDEX "me_by_schedule" ON "maintenance_events" USING btree ("schedule_id");--> statement-breakpoint
CREATE INDEX "ms_by_asset" ON "maintenance_schedules" USING btree ("asset_id");--> statement-breakpoint
CREATE INDEX "ms_by_next_due" ON "maintenance_schedules" USING btree ("next_due_at");--> statement-breakpoint
CREATE INDEX "ur_by_asset_time" ON "usage_readings" USING btree ("asset_id","recorded_at");
@@ -0,0 +1,14 @@
-- Phase 2 follow-up: partial indexes + updated_at triggers for the new tables.
-- Partial index for the dashboard "overdue / upcoming time-based maintenance" query.
CREATE INDEX "ms_next_due_active"
ON "maintenance_schedules" ("next_due_at")
WHERE "kind" = 'time' AND "active" = true;
--> statement-breakpoint
-- Reuse the set_updated_at() function from migration 0002.
CREATE TRIGGER checklist_templates_set_updated_at BEFORE UPDATE ON "checklist_templates"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER maintenance_schedules_set_updated_at BEFORE UPDATE ON "maintenance_schedules"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
@@ -0,0 +1,94 @@
CREATE TABLE "decision_events" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"scope_type" "decision_scope" NOT NULL,
"scope_id" uuid NOT NULL,
"title" varchar(255) NOT NULL,
"body_md" text NOT NULL,
"alternatives_considered" text,
"cost_impact" numeric(18, 4),
"currency" varchar(3),
"approved_by" uuid,
"decided_at" timestamp with time zone NOT NULL,
"decided_by" uuid,
"tags" text[],
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "projects" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"name" varchar(255) NOT NULL,
"code" varchar(64),
"description" text,
"status" varchar(32) DEFAULT 'active' NOT NULL,
"start_date" timestamp with time zone,
"end_date" timestamp with time zone,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "subtasks" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"task_id" uuid NOT NULL,
"name" varchar(500) NOT NULL,
"done" boolean DEFAULT false NOT NULL,
"order" integer DEFAULT 0 NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "tasks" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"work_package_id" uuid NOT NULL,
"title" varchar(255) NOT NULL,
"description" text,
"status" "task_status" DEFAULT 'todo' NOT NULL,
"assignee_id" uuid,
"due_at" timestamp with time zone,
"order" integer DEFAULT 0 NOT NULL,
"completed_at" timestamp with time zone,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "work_packages" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"project_id" uuid NOT NULL,
"name" varchar(255) NOT NULL,
"description" text,
"order" integer DEFAULT 0 NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
ALTER TABLE "decision_events" ADD CONSTRAINT "decision_events_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "decision_events" ADD CONSTRAINT "decision_events_approved_by_users_id_fk" FOREIGN KEY ("approved_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "decision_events" ADD CONSTRAINT "decision_events_decided_by_users_id_fk" FOREIGN KEY ("decided_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "projects" ADD CONSTRAINT "projects_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "projects" ADD CONSTRAINT "projects_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "subtasks" ADD CONSTRAINT "subtasks_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_work_package_id_work_packages_id_fk" FOREIGN KEY ("work_package_id") REFERENCES "public"."work_packages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_assignee_id_users_id_fk" FOREIGN KEY ("assignee_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "work_packages" ADD CONSTRAINT "work_packages_project_id_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "de_by_scope" ON "decision_events" USING btree ("scope_type","scope_id","decided_at");--> statement-breakpoint
CREATE INDEX "de_by_company" ON "decision_events" USING btree ("company_id");--> statement-breakpoint
CREATE INDEX "de_tags_gin" ON "decision_events" USING gin ("tags");--> statement-breakpoint
CREATE INDEX "projects_by_company" ON "projects" USING btree ("company_id");--> statement-breakpoint
CREATE UNIQUE INDEX "projects_company_code_uq" ON "projects" USING btree ("company_id","code");--> statement-breakpoint
CREATE INDEX "subtasks_by_task" ON "subtasks" USING btree ("task_id","order");--> statement-breakpoint
CREATE INDEX "tasks_by_wp" ON "tasks" USING btree ("work_package_id");--> statement-breakpoint
CREATE INDEX "tasks_by_assignee" ON "tasks" USING btree ("assignee_id");--> statement-breakpoint
CREATE INDEX "tasks_status_due" ON "tasks" USING btree ("status","due_at");--> statement-breakpoint
CREATE INDEX "work_packages_by_project" ON "work_packages" USING btree ("project_id");--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "asset_location_history_from_project_id_projects_id_fk" FOREIGN KEY ("from_project_id") REFERENCES "public"."projects"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "asset_location_history" ADD CONSTRAINT "asset_location_history_to_project_id_projects_id_fk" FOREIGN KEY ("to_project_id") REFERENCES "public"."projects"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "assets" ADD CONSTRAINT "assets_current_project_id_projects_id_fk" FOREIGN KEY ("current_project_id") REFERENCES "public"."projects"("id") ON DELETE restrict ON UPDATE no action;
@@ -0,0 +1,21 @@
-- Phase 3 follow-up: partial index for open + due tasks, updated_at triggers.
CREATE INDEX "tasks_open_due"
ON "tasks" ("due_at")
WHERE "status" IN ('todo','doing','blocked') AND "deleted_at" IS NULL;
--> statement-breakpoint
CREATE TRIGGER projects_set_updated_at BEFORE UPDATE ON "projects"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER work_packages_set_updated_at BEFORE UPDATE ON "work_packages"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER tasks_set_updated_at BEFORE UPDATE ON "tasks"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER subtasks_set_updated_at BEFORE UPDATE ON "subtasks"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER decision_events_set_updated_at BEFORE UPDATE ON "decision_events"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
+33
View File
@@ -0,0 +1,33 @@
CREATE TABLE "wiki_pages" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"company_id" uuid NOT NULL,
"scope_type" "wiki_scope" NOT NULL,
"scope_id" uuid,
"slug" varchar(128) NOT NULL,
"title" varchar(255) NOT NULL,
"current_revision_id" uuid,
"created_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "wiki_revisions" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"page_id" uuid NOT NULL,
"revision" integer NOT NULL,
"title" varchar(255) NOT NULL,
"body_md" text NOT NULL,
"body_tsv" text,
"edited_by" uuid,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"comment" varchar(500)
);
--> statement-breakpoint
ALTER TABLE "wiki_pages" ADD CONSTRAINT "wiki_pages_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "wiki_pages" ADD CONSTRAINT "wiki_pages_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "wiki_revisions" ADD CONSTRAINT "wiki_revisions_page_id_wiki_pages_id_fk" FOREIGN KEY ("page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "wiki_revisions" ADD CONSTRAINT "wiki_revisions_edited_by_users_id_fk" FOREIGN KEY ("edited_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "wiki_by_scope" ON "wiki_pages" USING btree ("scope_type","scope_id");--> statement-breakpoint
CREATE UNIQUE INDEX "wiki_rev_page_rev_uq" ON "wiki_revisions" USING btree ("page_id","revision");--> statement-breakpoint
CREATE INDEX "wiki_rev_by_page" ON "wiki_revisions" USING btree ("page_id","revision");
+34
View File
@@ -0,0 +1,34 @@
-- Phase 4 follow-up: tsvector + FTS trigger + GIN index for wiki_revisions,
-- NULLS NOT DISTINCT unique index on wiki_pages so global pages (scope_id IS NULL)
-- can't share a slug, and updated_at trigger.
-- Convert body_tsv to a real tsvector column.
ALTER TABLE "wiki_revisions" ALTER COLUMN "body_tsv" TYPE tsvector USING NULL::tsvector;
--> statement-breakpoint
CREATE OR REPLACE FUNCTION wiki_tsv_trigger() RETURNS trigger AS $$
BEGIN
NEW.body_tsv := to_tsvector(
'simple',
coalesce(NEW.title, '') || ' ' || coalesce(NEW.body_md, '')
);
RETURN NEW;
END $$ LANGUAGE plpgsql;
--> statement-breakpoint
CREATE TRIGGER wiki_tsv_upd BEFORE INSERT OR UPDATE ON "wiki_revisions"
FOR EACH ROW EXECUTE FUNCTION wiki_tsv_trigger();
--> statement-breakpoint
CREATE INDEX "wiki_body_tsv_gin" ON "wiki_revisions" USING GIN ("body_tsv");
--> statement-breakpoint
-- Slug uniqueness per (company, scope, slug). NULLS NOT DISTINCT (pg 15+)
-- means two global pages (scope_id IS NULL) with the same slug collide.
CREATE UNIQUE INDEX "wiki_scope_slug_uq"
ON "wiki_pages" ("company_id", "scope_type", "scope_id", "slug")
NULLS NOT DISTINCT;
--> statement-breakpoint
CREATE TRIGGER wiki_pages_set_updated_at BEFORE UPDATE ON "wiki_pages"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
+33
View File
@@ -0,0 +1,33 @@
CREATE TABLE "property_floors" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"property_id" uuid NOT NULL,
"label" varchar(32) NOT NULL,
"name" varchar(255),
"order" integer DEFAULT 0 NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "property_rooms" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"property_id" uuid NOT NULL,
"floor_id" uuid,
"name" varchar(255) NOT NULL,
"notes" text,
"order" integer DEFAULT 0 NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"deleted_at" timestamp with time zone
);
--> statement-breakpoint
ALTER TABLE "assets" ADD COLUMN "current_room_id" uuid;--> statement-breakpoint
ALTER TABLE "property_floors" ADD CONSTRAINT "property_floors_property_id_properties_id_fk" FOREIGN KEY ("property_id") REFERENCES "public"."properties"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "property_rooms" ADD CONSTRAINT "property_rooms_property_id_properties_id_fk" FOREIGN KEY ("property_id") REFERENCES "public"."properties"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "property_rooms" ADD CONSTRAINT "property_rooms_floor_id_property_floors_id_fk" FOREIGN KEY ("floor_id") REFERENCES "public"."property_floors"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "floors_by_property" ON "property_floors" USING btree ("property_id","order");--> statement-breakpoint
CREATE UNIQUE INDEX "floors_property_label_uq" ON "property_floors" USING btree ("property_id","label");--> statement-breakpoint
CREATE INDEX "rooms_by_property" ON "property_rooms" USING btree ("property_id","order");--> statement-breakpoint
CREATE INDEX "rooms_by_floor" ON "property_rooms" USING btree ("floor_id");--> statement-breakpoint
CREATE UNIQUE INDEX "rooms_floor_name_uq" ON "property_rooms" USING btree ("property_id","floor_id","name");--> statement-breakpoint
ALTER TABLE "assets" ADD CONSTRAINT "assets_current_room_id_property_rooms_id_fk" FOREIGN KEY ("current_room_id") REFERENCES "public"."property_rooms"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "assets_by_room" ON "assets" USING btree ("current_room_id");
+15
View File
@@ -0,0 +1,15 @@
-- Rooms follow-up: constraints + updated_at triggers.
-- A room assignment only makes sense when the asset is at a property.
ALTER TABLE "assets" ADD CONSTRAINT "assets_room_requires_property" CHECK (
"current_room_id" IS NULL
OR "current_container_kind" = 'property'
);
--> statement-breakpoint
CREATE TRIGGER property_floors_set_updated_at BEFORE UPDATE ON "property_floors"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
--> statement-breakpoint
CREATE TRIGGER property_rooms_set_updated_at BEFORE UPDATE ON "property_rooms"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
+17
View File
@@ -0,0 +1,17 @@
CREATE TYPE "public"."account_kind" AS ENUM('water', 'electricity', 'gas', 'internet', 'phone', 'cable', 'waste', 'other');--> statement-breakpoint
CREATE TABLE "property_accounts" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"property_id" uuid NOT NULL,
"kind" "account_kind" NOT NULL,
"provider" varchar(128),
"label" varchar(128),
"account_number" varchar(128),
"meter_number" varchar(128),
"notes" text,
"order" integer DEFAULT 0 NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
ALTER TABLE "property_accounts" ADD CONSTRAINT "property_accounts_property_id_properties_id_fk" FOREIGN KEY ("property_id") REFERENCES "public"."properties"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "accounts_by_property" ON "property_accounts" USING btree ("property_id","kind","order");
@@ -0,0 +1,3 @@
-- Updated_at trigger for property_accounts.
CREATE TRIGGER property_accounts_set_updated_at BEFORE UPDATE ON "property_accounts"
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
+20
View File
@@ -0,0 +1,20 @@
CREATE TYPE "public"."notification_kind" AS ENUM('task_assigned', 'asset_log_added', 'asset_moved', 'decision_created', 'maintenance_event_recorded', 'generic');--> statement-breakpoint
CREATE TABLE "notifications" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"user_id" uuid NOT NULL,
"company_id" uuid NOT NULL,
"kind" "notification_kind" NOT NULL,
"title" varchar(255) NOT NULL,
"body" text NOT NULL,
"link" varchar(1024),
"read_at" timestamp with time zone,
"created_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
ALTER TABLE "users" ADD COLUMN "email_notifications" boolean DEFAULT true NOT NULL;--> statement-breakpoint
ALTER TABLE "users" ADD COLUMN "matrix_notifications" boolean DEFAULT false NOT NULL;--> statement-breakpoint
ALTER TABLE "users" ADD COLUMN "matrix_user_id" varchar(255);--> statement-breakpoint
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "notifications_by_user_unread" ON "notifications" USING btree ("user_id","read_at","created_at");--> statement-breakpoint
CREATE INDEX "notifications_by_user_company" ON "notifications" USING btree ("user_id","company_id","created_at");
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+91
View File
@@ -8,6 +8,97 @@
"when": 1776760498088, "when": 1776760498088,
"tag": "0000_init", "tag": "0000_init",
"breakpoints": true "breakpoints": true
},
{
"idx": 1,
"version": "7",
"when": 1776912796532,
"tag": "0001_phase1_assets_properties_documents",
"breakpoints": true
},
{
"idx": 2,
"version": "7",
"when": 1776912900000,
"tag": "0002_phase1_constraints_and_search",
"breakpoints": true
},
{
"idx": 3,
"version": "7",
"when": 1776913896873,
"tag": "0003_phase2_checklists_and_maintenance",
"breakpoints": true
},
{
"idx": 4,
"version": "7",
"when": 1776913950000,
"tag": "0004_phase2_partial_indexes_and_triggers",
"breakpoints": true
},
{
"idx": 5,
"version": "7",
"when": 1776915278123,
"tag": "0005_phase3_projects_and_decisions",
"breakpoints": true
},
{
"idx": 6,
"version": "7",
"when": 1776915350000,
"tag": "0006_phase3_partial_index_and_triggers",
"breakpoints": true
},
{
"idx": 7,
"version": "7",
"when": 1776916197473,
"tag": "0007_phase4_wiki",
"breakpoints": true
},
{
"idx": 8,
"version": "7",
"when": 1776916020000,
"tag": "0008_phase4_wiki_fts_and_uniq",
"breakpoints": true
},
{
"idx": 9,
"version": "7",
"when": 1776918611593,
"tag": "0009_rooms_and_floors",
"breakpoints": true
},
{
"idx": 10,
"version": "7",
"when": 1776918700000,
"tag": "0010_rooms_check_and_triggers",
"breakpoints": true
},
{
"idx": 11,
"version": "7",
"when": 1776919853043,
"tag": "0011_property_accounts",
"breakpoints": true
},
{
"idx": 12,
"version": "7",
"when": 1776919900000,
"tag": "0012_accounts_updated_at_trigger",
"breakpoints": true
},
{
"idx": 13,
"version": "7",
"when": 1776930973516,
"tag": "0013_notifications",
"breakpoints": true
} }
] ]
} }
+117
View File
@@ -0,0 +1,117 @@
{
"nodes": [
{"id": "readme_buildfor_life_ops", "label": "buildfor_life_ops", "file_type": "document", "source_file": "README.md", "source_location": "L1-L3", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_buildfor_life_budget", "label": "buildfor_life_budget (sibling)", "file_type": "document", "source_file": "README.md", "source_location": "L4,L178", "source_url": "https://git.b4l.co.th/B4L/buildfor_life_budget", "captured_at": null, "author": null, "contributor": null},
{"id": "readme_buildfor_life_repair", "label": "buildfor_life_repair (sibling)", "file_type": "document", "source_file": "README.md", "source_location": "L4,L179", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_stack_sveltekit5", "label": "SvelteKit 5 (adapter-node)", "file_type": "document", "source_file": "README.md", "source_location": "L8", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_stack_tailwind_v4", "label": "Tailwind v4 + @theme inline tokens", "file_type": "document", "source_file": "README.md", "source_location": "L9", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_stack_postgres_drizzle", "label": "PostgreSQL 16+ via Drizzle ORM + Zod", "file_type": "document", "source_file": "README.md", "source_location": "L10", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_auth_argon2id", "label": "Argon2id sessions (@node-rs/argon2 + @oslojs/crypto)", "file_type": "document", "source_file": "README.md", "source_location": "L11", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_easymde", "label": "EasyMDE markdown editor", "file_type": "document", "source_file": "README.md", "source_location": "L12", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_sharp", "label": "Sharp image thumbnails", "file_type": "document", "source_file": "README.md", "source_location": "L12", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_storage_adapter", "label": "StorageAdapter interface", "file_type": "document", "source_file": "README.md", "source_location": "L13", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_local_disk_storage", "label": "LocalDiskStorage", "file_type": "document", "source_file": "README.md", "source_location": "L13,L143", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_s3_storage", "label": "S3Storage (future)", "file_type": "document", "source_file": "README.md", "source_location": "L144", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_env_dotenv", "label": ".env configuration", "file_type": "document", "source_file": "README.md", "source_location": "L29-L44", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_create_user_script", "label": "npm run create-user script", "file_type": "document", "source_file": "README.md", "source_location": "L59-L66,L122", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_db_migrate", "label": "npm run db:migrate", "file_type": "document", "source_file": "README.md", "source_location": "L54,L86", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_db_generate", "label": "npm run db:generate", "file_type": "document", "source_file": "README.md", "source_location": "L85", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_db_push", "label": "npm run db:push (dev only)", "file_type": "document", "source_file": "README.md", "source_location": "L87", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_db_studio", "label": "npm run db:studio (Drizzle Studio)", "file_type": "document", "source_file": "README.md", "source_location": "L88", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_db_seed", "label": "npm run db:seed", "file_type": "document", "source_file": "README.md", "source_location": "L89", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_validate_script", "label": "npm run validate (check + build)", "file_type": "document", "source_file": "README.md", "source_location": "L84", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_auth_model", "label": "Auth model (sessions + hashed cookies)", "file_type": "document", "source_file": "README.md", "source_location": "L132-L138", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_sliding_renewal", "label": "Sliding session renewal (30d/15d)", "file_type": "document", "source_file": "README.md", "source_location": "L135", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_sha256_cookie_hash", "label": "SHA-256 cookie hashing before DB lookup", "file_type": "document", "source_file": "README.md", "source_location": "L134", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_company_users", "label": "company_users role mapping", "file_type": "document", "source_file": "README.md", "source_location": "L138", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_storage_model", "label": "Storage model (opaque storage_key)", "file_type": "document", "source_file": "README.md", "source_location": "L141-L144", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_hmac_signed_urls", "label": "HMAC-signed short-lived file URLs", "file_type": "document", "source_file": "README.md", "source_location": "L143", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_api_files_route", "label": "/api/files route (signature verification + streaming)", "file_type": "document", "source_file": "README.md", "source_location": "L120,L143", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_layout_app_group", "label": "(app) route group (authed shell)", "file_type": "document", "source_file": "README.md", "source_location": "L113-L116,L137", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_layout_auth_group", "label": "(auth) route group (login shell)", "file_type": "document", "source_file": "README.md", "source_location": "L117-L118", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_hooks_server", "label": "hooks.server.ts (session validation)", "file_type": "document", "source_file": "README.md", "source_location": "L99", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_env_ts", "label": "env.ts (Zod-validated process.env)", "file_type": "document", "source_file": "README.md", "source_location": "L108", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_db_schema_dir", "label": "src/lib/server/db/schema/", "file_type": "document", "source_file": "README.md", "source_location": "L105-L106", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_roadmap_phase0", "label": "Phase 0: scaffold (shipped)", "file_type": "document", "source_file": "README.md", "source_location": "L150", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_roadmap_phase1", "label": "Phase 1: Properties + Assets", "file_type": "document", "source_file": "README.md", "source_location": "L151", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_roadmap_phase2", "label": "Phase 2: Checklists + maintenance", "file_type": "document", "source_file": "README.md", "source_location": "L152", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_roadmap_phase3", "label": "Phase 3: Projects + structured decisions", "file_type": "document", "source_file": "README.md", "source_location": "L153", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_roadmap_phase4", "label": "Phase 4: Wiki + FTS", "file_type": "document", "source_file": "README.md", "source_location": "L154", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_roadmap_phase5", "label": "Phase 5: QR, notifications, S3", "file_type": "document", "source_file": "README.md", "source_location": "L155", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_uuidv7", "label": "Decision: UUID v7 primary keys", "file_type": "document", "source_file": "README.md", "source_location": "L161", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_timestamptz", "label": "Decision: timestamptz UTC everywhere", "file_type": "document", "source_file": "README.md", "source_location": "L162", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_soft_delete", "label": "Decision: soft delete (deleted_at)", "file_type": "document", "source_file": "README.md", "source_location": "L163", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_money_type", "label": "Decision: numeric(18,4) + char(3) currency", "file_type": "document", "source_file": "README.md", "source_location": "L164", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_jsonb_custom_fields", "label": "Decision: JSONB custom fields + asset_field_defs", "file_type": "document", "source_file": "README.md", "source_location": "L165", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_xor_location", "label": "Decision: XOR asset location (project XOR property)", "file_type": "document", "source_file": "README.md", "source_location": "L166", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_asset_history", "label": "Decision: asset_location_history (movable assets)", "file_type": "document", "source_file": "README.md", "source_location": "L167", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_immutable_keys", "label": "Decision: immutable custom-field keys", "file_type": "document", "source_file": "README.md", "source_location": "L168", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_decision_scope", "label": "Decision: decisions scoped to project/property/asset/work_package", "file_type": "document", "source_file": "README.md", "source_location": "L169", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_currency_default", "label": "Decision: company default currency in settings_json", "file_type": "document", "source_file": "README.md", "source_location": "L170", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_tabs_routes", "label": "Decision: tabs = nested routes (not query-string)", "file_type": "document", "source_file": "README.md", "source_location": "L171", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "readme_decision_theme_key", "label": "Decision: localStorage['theme'] key shared across siblings", "file_type": "document", "source_file": "README.md", "source_location": "L172", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "drizzle_readme_migrations", "label": "Drizzle migrations directory", "file_type": "document", "source_file": "drizzle/README.md", "source_location": "L1-L5", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "drizzle_readme_review_rationale", "label": "Review SQL after generate: enum/index/custom_fields", "file_type": "document", "source_file": "drizzle/README.md", "source_location": "L13-L18", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "drizzle_readme_concurrently_note", "label": "Use CONCURRENTLY on large-table index changes", "file_type": "document", "source_file": "drizzle/README.md", "source_location": "L16", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "drizzle_readme_immutable_key_ref", "label": "Immutable-key policy reference", "file_type": "document", "source_file": "drizzle/README.md", "source_location": "L17-L18", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "apphtml_root", "label": "app.html root document", "file_type": "code", "source_file": "src/app.html", "source_location": "L1-L20", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "apphtml_theme_bootstrap", "label": "Dark-mode bootstrap inline script (localStorage['theme'])", "file_type": "code", "source_file": "src/app.html", "source_location": "L7-L14", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "apphtml_sveltekit_placeholders", "label": "%sveltekit.head% / %sveltekit.body% placeholders", "file_type": "code", "source_file": "src/app.html", "source_location": "L15,L18", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "apphtml_tailwind_body_classes", "label": "Tailwind body classes with dark: variants", "file_type": "code", "source_file": "src/app.html", "source_location": "L17", "source_url": null, "captured_at": null, "author": null, "contributor": null},
{"id": "apphtml_preload_hover", "label": "data-sveltekit-preload-data=hover", "file_type": "code", "source_file": "src/app.html", "source_location": "L17", "source_url": null, "captured_at": null, "author": null, "contributor": null}
],
"edges": [
{"source": "readme_buildfor_life_ops", "target": "readme_buildfor_life_budget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L4", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_buildfor_life_repair", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L4", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_stack_sveltekit5", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L8", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_stack_tailwind_v4", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L9", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_stack_postgres_drizzle", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L10", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_auth_argon2id", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L11", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_easymde", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L12", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_sharp", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L12", "weight": 1.0},
{"source": "readme_storage_adapter", "target": "readme_local_disk_storage", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L13", "weight": 1.0},
{"source": "readme_storage_adapter", "target": "readme_s3_storage", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L144", "weight": 1.0},
{"source": "readme_local_disk_storage", "target": "readme_hmac_signed_urls", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L143", "weight": 1.0},
{"source": "readme_api_files_route", "target": "readme_hmac_signed_urls", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L120,L143", "weight": 1.0},
{"source": "readme_api_files_route", "target": "readme_local_disk_storage", "relation": "calls", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L120", "weight": 1.0},
{"source": "readme_storage_model", "target": "readme_storage_adapter", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L141-L144", "weight": 1.0},
{"source": "readme_auth_model", "target": "readme_sha256_cookie_hash", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L134", "weight": 1.0},
{"source": "readme_auth_model", "target": "readme_sliding_renewal", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L135", "weight": 1.0},
{"source": "readme_auth_model", "target": "readme_company_users", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L138", "weight": 1.0},
{"source": "readme_hooks_server", "target": "readme_auth_model", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L99,L135", "weight": 1.0},
{"source": "readme_layout_app_group", "target": "readme_auth_model", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L137", "weight": 1.0},
{"source": "readme_env_dotenv", "target": "readme_env_ts", "relation": "shares_data_with", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L108,L183", "weight": 1.0},
{"source": "readme_create_user_script", "target": "readme_db_schema_dir", "relation": "shares_data_with", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "README.md", "source_location": "L122", "weight": 1.0},
{"source": "readme_db_migrate", "target": "drizzle_readme_migrations", "relation": "calls", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L9", "weight": 1.0},
{"source": "readme_db_generate", "target": "drizzle_readme_migrations", "relation": "calls", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L8", "weight": 1.0},
{"source": "readme_db_push", "target": "drizzle_readme_migrations", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L10", "weight": 1.0},
{"source": "readme_db_studio", "target": "drizzle_readme_migrations", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L11", "weight": 1.0},
{"source": "drizzle_readme_review_rationale", "target": "drizzle_readme_migrations", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L13-L18", "weight": 1.0},
{"source": "drizzle_readme_concurrently_note", "target": "drizzle_readme_review_rationale", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L16", "weight": 1.0},
{"source": "drizzle_readme_immutable_key_ref", "target": "readme_decision_immutable_keys", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "drizzle/README.md", "source_location": "L17-L18", "weight": 1.0},
{"source": "readme_decision_jsonb_custom_fields", "target": "readme_decision_immutable_keys", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L165,L168", "weight": 1.0},
{"source": "readme_decision_xor_location", "target": "readme_decision_asset_history", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L166-L167", "weight": 1.0},
{"source": "readme_roadmap_phase5", "target": "readme_s3_storage", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L155", "weight": 1.0},
{"source": "readme_roadmap_phase3", "target": "readme_decision_decision_scope", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L153,L169", "weight": 1.0},
{"source": "readme_roadmap_phase4", "target": "readme_easymde", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L154,L12", "weight": 1.0},
{"source": "readme_roadmap_phase1", "target": "readme_decision_jsonb_custom_fields", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L151,L165", "weight": 1.0},
{"source": "apphtml_root", "target": "apphtml_theme_bootstrap", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/app.html", "source_location": "L7-L14", "weight": 1.0},
{"source": "apphtml_root", "target": "apphtml_sveltekit_placeholders", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/app.html", "source_location": "L15,L18", "weight": 1.0},
{"source": "apphtml_root", "target": "apphtml_tailwind_body_classes", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/app.html", "source_location": "L17", "weight": 1.0},
{"source": "apphtml_root", "target": "apphtml_preload_hover", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/app.html", "source_location": "L17", "weight": 1.0},
{"source": "apphtml_theme_bootstrap", "target": "readme_decision_theme_key", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L172", "weight": 1.0},
{"source": "apphtml_tailwind_body_classes", "target": "readme_stack_tailwind_v4", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L9,L17", "weight": 1.0},
{"source": "apphtml_root", "target": "readme_stack_sveltekit5", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.9, "source_file": "src/app.html", "source_location": "L1-L20", "weight": 1.0},
{"source": "readme_decision_theme_key", "target": "apphtml_theme_bootstrap", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "L172", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_buildfor_life_budget", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "README.md", "source_location": "L4,L178", "weight": 1.0},
{"source": "readme_buildfor_life_ops", "target": "readme_buildfor_life_repair", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "README.md", "source_location": "L4,L179", "weight": 1.0},
{"source": "readme_local_disk_storage", "target": "readme_s3_storage", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.9, "source_file": "README.md", "source_location": "L13,L144", "weight": 1.0}
],
"hyperedges": [
{"id": "auth_session_flow", "label": "Session auth flow (cookie, hash, hook, gate)", "nodes": ["readme_auth_model", "readme_sha256_cookie_hash", "readme_sliding_renewal", "readme_hooks_server", "readme_layout_app_group"], "relation": "participate_in", "confidence": "EXTRACTED", "confidence_score": 0.95, "source_file": "README.md"},
{"id": "storage_abstraction_stack", "label": "Storage abstraction (adapter, local impl, signed URLs, file route)", "nodes": ["readme_storage_adapter", "readme_local_disk_storage", "readme_hmac_signed_urls", "readme_api_files_route", "readme_storage_model"], "relation": "implement", "confidence": "EXTRACTED", "confidence_score": 0.95, "source_file": "README.md"},
{"id": "theme_propagation_pattern", "label": "Cross-sibling theme propagation via localStorage", "nodes": ["readme_decision_theme_key", "apphtml_theme_bootstrap", "readme_buildfor_life_budget", "readme_buildfor_life_repair"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "README.md"}
],
"input_tokens": 0,
"output_tokens": 0
}
+936
View File
@@ -0,0 +1,936 @@
# Graph Report - C:/dev/build_for_life_project (2026-04-23)
## Corpus Check
- 189 files · ~54,875 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 453 nodes · 486 edges · 131 communities detected
- Extraction: 80% EXTRACTED · 20% INFERRED · 0% AMBIGUOUS · INFERRED: 97 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
- [[_COMMUNITY_Auth & Load Helpers|Auth & Load Helpers]]
- [[_COMMUNITY_Documents Service|Documents Service]]
- [[_COMMUNITY_Assets Service & CSV|Assets Service & CSV]]
- [[_COMMUNITY_Email & Markdown|Email & Markdown]]
- [[_COMMUNITY_Property Accounts|Property Accounts]]
- [[_COMMUNITY_Projects Service|Projects Service]]
- [[_COMMUNITY_App Shell & Theme|App Shell & Theme]]
- [[_COMMUNITY_Asset Core|Asset Core]]
- [[_COMMUNITY_Maintenance Core|Maintenance Core]]
- [[_COMMUNITY_Checklists|Checklists]]
- [[_COMMUNITY_Admin Scripts|Admin Scripts]]
- [[_COMMUNITY_Asset Types Editor|Asset Types Editor]]
- [[_COMMUNITY_Rooms & Floors|Rooms & Floors]]
- [[_COMMUNITY_Tasks|Tasks]]
- [[_COMMUNITY_User Management|User Management]]
- [[_COMMUNITY_DB Schema Helpers|DB Schema Helpers]]
- [[_COMMUNITY_Work Packages|Work Packages]]
- [[_COMMUNITY_Storage Layer|Storage Layer]]
- [[_COMMUNITY_Migration Workflow|Migration Workflow]]
- [[_COMMUNITY_Session Auth|Session Auth]]
- [[_COMMUNITY_Companies Service|Companies Service]]
- [[_COMMUNITY_Form Utilities|Form Utilities]]
- [[_COMMUNITY_Custom Fields Design|Custom Fields Design]]
- [[_COMMUNITY_Field Types|Field Types]]
- [[_COMMUNITY_Form Helper|Form Helper]]
- [[_COMMUNITY_Env Config|Env Config]]
- [[_COMMUNITY_Seed Script|Seed Script]]
- [[_COMMUNITY_Asset Location Design|Asset Location Design]]
- [[_COMMUNITY_Decision Design|Decision Design]]
- [[_COMMUNITY_Drizzle Config|Drizzle Config]]
- [[_COMMUNITY_Cluster 30|Cluster 30]]
- [[_COMMUNITY_Cluster 31|Cluster 31]]
- [[_COMMUNITY_Cluster 32|Cluster 32]]
- [[_COMMUNITY_Cluster 33|Cluster 33]]
- [[_COMMUNITY_Cluster 34|Cluster 34]]
- [[_COMMUNITY_Cluster 35|Cluster 35]]
- [[_COMMUNITY_Cluster 36|Cluster 36]]
- [[_COMMUNITY_Cluster 37|Cluster 37]]
- [[_COMMUNITY_Cluster 38|Cluster 38]]
- [[_COMMUNITY_Cluster 39|Cluster 39]]
- [[_COMMUNITY_Cluster 40|Cluster 40]]
- [[_COMMUNITY_Cluster 41|Cluster 41]]
- [[_COMMUNITY_Cluster 42|Cluster 42]]
- [[_COMMUNITY_Cluster 43|Cluster 43]]
- [[_COMMUNITY_Cluster 44|Cluster 44]]
- [[_COMMUNITY_Cluster 45|Cluster 45]]
- [[_COMMUNITY_Cluster 46|Cluster 46]]
- [[_COMMUNITY_Cluster 47|Cluster 47]]
- [[_COMMUNITY_Cluster 48|Cluster 48]]
- [[_COMMUNITY_Cluster 49|Cluster 49]]
- [[_COMMUNITY_Cluster 50|Cluster 50]]
- [[_COMMUNITY_Cluster 51|Cluster 51]]
- [[_COMMUNITY_Cluster 52|Cluster 52]]
- [[_COMMUNITY_Cluster 53|Cluster 53]]
- [[_COMMUNITY_Cluster 54|Cluster 54]]
- [[_COMMUNITY_Cluster 55|Cluster 55]]
- [[_COMMUNITY_Cluster 56|Cluster 56]]
- [[_COMMUNITY_Cluster 57|Cluster 57]]
- [[_COMMUNITY_Cluster 58|Cluster 58]]
- [[_COMMUNITY_Cluster 59|Cluster 59]]
- [[_COMMUNITY_Cluster 60|Cluster 60]]
- [[_COMMUNITY_Cluster 61|Cluster 61]]
- [[_COMMUNITY_Cluster 62|Cluster 62]]
- [[_COMMUNITY_Cluster 63|Cluster 63]]
- [[_COMMUNITY_Cluster 64|Cluster 64]]
- [[_COMMUNITY_Cluster 65|Cluster 65]]
- [[_COMMUNITY_Cluster 66|Cluster 66]]
- [[_COMMUNITY_Cluster 67|Cluster 67]]
- [[_COMMUNITY_Cluster 68|Cluster 68]]
- [[_COMMUNITY_Cluster 69|Cluster 69]]
- [[_COMMUNITY_Cluster 70|Cluster 70]]
- [[_COMMUNITY_Cluster 71|Cluster 71]]
- [[_COMMUNITY_Cluster 72|Cluster 72]]
- [[_COMMUNITY_Cluster 73|Cluster 73]]
- [[_COMMUNITY_Cluster 74|Cluster 74]]
- [[_COMMUNITY_Cluster 75|Cluster 75]]
- [[_COMMUNITY_Cluster 76|Cluster 76]]
- [[_COMMUNITY_Cluster 77|Cluster 77]]
- [[_COMMUNITY_Cluster 78|Cluster 78]]
- [[_COMMUNITY_Cluster 79|Cluster 79]]
- [[_COMMUNITY_Cluster 80|Cluster 80]]
- [[_COMMUNITY_Cluster 81|Cluster 81]]
- [[_COMMUNITY_Cluster 82|Cluster 82]]
- [[_COMMUNITY_Cluster 83|Cluster 83]]
- [[_COMMUNITY_Cluster 84|Cluster 84]]
- [[_COMMUNITY_Cluster 85|Cluster 85]]
- [[_COMMUNITY_Cluster 86|Cluster 86]]
- [[_COMMUNITY_Cluster 87|Cluster 87]]
- [[_COMMUNITY_Cluster 88|Cluster 88]]
- [[_COMMUNITY_Cluster 89|Cluster 89]]
- [[_COMMUNITY_Cluster 90|Cluster 90]]
- [[_COMMUNITY_Cluster 91|Cluster 91]]
- [[_COMMUNITY_Cluster 92|Cluster 92]]
- [[_COMMUNITY_Cluster 93|Cluster 93]]
- [[_COMMUNITY_Cluster 94|Cluster 94]]
- [[_COMMUNITY_Cluster 95|Cluster 95]]
- [[_COMMUNITY_Cluster 96|Cluster 96]]
- [[_COMMUNITY_Cluster 97|Cluster 97]]
- [[_COMMUNITY_Cluster 98|Cluster 98]]
- [[_COMMUNITY_Cluster 99|Cluster 99]]
- [[_COMMUNITY_Cluster 100|Cluster 100]]
- [[_COMMUNITY_Cluster 101|Cluster 101]]
- [[_COMMUNITY_Cluster 102|Cluster 102]]
- [[_COMMUNITY_Cluster 103|Cluster 103]]
- [[_COMMUNITY_Cluster 104|Cluster 104]]
- [[_COMMUNITY_Cluster 105|Cluster 105]]
- [[_COMMUNITY_Cluster 106|Cluster 106]]
- [[_COMMUNITY_Cluster 107|Cluster 107]]
- [[_COMMUNITY_Cluster 108|Cluster 108]]
- [[_COMMUNITY_Cluster 109|Cluster 109]]
- [[_COMMUNITY_Cluster 110|Cluster 110]]
- [[_COMMUNITY_Cluster 111|Cluster 111]]
- [[_COMMUNITY_Cluster 112|Cluster 112]]
- [[_COMMUNITY_Cluster 113|Cluster 113]]
- [[_COMMUNITY_Cluster 114|Cluster 114]]
- [[_COMMUNITY_Cluster 115|Cluster 115]]
- [[_COMMUNITY_Cluster 116|Cluster 116]]
- [[_COMMUNITY_Cluster 117|Cluster 117]]
- [[_COMMUNITY_Cluster 118|Cluster 118]]
- [[_COMMUNITY_Cluster 119|Cluster 119]]
- [[_COMMUNITY_Cluster 120|Cluster 120]]
- [[_COMMUNITY_Cluster 121|Cluster 121]]
- [[_COMMUNITY_Cluster 122|Cluster 122]]
- [[_COMMUNITY_Cluster 123|Cluster 123]]
- [[_COMMUNITY_Cluster 124|Cluster 124]]
- [[_COMMUNITY_Cluster 125|Cluster 125]]
- [[_COMMUNITY_Cluster 126|Cluster 126]]
- [[_COMMUNITY_Cluster 127|Cluster 127]]
- [[_COMMUNITY_Cluster 128|Cluster 128]]
- [[_COMMUNITY_Cluster 129|Cluster 129]]
- [[_COMMUNITY_Cluster 130|Cluster 130]]
## God Nodes (most connected - your core abstractions)
1. `load()` - 79 edges
2. `GET()` - 20 edges
3. `LocalDiskStorage` - 10 edges
4. `load()` - 9 edges
5. `S3Storage` - 8 edges
6. `buildfor_life_ops` - 8 edges
7. `fanOutExternal()` - 7 edges
8. `getTaskWithSubtasks()` - 7 edges
9. `handle()` - 6 edges
10. `uploadDocument()` - 6 edges
## Surprising Connections (you probably didn't know these)
- `load()` --calls--> `renderMarkdown()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\markdown.ts
- `load()` --calls--> `listTemplates()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\checklists.ts
- `load()` --calls--> `getCompany()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\companies.ts
- `load()` --calls--> `listDocumentsForScope()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\documents.ts
- `load()` --calls--> `countOverdueForCompany()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\maintenance.ts
## Hyperedges (group relationships)
- **Session auth flow (cookie, hash, hook, gate)** — readme_auth_model, readme_sha256_cookie_hash, readme_sliding_renewal, readme_hooks_server, readme_layout_app_group [EXTRACTED 0.95]
- **Storage abstraction (adapter, local impl, signed URLs, file route)** — readme_storage_adapter, readme_local_disk_storage, readme_hmac_signed_urls, readme_api_files_route, readme_storage_model [EXTRACTED 0.95]
- **Cross-sibling theme propagation via localStorage** — readme_decision_theme_key, apphtml_theme_bootstrap, readme_buildfor_life_budget, readme_buildfor_life_repair [INFERRED 0.80]
## Communities
### Community 0 - "Auth & Load Helpers"
Cohesion: 0.04
Nodes (12): requireAdmin(), requireCompany(), load(), parseSettings(), getPageWithCurrentRevision(), getRevision(), listPagesForScope(), listRevisions() (+4 more)
### Community 1 - "Documents Service"
Cohesion: 0.07
Nodes (13): assertScope(), deleteDocument(), getDocument(), listDocumentsForScope(), signedUrlForDocument(), uploadDocument(), getStorage(), LocalDiskStorage (+5 more)
### Community 2 - "Assets Service & CSV"
Cohesion: 0.11
Nodes (13): listAssets(), csvResponse(), toCsv(), gatherCustomFieldsFromForm(), createDecision(), decisionScopeLink(), listDecisionsForScope(), clamp() (+5 more)
### Community 3 - "Email & Markdown"
Cohesion: 0.13
Nodes (15): getTransport(), isEmailConfigured(), sendEmail(), escapeHtml(), html(), renderMarkdown(), buildBodies(), isMatrixConfigured() (+7 more)
### Community 4 - "Property Accounts"
Cohesion: 0.15
Nodes (12): assertProperty(), createAccount(), deleteAccount(), listAccounts(), handle(), deleteFloor(), handleLogout(), createSession() (+4 more)
### Community 5 - "Projects Service"
Cohesion: 0.11
Nodes (6): load(), unreadCountForUser(), getProject(), listProjects(), getProperty(), listProperties()
### Community 6 - "App Shell & Theme"
Cohesion: 0.13
Nodes (16): data-sveltekit-preload-data=hover, app.html root document, %sveltekit.head% / %sveltekit.body% placeholders, Tailwind body classes with dark: variants, Dark-mode bootstrap inline script (localStorage['theme']), Argon2id sessions (@node-rs/argon2 + @oslojs/crypto), buildfor_life_budget (sibling), buildfor_life_ops (+8 more)
### Community 7 - "Asset Core"
Cohesion: 0.22
Nodes (10): assertContainer(), createAsset(), loadTypeWithFields(), moveAsset(), updateAsset(), validateCustomFields(), buildCustomFieldsSchema(), getCachedCustomFieldsSchema() (+2 more)
### Community 8 - "Maintenance Core"
Cohesion: 0.22
Nodes (13): addInterval(), assertAsset(), countOverdueForCompany(), createSchedule(), deleteSchedule(), getSchedule(), listDueAndOverdue(), listEventsForAsset() (+5 more)
### Community 9 - "Checklists"
Cohesion: 0.19
Nodes (7): addTemplateItem(), deleteTemplate(), getInstance(), getTemplate(), listTemplates(), removeTemplateItem(), setItemDone()
### Community 10 - "Admin Scripts"
Cohesion: 0.24
Nodes (9): main(), readArg(), slugify(), stripSurroundingQuotes(), main(), readArg(), stripSurroundingQuotes(), normalizeEmail() (+1 more)
### Community 11 - "Asset Types Editor"
Cohesion: 0.31
Nodes (8): addFieldDef(), createCompanyAssetType(), deleteCompanyAssetType(), loadEditableType(), normalizeFieldKey(), removeFieldDef(), slugifyTypeSlug(), updateCompanyAssetType()
### Community 12 - "Rooms & Floors"
Cohesion: 0.33
Nodes (8): assertProperty(), createFloor(), createRoom(), getRoom(), listFloors(), listRoomsWithCounts(), softDeleteRoom(), updateRoom()
### Community 13 - "Tasks"
Cohesion: 0.36
Nodes (9): addSubtask(), assertWorkPackage(), createTask(), getTaskWithSubtasks(), listTasksForWorkPackage(), removeSubtask(), softDeleteTask(), toggleSubtask() (+1 more)
### Community 14 - "User Management"
Cohesion: 0.38
Nodes (8): assertMembership(), countAdmins(), listCompanyUsers(), removeUserFromCompany(), resetUserPassword(), setUserActive(), setUserRoleInCompany(), updateDisplayName()
### Community 15 - "DB Schema Helpers"
Cohesion: 0.29
Nodes (0):
### Community 16 - "Work Packages"
Cohesion: 0.48
Nodes (6): assertProject(), createWorkPackage(), getWorkPackage(), listWorkPackagesForProject(), softDeleteWorkPackage(), updateWorkPackage()
### Community 17 - "Storage Layer"
Cohesion: 0.38
Nodes (7): /api/files route (signature verification + streaming), HMAC-signed short-lived file URLs, LocalDiskStorage, Phase 5: QR, notifications, S3, S3Storage (future), StorageAdapter interface, Storage model (opaque storage_key)
### Community 18 - "Migration Workflow"
Cohesion: 0.29
Nodes (7): Use CONCURRENTLY on large-table index changes, Drizzle migrations directory, Review SQL after generate: enum/index/custom_fields, npm run db:generate, npm run db:migrate, npm run db:push (dev only), npm run db:studio (Drizzle Studio)
### Community 19 - "Session Auth"
Cohesion: 0.33
Nodes (6): Auth model (sessions + hashed cookies), company_users role mapping, hooks.server.ts (session validation), (app) route group (authed shell), SHA-256 cookie hashing before DB lookup, Sliding session renewal (30d/15d)
### Community 20 - "Companies Service"
Cohesion: 0.6
Nodes (4): createCompanyWithAdmin(), getCompany(), slugify(), updateCompany()
### Community 21 - "Form Utilities"
Cohesion: 0.4
Nodes (1): e2n()
### Community 22 - "Custom Fields Design"
Cohesion: 0.5
Nodes (4): Immutable-key policy reference, Decision: immutable custom-field keys, Decision: JSONB custom fields + asset_field_defs, Phase 1: Properties + Assets
### Community 23 - "Field Types"
Cohesion: 1.0
Nodes (0):
### Community 24 - "Form Helper"
Cohesion: 1.0
Nodes (0):
### Community 25 - "Env Config"
Cohesion: 1.0
Nodes (2): .env configuration, env.ts (Zod-validated process.env)
### Community 26 - "Seed Script"
Cohesion: 1.0
Nodes (2): npm run create-user script, src/lib/server/db/schema/
### Community 27 - "Asset Location Design"
Cohesion: 1.0
Nodes (2): Decision: asset_location_history (movable assets), Decision: XOR asset location (project XOR property)
### Community 28 - "Decision Design"
Cohesion: 1.0
Nodes (2): Decision: decisions scoped to project/property/asset/work_package, Phase 3: Projects + structured decisions
### Community 29 - "Drizzle Config"
Cohesion: 1.0
Nodes (0):
### Community 30 - "Cluster 30"
Cohesion: 1.0
Nodes (0):
### Community 31 - "Cluster 31"
Cohesion: 1.0
Nodes (0):
### Community 32 - "Cluster 32"
Cohesion: 1.0
Nodes (0):
### Community 33 - "Cluster 33"
Cohesion: 1.0
Nodes (0):
### Community 34 - "Cluster 34"
Cohesion: 1.0
Nodes (0):
### Community 35 - "Cluster 35"
Cohesion: 1.0
Nodes (0):
### Community 36 - "Cluster 36"
Cohesion: 1.0
Nodes (0):
### Community 37 - "Cluster 37"
Cohesion: 1.0
Nodes (0):
### Community 38 - "Cluster 38"
Cohesion: 1.0
Nodes (0):
### Community 39 - "Cluster 39"
Cohesion: 1.0
Nodes (0):
### Community 40 - "Cluster 40"
Cohesion: 1.0
Nodes (0):
### Community 41 - "Cluster 41"
Cohesion: 1.0
Nodes (0):
### Community 42 - "Cluster 42"
Cohesion: 1.0
Nodes (0):
### Community 43 - "Cluster 43"
Cohesion: 1.0
Nodes (0):
### Community 44 - "Cluster 44"
Cohesion: 1.0
Nodes (0):
### Community 45 - "Cluster 45"
Cohesion: 1.0
Nodes (0):
### Community 46 - "Cluster 46"
Cohesion: 1.0
Nodes (0):
### Community 47 - "Cluster 47"
Cohesion: 1.0
Nodes (0):
### Community 48 - "Cluster 48"
Cohesion: 1.0
Nodes (0):
### Community 49 - "Cluster 49"
Cohesion: 1.0
Nodes (0):
### Community 50 - "Cluster 50"
Cohesion: 1.0
Nodes (0):
### Community 51 - "Cluster 51"
Cohesion: 1.0
Nodes (0):
### Community 52 - "Cluster 52"
Cohesion: 1.0
Nodes (0):
### Community 53 - "Cluster 53"
Cohesion: 1.0
Nodes (0):
### Community 54 - "Cluster 54"
Cohesion: 1.0
Nodes (0):
### Community 55 - "Cluster 55"
Cohesion: 1.0
Nodes (0):
### Community 56 - "Cluster 56"
Cohesion: 1.0
Nodes (0):
### Community 57 - "Cluster 57"
Cohesion: 1.0
Nodes (0):
### Community 58 - "Cluster 58"
Cohesion: 1.0
Nodes (0):
### Community 59 - "Cluster 59"
Cohesion: 1.0
Nodes (0):
### Community 60 - "Cluster 60"
Cohesion: 1.0
Nodes (0):
### Community 61 - "Cluster 61"
Cohesion: 1.0
Nodes (0):
### Community 62 - "Cluster 62"
Cohesion: 1.0
Nodes (0):
### Community 63 - "Cluster 63"
Cohesion: 1.0
Nodes (0):
### Community 64 - "Cluster 64"
Cohesion: 1.0
Nodes (0):
### Community 65 - "Cluster 65"
Cohesion: 1.0
Nodes (0):
### Community 66 - "Cluster 66"
Cohesion: 1.0
Nodes (0):
### Community 67 - "Cluster 67"
Cohesion: 1.0
Nodes (0):
### Community 68 - "Cluster 68"
Cohesion: 1.0
Nodes (0):
### Community 69 - "Cluster 69"
Cohesion: 1.0
Nodes (0):
### Community 70 - "Cluster 70"
Cohesion: 1.0
Nodes (0):
### Community 71 - "Cluster 71"
Cohesion: 1.0
Nodes (0):
### Community 72 - "Cluster 72"
Cohesion: 1.0
Nodes (0):
### Community 73 - "Cluster 73"
Cohesion: 1.0
Nodes (0):
### Community 74 - "Cluster 74"
Cohesion: 1.0
Nodes (0):
### Community 75 - "Cluster 75"
Cohesion: 1.0
Nodes (0):
### Community 76 - "Cluster 76"
Cohesion: 1.0
Nodes (0):
### Community 77 - "Cluster 77"
Cohesion: 1.0
Nodes (0):
### Community 78 - "Cluster 78"
Cohesion: 1.0
Nodes (0):
### Community 79 - "Cluster 79"
Cohesion: 1.0
Nodes (0):
### Community 80 - "Cluster 80"
Cohesion: 1.0
Nodes (0):
### Community 81 - "Cluster 81"
Cohesion: 1.0
Nodes (0):
### Community 82 - "Cluster 82"
Cohesion: 1.0
Nodes (0):
### Community 83 - "Cluster 83"
Cohesion: 1.0
Nodes (0):
### Community 84 - "Cluster 84"
Cohesion: 1.0
Nodes (0):
### Community 85 - "Cluster 85"
Cohesion: 1.0
Nodes (0):
### Community 86 - "Cluster 86"
Cohesion: 1.0
Nodes (0):
### Community 87 - "Cluster 87"
Cohesion: 1.0
Nodes (0):
### Community 88 - "Cluster 88"
Cohesion: 1.0
Nodes (0):
### Community 89 - "Cluster 89"
Cohesion: 1.0
Nodes (0):
### Community 90 - "Cluster 90"
Cohesion: 1.0
Nodes (0):
### Community 91 - "Cluster 91"
Cohesion: 1.0
Nodes (0):
### Community 92 - "Cluster 92"
Cohesion: 1.0
Nodes (0):
### Community 93 - "Cluster 93"
Cohesion: 1.0
Nodes (0):
### Community 94 - "Cluster 94"
Cohesion: 1.0
Nodes (0):
### Community 95 - "Cluster 95"
Cohesion: 1.0
Nodes (0):
### Community 96 - "Cluster 96"
Cohesion: 1.0
Nodes (0):
### Community 97 - "Cluster 97"
Cohesion: 1.0
Nodes (0):
### Community 98 - "Cluster 98"
Cohesion: 1.0
Nodes (0):
### Community 99 - "Cluster 99"
Cohesion: 1.0
Nodes (0):
### Community 100 - "Cluster 100"
Cohesion: 1.0
Nodes (0):
### Community 101 - "Cluster 101"
Cohesion: 1.0
Nodes (0):
### Community 102 - "Cluster 102"
Cohesion: 1.0
Nodes (0):
### Community 103 - "Cluster 103"
Cohesion: 1.0
Nodes (0):
### Community 104 - "Cluster 104"
Cohesion: 1.0
Nodes (0):
### Community 105 - "Cluster 105"
Cohesion: 1.0
Nodes (0):
### Community 106 - "Cluster 106"
Cohesion: 1.0
Nodes (0):
### Community 107 - "Cluster 107"
Cohesion: 1.0
Nodes (0):
### Community 108 - "Cluster 108"
Cohesion: 1.0
Nodes (0):
### Community 109 - "Cluster 109"
Cohesion: 1.0
Nodes (0):
### Community 110 - "Cluster 110"
Cohesion: 1.0
Nodes (0):
### Community 111 - "Cluster 111"
Cohesion: 1.0
Nodes (0):
### Community 112 - "Cluster 112"
Cohesion: 1.0
Nodes (0):
### Community 113 - "Cluster 113"
Cohesion: 1.0
Nodes (0):
### Community 114 - "Cluster 114"
Cohesion: 1.0
Nodes (0):
### Community 115 - "Cluster 115"
Cohesion: 1.0
Nodes (0):
### Community 116 - "Cluster 116"
Cohesion: 1.0
Nodes (0):
### Community 117 - "Cluster 117"
Cohesion: 1.0
Nodes (0):
### Community 118 - "Cluster 118"
Cohesion: 1.0
Nodes (0):
### Community 119 - "Cluster 119"
Cohesion: 1.0
Nodes (0):
### Community 120 - "Cluster 120"
Cohesion: 1.0
Nodes (1): npm run db:seed
### Community 121 - "Cluster 121"
Cohesion: 1.0
Nodes (1): npm run validate (check + build)
### Community 122 - "Cluster 122"
Cohesion: 1.0
Nodes (1): (auth) route group (login shell)
### Community 123 - "Cluster 123"
Cohesion: 1.0
Nodes (1): Phase 0: scaffold (shipped)
### Community 124 - "Cluster 124"
Cohesion: 1.0
Nodes (1): Phase 2: Checklists + maintenance
### Community 125 - "Cluster 125"
Cohesion: 1.0
Nodes (1): Decision: UUID v7 primary keys
### Community 126 - "Cluster 126"
Cohesion: 1.0
Nodes (1): Decision: timestamptz UTC everywhere
### Community 127 - "Cluster 127"
Cohesion: 1.0
Nodes (1): Decision: soft delete (deleted_at)
### Community 128 - "Cluster 128"
Cohesion: 1.0
Nodes (1): Decision: numeric(18,4) + char(3) currency
### Community 129 - "Cluster 129"
Cohesion: 1.0
Nodes (1): Decision: company default currency in settings_json
### Community 130 - "Cluster 130"
Cohesion: 1.0
Nodes (1): Decision: tabs = nested routes (not query-string)
## Knowledge Gaps
- **42 isolated node(s):** `buildfor_life_budget (sibling)`, `buildfor_life_repair (sibling)`, `PostgreSQL 16+ via Drizzle ORM + Zod`, `Argon2id sessions (@node-rs/argon2 + @oslojs/crypto)`, `Sharp image thumbnails` (+37 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Field Types`** (2 nodes): `needsEnumValues()`, `field-types.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Form Helper`** (2 nodes): `emptyToNull()`, `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Env Config`** (2 nodes): `.env configuration`, `env.ts (Zod-validated process.env)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Seed Script`** (2 nodes): `npm run create-user script`, `src/lib/server/db/schema/`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Asset Location Design`** (2 nodes): `Decision: asset_location_history (movable assets)`, `Decision: XOR asset location (project XOR property)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Decision Design`** (2 nodes): `Decision: decisions scoped to project/property/asset/work_package`, `Phase 3: Projects + structured decisions`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Drizzle Config`** (1 nodes): `drizzle.config.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 30`** (1 nodes): `svelte.config.js`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 31`** (1 nodes): `vite.config.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 32`** (1 nodes): `app.d.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 33`** (1 nodes): `accounts.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 34`** (1 nodes): `notifications.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 35`** (1 nodes): `roles.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 36`** (1 nodes): `CustomFieldsForm.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 37`** (1 nodes): `Sidebar.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 38`** (1 nodes): `TabNav.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 39`** (1 nodes): `ThemeToggle.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 40`** (1 nodes): `TopBar.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 41`** (1 nodes): `env.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 42`** (1 nodes): `types.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 43`** (1 nodes): `client.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 44`** (1 nodes): `accounts.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 45`** (1 nodes): `assets.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 46`** (1 nodes): `checklists.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 47`** (1 nodes): `decisions.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 48`** (1 nodes): `documents.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 49`** (1 nodes): `index.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 50`** (1 nodes): `maintenance.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 51`** (1 nodes): `notifications.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 52`** (1 nodes): `projects.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 53`** (1 nodes): `properties.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 54`** (1 nodes): `rooms.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 55`** (1 nodes): `tenancy.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 56`** (1 nodes): `wiki.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 57`** (1 nodes): `+error.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 58`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 59`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 60`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 61`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 62`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 63`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 64`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 65`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 66`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 67`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 68`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 69`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 70`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 71`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 72`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 73`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 74`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 75`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 76`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 77`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 78`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 79`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 80`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 81`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 82`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 83`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 84`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 85`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 86`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 87`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 88`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 89`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 90`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 91`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 92`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 93`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 94`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 95`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 96`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 97`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 98`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 99`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 100`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 101`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 102`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 103`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 104`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 105`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 106`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 107`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 108`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 109`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 110`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 111`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 112`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 113`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 114`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 115`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 116`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 117`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 118`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 119`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 120`** (1 nodes): `npm run db:seed`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 121`** (1 nodes): `npm run validate (check + build)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 122`** (1 nodes): `(auth) route group (login shell)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 123`** (1 nodes): `Phase 0: scaffold (shipped)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 124`** (1 nodes): `Phase 2: Checklists + maintenance`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 125`** (1 nodes): `Decision: UUID v7 primary keys`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 126`** (1 nodes): `Decision: timestamptz UTC everywhere`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 127`** (1 nodes): `Decision: soft delete (deleted_at)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 128`** (1 nodes): `Decision: numeric(18,4) + char(3) currency`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 129`** (1 nodes): `Decision: company default currency in settings_json`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 130`** (1 nodes): `Decision: tabs = nested routes (not query-string)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `load()` connect `Auth & Load Helpers` to `Documents Service`, `Assets Service & CSV`, `Email & Markdown`, `Property Accounts`, `Projects Service`, `Asset Core`, `Maintenance Core`, `Checklists`, `Rooms & Floors`, `Tasks`, `User Management`, `Work Packages`, `Companies Service`, `Form Utilities`?**
_High betweenness centrality (0.298) - this node is a cross-community bridge._
- **Why does `GET()` connect `Assets Service & CSV` to `Auth & Load Helpers`, `Documents Service`, `Property Accounts`, `Asset Core`, `Maintenance Core`?**
_High betweenness centrality (0.120) - this node is a cross-community bridge._
- **Why does `listCompanyUsers()` connect `User Management` to `Auth & Load Helpers`?**
_High betweenness centrality (0.040) - this node is a cross-community bridge._
- **Are the 34 inferred relationships involving `load()` (e.g. with `countOverdueForCompany()` and `listDueAndOverdue()`) actually correct?**
_`load()` has 34 INFERRED edges - model-reasoned connections that need verification._
- **Are the 13 inferred relationships involving `GET()` (e.g. with `syncFieldDefs()` and `handle()`) actually correct?**
_`GET()` has 13 INFERRED edges - model-reasoned connections that need verification._
- **Are the 5 inferred relationships involving `load()` (e.g. with `setActiveCompany()` and `unreadCountForUser()`) actually correct?**
_`load()` has 5 INFERRED edges - model-reasoned connections that need verification._
- **What connects `buildfor_life_budget (sibling)`, `buildfor_life_repair (sibling)`, `PostgreSQL 16+ via Drizzle ORM + Zod` to the rest of the system?**
_42 weakly-connected nodes found - possible documentation gaps or missing edges._
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "vite_config_ts", "label": "vite.config.ts", "file_type": "code", "source_file": "vite.config.ts", "source_location": "L1"}], "edges": [{"source": "vite_config_ts", "target": "vite", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "vite.config.ts", "source_location": "L1", "weight": 1.0}, {"source": "vite_config_ts", "target": "vite", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "vite.config.ts", "source_location": "L2", "weight": 1.0}, {"source": "vite_config_ts", "target": "vite", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "vite.config.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_client_ts", "label": "client.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\client.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_db_client_ts", "target": "node_postgres", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\client.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_db_client_ts", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\client.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_lib_server_db_client_ts", "target": "src_lib_server_env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\client.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_lib_server_db_client_ts", "target": "src_lib_server_db_schema", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\client.ts", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_documents_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L12"}], "edges": [{"source": "src_routes_app_properties_id_documents_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_properties_id_documents_page_server_ts", "target": "documents", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_properties_id_documents_page_server_ts", "target": "src_routes_app_properties_id_documents_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L8", "weight": 1.0}, {"source": "src_routes_app_properties_id_documents_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L12", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "listDocumentsForScope", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L14"}, {"caller_nid": "page_server_load", "callee": "all", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L15"}, {"caller_nid": "page_server_load", "callee": "map", "source_file": "src\\routes\\(app)\\properties\\[id]\\documents\\+page.server.ts", "source_location": "L16"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_layout_svelte", "label": "+layout.svelte", "file_type": "code", "source_file": "src\\routes\\+layout.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_e2n", "label": "e2n()", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L15"}], "edges": [{"source": "src_routes_app_projects_id_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_projects_id_page_server_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_projects_id_page_server_ts", "target": "projects", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_projects_id_page_server_ts", "target": "src_routes_app_projects_id_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_projects_id_page_server_ts", "target": "page_server_e2n", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\+page.server.ts", "source_location": "L15", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_assets_id_logs_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\assets\\[id]\\logs\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_wiki_slug_history_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\history\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "svelte_config_js", "label": "svelte.config.js", "file_type": "code", "source_file": "svelte.config.js", "source_location": "L1"}], "edges": [{"source": "svelte_config_js", "target": "adapter_node", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "svelte.config.js", "source_location": "L1", "weight": 1.0}, {"source": "svelte_config_js", "target": "vite_plugin_svelte", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "svelte.config.js", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_wiki_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L5"}], "edges": [{"source": "src_routes_app_wiki_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_wiki_page_server_ts", "target": "wiki", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_wiki_page_server_ts", "target": "src_routes_app_wiki_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_wiki_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L5", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L6"}, {"caller_nid": "page_server_load", "callee": "trim", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L7"}, {"caller_nid": "page_server_load", "callee": "get", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L7"}, {"caller_nid": "page_server_load", "callee": "searchPages", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "listPagesForScope", "source_file": "src\\routes\\(app)\\wiki\\+page.server.ts", "source_location": "L10"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_components_themetoggle_svelte", "label": "ThemeToggle.svelte", "file_type": "code", "source_file": "src\\lib\\components\\ThemeToggle.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_assets_id_history_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L9"}], "edges": [{"source": "src_routes_app_assets_id_history_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "drizzle_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "assets", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "properties", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L5", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "tenancy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L6", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "src_routes_app_assets_id_history_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L7", "weight": 1.0}, {"source": "src_routes_app_assets_id_history_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L9", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L10"}, {"caller_nid": "page_server_load", "callee": "aliasedTable", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L11"}, {"caller_nid": "page_server_load", "callee": "aliasedTable", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L12"}, {"caller_nid": "page_server_load", "callee": "orderBy", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "where", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "leftJoin", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "leftJoin", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "leftJoin", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "from", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "select", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L13"}, {"caller_nid": "page_server_load", "callee": "eq", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L25"}, {"caller_nid": "page_server_load", "callee": "eq", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L26"}, {"caller_nid": "page_server_load", "callee": "eq", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L27"}, {"caller_nid": "page_server_load", "callee": "eq", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L28"}, {"caller_nid": "page_server_load", "callee": "desc", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.server.ts", "source_location": "L29"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_assets_id_layout_svelte", "label": "+layout.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\assets\\[id]\\+layout.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_wiki_new_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\new\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_checklists_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\checklists\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_markdown_ts", "label": "markdown.ts", "file_type": "code", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L1"}, {"id": "markdown_html", "label": "html()", "file_type": "code", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L10"}, {"id": "markdown_escapehtml", "label": "escapeHtml()", "file_type": "code", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L17"}, {"id": "markdown_rendermarkdown", "label": "renderMarkdown()", "file_type": "code", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L26"}], "edges": [{"source": "src_lib_server_markdown_ts", "target": "marked", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_markdown_ts", "target": "markdown_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L10", "weight": 1.0}, {"source": "src_lib_server_markdown_ts", "target": "markdown_escapehtml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L17", "weight": 1.0}, {"source": "src_lib_server_markdown_ts", "target": "markdown_rendermarkdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L26", "weight": 1.0}, {"source": "markdown_html", "target": "markdown_escapehtml", "relation": "calls", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L12", "weight": 1.0}], "raw_calls": [{"caller_nid": "markdown_escapehtml", "callee": "replace", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L18"}, {"caller_nid": "markdown_escapehtml", "callee": "replace", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L18"}, {"caller_nid": "markdown_escapehtml", "callee": "replace", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L18"}, {"caller_nid": "markdown_escapehtml", "callee": "replace", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L18"}, {"caller_nid": "markdown_escapehtml", "callee": "replace", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L18"}, {"caller_nid": "markdown_rendermarkdown", "callee": "parse", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L28"}, {"caller_nid": "markdown_rendermarkdown", "callee": "replace", "source_file": "src\\lib\\server\\markdown.ts", "source_location": "L30"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_wiki_slug_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L6"}], "edges": [{"source": "src_routes_app_projects_id_wiki_slug_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_projects_id_wiki_slug_page_server_ts", "target": "wiki", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_projects_id_wiki_slug_page_server_ts", "target": "markdown", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_projects_id_wiki_slug_page_server_ts", "target": "src_routes_app_projects_id_wiki_slug_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_projects_id_wiki_slug_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L7"}, {"caller_nid": "page_server_load", "callee": "getPageWithCurrentRevision", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L8"}, {"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "renderMarkdown", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.server.ts", "source_location": "L14"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_work_wpid_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L8"}], "edges": [{"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "work_packages", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "tasks", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L5", "weight": 1.0}, {"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "src_routes_app_projects_id_work_wpid_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L6", "weight": 1.0}, {"source": "src_routes_app_projects_id_work_wpid_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L8", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "getWorkPackage", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L10"}, {"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L11"}, {"caller_nid": "page_server_load", "callee": "listTasksForWorkPackage", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.server.ts", "source_location": "L12"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_wiki_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\wiki\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_admin_users_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L16"}], "edges": [{"source": "src_routes_app_admin_users_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_admin_users_page_server_ts", "target": "guards", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_admin_users_page_server_ts", "target": "users", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_admin_users_page_server_ts", "target": "src_routes_app_admin_users_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L12", "weight": 1.0}, {"source": "src_routes_app_admin_users_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L16", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "requireCompany", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L17"}, {"caller_nid": "page_server_load", "callee": "listCompanyUsers", "source_file": "src\\routes\\(app)\\admin\\users\\+page.server.ts", "source_location": "L18"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_layout_svelte", "label": "+layout.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_schema_documents_ts", "label": "documents.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\schema\\documents.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_db_schema_documents_ts", "target": "pg_core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\documents.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_db_schema_documents_ts", "target": "src_lib_server_db_schema_tenancy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\documents.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_lib_server_db_schema_documents_ts", "target": "src_lib_server_db_schema_shared", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\documents.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_auth_types_ts", "label": "types.ts", "file_type": "code", "source_file": "src\\lib\\server\\auth\\types.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_env_ts", "label": "env.ts", "file_type": "code", "source_file": "src\\lib\\server\\env.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_env_ts", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\env.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_env_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\env.ts", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_assets_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_layout_svelte", "label": "+layout.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\+layout.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_schema_accounts_ts", "label": "accounts.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\schema\\accounts.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_db_schema_accounts_ts", "target": "pg_core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\accounts.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_db_schema_accounts_ts", "target": "src_lib_server_db_schema_properties", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\accounts.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_lib_server_db_schema_accounts_ts", "target": "src_lib_server_db_schema_shared", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\accounts.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_e2n", "label": "e2n()", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L19"}], "edges": [{"source": "src_routes_app_properties_id_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_properties_id_page_server_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_properties_id_page_server_ts", "target": "properties", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_properties_id_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_properties_id_page_server_ts", "target": "src_routes_app_properties_id_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L5", "weight": 1.0}, {"source": "src_routes_app_properties_id_page_server_ts", "target": "page_server_e2n", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.server.ts", "source_location": "L19", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_schema_tenancy_ts", "label": "tenancy.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\schema\\tenancy.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_db_schema_tenancy_ts", "target": "pg_core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\tenancy.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_db_schema_tenancy_ts", "target": "src_lib_server_db_schema_shared", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\tenancy.ts", "source_location": "L10", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_admin_asset_types_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L7"}], "edges": [{"source": "src_routes_app_admin_asset_types_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_admin_asset_types_page_server_ts", "target": "drizzle_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_admin_asset_types_page_server_ts", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_admin_asset_types_page_server_ts", "target": "assets", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_admin_asset_types_page_server_ts", "target": "src_routes_app_admin_asset_types_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L5", "weight": 1.0}, {"source": "src_routes_app_admin_asset_types_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L7", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L8"}, {"caller_nid": "page_server_load", "callee": "orderBy", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "where", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "from", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "select", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L9"}, {"caller_nid": "page_server_load", "callee": "or", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L25"}, {"caller_nid": "page_server_load", "callee": "isNull", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L25"}, {"caller_nid": "page_server_load", "callee": "eq", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L25"}, {"caller_nid": "page_server_load", "callee": "asc", "source_file": "src\\routes\\(app)\\admin\\asset-types\\+page.server.ts", "source_location": "L26"}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_decisions_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\decisions\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_hooks_server_ts", "label": "hooks.server.ts", "file_type": "code", "source_file": "src\\hooks.server.ts", "source_location": "L1"}, {"id": "hooks_server_handle", "label": "handle()", "file_type": "code", "source_file": "src\\hooks.server.ts", "source_location": "L9"}], "edges": [{"source": "src_hooks_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\hooks.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_hooks_server_ts", "target": "session", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\hooks.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_hooks_server_ts", "target": "hooks_server_handle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\hooks.server.ts", "source_location": "L9", "weight": 1.0}], "raw_calls": [{"caller_nid": "hooks_server_handle", "callee": "get", "source_file": "src\\hooks.server.ts", "source_location": "L14"}, {"caller_nid": "hooks_server_handle", "callee": "validateSession", "source_file": "src\\hooks.server.ts", "source_location": "L16"}, {"caller_nid": "hooks_server_handle", "callee": "refreshSession", "source_file": "src\\hooks.server.ts", "source_location": "L23"}, {"caller_nid": "hooks_server_handle", "callee": "set", "source_file": "src\\hooks.server.ts", "source_location": "L24"}, {"caller_nid": "hooks_server_handle", "callee": "includes", "source_file": "src\\hooks.server.ts", "source_location": "L28"}, {"caller_nid": "hooks_server_handle", "callee": "delete", "source_file": "src\\hooks.server.ts", "source_location": "L33"}, {"caller_nid": "hooks_server_handle", "callee": "resolve", "source_file": "src\\hooks.server.ts", "source_location": "L37"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_assets_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L5"}], "edges": [{"source": "src_routes_app_projects_id_assets_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_projects_id_assets_page_server_ts", "target": "assets", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_projects_id_assets_page_server_ts", "target": "src_routes_app_projects_id_assets_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_projects_id_assets_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L5", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L6"}, {"caller_nid": "page_server_load", "callee": "listAssets", "source_file": "src\\routes\\(app)\\projects\\[id]\\assets\\+page.server.ts", "source_location": "L7"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_error_svelte", "label": "+error.svelte", "file_type": "code", "source_file": "src\\routes\\+error.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_roles_ts", "label": "roles.ts", "file_type": "code", "source_file": "src\\lib\\roles.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_assets_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L5"}], "edges": [{"source": "src_routes_app_properties_id_assets_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_properties_id_assets_page_server_ts", "target": "assets", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_properties_id_assets_page_server_ts", "target": "src_routes_app_properties_id_assets_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_properties_id_assets_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L5", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L6"}, {"caller_nid": "page_server_load", "callee": "listAssets", "source_file": "src\\routes\\(app)\\properties\\[id]\\assets\\+page.server.ts", "source_location": "L7"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_auth_guards_ts", "label": "guards.ts", "file_type": "code", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L1"}, {"id": "guards_requirecompany", "label": "requireCompany()", "file_type": "code", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L8"}, {"id": "guards_requireadmin", "label": "requireAdmin()", "file_type": "code", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L22"}], "edges": [{"source": "src_lib_server_auth_guards_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_auth_guards_ts", "target": "src_lib_server_auth_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_lib_server_auth_guards_ts", "target": "guards_requirecompany", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L8", "weight": 1.0}, {"source": "src_lib_server_auth_guards_ts", "target": "guards_requireadmin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L22", "weight": 1.0}, {"source": "guards_requireadmin", "target": "guards_requirecompany", "relation": "calls", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "guards_requirecompany", "callee": "error", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L13"}, {"caller_nid": "guards_requirecompany", "callee": "error", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L14"}, {"caller_nid": "guards_requireadmin", "callee": "error", "source_file": "src\\lib\\server\\auth\\guards.ts", "source_location": "L29"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_assets_id_history_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\assets\\[id]\\history\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_auth_login_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L22"}], "edges": [{"source": "src_routes_auth_login_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "drizzle_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "tenancy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L5", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "password", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L6", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "session", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L7", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "email", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L13", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "src_routes_auth_login_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L14", "weight": 1.0}, {"source": "src_routes_auth_login_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L22", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "get", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L24"}, {"caller_nid": "page_server_load", "callee": "redirect", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L25"}, {"caller_nid": "page_server_load", "callee": "get", "source_file": "src\\routes\\(auth)\\login\\+page.server.ts", "source_location": "L27"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_wiki_slug_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\wiki\\[slug]\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_admin_company_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\admin\\company\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_rooms_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\rooms\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_new_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_e2n", "label": "e2n()", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L15"}], "edges": [{"source": "src_routes_app_projects_new_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_projects_new_page_server_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_projects_new_page_server_ts", "target": "projects", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_projects_new_page_server_ts", "target": "src_routes_app_projects_new_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_projects_new_page_server_ts", "target": "page_server_e2n", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\projects\\new\\+page.server.ts", "source_location": "L15", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_storage_types_ts", "label": "types.ts", "file_type": "code", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L1"}, {"id": "types_generatestoragekey", "label": "generateStorageKey()", "file_type": "code", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L40"}], "edges": [{"source": "src_lib_server_storage_types_ts", "target": "node_stream", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_storage_types_ts", "target": "types_generatestoragekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L40", "weight": 1.0}], "raw_calls": [{"caller_nid": "types_generatestoragekey", "callee": "getUTCFullYear", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L42"}, {"caller_nid": "types_generatestoragekey", "callee": "padStart", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L43"}, {"caller_nid": "types_generatestoragekey", "callee": "String", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L43"}, {"caller_nid": "types_generatestoragekey", "callee": "getUTCMonth", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L43"}, {"caller_nid": "types_generatestoragekey", "callee": "randomUUID", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L44"}, {"caller_nid": "types_generatestoragekey", "callee": "slice", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L45"}, {"caller_nid": "types_generatestoragekey", "callee": "replace", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L45"}, {"caller_nid": "types_generatestoragekey", "callee": "replace", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L45"}, {"caller_nid": "types_generatestoragekey", "callee": "normalize", "source_file": "src\\lib\\server\\storage\\types.ts", "source_location": "L45"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_projects_id_work_wpid_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\projects\\[id]\\work\\[wpId]\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_components_tabnav_svelte", "label": "TabNav.svelte", "file_type": "code", "source_file": "src\\lib\\components\\TabNav.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_notifications_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L6"}], "edges": [{"source": "src_routes_app_notifications_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_notifications_page_server_ts", "target": "guards", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_notifications_page_server_ts", "target": "notifications", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_notifications_page_server_ts", "target": "src_routes_app_notifications_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_notifications_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "requireCompany", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L7"}, {"caller_nid": "page_server_load", "callee": "listForUser", "source_file": "src\\routes\\(app)\\notifications\\+page.server.ts", "source_location": "L8"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_properties_id_layout_server_ts", "label": "+layout.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L1"}, {"id": "layout_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L5"}], "edges": [{"source": "src_routes_app_properties_id_layout_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_properties_id_layout_server_ts", "target": "properties", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_properties_id_layout_server_ts", "target": "src_routes_app_properties_id_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_properties_id_layout_server_ts", "target": "layout_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L5", "weight": 1.0}], "raw_calls": [{"caller_nid": "layout_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L6"}, {"caller_nid": "layout_server_load", "callee": "getProperty", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L7"}, {"caller_nid": "layout_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\properties\\[id]\\+layout.server.ts", "source_location": "L8"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_schema_index_ts", "label": "index.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\schema\\index.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_schema_assets_ts", "label": "assets.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_db_schema_assets_ts", "target": "drizzle_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_db_schema_assets_ts", "target": "pg_core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_lib_server_db_schema_assets_ts", "target": "src_lib_server_db_schema_tenancy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L13", "weight": 1.0}, {"source": "src_lib_server_db_schema_assets_ts", "target": "src_lib_server_db_schema_properties", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L14", "weight": 1.0}, {"source": "src_lib_server_db_schema_assets_ts", "target": "src_lib_server_db_schema_projects", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L15", "weight": 1.0}, {"source": "src_lib_server_db_schema_assets_ts", "target": "src_lib_server_db_schema_rooms", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L16", "weight": 1.0}, {"source": "src_lib_server_db_schema_assets_ts", "target": "src_lib_server_db_schema_shared", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\assets.ts", "source_location": "L17", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_components_customfieldsform_svelte", "label": "CustomFieldsForm.svelte", "file_type": "code", "source_file": "src\\lib\\components\\CustomFieldsForm.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_assets_page_svelte", "label": "+page.svelte", "file_type": "code", "source_file": "src\\routes\\(app)\\assets\\+page.svelte", "source_location": "L1"}], "edges": [], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "src_lib_server_db_schema_wiki_ts", "label": "wiki.ts", "file_type": "code", "source_file": "src\\lib\\server\\db\\schema\\wiki.ts", "source_location": "L1"}], "edges": [{"source": "src_lib_server_db_schema_wiki_ts", "target": "pg_core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\wiki.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_lib_server_db_schema_wiki_ts", "target": "src_lib_server_db_schema_tenancy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\wiki.ts", "source_location": "L10", "weight": 1.0}, {"source": "src_lib_server_db_schema_wiki_ts", "target": "src_lib_server_db_schema_shared", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\lib\\server\\db\\schema\\wiki.ts", "source_location": "L11", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_app_wiki_slug_edit_page_server_ts", "label": "+page.server.ts", "file_type": "code", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L1"}, {"id": "page_server_load", "label": "load()", "file_type": "code", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L6"}], "edges": [{"source": "src_routes_app_wiki_slug_edit_page_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_app_wiki_slug_edit_page_server_ts", "target": "zod", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_app_wiki_slug_edit_page_server_ts", "target": "wiki", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_app_wiki_slug_edit_page_server_ts", "target": "src_routes_app_wiki_slug_edit_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_app_wiki_slug_edit_page_server_ts", "target": "page_server_load", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L7"}, {"caller_nid": "page_server_load", "callee": "getPageWithCurrentRevision", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L8"}, {"caller_nid": "page_server_load", "callee": "error", "source_file": "src\\routes\\(app)\\wiki\\[slug]\\edit\\+page.server.ts", "source_location": "L9"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_api_qr_server_ts", "label": "+server.ts", "file_type": "code", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L1"}, {"id": "server_get", "label": "GET()", "file_type": "code", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L10"}, {"id": "server_clamp", "label": "clamp()", "file_type": "code", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L42"}], "edges": [{"source": "src_routes_api_qr_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_api_qr_server_ts", "target": "qrcode", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_api_qr_server_ts", "target": "src_routes_api_qr_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_api_qr_server_ts", "target": "server_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L10", "weight": 1.0}, {"source": "src_routes_api_qr_server_ts", "target": "server_clamp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L42", "weight": 1.0}, {"source": "server_get", "target": "server_clamp", "relation": "calls", "confidence": "EXTRACTED", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L17", "weight": 1.0}], "raw_calls": [{"caller_nid": "server_get", "callee": "error", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L11"}, {"caller_nid": "server_get", "callee": "error", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L14"}, {"caller_nid": "server_get", "callee": "error", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L15"}, {"caller_nid": "server_get", "callee": "parseInt", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L17"}, {"caller_nid": "server_get", "callee": "parseInt", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L18"}, {"caller_nid": "server_get", "callee": "toString", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L22"}, {"caller_nid": "server_get", "callee": "error", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L30"}, {"caller_nid": "server_clamp", "callee": "max", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L43"}, {"caller_nid": "server_clamp", "callee": "min", "source_file": "src\\routes\\api\\qr\\+server.ts", "source_location": "L43"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "src_routes_switch_company_server_ts", "label": "+server.ts", "file_type": "code", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L1"}, {"id": "server_post", "label": "POST()", "file_type": "code", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L8"}], "edges": [{"source": "src_routes_switch_company_server_ts", "target": "kit", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L1", "weight": 1.0}, {"source": "src_routes_switch_company_server_ts", "target": "drizzle_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L2", "weight": 1.0}, {"source": "src_routes_switch_company_server_ts", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L3", "weight": 1.0}, {"source": "src_routes_switch_company_server_ts", "target": "tenancy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L4", "weight": 1.0}, {"source": "src_routes_switch_company_server_ts", "target": "session", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L5", "weight": 1.0}, {"source": "src_routes_switch_company_server_ts", "target": "src_routes_switch_company_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L6", "weight": 1.0}, {"source": "src_routes_switch_company_server_ts", "target": "server_post", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L8", "weight": 1.0}], "raw_calls": [{"caller_nid": "server_post", "callee": "error", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L9"}, {"caller_nid": "server_post", "callee": "formData", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L11"}, {"caller_nid": "server_post", "callee": "String", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L12"}, {"caller_nid": "server_post", "callee": "get", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L12"}, {"caller_nid": "server_post", "callee": "error", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L13"}, {"caller_nid": "server_post", "callee": "limit", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L16"}, {"caller_nid": "server_post", "callee": "where", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L16"}, {"caller_nid": "server_post", "callee": "from", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L16"}, {"caller_nid": "server_post", "callee": "select", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L16"}, {"caller_nid": "server_post", "callee": "and", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L19"}, {"caller_nid": "server_post", "callee": "eq", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L19"}, {"caller_nid": "server_post", "callee": "eq", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L19"}, {"caller_nid": "server_post", "callee": "error", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L21"}, {"caller_nid": "server_post", "callee": "setActiveCompany", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L23"}, {"caller_nid": "server_post", "callee": "String", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L25"}, {"caller_nid": "server_post", "callee": "get", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L25"}, {"caller_nid": "server_post", "callee": "get", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L25"}, {"caller_nid": "server_post", "callee": "redirect", "source_file": "src\\routes\\switch-company\\+server.ts", "source_location": "L26"}]}

Some files were not shown because too many files have changed in this diff Show More