{
  "source_companion_sha256": null,
  "source_companion_pending": true,
  "basis": "Actual current candidate source bytes. Source AST declarations do not establish router mounting, authorization, installed behavior or delivery. Use the composed OpenAPI reference and exact candidate acceptance separately.",
  "products": {
    "core": {
      "repository": "townlight/core",
      "repository_head": "ac2ead46938208820cb0bcae511475abef290da3",
      "working_tree_modified": true,
      "principal_import": "townlight_core",
      "source": [
        {
          "source": "townlight_core/__init__.py",
          "sha256": "271ec6a8d23264747891f8909e8ed1986cb8b2d56098bcaf59e3550b1978e9c4",
          "bytes": 10845,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/audit/__init__.py",
          "sha256": "4e1568afe62b114bdaa5bc329ce9eeb0f2a050304b2087d25dd4ea862e7a44b0",
          "bytes": 807,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/audit/primitives.py",
          "sha256": "b2c07101e233c2fddf03c0395f84ee8975e6a83aa2e66a51980a926b7f5474fc",
          "bytes": 9770,
          "routes": [],
          "models": [
            {
              "name": "AuditActor",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "actor_id",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "actor_type",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "display_name",
                  "type": "str | None",
                  "line": 62
                }
              ],
              "line": 55
            },
            {
              "name": "AuditSubject",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "subject_id",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "subject_type",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "display_name",
                  "type": "str | None",
                  "line": 72
                }
              ],
              "line": 65
            },
            {
              "name": "AuditEvent",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "actor",
                  "type": "AuditActor",
                  "line": 81
                },
                {
                  "name": "action",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "subject",
                  "type": "AuditSubject",
                  "line": 83
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 84
                },
                {
                  "name": "timestamp",
                  "type": "datetime",
                  "line": 85
                },
                {
                  "name": "metadata",
                  "type": "dict[str, Any]",
                  "line": 86
                },
                {
                  "name": "previous_hash",
                  "type": "str | None",
                  "line": 87
                },
                {
                  "name": "current_hash",
                  "type": "str | None",
                  "line": 88
                }
              ],
              "line": 75
            },
            {
              "name": "AuditHashChain",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "events",
                  "type": "list[AuditEvent]",
                  "line": 164
                }
              ],
              "line": 159
            },
            {
              "name": "PersistedAuditLogEntry",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "previous_hash",
                  "type": "str",
                  "line": 203
                },
                {
                  "name": "entry_hash",
                  "type": "str",
                  "line": 204
                },
                {
                  "name": "timestamp",
                  "type": "datetime | str",
                  "line": 205
                },
                {
                  "name": "actor_id",
                  "type": "str | None",
                  "line": 206
                },
                {
                  "name": "action",
                  "type": "str",
                  "line": 207
                },
                {
                  "name": "details",
                  "type": "dict[str, Any] | None",
                  "line": 208
                },
                {
                  "name": "entry_id",
                  "type": "int | str | None",
                  "line": 209
                }
              ],
              "line": 192
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/auth/__init__.py",
          "sha256": "04eb39badadea67810426e791606cafdbd7dfe05491baabc56feaab7d4e660bd",
          "bytes": 2711,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/auth/bearer.py",
          "sha256": "28a8ef40450dd3a0b5424916f8d50f08945c7b961170702971ad8686c928ec59",
          "bytes": 6057,
          "routes": [],
          "models": [
            {
              "name": "AuthenticatedPrincipal",
              "bases": [],
              "fields": [
                {
                  "name": "token_fingerprint",
                  "type": "str | None",
                  "line": 19
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 20
                },
                {
                  "name": "auth_method",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "subject",
                  "type": "str | None",
                  "line": 22
                },
                {
                  "name": "provider",
                  "type": "str | None",
                  "line": 23
                }
              ],
              "line": 16
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/auth/department_scope.py",
          "sha256": "78e0840399fbd1b447436e231cc0fee52e77a2271b32f383cbbe9035d9fe23ce",
          "bytes": 27460,
          "routes": [],
          "models": [
            {
              "name": "DepartmentGrant",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "scope_id",
                  "type": "str",
                  "line": 158
                },
                {
                  "name": "subject",
                  "type": "str",
                  "line": 159
                },
                {
                  "name": "department_id",
                  "type": "UUID",
                  "line": 160
                },
                {
                  "name": "sequence",
                  "type": "int",
                  "line": 161
                },
                {
                  "name": "action",
                  "type": "GrantAction",
                  "line": 162
                },
                {
                  "name": "roles",
                  "type": "tuple[str, ...]",
                  "line": 163
                },
                {
                  "name": "recorded_by",
                  "type": "str",
                  "line": 164
                },
                {
                  "name": "recorded_at",
                  "type": "AwareDatetime",
                  "line": 165
                },
                {
                  "name": "content_sha256",
                  "type": "str",
                  "line": 166
                }
              ],
              "line": 148
            },
            {
              "name": "DepartmentEntitlement",
              "bases": [],
              "fields": [
                {
                  "name": "department_id",
                  "type": "UUID",
                  "line": 213
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 214
                },
                {
                  "name": "granted_by",
                  "type": "str",
                  "line": 215
                },
                {
                  "name": "granted_at",
                  "type": "datetime",
                  "line": 216
                }
              ],
              "line": 210
            },
            {
              "name": "DepartmentAuthority",
              "bases": [],
              "fields": [
                {
                  "name": "scope_id",
                  "type": "str",
                  "line": 228
                },
                {
                  "name": "subject",
                  "type": "str",
                  "line": 229
                },
                {
                  "name": "auth_method",
                  "type": "str",
                  "line": 230
                },
                {
                  "name": "provider",
                  "type": "str | None",
                  "line": 231
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 232
                },
                {
                  "name": "entitlements",
                  "type": "tuple[DepartmentEntitlement, ...]",
                  "line": 233
                },
                {
                  "name": "resolved_at",
                  "type": "datetime",
                  "line": 234
                },
                {
                  "name": "grants_digest",
                  "type": "str",
                  "line": 235
                },
                {
                  "name": "provenance",
                  "type": "Literal['persisted-grant']",
                  "line": 236
                },
                {
                  "name": "_token",
                  "type": "Any",
                  "line": 237
                }
              ],
              "line": 220
            },
            {
              "name": "GrantOutcome",
              "bases": [],
              "fields": [
                {
                  "name": "grant",
                  "type": "DepartmentGrant",
                  "line": 440
                },
                {
                  "name": "inserted",
                  "type": "bool",
                  "line": 441
                }
              ],
              "line": 437
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/auth/staff_key.py",
          "sha256": "70975c90b8629762c541c50ed63d5ebb230101569caaa7f27741040a92102624",
          "bytes": 2495,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/auth/suite_session.py",
          "sha256": "7276e30b9d2d6ff7c5cf247c7b3f0ad25c532341ea400387a355c6c7d89f028a",
          "bytes": 10405,
          "routes": [],
          "models": [
            {
              "name": "SuiteSessionPrincipal",
              "bases": [],
              "fields": [
                {
                  "name": "subject",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 39
                },
                {
                  "name": "session_id",
                  "type": "str",
                  "line": 40
                }
              ],
              "line": 35
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/auth/trusted_headers.py",
          "sha256": "e5fb52bfe52188a62f71cc5aca5facccac58c3981802a56a29939edc1804514b",
          "bytes": 8041,
          "routes": [],
          "models": [
            {
              "name": "TrustedHeaderAuthConfig",
              "bases": [],
              "fields": [
                {
                  "name": "provider_name",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "principal_header_name",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "roles_header_name",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "trusted_proxy_cidrs",
                  "type": "tuple[str, ...]",
                  "line": 23
                }
              ],
              "line": 17
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/catalog/__init__.py",
          "sha256": "d6348d181abc14c16a11b1e2b63074d2a34efb49416ec3d6fc223af2de21525b",
          "bytes": 7654,
          "routes": [],
          "models": [
            {
              "name": "SystemInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "vendor_name",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "access_protocol",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "data_shape",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "common_record_types",
                  "type": "list[str]",
                  "line": 21
                },
                {
                  "name": "redaction_tier",
                  "type": "int",
                  "line": 22
                },
                {
                  "name": "discovery_hints",
                  "type": "dict",
                  "line": 23
                }
              ],
              "line": 16
            },
            {
              "name": "DomainInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "domain",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "systems",
                  "type": "list[SystemInput]",
                  "line": 41
                }
              ],
              "line": 38
            },
            {
              "name": "CatalogInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "catalog_version",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "domains",
                  "type": "list[DomainInput]",
                  "line": 47
                }
              ],
              "line": 44
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/city_profile/__init__.py",
          "sha256": "65b6e3fafad6ab9355db419530d2d5398d9529db37eb761468f4a7a14e569b6b",
          "bytes": 385,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/city_profile/models.py",
          "sha256": "efddf634764a89de9eef92c50018e78358ab2536be43cd8b50758603d903c4ab",
          "bytes": 4868,
          "routes": [],
          "models": [
            {
              "name": "DepartmentProfile",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "slug",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "public_email",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "public_phone",
                  "type": "str | None",
                  "line": 24
                }
              ],
              "line": 16
            },
            {
              "name": "DeploymentProfile",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "mode",
                  "type": "Literal['local_demo', 'local', 'self_hosted']",
                  "line": 32
                },
                {
                  "name": "allow_outbound_services",
                  "type": "bool",
                  "line": 33
                }
              ],
              "line": 27
            },
            {
              "name": "ModuleEnablement",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "line": 42
                },
                {
                  "name": "settings",
                  "type": "dict[str, Any]",
                  "line": 43
                }
              ],
              "line": 36
            },
            {
              "name": "CityProfile",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "city_name",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "timezone",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "departments",
                  "type": "list[DepartmentProfile]",
                  "line": 53
                },
                {
                  "name": "enabled_modules",
                  "type": "list[ModuleEnablement]",
                  "line": 54
                },
                {
                  "name": "default_llm_provider",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "file_drop_roots",
                  "type": "list[Path]",
                  "line": 56
                },
                {
                  "name": "public_contact",
                  "type": "dict[str, str]",
                  "line": 57
                },
                {
                  "name": "deployment",
                  "type": "DeploymentProfile",
                  "line": 58
                }
              ],
              "line": 46
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/connectors/__init__.py",
          "sha256": "4c6cf98564b9c46440fdf01d6895165ad39566e3270da02adbf088fd8f242a7f",
          "bytes": 1732,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/connectors/delta.py",
          "sha256": "58de5706cd1e50043ffccc6bae552c094dab2b156235bf5959f3af2a28fa7741",
          "bytes": 3211,
          "routes": [],
          "models": [
            {
              "name": "VendorDeltaRequestPlan",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "request_url",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "delta_enabled",
                  "type": "bool",
                  "line": 24
                },
                {
                  "name": "cursor_param",
                  "type": "str | None",
                  "line": 25
                },
                {
                  "name": "cursor_value",
                  "type": "str | None",
                  "line": 26
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 28
                }
              ],
              "line": 19
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/connectors/imports.py",
          "sha256": "d8471df1e6c8ca2ae5f63a8e70419e83129e24fc8ee885a2803c0d023c57fe0e",
          "bytes": 7068,
          "routes": [],
          "models": [
            {
              "name": "ConnectorImportError",
              "bases": [
                "ValueError"
              ],
              "fields": [
                {
                  "name": "message",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 17
                }
              ],
              "line": 13
            },
            {
              "name": "ImportedAgendaItem",
              "bases": [],
              "fields": [
                {
                  "name": "external_item_id",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "department",
                  "type": "str | None",
                  "line": 32
                },
                {
                  "name": "connector",
                  "type": "str",
                  "line": 33
                }
              ],
              "line": 27
            },
            {
              "name": "ImportedMeeting",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "external_meeting_id",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "scheduled_start",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "agenda_items",
                  "type": "tuple[ImportedAgendaItem, ...]",
                  "line": 56
                }
              ],
              "line": 49
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/connectors/manifest.py",
          "sha256": "2d7ee3abedf89af90ee2f3c474925d11b93aa3117370aeee4ee5f783dad347a4",
          "bytes": 8356,
          "routes": [],
          "models": [
            {
              "name": "ManifestFile",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "path",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "byte_size",
                  "type": "int",
                  "line": 47
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "media_type",
                  "type": "str | None",
                  "line": 49
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 50
                }
              ],
              "line": 43
            },
            {
              "name": "_ManifestBase",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "manifest_version",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "module_name",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "module_version",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "townlight_core_version",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "purpose",
                  "type": "ManifestPurpose",
                  "line": 84
                },
                {
                  "name": "source_files",
                  "type": "list[ManifestFile]",
                  "line": 85
                },
                {
                  "name": "generated_files",
                  "type": "list[ManifestFile]",
                  "line": 86
                },
                {
                  "name": "limitations",
                  "type": "list[str]",
                  "line": 87
                }
              ],
              "line": 79
            },
            {
              "name": "ImportManifest",
              "bases": [
                "_ManifestBase"
              ],
              "fields": [
                {
                  "name": "purpose",
                  "type": "ImportPurpose",
                  "line": 126
                }
              ],
              "line": 123
            },
            {
              "name": "ExportManifest",
              "bases": [
                "_ManifestBase"
              ],
              "fields": [
                {
                  "name": "purpose",
                  "type": "ExportPurpose",
                  "line": 138
                }
              ],
              "line": 135
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/connectors/sync.py",
          "sha256": "b3323199a3be7739aa2a1b6aaee9efca861a86ac7e3764b04637c13e5128172e",
          "bytes": 13744,
          "routes": [],
          "models": [
            {
              "name": "SyncRetryPolicy",
              "bases": [],
              "fields": [
                {
                  "name": "max_attempts",
                  "type": "int",
                  "line": 31
                },
                {
                  "name": "base_delay_seconds",
                  "type": "float",
                  "line": 32
                },
                {
                  "name": "jitter_factor",
                  "type": "float",
                  "line": 33
                },
                {
                  "name": "max_backoff_seconds",
                  "type": "float",
                  "line": 34
                },
                {
                  "name": "retry_after_cap_seconds",
                  "type": "float",
                  "line": 35
                }
              ],
              "line": 28
            },
            {
              "name": "SyncCircuitPolicy",
              "bases": [],
              "fields": [
                {
                  "name": "full_failure_threshold",
                  "type": "int",
                  "line": 46
                },
                {
                  "name": "grace_period_failure_threshold",
                  "type": "int",
                  "line": 47
                },
                {
                  "name": "grace_period_reason",
                  "type": "str",
                  "line": 48
                }
              ],
              "line": 43
            },
            {
              "name": "SyncCircuitState",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "source_name",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "int",
                  "line": 57
                },
                {
                  "name": "active_failure_count",
                  "type": "int",
                  "line": 58
                },
                {
                  "name": "sync_paused",
                  "type": "bool",
                  "line": 59
                },
                {
                  "name": "sync_paused_at",
                  "type": "datetime | None",
                  "line": 60
                },
                {
                  "name": "sync_paused_reason",
                  "type": "str | None",
                  "line": 61
                },
                {
                  "name": "last_sync_status",
                  "type": "str | None",
                  "line": 62
                },
                {
                  "name": "last_error_at",
                  "type": "datetime | None",
                  "line": 63
                }
              ],
              "line": 52
            },
            {
              "name": "SyncRunResult",
              "bases": [],
              "fields": [
                {
                  "name": "records_discovered",
                  "type": "int",
                  "line": 74
                },
                {
                  "name": "records_succeeded",
                  "type": "int",
                  "line": 75
                },
                {
                  "name": "records_failed",
                  "type": "int",
                  "line": 76
                },
                {
                  "name": "retries_attempted",
                  "type": "int",
                  "line": 77
                },
                {
                  "name": "error_summary",
                  "type": "str | None",
                  "line": 78
                }
              ],
              "line": 71
            },
            {
              "name": "SyncOperatorStatus",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "source_name",
                  "type": "str",
                  "line": 98
                },
                {
                  "name": "health_status",
                  "type": "SyncHealthStatus",
                  "line": 99
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "int",
                  "line": 100
                },
                {
                  "name": "active_failure_count",
                  "type": "int",
                  "line": 101
                },
                {
                  "name": "sync_paused",
                  "type": "bool",
                  "line": 102
                },
                {
                  "name": "sync_paused_reason",
                  "type": "str | None",
                  "line": 103
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 104
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 105
                }
              ],
              "line": 94
            },
            {
              "name": "SyncSourceStatus",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 125
                },
                {
                  "name": "source_name",
                  "type": "str",
                  "line": 126
                },
                {
                  "name": "health_status",
                  "type": "SyncHealthStatus",
                  "line": 127
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "int",
                  "line": 128
                },
                {
                  "name": "active_failure_count",
                  "type": "int",
                  "line": 129
                },
                {
                  "name": "sync_paused",
                  "type": "bool",
                  "line": 130
                },
                {
                  "name": "sync_paused_reason",
                  "type": "str | None",
                  "line": 131
                },
                {
                  "name": "last_sync_status",
                  "type": "str | None",
                  "line": 132
                },
                {
                  "name": "next_sync_at",
                  "type": "datetime | None",
                  "line": 133
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 134
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 135
                }
              ],
              "line": 122
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/db/__init__.py",
          "sha256": "e42367febc6c5201dd39755c988c9e2c4cc3c3f3d8fe2d9a61bff7af63c651b2",
          "bytes": 596,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/exemptions/__init__.py",
          "sha256": "edac488a794152402c2b523d5f846096a15d964906a0bbd61346e9e0d5d5ec94",
          "bytes": 5566,
          "routes": [],
          "models": [
            {
              "name": "Rule",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "UUID",
                  "line": 27
                },
                {
                  "name": "state_code",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "rule_type",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "definition",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 32
                }
              ],
              "line": 26
            },
            {
              "name": "FlagResult",
              "bases": [],
              "fields": [
                {
                  "name": "category",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "matched_text",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "confidence",
                  "type": "float",
                  "line": 39
                },
                {
                  "name": "rule_id",
                  "type": "UUID | None",
                  "line": 40
                },
                {
                  "name": "rule_type",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "rule_version",
                  "type": "int | None",
                  "line": 42
                }
              ],
              "line": 36
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/exemptions/history.py",
          "sha256": "f58d7c1072189fa1260d54a2dba026b09de1b046b24bdfaebe9ccab55d1bdc74",
          "bytes": 16427,
          "routes": [],
          "models": [
            {
              "name": "RuleVersionInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "rule_id",
                  "type": "UUID",
                  "line": 98
                },
                {
                  "name": "state_code",
                  "type": "str",
                  "line": 99
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 100
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 101
                },
                {
                  "name": "rule_type",
                  "type": "Literal['regex', 'keyword']",
                  "line": 103
                },
                {
                  "name": "rule_definition",
                  "type": "str",
                  "line": 104
                },
                {
                  "name": "citation_text",
                  "type": "str",
                  "line": 105
                },
                {
                  "name": "citation_url",
                  "type": "str | None",
                  "line": 106
                },
                {
                  "name": "effective_from",
                  "type": "date | None",
                  "line": 107
                },
                {
                  "name": "retrieved_at",
                  "type": "AwareDatetime",
                  "line": 108
                },
                {
                  "name": "coverage_declaration",
                  "type": "Literal['synthetic-fixture', 'tenant-supplied']",
                  "line": 109
                }
              ],
              "line": 93
            },
            {
              "name": "RuleVersion",
              "bases": [],
              "fields": [
                {
                  "name": "rule_id",
                  "type": "UUID",
                  "line": 155
                },
                {
                  "name": "state_code",
                  "type": "str",
                  "line": 156
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 157
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 158
                },
                {
                  "name": "rule_type",
                  "type": "str",
                  "line": 159
                },
                {
                  "name": "rule_definition",
                  "type": "str",
                  "line": 160
                },
                {
                  "name": "citation_text",
                  "type": "str",
                  "line": 161
                },
                {
                  "name": "citation_url",
                  "type": "str | None",
                  "line": 162
                },
                {
                  "name": "effective_from",
                  "type": "date | None",
                  "line": 163
                },
                {
                  "name": "retrieved_at",
                  "type": "object",
                  "line": 164
                },
                {
                  "name": "coverage_declaration",
                  "type": "str",
                  "line": 165
                },
                {
                  "name": "content_sha256",
                  "type": "str",
                  "line": 166
                },
                {
                  "name": "recorded_by",
                  "type": "str",
                  "line": 167
                }
              ],
              "line": 152
            },
            {
              "name": "RecordOutcome",
              "bases": [],
              "fields": [
                {
                  "name": "rule_version",
                  "type": "RuleVersion",
                  "line": 183
                },
                {
                  "name": "inserted",
                  "type": "bool",
                  "line": 184
                },
                {
                  "name": "fingerprint",
                  "type": "str",
                  "line": 185
                }
              ],
              "line": 182
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/exemptions/patterns.py",
          "sha256": "b8c4ea484f1fe521295d29eebcc36703c4560d274b36c88f5af28f5abded98af",
          "bytes": 5982,
          "routes": [],
          "models": [
            {
              "name": "PIIPattern",
              "bases": [],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "pattern",
                  "type": "re.Pattern",
                  "line": 18
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "confidence",
                  "type": "float",
                  "line": 20
                }
              ],
              "line": 15
            },
            {
              "name": "PIIMatch",
              "bases": [],
              "fields": [
                {
                  "name": "pattern_name",
                  "type": "str",
                  "line": 150
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 151
                },
                {
                  "name": "matched_text",
                  "type": "str",
                  "line": 152
                },
                {
                  "name": "start",
                  "type": "int",
                  "line": 153
                },
                {
                  "name": "end",
                  "type": "int",
                  "line": 154
                },
                {
                  "name": "confidence",
                  "type": "float",
                  "line": 155
                }
              ],
              "line": 149
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/exports/__init__.py",
          "sha256": "0b855da9162dda8954a082a7fd90efcf118b89b4a2019c2f9f497e1db0696f89",
          "bytes": 346,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/exports/bundle.py",
          "sha256": "86ce615b7a1a6a73134f88fb82712738610bde6da23d4a3fa7ba3d66e0408af0",
          "bytes": 7190,
          "routes": [],
          "models": [
            {
              "name": "ExportBundle",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_name",
                  "type": "str",
                  "line": 57
                },
                {
                  "name": "module_version",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "townlight_core_version",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "purpose",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "files",
                  "type": "list[BundleFile]",
                  "line": 61
                },
                {
                  "name": "limitations",
                  "type": "list[str]",
                  "line": 62
                }
              ],
              "line": 54
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/__init__.py",
          "sha256": "a73d8e5e2d5e8c85774c139d72886a8b3cf37d84a2f3108522e6cbaaa95e0b83",
          "bytes": 1342,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/chunker.py",
          "sha256": "8d3fa815c5ad9f920447467dfe0d08729a0a48d053f0fcc6d78877b97936c55d",
          "bytes": 2303,
          "routes": [],
          "models": [
            {
              "name": "Chunk",
              "bases": [],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 6
                },
                {
                  "name": "index",
                  "type": "int",
                  "line": 7
                },
                {
                  "name": "page_number",
                  "type": "int | None",
                  "line": 8
                },
                {
                  "name": "token_count",
                  "type": "int",
                  "line": 9
                }
              ],
              "line": 5
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/contracts.py",
          "sha256": "68e2ea96be6e81be5ed543c7bf3eafe80a7cdf02d78be6d9e50f7e519d73266a",
          "bytes": 2977,
          "routes": [],
          "models": [
            {
              "name": "HealthCheckResult",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "HealthStatus",
                  "line": 19
                },
                {
                  "name": "latency_ms",
                  "type": "int | None",
                  "line": 20
                },
                {
                  "name": "error_message",
                  "type": "str | None",
                  "line": 21
                },
                {
                  "name": "records_available",
                  "type": "int | None",
                  "line": 22
                },
                {
                  "name": "schema_hash",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "checked_at",
                  "type": "datetime",
                  "line": 24
                }
              ],
              "line": 18
            },
            {
              "name": "DiscoveredRecord",
              "bases": [],
              "fields": [
                {
                  "name": "source_path",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "file_type",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "file_size",
                  "type": "int",
                  "line": 34
                },
                {
                  "name": "last_modified",
                  "type": "datetime | None",
                  "line": 35
                },
                {
                  "name": "metadata",
                  "type": "dict",
                  "line": 36
                }
              ],
              "line": 28
            },
            {
              "name": "FetchedDocument",
              "bases": [],
              "fields": [
                {
                  "name": "source_path",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "file_type",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "content",
                  "type": "bytes",
                  "line": 46
                },
                {
                  "name": "file_size",
                  "type": "int",
                  "line": 47
                },
                {
                  "name": "metadata",
                  "type": "dict",
                  "line": 48
                }
              ],
              "line": 40
            },
            {
              "name": "SourceMaterial",
              "bases": [],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 57
                }
              ],
              "line": 52
            },
            {
              "name": "CitedSentence",
              "bases": [],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 72
                }
              ],
              "line": 68
            },
            {
              "name": "CitationValidationError",
              "bases": [],
              "fields": [
                {
                  "name": "message",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 84
                }
              ],
              "line": 82
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/embedder.py",
          "sha256": "ae0eceb9f2c7345d849556d9dbb52349fa50676b970012a91eeda4e090f56cd4",
          "bytes": 1653,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/llm_extractor.py",
          "sha256": "4a4d4d1464e32f8b9abe77c67472c75e59352b78265ac33112611dd940b3b445",
          "bytes": 3128,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/models.py",
          "sha256": "08076031a8f61e62813665fa544e71a8957a9f79ef34a8316e983ba15855c288",
          "bytes": 6450,
          "routes": [],
          "models": [
            {
              "name": "DataSource",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 41
                },
                {
                  "name": "name",
                  "type": "Mapped[str]",
                  "line": 42
                },
                {
                  "name": "source_type",
                  "type": "Mapped[SourceType]",
                  "line": 43
                },
                {
                  "name": "connection_config",
                  "type": "Mapped[dict[str, Any]]",
                  "line": 46
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 47
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID]",
                  "line": 51
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 52
                },
                {
                  "name": "last_ingestion_at",
                  "type": "Mapped[datetime | None]",
                  "line": 53
                },
                {
                  "name": "discovered_source_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 55
                },
                {
                  "name": "connector_template_id",
                  "type": "Mapped[int | None]",
                  "line": 56
                },
                {
                  "name": "sync_schedule",
                  "type": "Mapped[str | None]",
                  "line": 57
                },
                {
                  "name": "schedule_enabled",
                  "type": "Mapped[bool]",
                  "line": 58
                },
                {
                  "name": "last_sync_at",
                  "type": "Mapped[datetime | None]",
                  "line": 59
                },
                {
                  "name": "last_sync_cursor",
                  "type": "Mapped[str | None]",
                  "line": 60
                },
                {
                  "name": "last_sync_status",
                  "type": "Mapped[str | None]",
                  "line": 61
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "Mapped[int]",
                  "line": 63
                },
                {
                  "name": "last_error_message",
                  "type": "Mapped[str | None]",
                  "line": 64
                },
                {
                  "name": "last_error_at",
                  "type": "Mapped[datetime | None]",
                  "line": 65
                },
                {
                  "name": "sync_paused",
                  "type": "Mapped[bool]",
                  "line": 66
                },
                {
                  "name": "sync_paused_at",
                  "type": "Mapped[datetime | None]",
                  "line": 67
                },
                {
                  "name": "sync_paused_reason",
                  "type": "Mapped[str | None]",
                  "line": 68
                },
                {
                  "name": "retry_batch_size",
                  "type": "Mapped[int | None]",
                  "line": 69
                },
                {
                  "name": "retry_time_limit_seconds",
                  "type": "Mapped[int | None]",
                  "line": 70
                },
                {
                  "name": "health_status",
                  "type": "Mapped[str | None]",
                  "line": 71
                },
                {
                  "name": "schema_hash",
                  "type": "Mapped[str | None]",
                  "line": 72
                }
              ],
              "line": 36
            },
            {
              "name": "Document",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 80
                },
                {
                  "name": "source_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 81
                },
                {
                  "name": "source_path",
                  "type": "Mapped[str]",
                  "line": 82
                },
                {
                  "name": "filename",
                  "type": "Mapped[str]",
                  "line": 83
                },
                {
                  "name": "file_type",
                  "type": "Mapped[str]",
                  "line": 84
                },
                {
                  "name": "file_hash",
                  "type": "Mapped[str]",
                  "line": 85
                },
                {
                  "name": "file_size",
                  "type": "Mapped[int]",
                  "line": 86
                },
                {
                  "name": "ingestion_status",
                  "type": "Mapped[IngestionStatus]",
                  "line": 87
                },
                {
                  "name": "ingestion_error",
                  "type": "Mapped[str | None]",
                  "line": 96
                },
                {
                  "name": "chunk_count",
                  "type": "Mapped[int]",
                  "line": 97
                },
                {
                  "name": "ingested_at",
                  "type": "Mapped[datetime | None]",
                  "line": 98
                },
                {
                  "name": "metadata_",
                  "type": "Mapped[dict[str, Any] | None]",
                  "line": 99
                },
                {
                  "name": "connector_type",
                  "type": "Mapped[str | None]",
                  "line": 101
                },
                {
                  "name": "updated_at",
                  "type": "Mapped[datetime | None]",
                  "line": 102
                },
                {
                  "name": "display_name",
                  "type": "Mapped[str | None]",
                  "line": 104
                },
                {
                  "name": "department_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 105
                },
                {
                  "name": "redaction_status",
                  "type": "Mapped[str]",
                  "line": 106
                },
                {
                  "name": "derivative_path",
                  "type": "Mapped[str | None]",
                  "line": 107
                },
                {
                  "name": "original_locked",
                  "type": "Mapped[bool]",
                  "line": 108
                }
              ],
              "line": 75
            },
            {
              "name": "DocumentChunk",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 118
                },
                {
                  "name": "document_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 119
                },
                {
                  "name": "chunk_index",
                  "type": "Mapped[int]",
                  "line": 122
                },
                {
                  "name": "content_text",
                  "type": "Mapped[str]",
                  "line": 123
                },
                {
                  "name": "embedding",
                  "type": "Mapped[list[float] | None]",
                  "line": 124
                },
                {
                  "name": "token_count",
                  "type": "Mapped[int]",
                  "line": 125
                },
                {
                  "name": "page_number",
                  "type": "Mapped[int | None]",
                  "line": 126
                }
              ],
              "line": 113
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/__init__.py",
          "sha256": "143dc760e3328838da545d9bcbd2e02a30e9761e1c906eed79713ca521e06692",
          "bytes": 1072,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/base.py",
          "sha256": "95e1302e3e2dfabc8cf91d4086706d06e35474e68e4ed3e35a9f08185764fe1f",
          "bytes": 878,
          "routes": [],
          "models": [
            {
              "name": "ParsedPage",
              "bases": [],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 7
                },
                {
                  "name": "page_number",
                  "type": "int | None",
                  "line": 8
                },
                {
                  "name": "metadata",
                  "type": "dict",
                  "line": 9
                }
              ],
              "line": 6
            },
            {
              "name": "ParseResult",
              "bases": [],
              "fields": [
                {
                  "name": "pages",
                  "type": "list[ParsedPage]",
                  "line": 13
                },
                {
                  "name": "metadata",
                  "type": "dict",
                  "line": 14
                },
                {
                  "name": "file_type",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 12
            },
            {
              "name": "BaseParser",
              "bases": [
                "ABC"
              ],
              "fields": [
                {
                  "name": "supported_extensions",
                  "type": "list[str]",
                  "line": 26
                }
              ],
              "line": 25
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/csv_parser.py",
          "sha256": "73e60408c70bb358deb0d6a00a2af942539743128b1c3e5e545f95ad6b27b463",
          "bytes": 799,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/docx.py",
          "sha256": "a101377c0cc7585f8bc91ad2f2f0e8790468e93ca663a29875d0cf605f5add56",
          "bytes": 3349,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/email.py",
          "sha256": "067103e5dea87b75d4f9eb23ecb9313d59f343fc777d41d3d201ab6c3a32897c",
          "bytes": 1267,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/html.py",
          "sha256": "800f7e82730c897eedb9b815140b2c90ff606bc31a1c57d82b55c69295ed7c76",
          "bytes": 804,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/pdf.py",
          "sha256": "77a84cd4080a5d75505f074ed5ccafc619c3a5b7e788f77b254f30da29be095e",
          "bytes": 888,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/text.py",
          "sha256": "40ac3d40fb1cbddc34ab5d03347f1c0836992516895df34ca5bfa4a51022d903",
          "bytes": 578,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/parsers/xlsx.py",
          "sha256": "4bca7a22946eea259a61a5d97040b290e82271d1ad2964fcf65988cef0643e94",
          "bytes": 3230,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/ingest/pipeline.py",
          "sha256": "6cda90ee5128384ca716760865ed28d76f2b46ce141c7df9395b311e5d8d4459",
          "bytes": 13615,
          "routes": [],
          "models": [
            {
              "name": "IngestHandler",
              "bases": [
                "Protocol"
              ],
              "fields": [
                {
                  "name": "supported_extensions",
                  "type": "list[str]",
                  "line": 22
                }
              ],
              "line": 19
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/__init__.py",
          "sha256": "ed910741b77a88421ad13583f6d0858361b016e28dfc8d2350bfee5f058836ab",
          "bytes": 3865,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/context.py",
          "sha256": "d032bc3bf9b0150528ebee667b4cb684bfd739223d30c569e4eb2894829857d8",
          "bytes": 8808,
          "routes": [],
          "models": [
            {
              "name": "TokenBudget",
              "bases": [],
              "fields": [
                {
                  "name": "system_instruction",
                  "type": "int",
                  "line": 37
                },
                {
                  "name": "request_context",
                  "type": "int",
                  "line": 38
                },
                {
                  "name": "retrieved_chunks",
                  "type": "int",
                  "line": 39
                },
                {
                  "name": "exemption_rules",
                  "type": "int",
                  "line": 40
                },
                {
                  "name": "output_reservation",
                  "type": "int",
                  "line": 41
                },
                {
                  "name": "safety_margin",
                  "type": "int",
                  "line": 42
                }
              ],
              "line": 34
            },
            {
              "name": "ContextBlock",
              "bases": [],
              "fields": [
                {
                  "name": "role",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "content",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "estimated_tokens",
                  "type": "int",
                  "line": 62
                }
              ],
              "line": 57
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/factory.py",
          "sha256": "e2358941f74a34a659e8f79f42f897309be4ce99c6882d8318cec87ce1a23bb5",
          "bytes": 2948,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/__init__.py",
          "sha256": "6590c160c8baefb7049826b23d187d46b66eb657afb645ca0a4c8d43d840805f",
          "bytes": 1316,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/anthropic.py",
          "sha256": "b60ffd6acc8eb71a9ea53a101124bbc97adcfed14b59bc74361a5a10b22aa5a4",
          "bytes": 5338,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/base.py",
          "sha256": "57f4cc31b824641b6533353a08069ad8efe164e2f2795dced911f1a489a6e12a",
          "bytes": 3845,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/config.py",
          "sha256": "b82987ff817044c3f3493fb9e97d5e0ce49c5dee138545264119596ced9358f5",
          "bytes": 1836,
          "routes": [],
          "models": [
            {
              "name": "OllamaConfig",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "base_url",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "default_model",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "default_embed_model",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "think",
                  "type": "bool | str | None",
                  "line": 23
                }
              ],
              "line": 12
            },
            {
              "name": "OpenAIConfig",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "api_key",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "default_model",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "default_embed_model",
                  "type": "str",
                  "line": 34
                }
              ],
              "line": 26
            },
            {
              "name": "AnthropicConfig",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "api_key",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "default_model",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "max_tokens",
                  "type": "int",
                  "line": 45
                }
              ],
              "line": 37
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/ollama.py",
          "sha256": "c7514fc0f714f520b90e0b93300fa4ba292f84bd770a8bdede416921f2bb9054",
          "bytes": 4789,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/openai.py",
          "sha256": "b7d86e8967dbb9733ddbadb62622d22b969dcae3891eb4f08ef41a25a0630295",
          "bytes": 4684,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/providers/registry.py",
          "sha256": "9fce82b519c2e327fff38f3a4cd4c0638b941f5b08ea7c9ff8c44f65c8143fb3",
          "bytes": 3234,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/registry/__init__.py",
          "sha256": "37336ea704f8a53133a5b0a08eb78e63ebbbba00f63193cec7f492b5f7e69100",
          "bytes": 1711,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/registry/models.py",
          "sha256": "0aceeca8a9a101bd0cf8a0362043eae7c5500f8f9d9f71fc8bf4d3f409165545",
          "bytes": 2328,
          "routes": [],
          "models": [
            {
              "name": "ModelRegistry",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[int]",
                  "line": 34
                },
                {
                  "name": "model_name",
                  "type": "Mapped[str]",
                  "line": 35
                },
                {
                  "name": "model_version",
                  "type": "Mapped[str | None]",
                  "line": 36
                },
                {
                  "name": "parameter_count",
                  "type": "Mapped[str | None]",
                  "line": 37
                },
                {
                  "name": "license",
                  "type": "Mapped[str | None]",
                  "line": 38
                },
                {
                  "name": "model_card_url",
                  "type": "Mapped[str | None]",
                  "line": 39
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 40
                },
                {
                  "name": "added_at",
                  "type": "Mapped[datetime | None]",
                  "line": 43
                },
                {
                  "name": "context_window_size",
                  "type": "Mapped[int | None]",
                  "line": 46
                },
                {
                  "name": "supports_ner",
                  "type": "Mapped[bool]",
                  "line": 47
                },
                {
                  "name": "supports_vision",
                  "type": "Mapped[bool]",
                  "line": 50
                }
              ],
              "line": 29
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/registry/router.py",
          "sha256": "29c58ae8b9c85648deb54b557a5f2f78a2d92157e5d624dffbb3c9a1c0d7bd2c",
          "bytes": 3424,
          "routes": [
            {
              "method": "GET",
              "declared_path": "",
              "function": "list_models",
              "line": 46
            },
            {
              "method": "GET",
              "declared_path": "/{model_id}",
              "function": "get_model",
              "line": 53
            },
            {
              "method": "POST",
              "declared_path": "",
              "function": "create_model",
              "line": 61
            },
            {
              "method": "PATCH",
              "declared_path": "/{model_id}",
              "function": "update_model",
              "line": 73
            },
            {
              "method": "DELETE",
              "declared_path": "/{model_id}",
              "function": "delete_model",
              "line": 89
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/registry/schemas.py",
          "sha256": "fe336b9719d82b236e6afc353671eb8eb3e6ed13343a3c941a80b4473582683d",
          "bytes": 2133,
          "routes": [],
          "models": [
            {
              "name": "ModelRegistryCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "model_name",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "model_version",
                  "type": "str | None",
                  "line": 22
                },
                {
                  "name": "parameter_count",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "license",
                  "type": "str | None",
                  "line": 24
                },
                {
                  "name": "model_card_url",
                  "type": "str | None",
                  "line": 25
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 26
                },
                {
                  "name": "context_window_size",
                  "type": "int | None",
                  "line": 27
                },
                {
                  "name": "supports_ner",
                  "type": "bool",
                  "line": 28
                },
                {
                  "name": "supports_vision",
                  "type": "bool",
                  "line": 29
                }
              ],
              "line": 18
            },
            {
              "name": "ModelRegistryRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "int",
                  "line": 40
                },
                {
                  "name": "model_name",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "model_version",
                  "type": "str | None",
                  "line": 42
                },
                {
                  "name": "parameter_count",
                  "type": "str | None",
                  "line": 43
                },
                {
                  "name": "license",
                  "type": "str | None",
                  "line": 44
                },
                {
                  "name": "model_card_url",
                  "type": "str | None",
                  "line": 45
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 46
                },
                {
                  "name": "added_at",
                  "type": "datetime | None",
                  "line": 47
                },
                {
                  "name": "context_window_size",
                  "type": "int | None",
                  "line": 48
                },
                {
                  "name": "supports_ner",
                  "type": "bool",
                  "line": 49
                },
                {
                  "name": "supports_vision",
                  "type": "bool",
                  "line": 50
                }
              ],
              "line": 32
            },
            {
              "name": "ModelRegistryUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "model_name",
                  "type": "str | None",
                  "line": 60
                },
                {
                  "name": "model_version",
                  "type": "str | None",
                  "line": 61
                },
                {
                  "name": "parameter_count",
                  "type": "str | None",
                  "line": 62
                },
                {
                  "name": "license",
                  "type": "str | None",
                  "line": 63
                },
                {
                  "name": "model_card_url",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 65
                },
                {
                  "name": "context_window_size",
                  "type": "int | None",
                  "line": 66
                },
                {
                  "name": "supports_ner",
                  "type": "bool | None",
                  "line": 67
                },
                {
                  "name": "supports_vision",
                  "type": "bool | None",
                  "line": 68
                }
              ],
              "line": 53
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/registry/service.py",
          "sha256": "06d9babf0786d2d06069d98f9f2bbf51b881b1349c418ba2b1282644c098f3b7",
          "bytes": 2811,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/structured.py",
          "sha256": "a8e3558896c8fdf339548a2d6d7e68bfafb88c1fb0913f3870fe7abd8a7cd17d",
          "bytes": 5876,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/__init__.py",
          "sha256": "47c5b3b7fefe918ccd77b9d0c1b524db6ba8750240ccd5b74d6e45f0cdce841f",
          "bytes": 1742,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/engine.py",
          "sha256": "d3b2d8618b20092302dd5fd4d10c3cb6ceb6f3b3c11aeaf1aa8c17568b1d71a0",
          "bytes": 3187,
          "routes": [],
          "models": [
            {
              "name": "RenderedPrompt",
              "bases": [],
              "fields": [
                {
                  "name": "system",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "user",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "template_name",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "consumer_app",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 35
                }
              ],
              "line": 20
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/exceptions.py",
          "sha256": "5b40a69202c7dfb3292563716ecfda9b0255694795ff88308c57303fd8cccd73",
          "bytes": 2331,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/models.py",
          "sha256": "6c460d2cd19320d4b905020c644001bcf5ab117dce2e1bfae18642018d5307be",
          "bytes": 3958,
          "routes": [],
          "models": [
            {
              "name": "PromptTemplate",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 51
                },
                {
                  "name": "template_name",
                  "type": "Mapped[str]",
                  "line": 56
                },
                {
                  "name": "consumer_app",
                  "type": "Mapped[str]",
                  "line": 57
                },
                {
                  "name": "is_override",
                  "type": "Mapped[bool]",
                  "line": 60
                },
                {
                  "name": "purpose",
                  "type": "Mapped[str]",
                  "line": 63
                },
                {
                  "name": "system_prompt",
                  "type": "Mapped[str]",
                  "line": 64
                },
                {
                  "name": "user_prompt_template",
                  "type": "Mapped[str]",
                  "line": 65
                },
                {
                  "name": "token_budget",
                  "type": "Mapped[dict | None]",
                  "line": 66
                },
                {
                  "name": "model_id",
                  "type": "Mapped[int | None]",
                  "line": 67
                },
                {
                  "name": "version",
                  "type": "Mapped[int]",
                  "line": 72
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 75
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 84
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 88
                }
              ],
              "line": 37
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/overrides.py",
          "sha256": "d5a896fb685ccae553bc2471512f597a054023b9f360bfe416dcc5227837d644",
          "bytes": 2545,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/resolver.py",
          "sha256": "44c1555f884f9bf8605671ea4cc18c431aa317bf1ddc91100e845a76572f9603",
          "bytes": 4157,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/llm/templates/schemas.py",
          "sha256": "931cbb7e2c3a714e7c76239c18e7be8db1a97e520cb143e24ce15d799921f15b",
          "bytes": 1769,
          "routes": [],
          "models": [
            {
              "name": "PromptTemplateCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "template_name",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "purpose",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "system_prompt",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "user_prompt_template",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "consumer_app",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "is_override",
                  "type": "bool",
                  "line": 24
                },
                {
                  "name": "token_budget",
                  "type": "dict | None",
                  "line": 25
                },
                {
                  "name": "model_id",
                  "type": "int | None",
                  "line": 26
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 27
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 28
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID | None",
                  "line": 29
                }
              ],
              "line": 13
            },
            {
              "name": "PromptTemplateRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 37
                },
                {
                  "name": "template_name",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "consumer_app",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "is_override",
                  "type": "bool",
                  "line": 40
                },
                {
                  "name": "purpose",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "system_prompt",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "user_prompt_template",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "token_budget",
                  "type": "dict | None",
                  "line": 44
                },
                {
                  "name": "model_id",
                  "type": "int | None",
                  "line": 45
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 46
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 47
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID | None",
                  "line": 48
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 49
                }
              ],
              "line": 32
            },
            {
              "name": "PromptTemplateUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "template_name",
                  "type": "str | None",
                  "line": 55
                },
                {
                  "name": "purpose",
                  "type": "str | None",
                  "line": 56
                },
                {
                  "name": "system_prompt",
                  "type": "str | None",
                  "line": 57
                },
                {
                  "name": "user_prompt_template",
                  "type": "str | None",
                  "line": 58
                },
                {
                  "name": "consumer_app",
                  "type": "str | None",
                  "line": 59
                },
                {
                  "name": "is_override",
                  "type": "bool | None",
                  "line": 60
                },
                {
                  "name": "token_budget",
                  "type": "dict | None",
                  "line": 61
                },
                {
                  "name": "model_id",
                  "type": "int | None",
                  "line": 62
                },
                {
                  "name": "version",
                  "type": "int | None",
                  "line": 63
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 64
                }
              ],
              "line": 52
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/__init__.py",
          "sha256": "9a745f1756a2685c4d7fa974007c53f419502c238ed3956f97e844e343965c0f",
          "bytes": 240,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/alembic.ini",
          "sha256": "9f91262372d5cf06551f80272b10a44c197be3ef3e7dcda228271d6346c4eee6",
          "bytes": 87,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/env.py",
          "sha256": "7ee4f5d2b7bb757689ed8466e665dff961ccb23d0541dd31dca730c806c3ed73",
          "bytes": 3012,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 64
            },
            {
              "environment": "DATABASE_URL",
              "line": 27
            }
          ]
        },
        {
          "source": "townlight_core/migrations/guards.py",
          "sha256": "ad6b3855ae5805aa44d4fd06239047228f0642fb1fc6b504ea47d447aea01608",
          "bytes": 7852,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/runner.py",
          "sha256": "20c85f60b4a55c9b01d334718794dd3de67cb81c13a341f3f6ed1a76f9a4f31f",
          "bytes": 3669,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 47
            }
          ]
        },
        {
          "source": "townlight_core/migrations/versions/__init__.py",
          "sha256": "68926a3b7368abcbb421c607eb819cf0d9fefaa908c52e8d52c58700aebf7c47",
          "bytes": 307,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0001_baseline_v1.py",
          "sha256": "c2c15340fb08bab1113b277fde04a872bbf8acef3876aa8ca4f640ad320e6980",
          "bytes": 24152,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0002_llm.py",
          "sha256": "d75548bca06143171c3704405c2671ae5191dc2b5fb85b7239b8a605dc321227",
          "bytes": 6312,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0003_local_task_queue.py",
          "sha256": "bc3d01f5e198904380fcc835b108a098ef9ba26f507c7d575219772adf5ab76f",
          "bytes": 1909,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0004_catalog.py",
          "sha256": "8066969475b40be59d11ad9ad724402f3206456a82e440fc12b5f9bd4d3c8026",
          "bytes": 748,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0005_job_leases.py",
          "sha256": "608b6d0e9bb2c17223b1708f655fe14596a32f0b68e2be86db044fade590cd8d",
          "bytes": 899,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0006_rule_history.py",
          "sha256": "c81a1f1c696696702aa1ae895ee6fc7cd2c9010766abf054491e8acc4f2e6302",
          "bytes": 4206,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0007_module_inventory.py",
          "sha256": "d8e4a304527de33536f5362a8eaaabd48992940265a6d72db6d666507433925b",
          "bytes": 3596,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0008_department_authority.py",
          "sha256": "96db7cdaa3c3465ba9f2e3ebe4996f3b9c9238e33f7ce85826dca3280b32901e",
          "bytes": 3783,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/migrations/versions/townlight_core_0009_job_artifacts.py",
          "sha256": "5c02e20fe7b91bd1f27d83191d337326db16a1b528c8b167094f5407f531e55a",
          "bytes": 3392,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/models/__init__.py",
          "sha256": "06147bb3a8ca75998557a755cd5966b4b617a9aab53426743f8ed915688f1d81",
          "bytes": 363,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/notifications/__init__.py",
          "sha256": "a6b1d14746e7609f8b2512b2ef6ccf9c2cc94df1044a7b66d66a39c30636b824",
          "bytes": 483,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/notifications/notice.py",
          "sha256": "e6ad671cb058c276424a25ad0ded51b5525e1e2bd06fb7010e2c0049a8217de7",
          "bytes": 5268,
          "routes": [],
          "models": [
            {
              "name": "DeadlinePlan",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 17
                },
                {
                  "name": "publish_by",
                  "type": "date",
                  "line": 18
                },
                {
                  "name": "reminders",
                  "type": "tuple[str, ...]",
                  "line": 19
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 20
                }
              ],
              "line": 13
            },
            {
              "name": "NoticeComplianceWarning",
              "bases": [],
              "fields": [
                {
                  "name": "code",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 29
                }
              ],
              "line": 24
            },
            {
              "name": "NoticeComplianceResult",
              "bases": [],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "scheduled_start",
                  "type": "datetime",
                  "line": 41
                },
                {
                  "name": "posted_at",
                  "type": "datetime",
                  "line": 42
                },
                {
                  "name": "minimum_notice_hours",
                  "type": "int",
                  "line": 43
                },
                {
                  "name": "deadline_at",
                  "type": "datetime",
                  "line": 44
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 45
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 46
                },
                {
                  "name": "compliant",
                  "type": "bool",
                  "line": 47
                },
                {
                  "name": "http_status",
                  "type": "int",
                  "line": 48
                },
                {
                  "name": "warnings",
                  "type": "tuple[NoticeComplianceWarning, ...]",
                  "line": 49
                }
              ],
              "line": 36
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/onboarding/__init__.py",
          "sha256": "571ae2118d589efff98a29f0617b81fbf57ffa564944081ba090cd26aebd5f64",
          "bytes": 544,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/onboarding/profile.py",
          "sha256": "b67bc5f483f07cc7966e6db37bfbd5aa4950f7f9ee530bc7fef27ed792885bd1",
          "bytes": 5271,
          "routes": [],
          "models": [
            {
              "name": "OnboardingField",
              "bases": [],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "kind",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 10
            },
            {
              "name": "OnboardingProgress",
              "bases": [],
              "fields": [
                {
                  "name": "next_field",
                  "type": "str | None",
                  "line": 22
                },
                {
                  "name": "next_question",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "completed_fields",
                  "type": "tuple[str, ...]",
                  "line": 24
                },
                {
                  "name": "skipped_fields",
                  "type": "tuple[str, ...]",
                  "line": 25
                },
                {
                  "name": "all_complete",
                  "type": "bool",
                  "line": 26
                }
              ],
              "line": 19
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/__init__.py",
          "sha256": "8566d9cb030f415cc760ff53c2d2a86065ba24fb0098a1cf232fafba3a452ec2",
          "bytes": 3698,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/backup.py",
          "sha256": "3c2580aaf0bad4989fd048927ba4eb669b85fa6fccc5119d656c054a8bfd1bfe",
          "bytes": 6873,
          "routes": [],
          "models": [
            {
              "name": "BackupItem",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "relative_path",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "size_bytes",
                  "type": "int",
                  "line": 22
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "required",
                  "type": "bool",
                  "line": 24
                }
              ],
              "line": 15
            },
            {
              "name": "BackupManifest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "schema_version",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "backup_id",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "city_profile_id",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "townlight_core_version",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 36
                },
                {
                  "name": "modules",
                  "type": "list[str]",
                  "line": 37
                },
                {
                  "name": "items",
                  "type": "list[BackupItem]",
                  "line": 38
                }
              ],
              "line": 27
            },
            {
              "name": "BackupValidationResult",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "valid",
                  "type": "bool",
                  "line": 46
                },
                {
                  "name": "missing",
                  "type": "list[str]",
                  "line": 47
                },
                {
                  "name": "hash_mismatches",
                  "type": "list[str]",
                  "line": 48
                }
              ],
              "line": 41
            },
            {
              "name": "BackupRestoreAction",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_relative_path",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "target_relative_path",
                  "type": "str",
                  "line": 57
                },
                {
                  "name": "status",
                  "type": "RestoreActionStatus",
                  "line": 58
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 59
                }
              ],
              "line": 51
            },
            {
              "name": "BackupRestorePlan",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "ready",
                  "type": "bool",
                  "line": 67
                },
                {
                  "name": "actions",
                  "type": "list[BackupRestoreAction]",
                  "line": 68
                },
                {
                  "name": "blocked_reason",
                  "type": "str | None",
                  "line": 69
                }
              ],
              "line": 62
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/health.py",
          "sha256": "e63da46e405d5505dfde8b29723687698e0f84b7f692f42bdf5ba5468ceb0858",
          "bytes": 3592,
          "routes": [],
          "models": [
            {
              "name": "PlatformHealthCheck",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "component",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "status",
                  "type": "PlatformHealthStatus",
                  "line": 26
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "next_action",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "blocking",
                  "type": "bool",
                  "line": 29
                },
                {
                  "name": "checked_at",
                  "type": "datetime",
                  "line": 30
                },
                {
                  "name": "admin_detail",
                  "type": "str | None",
                  "line": 31
                }
              ],
              "line": 19
            },
            {
              "name": "PlatformHealthSummary",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "PlatformHealthStatus",
                  "line": 39
                },
                {
                  "name": "checks",
                  "type": "list[PlatformHealthCheck]",
                  "line": 40
                },
                {
                  "name": "next_action",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "staff_message",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "admin_message",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "blocked_components",
                  "type": "list[str]",
                  "line": 44
                },
                {
                  "name": "degraded_components",
                  "type": "list[str]",
                  "line": 45
                }
              ],
              "line": 34
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/inventory.py",
          "sha256": "843f4399d19f328d98c6988bcc82f42a945ebd53df6833941aac501123dc7f70",
          "bytes": 21323,
          "routes": [],
          "models": [
            {
              "name": "ModuleInventoryEntry",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 125
                },
                {
                  "name": "version",
                  "type": "str",
                  "line": 126
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "line": 127
                },
                {
                  "name": "manifest",
                  "type": "ModuleManifest",
                  "line": 128
                }
              ],
              "line": 120
            },
            {
              "name": "ModuleInventory",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "scope_id",
                  "type": "str",
                  "line": 144
                },
                {
                  "name": "revision",
                  "type": "int",
                  "line": 145
                },
                {
                  "name": "profile",
                  "type": "InstallProfile",
                  "line": 146
                },
                {
                  "name": "townlight_core_version",
                  "type": "str",
                  "line": 147
                },
                {
                  "name": "entries",
                  "type": "list[ModuleInventoryEntry]",
                  "line": 148
                }
              ],
              "line": 139
            },
            {
              "name": "InventoryOutcome",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "inventory",
                  "type": "ModuleInventory",
                  "line": 209
                },
                {
                  "name": "inserted",
                  "type": "bool",
                  "line": 210
                },
                {
                  "name": "fingerprint",
                  "type": "str",
                  "line": 211
                }
              ],
              "line": 204
            },
            {
              "name": "ModuleRecommendation",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 415
                },
                {
                  "name": "action",
                  "type": "RecommendationAction",
                  "line": 416
                },
                {
                  "name": "basis",
                  "type": "RecommendationBasis",
                  "line": 417
                },
                {
                  "name": "reasons",
                  "type": "list[str]",
                  "line": 418
                },
                {
                  "name": "operator_action",
                  "type": "str",
                  "line": 419
                }
              ],
              "line": 410
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/modules.py",
          "sha256": "7857122ac3cc026595b8f326a8b232fd8c23b9735b49df7c776f1a34f2b0ac15",
          "bytes": 15072,
          "routes": [],
          "models": [
            {
              "name": "ModuleDependency",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "min_version",
                  "type": "str | None",
                  "line": 52
                },
                {
                  "name": "required",
                  "type": "bool",
                  "line": 53
                }
              ],
              "line": 46
            },
            {
              "name": "ModulePermission",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "key",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 62
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 63
                },
                {
                  "name": "surface",
                  "type": "ModuleSurface",
                  "line": 64
                },
                {
                  "name": "roles",
                  "type": "list[str]",
                  "line": 65
                }
              ],
              "line": 56
            },
            {
              "name": "ModuleRoute",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "path",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "surface",
                  "type": "ModuleSurface",
                  "line": 83
                },
                {
                  "name": "permission",
                  "type": "str | None",
                  "line": 84
                }
              ],
              "line": 75
            },
            {
              "name": "ModuleService",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "service_type",
                  "type": "ServiceType",
                  "line": 93
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "required",
                  "type": "bool",
                  "line": 95
                },
                {
                  "name": "start_order",
                  "type": "int",
                  "line": 96
                },
                {
                  "name": "health_check_id",
                  "type": "str | None",
                  "line": 97
                }
              ],
              "line": 87
            },
            {
              "name": "ModuleMigration",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 105
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 106
                },
                {
                  "name": "owner_schema",
                  "type": "str | None",
                  "line": 107
                },
                {
                  "name": "required",
                  "type": "bool",
                  "line": 108
                }
              ],
              "line": 100
            },
            {
              "name": "ModuleHealthCheck",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 116
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 117
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 118
                },
                {
                  "name": "blocking",
                  "type": "bool",
                  "line": 119
                },
                {
                  "name": "surface",
                  "type": "Literal['staff', 'admin', 'system']",
                  "line": 120
                },
                {
                  "name": "repair_action",
                  "type": "str | None",
                  "line": 121
                }
              ],
              "line": 111
            },
            {
              "name": "ModuleBackupHook",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 129
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 130
                },
                {
                  "name": "includes",
                  "type": "list[str]",
                  "line": 131
                },
                {
                  "name": "restore_supported",
                  "type": "bool",
                  "line": 132
                }
              ],
              "line": 124
            },
            {
              "name": "ModuleModelRequirement",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 140
                },
                {
                  "name": "provider",
                  "type": "Literal['ollama', 'local', 'none', 'openai', 'anthropic']",
                  "line": 141
                },
                {
                  "name": "model_name",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "required",
                  "type": "bool",
                  "line": 143
                },
                {
                  "name": "local_only",
                  "type": "bool",
                  "line": 144
                },
                {
                  "name": "minimum_context_tokens",
                  "type": "int | None",
                  "line": 145
                },
                {
                  "name": "checksum_sha256",
                  "type": "str | None",
                  "line": 146
                },
                {
                  "name": "download_url",
                  "type": "str | None",
                  "line": 147
                },
                {
                  "name": "license_name",
                  "type": "str | None",
                  "line": 148
                }
              ],
              "line": 135
            },
            {
              "name": "ModuleRuntimeRequirement",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "kind",
                  "type": "RuntimeRequirementKind",
                  "line": 156
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 157
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 158
                },
                {
                  "name": "required",
                  "type": "bool",
                  "line": 159
                },
                {
                  "name": "operator_visible",
                  "type": "bool",
                  "line": 160
                }
              ],
              "line": 151
            },
            {
              "name": "ModuleManifest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 168
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 169
                },
                {
                  "name": "version",
                  "type": "str",
                  "line": 170
                },
                {
                  "name": "package_name",
                  "type": "str",
                  "line": 171
                },
                {
                  "name": "townlight_core_min_version",
                  "type": "str",
                  "line": 172
                },
                {
                  "name": "enabled_by_default",
                  "type": "bool",
                  "line": 173
                },
                {
                  "name": "surfaces",
                  "type": "list[ModuleSurface]",
                  "line": 174
                },
                {
                  "name": "install_profiles",
                  "type": "list[InstallProfile]",
                  "line": 175
                },
                {
                  "name": "dependencies",
                  "type": "list[ModuleDependency]",
                  "line": 176
                },
                {
                  "name": "routes",
                  "type": "list[ModuleRoute]",
                  "line": 177
                },
                {
                  "name": "permissions",
                  "type": "list[ModulePermission]",
                  "line": 178
                },
                {
                  "name": "services",
                  "type": "list[ModuleService]",
                  "line": 179
                },
                {
                  "name": "migrations",
                  "type": "list[ModuleMigration]",
                  "line": 180
                },
                {
                  "name": "health_checks",
                  "type": "list[ModuleHealthCheck]",
                  "line": 181
                },
                {
                  "name": "backup_hooks",
                  "type": "list[ModuleBackupHook]",
                  "line": 182
                },
                {
                  "name": "model_requirements",
                  "type": "list[ModuleModelRequirement]",
                  "line": 183
                },
                {
                  "name": "runtime_requirements",
                  "type": "list[ModuleRuntimeRequirement]",
                  "line": 184
                },
                {
                  "name": "settings_schema_version",
                  "type": "str | None",
                  "line": 185
                },
                {
                  "name": "metadata",
                  "type": "dict[str, Any]",
                  "line": 186
                }
              ],
              "line": 163
            },
            {
              "name": "ModuleRegistryEntry",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 235
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 236
                },
                {
                  "name": "version",
                  "type": "str",
                  "line": 237
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "line": 238
                },
                {
                  "name": "locked",
                  "type": "bool",
                  "line": 239
                },
                {
                  "name": "status",
                  "type": "ModuleRegistryStatus",
                  "line": 240
                },
                {
                  "name": "reason",
                  "type": "str | None",
                  "line": 241
                },
                {
                  "name": "manifest",
                  "type": "ModuleManifest",
                  "line": 242
                }
              ],
              "line": 230
            },
            {
              "name": "ModuleRegistryState",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "profile",
                  "type": "InstallProfile",
                  "line": 250
                },
                {
                  "name": "townlight_core_version",
                  "type": "str",
                  "line": 251
                },
                {
                  "name": "townlight_core_locked",
                  "type": "bool",
                  "line": 252
                },
                {
                  "name": "entries",
                  "type": "list[ModuleRegistryEntry]",
                  "line": 253
                }
              ],
              "line": 245
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/runtime.py",
          "sha256": "5328e622bd17db907c66fb424fc8a5d924be0704fc99eff3a8f0dc42f855061e",
          "bytes": 1989,
          "routes": [],
          "models": [
            {
              "name": "RuntimeActionResult",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "RuntimeAction",
                  "line": 33
                },
                {
                  "name": "status",
                  "type": "RuntimeActionStatus",
                  "line": 34
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "next_action",
                  "type": "str | None",
                  "line": 37
                },
                {
                  "name": "evidence",
                  "type": "dict[str, str | int | bool | None]",
                  "line": 38
                },
                {
                  "name": "started_at",
                  "type": "datetime",
                  "line": 39
                },
                {
                  "name": "completed_at",
                  "type": "datetime | None",
                  "line": 40
                }
              ],
              "line": 28
            },
            {
              "name": "LocalRuntimeProfile",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "profile_id",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "city_name",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "data_root",
                  "type": "Path",
                  "line": 50
                },
                {
                  "name": "backup_root",
                  "type": "Path",
                  "line": 51
                },
                {
                  "name": "module_registry",
                  "type": "ModuleRegistryState",
                  "line": 52
                },
                {
                  "name": "model_provider",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "local_only",
                  "type": "bool",
                  "line": 54
                },
                {
                  "name": "network_allowed_for",
                  "type": "list[str]",
                  "line": 55
                }
              ],
              "line": 43
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/task_queue.py",
          "sha256": "7d5108826b83b154d96412c12e3e52ac70c32412208923e8fef00ef3de8864d6",
          "bytes": 12258,
          "routes": [],
          "models": [
            {
              "name": "LocalTask",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "task_id",
                  "type": "Mapped[str]",
                  "line": 32
                },
                {
                  "name": "module_id",
                  "type": "Mapped[str]",
                  "line": 33
                },
                {
                  "name": "task_type",
                  "type": "Mapped[str]",
                  "line": 34
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 35
                },
                {
                  "name": "payload",
                  "type": "Mapped[dict[str, Any]]",
                  "line": 36
                },
                {
                  "name": "attempt_count",
                  "type": "Mapped[int]",
                  "line": 37
                },
                {
                  "name": "queued_at",
                  "type": "Mapped[datetime]",
                  "line": 38
                },
                {
                  "name": "available_at",
                  "type": "Mapped[datetime | None]",
                  "line": 39
                },
                {
                  "name": "last_error",
                  "type": "Mapped[str | None]",
                  "line": 40
                },
                {
                  "name": "idempotency_key",
                  "type": "Mapped[str | None]",
                  "line": 41
                },
                {
                  "name": "audit_subject_id",
                  "type": "Mapped[str | None]",
                  "line": 42
                },
                {
                  "name": "claim_token",
                  "type": "Mapped[str | None]",
                  "line": 43
                },
                {
                  "name": "lease_expires_at",
                  "type": "Mapped[datetime | None]",
                  "line": 44
                },
                {
                  "name": "cancelled_by",
                  "type": "Mapped[str | None]",
                  "line": 47
                }
              ],
              "line": 27
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/platform/tasks.py",
          "sha256": "29f5509deecd7e196d9c43a964e34641c53bd4fa502491e680620a83f9b9622c",
          "bytes": 5754,
          "routes": [],
          "models": [
            {
              "name": "TaskRetryPolicy",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "max_attempts",
                  "type": "int",
                  "line": 19
                },
                {
                  "name": "base_delay_seconds",
                  "type": "int",
                  "line": 20
                },
                {
                  "name": "max_delay_seconds",
                  "type": "int",
                  "line": 21
                }
              ],
              "line": 14
            },
            {
              "name": "LocalTaskEnvelope",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "task_id",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "task_type",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "status",
                  "type": "TaskStatus",
                  "line": 32
                },
                {
                  "name": "payload",
                  "type": "dict[str, Any]",
                  "line": 33
                },
                {
                  "name": "attempt_count",
                  "type": "int",
                  "line": 34
                },
                {
                  "name": "queued_at",
                  "type": "datetime",
                  "line": 35
                },
                {
                  "name": "available_at",
                  "type": "datetime | None",
                  "line": 36
                },
                {
                  "name": "last_error",
                  "type": "str | None",
                  "line": 37
                },
                {
                  "name": "idempotency_key",
                  "type": "str | None",
                  "line": 38
                },
                {
                  "name": "audit_subject_id",
                  "type": "str | None",
                  "line": 39
                },
                {
                  "name": "claim_token",
                  "type": "str | None",
                  "line": 40
                },
                {
                  "name": "lease_expires_at",
                  "type": "datetime | None",
                  "line": 41
                }
              ],
              "line": 24
            },
            {
              "name": "LocalTaskResult",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "task",
                  "type": "LocalTaskEnvelope",
                  "line": 57
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "retry_at",
                  "type": "datetime | None",
                  "line": 59
                }
              ],
              "line": 52
            },
            {
              "name": "TaskQueueSummary",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "total",
                  "type": "int",
                  "line": 67
                },
                {
                  "name": "counts",
                  "type": "dict[str, int]",
                  "line": 68
                },
                {
                  "name": "blocked",
                  "type": "bool",
                  "line": 69
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 70
                }
              ],
              "line": 62
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/provenance/__init__.py",
          "sha256": "a54d29222c9fc54bd9dc6dfd237a73003a31bd6508fbb315eff200d316685607",
          "bytes": 385,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/provenance/contracts.py",
          "sha256": "cb75de8d4de91b9b2ab0e1c94f6cd6fd04ca8266b56c24c4603507fb9e7c73fc",
          "bytes": 3912,
          "routes": [],
          "models": [
            {
              "name": "CitationTarget",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "label",
                  "type": "str | None",
                  "line": 46
                },
                {
                  "name": "page",
                  "type": "int | None",
                  "line": 47
                },
                {
                  "name": "section",
                  "type": "str | None",
                  "line": 48
                },
                {
                  "name": "line_start",
                  "type": "int | None",
                  "line": 49
                },
                {
                  "name": "line_end",
                  "type": "int | None",
                  "line": 50
                },
                {
                  "name": "parcel_id",
                  "type": "str | None",
                  "line": 51
                },
                {
                  "name": "anchor",
                  "type": "str | None",
                  "line": 52
                }
              ],
              "line": 41
            },
            {
              "name": "SourceReference",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "kind",
                  "type": "SourceKind",
                  "line": 61
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 62
                },
                {
                  "name": "source_system",
                  "type": "str | None",
                  "line": 63
                },
                {
                  "name": "source_path",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "source_url",
                  "type": "str | None",
                  "line": 65
                },
                {
                  "name": "captured_at",
                  "type": "datetime",
                  "line": 66
                },
                {
                  "name": "checksum",
                  "type": "str | None",
                  "line": 67
                },
                {
                  "name": "retention_hint",
                  "type": "str | None",
                  "line": 68
                },
                {
                  "name": "sensitivity_label",
                  "type": "str | None",
                  "line": 69
                },
                {
                  "name": "citation_locator",
                  "type": "CitationTarget | None",
                  "line": 70
                }
              ],
              "line": 55
            },
            {
              "name": "DocumentMetadata",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "document_id",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "source",
                  "type": "SourceReference",
                  "line": 88
                },
                {
                  "name": "document_type",
                  "type": "str | None",
                  "line": 89
                },
                {
                  "name": "created_at",
                  "type": "datetime | None",
                  "line": 90
                },
                {
                  "name": "captured_at",
                  "type": "datetime",
                  "line": 91
                },
                {
                  "name": "checksum",
                  "type": "str | None",
                  "line": 92
                },
                {
                  "name": "retention_hint",
                  "type": "str | None",
                  "line": 93
                },
                {
                  "name": "sensitivity_label",
                  "type": "str | None",
                  "line": 94
                }
              ],
              "line": 81
            },
            {
              "name": "ProvenanceBundle",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "bundle_id",
                  "type": "str",
                  "line": 109
                },
                {
                  "name": "generated_at",
                  "type": "datetime",
                  "line": 110
                },
                {
                  "name": "sources",
                  "type": "list[SourceReference]",
                  "line": 111
                },
                {
                  "name": "documents",
                  "type": "list[DocumentMetadata]",
                  "line": 112
                }
              ],
              "line": 104
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/release_provenance.py",
          "sha256": "5b73394b358fed482549e0f544988d85f8acd5b6510609332d3b61fca34cfa28",
          "bytes": 22694,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "GH_TOKEN",
              "line": 62
            },
            {
              "environment": "GITHUB_TOKEN",
              "line": 62
            }
          ]
        },
        {
          "source": "townlight_core/scaffold/__init__.py",
          "sha256": "a7cfa7320296bee9a99761fb5c5735ce578914e451b6b54b249ebfb8734f52f1",
          "bytes": 1592,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/scaffold/__main__.py",
          "sha256": "5735e7445cf005e809f9cdfca7485796481f20b40d6ac62978df53cac985a09b",
          "bytes": 332,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/scaffold/cli.py",
          "sha256": "0e45c64c04a1a86871d41f7acc2c5c62357e1db8248120afc877c46a5fd9d7eb",
          "bytes": 5592,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/scaffold/project.py",
          "sha256": "ec9ec04b46d6d26f1764e487d52fcb01fc66ea8b05553c771a289b8c183c8b41",
          "bytes": 23120,
          "routes": [],
          "models": [
            {
              "name": "PlannedFile",
              "bases": [],
              "fields": [
                {
                  "name": "relative_path",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "content",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "executable",
                  "type": "bool",
                  "line": 38
                }
              ],
              "line": 33
            },
            {
              "name": "ProjectPlan",
              "bases": [],
              "fields": [
                {
                  "name": "spec",
                  "type": "ModuleSpec",
                  "line": 47
                },
                {
                  "name": "project_root_name",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "files",
                  "type": "tuple[PlannedFile, ...]",
                  "line": 49
                }
              ],
              "line": 46
            },
            {
              "name": "GenerationResult",
              "bases": [],
              "fields": [
                {
                  "name": "spec",
                  "type": "ModuleSpec",
                  "line": 58
                },
                {
                  "name": "project_root",
                  "type": "Path",
                  "line": 59
                },
                {
                  "name": "created",
                  "type": "tuple[str, ...]",
                  "line": 60
                },
                {
                  "name": "dry_run",
                  "type": "bool",
                  "line": 61
                }
              ],
              "line": 57
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/scaffold/spec.py",
          "sha256": "7f7f2e4b1bed9e331b002ef9c560a25cc4f4d2e81922204455fecb9f490831e8",
          "bytes": 5927,
          "routes": [],
          "models": [
            {
              "name": "ModuleSpec",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 75
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 76
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 77
                },
                {
                  "name": "version",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "townlight_core_min_version",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "permission_key",
                  "type": "str | None",
                  "line": 80
                },
                {
                  "name": "staff_roles",
                  "type": "tuple[str, ...]",
                  "line": 81
                },
                {
                  "name": "route_path",
                  "type": "str | None",
                  "line": 82
                }
              ],
              "line": 65
            },
            {
              "name": "ScaffoldOptions",
              "bases": [],
              "fields": [
                {
                  "name": "dry_run",
                  "type": "bool",
                  "line": 168
                }
              ],
              "line": 165
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/scheduling/__init__.py",
          "sha256": "2bde5b7b97b7e42e6828d6f898908c43fa81f0e138c12fe98e389839a1b81f84",
          "bytes": 340,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/scheduling/cron.py",
          "sha256": "6e385d99111b7809af36ce9846902068545757f66425e72e924e1088b53277cc",
          "bytes": 2668,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/search/__init__.py",
          "sha256": "13d8bec659e5056118385219d8741e0e25d77ef57409de94eedbadf4b1fc7dc2",
          "bytes": 4610,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/security/__init__.py",
          "sha256": "c89bf972b45da10e18076bb17fa8b9cf8ae0b9bf76475f90e136baa8d832bb42",
          "bytes": 1715,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/security/at_rest.py",
          "sha256": "87bb3aef0e3fbba957364037e1c4fd96f972fc758b30e0684c6c9915ed2089e0",
          "bytes": 2966,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/security/config_validation.py",
          "sha256": "7043de1ab5799079e7521603510206945c91a0ddb3fdd16464b3e4190010d110",
          "bytes": 5008,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/security/host_validation.py",
          "sha256": "dc3ee223e1875baabed6202ecf673f91b837c7b5ec51f751efe594d76ad0addb",
          "bytes": 5292,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/tasks/__init__.py",
          "sha256": "fa149df79666a714bc9fa46bbd275f89b5eeca1b6244d4e0415989ce3c38d85a",
          "bytes": 873,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/tasks/artifacts.py",
          "sha256": "4827aa4c8778f0612e5deba771be06bdb404ea19149166ff8ab2f7c7c56c229d",
          "bytes": 16399,
          "routes": [],
          "models": [
            {
              "name": "JobArtifact",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "artifact_id",
                  "type": "Mapped[str]",
                  "line": 101
                },
                {
                  "name": "task_id",
                  "type": "Mapped[str]",
                  "line": 102
                },
                {
                  "name": "module_id",
                  "type": "Mapped[str]",
                  "line": 103
                },
                {
                  "name": "task_type",
                  "type": "Mapped[str]",
                  "line": 104
                },
                {
                  "name": "claim_token",
                  "type": "Mapped[str]",
                  "line": 105
                },
                {
                  "name": "attempt_count",
                  "type": "Mapped[int]",
                  "line": 106
                },
                {
                  "name": "artifact_name",
                  "type": "Mapped[str]",
                  "line": 107
                },
                {
                  "name": "relative_path",
                  "type": "Mapped[str]",
                  "line": 108
                },
                {
                  "name": "artifact_sha256",
                  "type": "Mapped[str]",
                  "line": 109
                },
                {
                  "name": "artifact_bytes",
                  "type": "Mapped[int]",
                  "line": 110
                },
                {
                  "name": "artifact_kind",
                  "type": "Mapped[str]",
                  "line": 111
                },
                {
                  "name": "source_sha256",
                  "type": "Mapped[str]",
                  "line": 112
                },
                {
                  "name": "source_label",
                  "type": "Mapped[str]",
                  "line": 113
                },
                {
                  "name": "recorded_by",
                  "type": "Mapped[str]",
                  "line": 114
                },
                {
                  "name": "recorded_at",
                  "type": "Mapped[datetime]",
                  "line": 115
                }
              ],
              "line": 96
            },
            {
              "name": "ArtifactStore",
              "bases": [],
              "fields": [
                {
                  "name": "root",
                  "type": "Path",
                  "line": 122
                }
              ],
              "line": 119
            },
            {
              "name": "SourceBinding",
              "bases": [],
              "fields": [
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 144
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 145
                }
              ],
              "line": 141
            },
            {
              "name": "ArtifactProposal",
              "bases": [],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 152
                },
                {
                  "name": "kind",
                  "type": "str",
                  "line": 153
                },
                {
                  "name": "content",
                  "type": "bytes",
                  "line": 154
                },
                {
                  "name": "source",
                  "type": "SourceBinding",
                  "line": 155
                }
              ],
              "line": 149
            },
            {
              "name": "PreparedArtifact",
              "bases": [],
              "fields": [
                {
                  "name": "store",
                  "type": "ArtifactStore",
                  "line": 162
                },
                {
                  "name": "staging_path",
                  "type": "Path",
                  "line": 163
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 164
                },
                {
                  "name": "kind",
                  "type": "str",
                  "line": 165
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 166
                },
                {
                  "name": "size",
                  "type": "int",
                  "line": 167
                },
                {
                  "name": "source",
                  "type": "SourceBinding",
                  "line": 168
                }
              ],
              "line": 159
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/tasks/leased.py",
          "sha256": "1a2d44107db916e54fe2bf05d6909d356603393d9686b4e28ba763702c3671a0",
          "bytes": 3267,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/tasks/registry.py",
          "sha256": "71ce9c95a7f30cd97f045ddbeb6a7d36472b82a50c0ba07782b6ec9b465264c8",
          "bytes": 776,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/tasks/worker.py",
          "sha256": "2f4bf95de44b0f1f90f21a0b773748bc8f80838498d5f25c05d63ce9d34df841",
          "bytes": 3095,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 34
            },
            {
              "environment": "TOWNLIGHT_CORE_TASK_HANDLER_MODULES",
              "line": 37
            }
          ]
        },
        {
          "source": "townlight_core/testing/__init__.py",
          "sha256": "6033e371f9adb5bb4107ec14c541768a7b6acfab5d9d1b184fd490461c9b87df",
          "bytes": 2115,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/testing/mock_city.py",
          "sha256": "0268eb2457e22ab2c99f4a0b5c2f3dc34aef0102cf7d0f10019b1db9c2918961",
          "bytes": 51471,
          "routes": [],
          "models": [
            {
              "name": "MockCityVendorContract",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "vendor_name",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "interface_status",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "method",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "path",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "auth_method",
                  "type": "str",
                  "line": 96
                },
                {
                  "name": "delta_query_param",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "sample_payload",
                  "type": "dict[str, Any]",
                  "line": 98
                },
                {
                  "name": "notes",
                  "type": "str",
                  "line": 99
                }
              ],
              "line": 90
            },
            {
              "name": "MockCityIdpContract",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 117
                },
                {
                  "name": "interface_status",
                  "type": "str",
                  "line": 118
                },
                {
                  "name": "issuer",
                  "type": "str",
                  "line": 119
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 120
                },
                {
                  "name": "authorization_url",
                  "type": "str",
                  "line": 121
                },
                {
                  "name": "token_url",
                  "type": "str",
                  "line": 122
                },
                {
                  "name": "jwks_path",
                  "type": "str",
                  "line": 123
                },
                {
                  "name": "role_claims",
                  "type": "tuple[str, ...]",
                  "line": 124
                },
                {
                  "name": "algorithms",
                  "type": "tuple[str, ...]",
                  "line": 125
                },
                {
                  "name": "client_id",
                  "type": "str",
                  "line": 126
                },
                {
                  "name": "redirect_uri",
                  "type": "str",
                  "line": 127
                },
                {
                  "name": "staff_subject",
                  "type": "str",
                  "line": 128
                },
                {
                  "name": "staff_email",
                  "type": "str",
                  "line": 129
                },
                {
                  "name": "staff_roles",
                  "type": "tuple[str, ...]",
                  "line": 130
                },
                {
                  "name": "notes",
                  "type": "str",
                  "line": 131
                }
              ],
              "line": 116
            },
            {
              "name": "MockCityBackupRetentionContract",
              "bases": [],
              "fields": [
                {
                  "name": "city",
                  "type": "str",
                  "line": 155
                },
                {
                  "name": "interface_status",
                  "type": "str",
                  "line": 156
                },
                {
                  "name": "backup_scope",
                  "type": "tuple[str, ...]",
                  "line": 157
                },
                {
                  "name": "restore_proof_required",
                  "type": "bool",
                  "line": 158
                },
                {
                  "name": "manifest_required_fields",
                  "type": "tuple[str, ...]",
                  "line": 159
                },
                {
                  "name": "retention_years",
                  "type": "int",
                  "line": 160
                },
                {
                  "name": "restore_test_interval_days",
                  "type": "int",
                  "line": 161
                },
                {
                  "name": "off_host_storage",
                  "type": "str",
                  "line": 162
                },
                {
                  "name": "encryption_at_rest_required",
                  "type": "bool",
                  "line": 163
                },
                {
                  "name": "immutable_retention_required",
                  "type": "bool",
                  "line": 164
                },
                {
                  "name": "legal_hold_supported",
                  "type": "bool",
                  "line": 165
                },
                {
                  "name": "approval_artifact",
                  "type": "str",
                  "line": 166
                },
                {
                  "name": "notes",
                  "type": "str",
                  "line": 167
                }
              ],
              "line": 154
            },
            {
              "name": "MockCityContractCheck",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 189
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 190
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 191
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 192
                },
                {
                  "name": "normalized_external_meeting_id",
                  "type": "str | None",
                  "line": 193
                },
                {
                  "name": "delta_request_url",
                  "type": "str | None",
                  "line": 194
                }
              ],
              "line": 188
            },
            {
              "name": "MockCityIdpCheck",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 209
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 210
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 211
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 212
                },
                {
                  "name": "auth_method",
                  "type": "str | None",
                  "line": 213
                },
                {
                  "name": "subject",
                  "type": "str | None",
                  "line": 214
                },
                {
                  "name": "roles",
                  "type": "tuple[str, ...]",
                  "line": 215
                }
              ],
              "line": 208
            },
            {
              "name": "MockCityBackupRetentionCheck",
              "bases": [],
              "fields": [
                {
                  "name": "city",
                  "type": "str",
                  "line": 231
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 232
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 233
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 234
                },
                {
                  "name": "checked_fields",
                  "type": "tuple[str, ...]",
                  "line": 235
                }
              ],
              "line": 230
            },
            {
              "name": "DemoTownFixtureContract",
              "bases": [],
              "fields": [
                {
                  "name": "schema_version",
                  "type": "str",
                  "line": 251
                },
                {
                  "name": "fixture_id",
                  "type": "str",
                  "line": 252
                },
                {
                  "name": "fixture_version",
                  "type": "str",
                  "line": 253
                },
                {
                  "name": "deterministic_seed",
                  "type": "str",
                  "line": 254
                },
                {
                  "name": "generated_at",
                  "type": "str",
                  "line": 255
                },
                {
                  "name": "municipality",
                  "type": "dict[str, Any]",
                  "line": 256
                },
                {
                  "name": "sources",
                  "type": "tuple[dict[str, Any], ...]",
                  "line": 257
                },
                {
                  "name": "records",
                  "type": "tuple[dict[str, Any], ...]",
                  "line": 258
                },
                {
                  "name": "requests",
                  "type": "tuple[dict[str, Any], ...]",
                  "line": 259
                },
                {
                  "name": "expected",
                  "type": "dict[str, Any]",
                  "line": 260
                }
              ],
              "line": 248
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_core/verification/__init__.py",
          "sha256": "c70e114fe70b60ccc09ee541df728316be966ca7660be3275ce66086e737f233",
          "bytes": 441,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_core/verification/browser_evidence.py",
          "sha256": "1edca65a6a73ca5b42a3eddc9db530e5d78b2bd7eec54e867c4e2dfe061a3c0b",
          "bytes": 3230,
          "routes": [],
          "models": [
            {
              "name": "BrowserReleaseEvidenceResult",
              "bases": [],
              "fields": [
                {
                  "name": "version",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "reviewed_at",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "page",
                  "type": "Path",
                  "line": 26
                },
                {
                  "name": "screenshots",
                  "type": "dict[str, Path]",
                  "line": 27
                }
              ],
              "line": 23
            }
          ],
          "configuration": []
        }
      ]
    },
    "records": {
      "repository": "townlight/sunshine",
      "repository_head": "156ef1ba2d06c77eb1820fa7efdbcb94a2c92fa8",
      "working_tree_modified": true,
      "principal_import": "townlight_records",
      "source": [
        {
          "source": "backend/townlight_records/__init__.py",
          "sha256": "ff95c656e3245c0b6c3400fb8c22ab8d06559682f96d4f456deabc81cf970cb3",
          "bytes": 31,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/admin/__init__.py",
          "sha256": "41dd8646dfff4f77df72dd38cfbb57cd88c037c7d45192dbc1fdfe537d35e6ca",
          "bytes": 97,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/admin/router.py",
          "sha256": "7c20b2df8ab59a3b35d77ff6734689873c5ba6d2f9a3c3a733a0ae9088147ace",
          "bytes": 18069,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/status",
              "function": "system_status",
              "line": 53
            },
            {
              "method": "GET",
              "declared_path": "/users",
              "function": "list_users",
              "line": 100
            },
            {
              "method": "POST",
              "declared_path": "/users",
              "function": "create_user",
              "line": 127
            },
            {
              "method": "PATCH",
              "declared_path": "/users/{user_id}",
              "function": "update_user",
              "line": 178
            },
            {
              "method": "GET",
              "declared_path": "/models",
              "function": "list_models",
              "line": 239
            },
            {
              "method": "GET",
              "declared_path": "/models/registry",
              "function": "list_model_registry",
              "line": 265
            },
            {
              "method": "POST",
              "declared_path": "/models/registry",
              "function": "register_model",
              "line": 276
            },
            {
              "method": "PATCH",
              "declared_path": "/models/registry/{model_id}",
              "function": "update_model_registry",
              "line": 305
            },
            {
              "method": "DELETE",
              "declared_path": "/models/registry/{model_id}",
              "function": "delete_model_registry",
              "line": 330
            },
            {
              "method": "GET",
              "declared_path": "/fee-schedules",
              "function": "list_fee_schedules",
              "line": 354
            },
            {
              "method": "POST",
              "declared_path": "/fee-schedules",
              "function": "create_fee_schedule",
              "line": 371
            },
            {
              "method": "PATCH",
              "declared_path": "/fee-schedules/{schedule_id}",
              "function": "update_fee_schedule",
              "line": 398
            },
            {
              "method": "DELETE",
              "declared_path": "/fee-schedules/{schedule_id}",
              "function": "delete_fee_schedule",
              "line": 424
            },
            {
              "method": "GET",
              "declared_path": "/coverage-gaps",
              "function": "get_coverage_gaps",
              "line": 454
            }
          ],
          "models": [
            {
              "name": "SystemStatus",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "version",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "database",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "ollama",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "redis",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "user_count",
                  "type": "int",
                  "line": 36
                },
                {
                  "name": "audit_log_count",
                  "type": "int",
                  "line": 37
                },
                {
                  "name": "suite_session",
                  "type": "dict | None",
                  "line": 38
                }
              ],
              "line": 31
            },
            {
              "name": "OllamaModelInfo",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "size",
                  "type": "int | None",
                  "line": 43
                },
                {
                  "name": "details",
                  "type": "dict | None",
                  "line": 44
                }
              ],
              "line": 41
            },
            {
              "name": "OllamaStatus",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "models",
                  "type": "list[OllamaModelInfo]",
                  "line": 49
                }
              ],
              "line": 47
            },
            {
              "name": "AdminUserCreateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "email",
                  "type": "str",
                  "line": 110
                },
                {
                  "name": "password",
                  "type": "str",
                  "line": 111
                },
                {
                  "name": "full_name",
                  "type": "str",
                  "line": 112
                },
                {
                  "name": "role",
                  "type": "str",
                  "line": 113
                }
              ],
              "line": 109
            },
            {
              "name": "AdminUserCreateResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 117
                },
                {
                  "name": "email",
                  "type": "str",
                  "line": 118
                },
                {
                  "name": "full_name",
                  "type": "str",
                  "line": 119
                },
                {
                  "name": "role",
                  "type": "str",
                  "line": 120
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 121
                }
              ],
              "line": 116
            },
            {
              "name": "UserUpdateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "str | None",
                  "line": 171
                },
                {
                  "name": "role",
                  "type": "str | None",
                  "line": 172
                },
                {
                  "name": "department_id",
                  "type": "uuid.UUID | None",
                  "line": 173
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 174
                }
              ],
              "line": 170
            },
            {
              "name": "CoverageGapResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "jurisdictions_without_rules",
                  "type": "list[str]",
                  "line": 447
                },
                {
                  "name": "departments_without_staff",
                  "type": "list[dict]",
                  "line": 448
                },
                {
                  "name": "uncovered_categories",
                  "type": "list[str]",
                  "line": 449
                },
                {
                  "name": "total_gaps",
                  "type": "int",
                  "line": 450
                }
              ],
              "line": 446
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/analytics/__init__.py",
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "bytes": 0,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/analytics/router.py",
          "sha256": "00ee39251e533e36b4a1575742f01c926962684da22e2d4ee38e6f7df0547ddb",
          "bytes": 4668,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/analytics/operational",
              "function": "get_operational_metrics",
              "line": 33
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/audit/__init__.py",
          "sha256": "3ddf6263d5c1e6ad92aa12edcbbcc2ad66b106927c173af9de08f84cb7629456",
          "bytes": 289,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/audit/logger.py",
          "sha256": "07d4df47196956592865809f7958e43e93df35965b925be6c5aaa111070d266c",
          "bytes": 4371,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/audit/middleware.py",
          "sha256": "c72be74ac13fa28d39c6bc7bf8800b6135ac5f6ebc573842d5bb1ba8e84532a5",
          "bytes": 3722,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/audit/router.py",
          "sha256": "51e6968c08755248e2455679fefc95ad7598ead1257b4a4599c51386c510e9d8",
          "bytes": 4296,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/logs",
              "function": "list_audit_logs",
              "line": 16
            },
            {
              "method": "GET",
              "declared_path": "/verify",
              "function": "verify_audit_chain",
              "line": 40
            },
            {
              "method": "GET",
              "declared_path": "/export",
              "function": "export_audit_logs",
              "line": 51
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/__init__.py",
          "sha256": "a6c03f9992f7fce6cb888319b1b8c35f44b7a23a0d35e3551fc4e509d55993e9",
          "bytes": 338,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/backend.py",
          "sha256": "6142da3d361c4b887b3d5b0c302d000ab191825b0210f19ad1adc8f4cc5bd698",
          "bytes": 484,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/department_authority.py",
          "sha256": "29f23607e37228874cb979cc77d6876cb12c729edd83e9bbf5d493a2aad22e2a",
          "bytes": 5708,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/dependencies.py",
          "sha256": "8f1383e2a53f5b4c8f1953b16afc2c3ee7265e5b019e59eb66982781fd997168",
          "bytes": 9676,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/desktop_session.py",
          "sha256": "7e0afb097a616c6a7cd2d849cf19c5492f03eaced768cf22c62c8a09224a1deb",
          "bytes": 5466,
          "routes": [],
          "models": [
            {
              "name": "NativeDesktopPrincipal",
              "bases": [],
              "fields": [
                {
                  "name": "email",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "display_name",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "role",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "expires_at_unix_seconds",
                  "type": "int",
                  "line": 43
                }
              ],
              "line": 39
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/manager.py",
          "sha256": "084693e045ce0b372cdc9d8f8876b5157bd986efd2441960fe99587b9ae7c322",
          "bytes": 1806,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/native_identity.py",
          "sha256": "7af0c7ab99fa521182e45a4751226f287f82a561d3f8c75fc946341aa3bd3a78",
          "bytes": 2187,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/router.py",
          "sha256": "85f0c1ed229ffecbfb44f0e431e208e5c9dfa6d93e506ee1c6ce38aaed5766f6",
          "bytes": 1256,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/auth/suite_session.py",
          "sha256": "619bcec9da9202cb710ec2ee2390931dcf059230cf77dbafd7a56eadf2d4d902",
          "bytes": 9870,
          "routes": [],
          "models": [
            {
              "name": "SuiteSessionUser",
              "bases": [],
              "fields": [
                {
                  "name": "email",
                  "type": "str",
                  "line": 181
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 182
                },
                {
                  "name": "must_change_password",
                  "type": "bool",
                  "line": 183
                }
              ],
              "line": 180
            },
            {
              "name": "SuiteSession",
              "bases": [],
              "fields": [
                {
                  "name": "subject",
                  "type": "str",
                  "line": 188
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 189
                },
                {
                  "name": "session_id",
                  "type": "str",
                  "line": 190
                }
              ],
              "line": 187
            },
            {
              "name": "Principal",
              "bases": [],
              "fields": [
                {
                  "name": "subject",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 87
                },
                {
                  "name": "session_id",
                  "type": "str",
                  "line": 88
                }
              ],
              "line": 85
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/catalog/__init__.py",
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "bytes": 0,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/catalog/loader.py",
          "sha256": "8f4dd60317e034e7bea3b2099a0bcefa31b1bfe4227abd7e338da39cf843bcd0",
          "bytes": 740,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/catalog/router.py",
          "sha256": "4c70d6a6ab91e2f3d0fef8c7106dbb37d9aa5097645143efcdbfc7eb60509678",
          "bytes": 1719,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/catalog/domains",
              "function": "list_domains",
              "line": 12
            },
            {
              "method": "GET",
              "declared_path": "/catalog/systems",
              "function": "list_systems",
              "line": 16
            },
            {
              "method": "GET",
              "declared_path": "/catalog/connectors",
              "function": "list_connectors",
              "line": 20
            },
            {
              "method": "POST",
              "declared_path": "/catalog/load",
              "function": "trigger_catalog_load",
              "line": 24
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/city_profile/__init__.py",
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "bytes": 0,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/city_profile/router.py",
          "sha256": "6c52879ffdaa3cc1064a4c4706e65fd102a9eee574a27eac7a69f6d0566d2bb7",
          "bytes": 3731,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/city-profile",
              "function": "get_city_profile",
              "line": 32
            },
            {
              "method": "POST",
              "declared_path": "/city-profile",
              "function": "create_city_profile",
              "line": 42
            },
            {
              "method": "PATCH",
              "declared_path": "/city-profile",
              "function": "update_city_profile",
              "line": 76
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/config.py",
          "sha256": "4f64a49ba5c4a4ebe87ac89ab65875121e416fcc21e76c8ed675bba0e7c0fc87",
          "bytes": 5871,
          "routes": [],
          "models": [
            {
              "name": "Settings",
              "bases": [
                "BaseSettings"
              ],
              "fields": [
                {
                  "name": "database_url",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "jwt_secret",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "jwt_secret_file",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "jwt_lifetime_seconds",
                  "type": "int",
                  "line": 32
                },
                {
                  "name": "first_admin_email",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "first_admin_password",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "first_admin_password_file",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "ollama_base_url",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "redis_url",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "audit_retention_days",
                  "type": "int",
                  "line": 38
                },
                {
                  "name": "cors_origins",
                  "type": "list[str]",
                  "line": 39
                },
                {
                  "name": "embedding_model",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "chat_model",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "vision_model",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "smtp_host",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "smtp_port",
                  "type": "int",
                  "line": 47
                },
                {
                  "name": "smtp_username",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "smtp_password",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "smtp_from_email",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "smtp_use_tls",
                  "type": "bool",
                  "line": 51
                },
                {
                  "name": "connector_host_allowlist",
                  "type": "Annotated[list[str], NoDecode]",
                  "line": 54
                },
                {
                  "name": "portal_mode",
                  "type": "Literal['public', 'private']",
                  "line": 57
                },
                {
                  "name": "encryption_key",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "testing",
                  "type": "bool",
                  "line": 62
                },
                {
                  "name": "authority_scope_id",
                  "type": "str",
                  "line": 68
                }
              ],
              "line": 24
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/__init__.py",
          "sha256": "9b4171a560153689a6f3035e04488a64a7d2d3737f4c9b022861d63f4fb6c9a9",
          "bytes": 1007,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/base.py",
          "sha256": "6c3572d2dc3b25f164128d7afb03e61404c6ec9c9d48fabb58cf0e5379775dcf",
          "bytes": 2311,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/file_system.py",
          "sha256": "91ce9a5a885b84047004370fe100708865149330ae16da0fc3d55751126fe834",
          "bytes": 5185,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/imap_email.py",
          "sha256": "6f0f3d997589d65c4b49d8841607c746387e9e446a632a048d757e648e7119cc",
          "bytes": 12290,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/manual_drop.py",
          "sha256": "9634d200ed3675eb33c9ccdf47aec5f1f77cc190b9e3d19e84ec11973abb26b8",
          "bytes": 7967,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/odbc.py",
          "sha256": "aa146a1e79f99bb5e34c95c17cd6388807c5a4237efd2b4454ac6e8e8308e3de",
          "bytes": 9537,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/rest_api.py",
          "sha256": "316af4c35a98267c84c35969afb51804cb19251a9c8b7505211840929e39114f",
          "bytes": 13235,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/connectors/retry.py",
          "sha256": "41d845b0020b8df86c6838368b01830821c468cb5ecd631dca562074067c4806",
          "bytes": 1298,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/database.py",
          "sha256": "a82e34395f940bf9d9ccf476b6585a220e23028d15050bbbeb12340b168a2793",
          "bytes": 992,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/datasources/__init__.py",
          "sha256": "e2821093f99faacc298a371e1a5269722f13ffee98c8112f9090ca2690ed39c4",
          "bytes": 113,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/datasources/router.py",
          "sha256": "63ac5050984e6b35efef6374050b294a9b2fcbb64fd4ad2302eda33062af66b5",
          "bytes": 17257,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/",
              "function": "create_datasource",
              "line": 70
            },
            {
              "method": "GET",
              "declared_path": "/",
              "function": "list_datasources",
              "line": 89
            },
            {
              "method": "PATCH",
              "declared_path": "/{source_id}",
              "function": "update_datasource",
              "line": 137
            },
            {
              "method": "POST",
              "declared_path": "/{source_id}/ingest",
              "function": "trigger_ingestion",
              "line": 156
            },
            {
              "method": "POST",
              "declared_path": "/upload",
              "function": "upload_file",
              "line": 165
            },
            {
              "method": "POST",
              "declared_path": "/documents/{document_id}/re-ingest",
              "function": "re_ingest_document",
              "line": 201
            },
            {
              "method": "GET",
              "declared_path": "/stats",
              "function": "ingestion_stats",
              "line": 236
            },
            {
              "method": "POST",
              "declared_path": "/test-connection",
              "function": "test_connection",
              "line": 277
            }
          ],
          "models": [
            {
              "name": "TestConnectionRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_type",
                  "type": "str",
                  "line": 256
                },
                {
                  "name": "host",
                  "type": "str | None",
                  "line": 257
                },
                {
                  "name": "port",
                  "type": "int | None",
                  "line": 258
                },
                {
                  "name": "path",
                  "type": "str | None",
                  "line": 259
                },
                {
                  "name": "username",
                  "type": "str | None",
                  "line": 260
                },
                {
                  "name": "password",
                  "type": "str | None",
                  "line": 261
                },
                {
                  "name": "rest_api_config",
                  "type": "dict[str, Any] | None",
                  "line": 263
                },
                {
                  "name": "odbc_config",
                  "type": "dict[str, Any] | None",
                  "line": 264
                }
              ],
              "line": 250
            },
            {
              "name": "TestConnectionResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "success",
                  "type": "bool",
                  "line": 268
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 269
                },
                {
                  "name": "latency_ms",
                  "type": "int | None",
                  "line": 270
                },
                {
                  "name": "status",
                  "type": "str | None",
                  "line": 271
                },
                {
                  "name": "warning",
                  "type": "str | None",
                  "line": 272
                },
                {
                  "name": "differing_keys",
                  "type": "list[str] | None",
                  "line": 273
                }
              ],
              "line": 267
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/datasources/sync_failures_router.py",
          "sha256": "49a80a2a4516476d7b7996076667f5eaac93e2ec7739a0567d529471f20b607d",
          "bytes": 5440,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/{source_id}/sync-failures",
              "function": "list_sync_failures",
              "line": 26
            },
            {
              "method": "POST",
              "declared_path": "/{source_id}/sync-failures/{failure_id}/retry",
              "function": "retry_sync_failure",
              "line": 43
            },
            {
              "method": "POST",
              "declared_path": "/{source_id}/sync-failures/{failure_id}/dismiss",
              "function": "dismiss_sync_failure",
              "line": 59
            },
            {
              "method": "POST",
              "declared_path": "/{source_id}/sync-failures/retry-all",
              "function": "retry_all_sync_failures",
              "line": 76
            },
            {
              "method": "POST",
              "declared_path": "/{source_id}/sync-failures/dismiss-all",
              "function": "dismiss_all_sync_failures",
              "line": 97
            },
            {
              "method": "POST",
              "declared_path": "/{source_id}/unpause",
              "function": "unpause_source",
              "line": 120
            },
            {
              "method": "GET",
              "declared_path": "/{source_id}/sync-run-log",
              "function": "get_sync_run_log",
              "line": 137
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/departments/__init__.py",
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "bytes": 0,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/departments/router.py",
          "sha256": "ae8357aa76ef96d76d42a176fd862fa854cdf01897a05517147386678e9a024b",
          "bytes": 4453,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/",
              "function": "create_department",
              "line": 18
            },
            {
              "method": "GET",
              "declared_path": "/",
              "function": "list_departments",
              "line": 43
            },
            {
              "method": "GET",
              "declared_path": "/{dept_id}",
              "function": "get_department",
              "line": 54
            },
            {
              "method": "PATCH",
              "declared_path": "/{dept_id}",
              "function": "update_department",
              "line": 66
            },
            {
              "method": "DELETE",
              "declared_path": "/{dept_id}",
              "function": "delete_department",
              "line": 100
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/desktop_bridge/__init__.py",
          "sha256": "707138dfa41f7f4e91957a523e3c3394ce52803778c5b278b3cc77d4a5b1c30f",
          "bytes": 79,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/desktop_bridge/projection.py",
          "sha256": "b75009be22c4cbfa916303d711c5300e132121b36fba3775564f9b1c8893eaa4",
          "bytes": 10584,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/desktop_bridge/records.py",
          "sha256": "428bb99456414f4d7a4c806aeb2e360a7c48450b41b8af4bc24a35574f370c15",
          "bytes": 3548,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/desktop_bridge/router.py",
          "sha256": "1b1cb6afce568f1ab81c991396ac27684eb06b11b1a0ab37192a8c9382c533fb",
          "bytes": 33950,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/public/records-state",
              "function": "public_records_state",
              "line": 135
            },
            {
              "method": "POST",
              "declared_path": "/public/requests",
              "function": "public_records_intake",
              "line": 145
            },
            {
              "method": "POST",
              "declared_path": "/public/lookup",
              "function": "public_records_lookup",
              "line": 154
            },
            {
              "method": "POST",
              "declared_path": "/public/messages",
              "function": "public_records_message",
              "line": 161
            },
            {
              "method": "POST",
              "declared_path": "/permitting-sources/search",
              "function": "search_permitting_sources",
              "line": 205
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/permitting-sources",
              "function": "attach_permitting_source",
              "line": 214
            },
            {
              "method": "POST",
              "declared_path": "/inspections-sources/search",
              "function": "search_inspections_sources",
              "line": 240
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/inspections-sources",
              "function": "attach_inspections_source",
              "line": 249
            },
            {
              "method": "POST",
              "declared_path": "/planning-sources/search",
              "function": "search_planning_sources",
              "line": 275
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/planning-sources",
              "function": "attach_planning_source",
              "line": 284
            },
            {
              "method": "POST",
              "declared_path": "/zoning-sources/search",
              "function": "search_zoning_sources",
              "line": 311
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/zoning-sources",
              "function": "attach_zoning_source",
              "line": 320
            },
            {
              "method": "GET",
              "declared_path": "/records-state",
              "function": "get_native_records_state",
              "line": 347
            },
            {
              "method": "POST",
              "declared_path": "/meetings-sources/search",
              "function": "search_meetings_sources",
              "line": 356
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/meetings-sources",
              "function": "attach_meetings_source",
              "line": 365
            },
            {
              "method": "POST",
              "declared_path": "/code-sources/search",
              "function": "search_code_sources",
              "line": 390
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/code-sources",
              "function": "attach_code_source",
              "line": 399
            },
            {
              "method": "POST",
              "declared_path": "/notifications/{notification_id}/sent",
              "function": "mark_native_notification_sent",
              "line": 424
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/documents",
              "function": "attach_native_document",
              "line": 444
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/documents/{attachment_id}/release-copy",
              "function": "attach_native_release_copy",
              "line": 454
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/artifacts",
              "function": "prepare_native_artifact",
              "line": 464
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/artifacts/{artifact_id}/complete",
              "function": "complete_native_artifact",
              "line": 482
            },
            {
              "method": "POST",
              "declared_path": "/requests",
              "function": "create_native_request",
              "line": 501
            },
            {
              "method": "GET",
              "declared_path": "/requests/{request_id}",
              "function": "get_native_request",
              "line": 522
            },
            {
              "method": "GET",
              "declared_path": "/requests/{request_id}/view",
              "function": "get_native_request_view",
              "line": 538
            },
            {
              "method": "GET",
              "declared_path": "/requests/{request_id}/draft-context",
              "function": "native_draft_context",
              "line": 550
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/generated-draft",
              "function": "native_generated_draft",
              "line": 576
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/actions",
              "function": "native_request_operation",
              "line": 606
            }
          ],
          "models": [
            {
              "name": "MeetingsSearch",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 41
                }
              ],
              "line": 39
            },
            {
              "name": "MeetingsSourceSelection",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 47
                }
              ],
              "line": 44
            },
            {
              "name": "CodeSearch",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "as_of",
                  "type": "date | None",
                  "line": 53
                }
              ],
              "line": 50
            },
            {
              "name": "CodeSourceSelection",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "as_of",
                  "type": "date | None",
                  "line": 60
                }
              ],
              "line": 56
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/desktop_bridge/schemas.py",
          "sha256": "d7bbbba21363b6b997d92011653010ae9a63c2be0c81844d7527068ac3435237",
          "bytes": 13499,
          "routes": [],
          "models": [
            {
              "name": "StaffRecordsIntake",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "requester",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "deadline",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "deadlineBasis",
                  "type": "str",
                  "line": 17
                }
              ],
              "line": 10
            },
            {
              "name": "NativeRequestRead",
              "bases": [
                "RequestRead"
              ],
              "fields": [
                {
                  "name": "desktop_id",
                  "type": "str | None",
                  "line": 29
                },
                {
                  "name": "public_tracking_number",
                  "type": "str | None",
                  "line": 30
                },
                {
                  "name": "submitted_via",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "deadline_label",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "deadline_basis",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "deadline_reviewed_at",
                  "type": "datetime | None",
                  "line": 34
                }
              ],
              "line": 28
            },
            {
              "name": "AssignmentPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "assignedTo",
                  "type": "str",
                  "line": 42
                }
              ],
              "line": 41
            },
            {
              "name": "DeadlinePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "deadline",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "deadlineBasis",
                  "type": "str",
                  "line": 47
                }
              ],
              "line": 45
            },
            {
              "name": "CalculateDeadlinePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "deadlineReceivedDate",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "deadlineRuleName",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "deadlineDayCount",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "deadlineDayType",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "deadlineBasis",
                  "type": "str",
                  "line": 57
                }
              ],
              "line": 52
            },
            {
              "name": "ClarificationPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "clarificationNote",
                  "type": "str",
                  "line": 78
                }
              ],
              "line": 77
            },
            {
              "name": "MessagePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "requestMessageBody",
                  "type": "str",
                  "line": 82
                }
              ],
              "line": 81
            },
            {
              "name": "SearchNotePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "sourceNote",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 87
                }
              ],
              "line": 85
            },
            {
              "name": "SearchReceiptPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "searchQuery",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "searchLocations",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "searchResultTitle",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "searchResultCitation",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "searchResultSummary",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "searchResultStatus",
                  "type": "str",
                  "line": 96
                },
                {
                  "name": "searchReviewer",
                  "type": "str",
                  "line": 97
                }
              ],
              "line": 90
            },
            {
              "name": "ExemptionNotePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "exemptionNote",
                  "type": "str",
                  "line": 101
                }
              ],
              "line": 100
            },
            {
              "name": "ExemptionDecisionPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "exemptionSource",
                  "type": "str",
                  "line": 105
                },
                {
                  "name": "exemptionKind",
                  "type": "str",
                  "line": 106
                },
                {
                  "name": "exemptionFinding",
                  "type": "str",
                  "line": 107
                },
                {
                  "name": "exemptionDecision",
                  "type": "Literal['release', 'redact', 'exempt']",
                  "line": 108
                },
                {
                  "name": "exemptionBasis",
                  "type": "str",
                  "line": 109
                },
                {
                  "name": "exemptionReviewer",
                  "type": "str",
                  "line": 110
                }
              ],
              "line": 104
            },
            {
              "name": "FeeEstimatePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "feeEstimate",
                  "type": "str",
                  "line": 119
                }
              ],
              "line": 118
            },
            {
              "name": "FeeLinePayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "feeLineDescription",
                  "type": "str",
                  "line": 123
                },
                {
                  "name": "feeScheduleBasis",
                  "type": "str",
                  "line": 124
                },
                {
                  "name": "feeLineAmount",
                  "type": "str",
                  "line": 125
                }
              ],
              "line": 122
            },
            {
              "name": "FeeWaiverPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "feeWaiverReason",
                  "type": "str",
                  "line": 141
                }
              ],
              "line": 140
            },
            {
              "name": "DraftPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "responseDraft",
                  "type": "str",
                  "line": 145
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 146
                }
              ],
              "line": 144
            },
            {
              "name": "ApprovalPayload",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "approvalNote",
                  "type": "str",
                  "line": 150
                }
              ],
              "line": 149
            },
            {
              "name": "AssignCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['assign-records-request']",
                  "line": 154
                },
                {
                  "name": "payload",
                  "type": "AssignmentPayload",
                  "line": 155
                }
              ],
              "line": 153
            },
            {
              "name": "DeadlineCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['set-records-deadline']",
                  "line": 159
                },
                {
                  "name": "payload",
                  "type": "DeadlinePayload",
                  "line": 160
                }
              ],
              "line": 158
            },
            {
              "name": "CalculateDeadlineCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['calculate-records-deadline']",
                  "line": 164
                },
                {
                  "name": "payload",
                  "type": "CalculateDeadlinePayload",
                  "line": 165
                }
              ],
              "line": 163
            },
            {
              "name": "ClarificationCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['request-records-clarification']",
                  "line": 169
                },
                {
                  "name": "payload",
                  "type": "ClarificationPayload",
                  "line": 170
                }
              ],
              "line": 168
            },
            {
              "name": "MessageCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['add-records-message']",
                  "line": 174
                },
                {
                  "name": "payload",
                  "type": "MessagePayload",
                  "line": 175
                }
              ],
              "line": 173
            },
            {
              "name": "SearchNoteCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['record-records-search']",
                  "line": 179
                },
                {
                  "name": "payload",
                  "type": "SearchNotePayload",
                  "line": 180
                }
              ],
              "line": 178
            },
            {
              "name": "SearchReceiptCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['record-records-search-session']",
                  "line": 184
                },
                {
                  "name": "payload",
                  "type": "SearchReceiptPayload",
                  "line": 185
                }
              ],
              "line": 183
            },
            {
              "name": "ExemptionNoteCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['add-records-exemption-review']",
                  "line": 189
                },
                {
                  "name": "payload",
                  "type": "ExemptionNotePayload",
                  "line": 190
                }
              ],
              "line": 188
            },
            {
              "name": "ExemptionDecisionCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['add-records-exemption-decision']",
                  "line": 194
                },
                {
                  "name": "payload",
                  "type": "ExemptionDecisionPayload",
                  "line": 195
                }
              ],
              "line": 193
            },
            {
              "name": "FeeEstimateCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['estimate-records-fee']",
                  "line": 199
                },
                {
                  "name": "payload",
                  "type": "FeeEstimatePayload",
                  "line": 200
                }
              ],
              "line": 198
            },
            {
              "name": "FeeLineCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['add-records-fee-line']",
                  "line": 204
                },
                {
                  "name": "payload",
                  "type": "FeeLinePayload",
                  "line": 205
                }
              ],
              "line": 203
            },
            {
              "name": "FeeWaiverCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['waive-records-fee']",
                  "line": 209
                },
                {
                  "name": "payload",
                  "type": "FeeWaiverPayload",
                  "line": 210
                }
              ],
              "line": 208
            },
            {
              "name": "DraftCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['draft-records-response']",
                  "line": 214
                },
                {
                  "name": "payload",
                  "type": "DraftPayload",
                  "line": 215
                }
              ],
              "line": 213
            },
            {
              "name": "ApprovalCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['approve-records-response']",
                  "line": 219
                },
                {
                  "name": "payload",
                  "type": "ApprovalPayload",
                  "line": 220
                }
              ],
              "line": 218
            },
            {
              "name": "FinishCommand",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['fulfill-records-request', 'close-records-request']",
                  "line": 224
                },
                {
                  "name": "payload",
                  "type": "NativePayload",
                  "line": 225
                }
              ],
              "line": 223
            },
            {
              "name": "TimelineView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 242
                },
                {
                  "name": "action",
                  "type": "str",
                  "line": 243
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 244
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 245
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 246
                }
              ],
              "line": 241
            },
            {
              "name": "PublicStatusView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 250
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 251
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 252
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 253
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 254
                }
              ],
              "line": 249
            },
            {
              "name": "MessageView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 258
                },
                {
                  "name": "author",
                  "type": "str",
                  "line": 259
                },
                {
                  "name": "author_role",
                  "type": "str",
                  "line": 260
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 261
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 262
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 263
                }
              ],
              "line": 257
            },
            {
              "name": "FeeLineView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 267
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 268
                },
                {
                  "name": "schedule_basis",
                  "type": "str",
                  "line": 269
                },
                {
                  "name": "amount_cents",
                  "type": "int",
                  "line": 270
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 271
                }
              ],
              "line": 266
            },
            {
              "name": "ExemptionDecisionView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 275
                },
                {
                  "name": "source",
                  "type": "str",
                  "line": 276
                },
                {
                  "name": "kind",
                  "type": "str",
                  "line": 277
                },
                {
                  "name": "finding",
                  "type": "str",
                  "line": 278
                },
                {
                  "name": "decision",
                  "type": "Literal['release', 'redact', 'exempt']",
                  "line": 279
                },
                {
                  "name": "basis",
                  "type": "str",
                  "line": 280
                },
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 281
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 282
                }
              ],
              "line": 274
            },
            {
              "name": "SearchResultView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 286
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 287
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 288
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 289
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 290
                }
              ],
              "line": 285
            },
            {
              "name": "SearchReceiptView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 294
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 295
                },
                {
                  "name": "locations",
                  "type": "str",
                  "line": 296
                },
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 297
                },
                {
                  "name": "results",
                  "type": "list[SearchResultView]",
                  "line": 298
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 299
                }
              ],
              "line": 293
            },
            {
              "name": "RecordsView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "request_id",
                  "type": "str",
                  "line": 304
                },
                {
                  "name": "id",
                  "type": "str",
                  "line": 305
                },
                {
                  "name": "public_tracking_number",
                  "type": "str",
                  "line": 306
                },
                {
                  "name": "requester",
                  "type": "str",
                  "line": 307
                },
                {
                  "name": "requester_contact",
                  "type": "str",
                  "line": 308
                },
                {
                  "name": "submitted_via",
                  "type": "str",
                  "line": 309
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 310
                },
                {
                  "name": "deadline",
                  "type": "str",
                  "line": 311
                },
                {
                  "name": "deadline_basis",
                  "type": "str",
                  "line": 312
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 313
                },
                {
                  "name": "assigned_to",
                  "type": "str",
                  "line": 314
                },
                {
                  "name": "clarification_notes",
                  "type": "list[str]",
                  "line": 315
                },
                {
                  "name": "search_notes",
                  "type": "list[str]",
                  "line": 316
                },
                {
                  "name": "search_sessions",
                  "type": "list[SearchReceiptView]",
                  "line": 317
                },
                {
                  "name": "exemption_reviews",
                  "type": "list[str]",
                  "line": 318
                },
                {
                  "name": "exemption_decisions",
                  "type": "list[ExemptionDecisionView]",
                  "line": 319
                },
                {
                  "name": "fee_estimate",
                  "type": "str",
                  "line": 320
                },
                {
                  "name": "fee_line_items",
                  "type": "list[FeeLineView]",
                  "line": 321
                },
                {
                  "name": "fee_waiver_reason",
                  "type": "str",
                  "line": 322
                },
                {
                  "name": "citations",
                  "type": "list[str]",
                  "line": 323
                },
                {
                  "name": "response_draft",
                  "type": "str",
                  "line": 324
                },
                {
                  "name": "approval_notes",
                  "type": "list[str]",
                  "line": 325
                },
                {
                  "name": "exports",
                  "type": "list[str]",
                  "line": 326
                },
                {
                  "name": "documents",
                  "type": "list['RecordsDocumentView']",
                  "line": 327
                },
                {
                  "name": "release_packages",
                  "type": "list['ReleasePackageView']",
                  "line": 328
                },
                {
                  "name": "timeline",
                  "type": "list[TimelineView]",
                  "line": 329
                },
                {
                  "name": "public_status_events",
                  "type": "list[PublicStatusView]",
                  "line": 330
                },
                {
                  "name": "messages",
                  "type": "list[MessageView]",
                  "line": 331
                },
                {
                  "name": "deadline_reviewed_at_unix_seconds",
                  "type": "int | None",
                  "line": 332
                },
                {
                  "name": "approved_at_unix_seconds",
                  "type": "int | None",
                  "line": 333
                },
                {
                  "name": "fulfilled_at_unix_seconds",
                  "type": "int | None",
                  "line": 334
                },
                {
                  "name": "closed_at_unix_seconds",
                  "type": "int | None",
                  "line": 335
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 336
                }
              ],
              "line": 302
            },
            {
              "name": "RecordsOperationRead",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "str",
                  "line": 340
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 341
                },
                {
                  "name": "request",
                  "type": "RecordsView",
                  "line": 342
                }
              ],
              "line": 339
            },
            {
              "name": "RecordsStateRead",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "demo_fixture",
                  "type": "dict | None",
                  "line": 346
                },
                {
                  "name": "records_requests",
                  "type": "list[RecordsView]",
                  "line": 347
                },
                {
                  "name": "notification_events",
                  "type": "list['NotificationView']",
                  "line": 348
                },
                {
                  "name": "publication_events",
                  "type": "list['PublicationView']",
                  "line": 349
                },
                {
                  "name": "audit_entries",
                  "type": "list['AuditView']",
                  "line": 350
                }
              ],
              "line": 345
            },
            {
              "name": "ManagedFileReceipt",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "original_path",
                  "type": "str",
                  "line": 354
                },
                {
                  "name": "stored_path",
                  "type": "str",
                  "line": 355
                },
                {
                  "name": "file_name",
                  "type": "str",
                  "line": 356
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 357
                },
                {
                  "name": "size_bytes",
                  "type": "int",
                  "line": 358
                }
              ],
              "line": 353
            },
            {
              "name": "AttachDocument",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 362
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 363
                },
                {
                  "name": "file",
                  "type": "ManagedFileReceipt",
                  "line": 364
                }
              ],
              "line": 361
            },
            {
              "name": "AttachReleaseCopy",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "Literal['release-ready copy', 'redacted copy']",
                  "line": 368
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 369
                },
                {
                  "name": "added_by",
                  "type": "str",
                  "line": 370
                },
                {
                  "name": "file",
                  "type": "ManagedFileReceipt",
                  "line": 371
                }
              ],
              "line": 367
            },
            {
              "name": "RecordsDocumentView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 375
                },
                {
                  "name": "attachment_id",
                  "type": "str",
                  "line": 376
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 377
                },
                {
                  "name": "original_path",
                  "type": "str",
                  "line": 378
                },
                {
                  "name": "stored_path",
                  "type": "str",
                  "line": 379
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 380
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 381
                },
                {
                  "name": "size_bytes",
                  "type": "int",
                  "line": 382
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 383
                },
                {
                  "name": "added_by",
                  "type": "str",
                  "line": 384
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 385
                },
                {
                  "name": "release_original_path",
                  "type": "str",
                  "line": 386
                },
                {
                  "name": "release_stored_path",
                  "type": "str",
                  "line": 387
                },
                {
                  "name": "release_file_name",
                  "type": "str",
                  "line": 388
                },
                {
                  "name": "release_sha256",
                  "type": "str",
                  "line": 389
                },
                {
                  "name": "release_size_bytes",
                  "type": "int",
                  "line": 390
                },
                {
                  "name": "release_status",
                  "type": "str",
                  "line": 391
                },
                {
                  "name": "release_note",
                  "type": "str",
                  "line": 392
                },
                {
                  "name": "release_added_by",
                  "type": "str",
                  "line": 393
                },
                {
                  "name": "release_added_at_unix_seconds",
                  "type": "int | None",
                  "line": 394
                }
              ],
              "line": 374
            },
            {
              "name": "ReleasePackageView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 398
                },
                {
                  "name": "export_path",
                  "type": "str",
                  "line": 399
                },
                {
                  "name": "package_hash",
                  "type": "str",
                  "line": 400
                },
                {
                  "name": "document_count",
                  "type": "int",
                  "line": 401
                },
                {
                  "name": "release_artifact_count",
                  "type": "int",
                  "line": 402
                },
                {
                  "name": "search_session_count",
                  "type": "int",
                  "line": 403
                },
                {
                  "name": "release_count",
                  "type": "int",
                  "line": 404
                },
                {
                  "name": "redacted_count",
                  "type": "int",
                  "line": 405
                },
                {
                  "name": "exempt_count",
                  "type": "int",
                  "line": 406
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 407
                }
              ],
              "line": 397
            },
            {
              "name": "PrepareArtifact",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "kind",
                  "type": "Literal['response', 'release-package']",
                  "line": 411
                }
              ],
              "line": 410
            },
            {
              "name": "ArtifactPlan",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "artifact_id",
                  "type": "str",
                  "line": 415
                },
                {
                  "name": "file_name",
                  "type": "str",
                  "line": 416
                },
                {
                  "name": "content",
                  "type": "str",
                  "line": 417
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 418
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 419
                }
              ],
              "line": 414
            },
            {
              "name": "CompleteArtifact",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "export_path",
                  "type": "str",
                  "line": 423
                }
              ],
              "line": 422
            },
            {
              "name": "PublicIntake",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "requester",
                  "type": "str",
                  "line": 427
                },
                {
                  "name": "requesterContact",
                  "type": "str",
                  "line": 428
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 429
                },
                {
                  "name": "deadline",
                  "type": "str",
                  "line": 430
                }
              ],
              "line": 426
            },
            {
              "name": "PublicLookup",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "trackingNumber",
                  "type": "str",
                  "line": 434
                },
                {
                  "name": "requesterContact",
                  "type": "str",
                  "line": 435
                }
              ],
              "line": 433
            },
            {
              "name": "PublicMessage",
              "bases": [
                "PublicLookup"
              ],
              "fields": [
                {
                  "name": "publicRequestMessage",
                  "type": "str",
                  "line": 439
                }
              ],
              "line": 438
            },
            {
              "name": "GeneratedDraft",
              "bases": [
                "NativePayload"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 443
                },
                {
                  "name": "model",
                  "type": "str",
                  "line": 444
                },
                {
                  "name": "previous_response_sha256",
                  "type": "str",
                  "line": 445
                }
              ],
              "line": 442
            },
            {
              "name": "NotificationView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 449
                },
                {
                  "name": "notification_id",
                  "type": "str",
                  "line": 450
                },
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 451
                },
                {
                  "name": "record_id",
                  "type": "str",
                  "line": 452
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 453
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 454
                },
                {
                  "name": "subject",
                  "type": "str",
                  "line": 455
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 456
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 457
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 458
                },
                {
                  "name": "sent_at_unix_seconds",
                  "type": "int | None",
                  "line": 459
                }
              ],
              "line": 448
            },
            {
              "name": "PublicationView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 463
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 464
                },
                {
                  "name": "source_record_id",
                  "type": "str",
                  "line": 465
                },
                {
                  "name": "record_type",
                  "type": "str",
                  "line": 466
                },
                {
                  "name": "public_payload",
                  "type": "str",
                  "line": 467
                },
                {
                  "name": "payload_hash",
                  "type": "str",
                  "line": 468
                },
                {
                  "name": "published_at_unix_seconds",
                  "type": "int",
                  "line": 469
                },
                {
                  "name": "retracted_at_unix_seconds",
                  "type": "int | None",
                  "line": 470
                },
                {
                  "name": "retracted_by",
                  "type": "str",
                  "line": 471
                }
              ],
              "line": 462
            },
            {
              "name": "AuditView",
              "bases": [
                "NativeView"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 475
                },
                {
                  "name": "module_id",
                  "type": "str",
                  "line": 476
                },
                {
                  "name": "action",
                  "type": "str",
                  "line": 477
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 478
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 479
                },
                {
                  "name": "previous_hash",
                  "type": "str",
                  "line": 480
                },
                {
                  "name": "entry_hash",
                  "type": "str",
                  "line": 481
                }
              ],
              "line": 474
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/desktop_bridge/station.py",
          "sha256": "4cdb8465053f61d2e63477a028b880d3524e4e37da0d99781ca88d616cc0b1b1",
          "bytes": 9588,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/station/context",
              "function": "context",
              "line": 43
            },
            {
              "method": "POST",
              "declared_path": "/requests/{request_id}/station-recordings",
              "function": "attach",
              "line": 79
            }
          ],
          "models": [
            {
              "name": "Selection",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "recording_id",
                  "type": "UUID",
                  "line": 63
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 64
                }
              ],
              "line": 61
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_STATION_URL",
              "line": 33
            }
          ]
        },
        {
          "source": "backend/townlight_records/documents/__init__.py",
          "sha256": "74e2f6fddd8fadac3833b72a02396e5cb3c4d3d91211437e23005ecd24de61f0",
          "bytes": 107,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/documents/router.py",
          "sha256": "ade31f62c2483692bde64f5d009ba855d91fec8d34fbb5da9846d9689cd2d312",
          "bytes": 3661,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "list_documents",
              "line": 31
            },
            {
              "method": "GET",
              "declared_path": "/{document_id}",
              "function": "get_document",
              "line": 47
            },
            {
              "method": "GET",
              "declared_path": "/{document_id}/chunks",
              "function": "list_chunks",
              "line": 57
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/exemptions/__init__.py",
          "sha256": "2fd238ebecb0a427697f59094dad0d088962ebe3029a8a540d14957160714341",
          "bytes": 30,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/exemptions/engine.py",
          "sha256": "30b4bf307d9572b2c56492d6e3485dc8db083df47f20ef66d738cd3d01394e3b",
          "bytes": 3197,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/exemptions/llm_reviewer.py",
          "sha256": "7af32fc1ed813d1ca2781261840b2004a5f7b641313fe93690e41ac7415a3cda",
          "bytes": 2412,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/exemptions/patterns.py",
          "sha256": "5f5ac114245cf4654be3361430d04f868be5ece128e07f15899d25c40eec3cb3",
          "bytes": 600,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/exemptions/router.py",
          "sha256": "dc0cb9be6e398cba564196759232160ac1ccdb487163c0802e5eadf3201bd67d",
          "bytes": 23419,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/rules/",
              "function": "create_rule",
              "line": 34
            },
            {
              "method": "GET",
              "declared_path": "/rules/",
              "function": "list_rules",
              "line": 61
            },
            {
              "method": "PATCH",
              "declared_path": "/rules/{rule_id}",
              "function": "update_rule",
              "line": 77
            },
            {
              "method": "GET",
              "declared_path": "/rules/{rule_id}/history",
              "function": "get_rule_history",
              "line": 109
            },
            {
              "method": "POST",
              "declared_path": "/rules/{rule_id}/test",
              "function": "test_rule",
              "line": 162
            },
            {
              "method": "POST",
              "declared_path": "/scan/{request_id}",
              "function": "scan_for_exemptions",
              "line": 228
            },
            {
              "method": "GET",
              "declared_path": "/flags/{request_id}",
              "function": "list_flags",
              "line": 300
            },
            {
              "method": "PATCH",
              "declared_path": "/flags/{flag_id}",
              "function": "review_flag",
              "line": 321
            },
            {
              "method": "GET",
              "declared_path": "/dashboard/accuracy",
              "function": "exemption_accuracy",
              "line": 365
            },
            {
              "method": "GET",
              "declared_path": "/dashboard/export",
              "function": "export_flag_data",
              "line": 423
            },
            {
              "method": "GET",
              "declared_path": "/dashboard",
              "function": "exemption_dashboard",
              "line": 480
            },
            {
              "method": "GET",
              "declared_path": "/templates/",
              "function": "list_templates",
              "line": 519
            },
            {
              "method": "POST",
              "declared_path": "/templates/",
              "function": "create_template",
              "line": 532
            },
            {
              "method": "GET",
              "declared_path": "/templates/{template_id}/render",
              "function": "render_template",
              "line": 556
            },
            {
              "method": "PUT",
              "declared_path": "/templates/{template_id}",
              "function": "update_template",
              "line": 609
            }
          ],
          "models": [
            {
              "name": "RuleTestRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "sample_text",
                  "type": "str",
                  "line": 145
                }
              ],
              "line": 144
            },
            {
              "name": "RuleTestMatch",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "matched_text",
                  "type": "str",
                  "line": 149
                },
                {
                  "name": "start",
                  "type": "int",
                  "line": 150
                },
                {
                  "name": "end",
                  "type": "int",
                  "line": 151
                }
              ],
              "line": 148
            },
            {
              "name": "RuleTestResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "rule_id",
                  "type": "uuid.UUID",
                  "line": 155
                },
                {
                  "name": "rule_type",
                  "type": "str",
                  "line": 156
                },
                {
                  "name": "matched",
                  "type": "bool",
                  "line": 157
                },
                {
                  "name": "matches",
                  "type": "list[RuleTestMatch]",
                  "line": 158
                }
              ],
              "line": 154
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/ingestion/__init__.py",
          "sha256": "9c3fae7acafa2a6bf5606c309e174f71843ecd5ab7664fff292c26f821a73ff9",
          "bytes": 279,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/ingestion/cron_utils.py",
          "sha256": "88fbff0706981ef7cf13a653e5e4589062f2f24e043a570f3c6edf37fabcbfcf",
          "bytes": 342,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/ingestion/scheduler.py",
          "sha256": "3520c77698a46e84c731f486f0173c4158405f5bce73ce8f58c2ae6d759783d0",
          "bytes": 9379,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/ingestion/sync_runner.py",
          "sha256": "7c987cafa060cfc2b1071c5a9ba2bc27fe3b567be8a03280490de0ca3c02228c",
          "bytes": 10324,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/ingestion/tasks.py",
          "sha256": "14e604c42d3c04490750b8fe2b2e3947328683af8de7dc7e7cfdbbbcd547e5d4",
          "bytes": 9094,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/llm/__init__.py",
          "sha256": "3fd0a698f594b821b7cc3fbb267513521ec3dfcc026ec89add8a6d5072aea8d3",
          "bytes": 3626,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/llm/client.py",
          "sha256": "99a211bbbb594681364b9941ca9adb2fc54ceaaaf3f210f63a62d1108187378e",
          "bytes": 4660,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/llm/context_manager.py",
          "sha256": "0353251e35fe1ffc3ce372db9086effca688e684a39fd04b7a33a3ecb459d058",
          "bytes": 2705,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/main.py",
          "sha256": "ab9eaeb2e79b64a37f8ff54315fe53a08c7be8be29ad1398b535a184688600d3",
          "bytes": 11777,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/config/portal-mode",
              "function": "get_portal_mode",
              "line": 210
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 266
            }
          ],
          "models": [
            {
              "name": "PortalModeResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "mode",
                  "type": "Literal['public', 'private']",
                  "line": 25
                }
              ],
              "line": 17
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/__init__.py",
          "sha256": "14747da85c6ac8c0648b8bae81ba4369d13875757a40e721fb5215a3fa9b6027",
          "bytes": 2908,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/audit.py",
          "sha256": "9e489ecadf8d3c4635f177350a7d4a7407542b92fea08360fb811c9616d5b663",
          "bytes": 1260,
          "routes": [],
          "models": [
            {
              "name": "AuditLog",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[int]",
                  "line": 14
                },
                {
                  "name": "prev_hash",
                  "type": "Mapped[str]",
                  "line": 15
                },
                {
                  "name": "entry_hash",
                  "type": "Mapped[str]",
                  "line": 16
                },
                {
                  "name": "timestamp",
                  "type": "Mapped[datetime]",
                  "line": 17
                },
                {
                  "name": "user_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 20
                },
                {
                  "name": "action",
                  "type": "Mapped[str]",
                  "line": 23
                },
                {
                  "name": "resource_type",
                  "type": "Mapped[str]",
                  "line": 24
                },
                {
                  "name": "resource_id",
                  "type": "Mapped[str | None]",
                  "line": 25
                },
                {
                  "name": "details",
                  "type": "Mapped[dict | None]",
                  "line": 26
                },
                {
                  "name": "ai_generated",
                  "type": "Mapped[bool]",
                  "line": 27
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/city_profile.py",
          "sha256": "a5a82b73398205fd303c2430fa31b9f5f67b21bc47f47f3a710618cbe6735b27",
          "bytes": 1760,
          "routes": [],
          "models": [
            {
              "name": "CityProfile",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 12
                },
                {
                  "name": "city_name",
                  "type": "Mapped[str]",
                  "line": 13
                },
                {
                  "name": "state",
                  "type": "Mapped[str | None]",
                  "line": 17
                },
                {
                  "name": "county",
                  "type": "Mapped[str | None]",
                  "line": 18
                },
                {
                  "name": "population_band",
                  "type": "Mapped[str | None]",
                  "line": 19
                },
                {
                  "name": "email_platform",
                  "type": "Mapped[str | None]",
                  "line": 20
                },
                {
                  "name": "has_dedicated_it",
                  "type": "Mapped[bool | None]",
                  "line": 21
                },
                {
                  "name": "monthly_request_volume",
                  "type": "Mapped[str | None]",
                  "line": 22
                },
                {
                  "name": "onboarding_status",
                  "type": "Mapped[str]",
                  "line": 23
                },
                {
                  "name": "profile_data",
                  "type": "Mapped[dict]",
                  "line": 26
                },
                {
                  "name": "gap_map",
                  "type": "Mapped[dict]",
                  "line": 27
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 28
                },
                {
                  "name": "updated_at",
                  "type": "Mapped[datetime]",
                  "line": 31
                },
                {
                  "name": "updated_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 34
                }
              ],
              "line": 9
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/connectors.py",
          "sha256": "d5529083fbe39c77830dcda2cdcdeda0bb655cf447d6a4df9c8dd457a0b4fd26",
          "bytes": 2136,
          "routes": [],
          "models": [
            {
              "name": "SystemCatalog",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[int]",
                  "line": 11
                },
                {
                  "name": "domain",
                  "type": "Mapped[str]",
                  "line": 12
                },
                {
                  "name": "function",
                  "type": "Mapped[str]",
                  "line": 13
                },
                {
                  "name": "vendor_name",
                  "type": "Mapped[str]",
                  "line": 14
                },
                {
                  "name": "vendor_version",
                  "type": "Mapped[str | None]",
                  "line": 15
                },
                {
                  "name": "access_protocol",
                  "type": "Mapped[str]",
                  "line": 16
                },
                {
                  "name": "data_shape",
                  "type": "Mapped[str]",
                  "line": 17
                },
                {
                  "name": "common_record_types",
                  "type": "Mapped[dict]",
                  "line": 18
                },
                {
                  "name": "redaction_tier",
                  "type": "Mapped[int]",
                  "line": 19
                },
                {
                  "name": "discovery_hints",
                  "type": "Mapped[dict]",
                  "line": 20
                },
                {
                  "name": "connector_template_id",
                  "type": "Mapped[int | None]",
                  "line": 21
                },
                {
                  "name": "catalog_version",
                  "type": "Mapped[str]",
                  "line": 22
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 23
                }
              ],
              "line": 8
            },
            {
              "name": "ConnectorTemplate",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[int]",
                  "line": 31
                },
                {
                  "name": "vendor_name",
                  "type": "Mapped[str]",
                  "line": 32
                },
                {
                  "name": "protocol",
                  "type": "Mapped[str]",
                  "line": 33
                },
                {
                  "name": "auth_method",
                  "type": "Mapped[str]",
                  "line": 34
                },
                {
                  "name": "config_schema",
                  "type": "Mapped[dict]",
                  "line": 36
                },
                {
                  "name": "default_sync_schedule",
                  "type": "Mapped[str | None]",
                  "line": 37
                },
                {
                  "name": "default_rate_limit",
                  "type": "Mapped[int | None]",
                  "line": 38
                },
                {
                  "name": "redaction_tier",
                  "type": "Mapped[int]",
                  "line": 39
                },
                {
                  "name": "setup_instructions",
                  "type": "Mapped[str | None]",
                  "line": 40
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 41
                },
                {
                  "name": "catalog_version",
                  "type": "Mapped[str]",
                  "line": 44
                }
              ],
              "line": 28
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/departments.py",
          "sha256": "38c905bcca9df892e9d0aeb1e1e7d89789a49449a741a3df071679d7c5b18ff6",
          "bytes": 638,
          "routes": [],
          "models": [
            {
              "name": "Department",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 11
                },
                {
                  "name": "name",
                  "type": "Mapped[str]",
                  "line": 12
                },
                {
                  "name": "code",
                  "type": "Mapped[str]",
                  "line": 13
                },
                {
                  "name": "contact_email",
                  "type": "Mapped[str | None]",
                  "line": 14
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 15
                }
              ],
              "line": 8
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/document.py",
          "sha256": "5c3594b8d9b9e6a7124e9dd4cc7c03f5786110608acf6945680efbf49c6e829a",
          "bytes": 7997,
          "routes": [],
          "models": [
            {
              "name": "DataSource",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 75
                },
                {
                  "name": "name",
                  "type": "Mapped[str]",
                  "line": 76
                },
                {
                  "name": "source_type",
                  "type": "Mapped[SourceType]",
                  "line": 77
                },
                {
                  "name": "connection_config",
                  "type": "Mapped[dict]",
                  "line": 83
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 84
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID]",
                  "line": 85
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 86
                },
                {
                  "name": "last_ingestion_at",
                  "type": "Mapped[datetime | None]",
                  "line": 87
                },
                {
                  "name": "discovered_source_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 90
                },
                {
                  "name": "connector_template_id",
                  "type": "Mapped[int | None]",
                  "line": 91
                },
                {
                  "name": "sync_schedule",
                  "type": "Mapped[str | None]",
                  "line": 92
                },
                {
                  "name": "schedule_enabled",
                  "type": "Mapped[bool]",
                  "line": 93
                },
                {
                  "name": "last_sync_at",
                  "type": "Mapped[datetime | None]",
                  "line": 94
                },
                {
                  "name": "last_sync_cursor",
                  "type": "Mapped[str | None]",
                  "line": 95
                },
                {
                  "name": "last_sync_status",
                  "type": "Mapped[str | None]",
                  "line": 96
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "Mapped[int]",
                  "line": 98
                },
                {
                  "name": "last_error_message",
                  "type": "Mapped[str | None]",
                  "line": 99
                },
                {
                  "name": "last_error_at",
                  "type": "Mapped[datetime | None]",
                  "line": 100
                },
                {
                  "name": "sync_paused",
                  "type": "Mapped[bool]",
                  "line": 101
                },
                {
                  "name": "sync_paused_at",
                  "type": "Mapped[datetime | None]",
                  "line": 102
                },
                {
                  "name": "sync_paused_reason",
                  "type": "Mapped[str | None]",
                  "line": 103
                },
                {
                  "name": "retry_batch_size",
                  "type": "Mapped[int | None]",
                  "line": 104
                },
                {
                  "name": "retry_time_limit_seconds",
                  "type": "Mapped[int | None]",
                  "line": 105
                },
                {
                  "name": "health_status",
                  "type": "Mapped[str | None]",
                  "line": 106
                },
                {
                  "name": "schema_hash",
                  "type": "Mapped[str | None]",
                  "line": 107
                }
              ],
              "line": 72
            },
            {
              "name": "Document",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 113
                },
                {
                  "name": "source_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 114
                },
                {
                  "name": "source_path",
                  "type": "Mapped[str]",
                  "line": 115
                },
                {
                  "name": "filename",
                  "type": "Mapped[str]",
                  "line": 116
                },
                {
                  "name": "file_type",
                  "type": "Mapped[str]",
                  "line": 117
                },
                {
                  "name": "file_hash",
                  "type": "Mapped[str]",
                  "line": 118
                },
                {
                  "name": "file_size",
                  "type": "Mapped[int]",
                  "line": 119
                },
                {
                  "name": "ingestion_status",
                  "type": "Mapped[IngestionStatus]",
                  "line": 120
                },
                {
                  "name": "ingestion_error",
                  "type": "Mapped[str | None]",
                  "line": 121
                },
                {
                  "name": "chunk_count",
                  "type": "Mapped[int]",
                  "line": 122
                },
                {
                  "name": "ingested_at",
                  "type": "Mapped[datetime | None]",
                  "line": 123
                },
                {
                  "name": "metadata_",
                  "type": "Mapped[dict | None]",
                  "line": 124
                },
                {
                  "name": "connector_type",
                  "type": "Mapped[str | None]",
                  "line": 127
                },
                {
                  "name": "updated_at",
                  "type": "Mapped[datetime | None]",
                  "line": 128
                },
                {
                  "name": "display_name",
                  "type": "Mapped[str | None]",
                  "line": 131
                },
                {
                  "name": "department_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 132
                },
                {
                  "name": "redaction_status",
                  "type": "Mapped[str]",
                  "line": 133
                },
                {
                  "name": "derivative_path",
                  "type": "Mapped[str | None]",
                  "line": 134
                },
                {
                  "name": "original_locked",
                  "type": "Mapped[bool]",
                  "line": 135
                }
              ],
              "line": 110
            },
            {
              "name": "DocumentChunk",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 143
                },
                {
                  "name": "document_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 144
                },
                {
                  "name": "chunk_index",
                  "type": "Mapped[int]",
                  "line": 145
                },
                {
                  "name": "content_text",
                  "type": "Mapped[str]",
                  "line": 146
                },
                {
                  "name": "embedding",
                  "type": "Mapped[list | None]",
                  "line": 147
                },
                {
                  "name": "token_count",
                  "type": "Mapped[int]",
                  "line": 148
                },
                {
                  "name": "page_number",
                  "type": "Mapped[int | None]",
                  "line": 149
                }
              ],
              "line": 140
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/exemption.py",
          "sha256": "754ec1c88d23535bb2ed6538d3d42e3062fc9e81d69e2b63edebaf3debad3c5c",
          "bytes": 3812,
          "routes": [],
          "models": [
            {
              "name": "ExemptionRule",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 28
                },
                {
                  "name": "state_code",
                  "type": "Mapped[str]",
                  "line": 29
                },
                {
                  "name": "category",
                  "type": "Mapped[str]",
                  "line": 30
                },
                {
                  "name": "rule_type",
                  "type": "Mapped[RuleType]",
                  "line": 31
                },
                {
                  "name": "rule_definition",
                  "type": "Mapped[str]",
                  "line": 34
                },
                {
                  "name": "description",
                  "type": "Mapped[str | None]",
                  "line": 35
                },
                {
                  "name": "enabled",
                  "type": "Mapped[bool]",
                  "line": 36
                },
                {
                  "name": "version",
                  "type": "Mapped[int]",
                  "line": 37
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID]",
                  "line": 38
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 39
                }
              ],
              "line": 25
            },
            {
              "name": "ExemptionFlag",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 45
                },
                {
                  "name": "chunk_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 46
                },
                {
                  "name": "rule_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 47
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 48
                },
                {
                  "name": "category",
                  "type": "Mapped[str]",
                  "line": 49
                },
                {
                  "name": "matched_text",
                  "type": "Mapped[str | None]",
                  "line": 50
                },
                {
                  "name": "confidence",
                  "type": "Mapped[float]",
                  "line": 51
                },
                {
                  "name": "status",
                  "type": "Mapped[FlagStatus]",
                  "line": 52
                },
                {
                  "name": "reviewed_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 56
                },
                {
                  "name": "reviewed_at",
                  "type": "Mapped[datetime | None]",
                  "line": 57
                },
                {
                  "name": "review_reason",
                  "type": "Mapped[str | None]",
                  "line": 58
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 59
                },
                {
                  "name": "review_note",
                  "type": "Mapped[str | None]",
                  "line": 62
                },
                {
                  "name": "detection_tier",
                  "type": "Mapped[int | None]",
                  "line": 63
                },
                {
                  "name": "detection_method",
                  "type": "Mapped[str | None]",
                  "line": 64
                },
                {
                  "name": "auto_detected",
                  "type": "Mapped[bool]",
                  "line": 65
                }
              ],
              "line": 42
            },
            {
              "name": "DisclosureTemplate",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 71
                },
                {
                  "name": "template_type",
                  "type": "Mapped[str]",
                  "line": 72
                },
                {
                  "name": "state_code",
                  "type": "Mapped[str | None]",
                  "line": 73
                },
                {
                  "name": "content",
                  "type": "Mapped[str]",
                  "line": 74
                },
                {
                  "name": "version",
                  "type": "Mapped[int]",
                  "line": 75
                },
                {
                  "name": "updated_by",
                  "type": "Mapped[uuid.UUID]",
                  "line": 76
                },
                {
                  "name": "updated_at",
                  "type": "Mapped[datetime]",
                  "line": 77
                }
              ],
              "line": 68
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/fees.py",
          "sha256": "25eeff4b1e8180fdf218dc3382fefea2b141f851c2b9fdd84f01157079c795c2",
          "bytes": 3103,
          "routes": [],
          "models": [
            {
              "name": "FeeSchedule",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 11
                },
                {
                  "name": "jurisdiction",
                  "type": "Mapped[str]",
                  "line": 12
                },
                {
                  "name": "fee_type",
                  "type": "Mapped[str]",
                  "line": 13
                },
                {
                  "name": "amount",
                  "type": "Mapped[float]",
                  "line": 14
                },
                {
                  "name": "description",
                  "type": "Mapped[str | None]",
                  "line": 15
                },
                {
                  "name": "effective_date",
                  "type": "Mapped[date]",
                  "line": 16
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 17
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 20
                }
              ],
              "line": 8
            },
            {
              "name": "FeeWaiver",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 28
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 29
                },
                {
                  "name": "waiver_type",
                  "type": "Mapped[str]",
                  "line": 32
                },
                {
                  "name": "reason",
                  "type": "Mapped[str]",
                  "line": 33
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 34
                },
                {
                  "name": "requested_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 35
                },
                {
                  "name": "reviewed_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 38
                },
                {
                  "name": "review_notes",
                  "type": "Mapped[str | None]",
                  "line": 41
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 42
                },
                {
                  "name": "reviewed_at",
                  "type": "Mapped[datetime | None]",
                  "line": 45
                }
              ],
              "line": 25
            },
            {
              "name": "FeeLineItem",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 53
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 54
                },
                {
                  "name": "fee_schedule_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 57
                },
                {
                  "name": "description",
                  "type": "Mapped[str]",
                  "line": 60
                },
                {
                  "name": "quantity",
                  "type": "Mapped[int]",
                  "line": 61
                },
                {
                  "name": "unit_price",
                  "type": "Mapped[float]",
                  "line": 62
                },
                {
                  "name": "total",
                  "type": "Mapped[float]",
                  "line": 63
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 64
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 65
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 68
                },
                {
                  "name": "position",
                  "type": "Mapped[int | None]",
                  "line": 69
                },
                {
                  "name": "schedule_basis",
                  "type": "Mapped[str]",
                  "line": 70
                }
              ],
              "line": 50
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/notifications.py",
          "sha256": "12ca15c1d16e951ad550f8a2f57e196ea122e65f80e6ffa51622e4aec25910f1",
          "bytes": 2140,
          "routes": [],
          "models": [
            {
              "name": "NotificationTemplate",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 11
                },
                {
                  "name": "event_type",
                  "type": "Mapped[str]",
                  "line": 12
                },
                {
                  "name": "channel",
                  "type": "Mapped[str]",
                  "line": 13
                },
                {
                  "name": "subject_template",
                  "type": "Mapped[str]",
                  "line": 14
                },
                {
                  "name": "body_template",
                  "type": "Mapped[str]",
                  "line": 15
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 16
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 17
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 20
                }
              ],
              "line": 8
            },
            {
              "name": "NotificationLog",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 28
                },
                {
                  "name": "template_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 29
                },
                {
                  "name": "recipient_email",
                  "type": "Mapped[str]",
                  "line": 32
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 33
                },
                {
                  "name": "channel",
                  "type": "Mapped[str]",
                  "line": 36
                },
                {
                  "name": "subject",
                  "type": "Mapped[str | None]",
                  "line": 37
                },
                {
                  "name": "body",
                  "type": "Mapped[str | None]",
                  "line": 38
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 39
                },
                {
                  "name": "sent_at",
                  "type": "Mapped[datetime | None]",
                  "line": 40
                },
                {
                  "name": "error_message",
                  "type": "Mapped[str | None]",
                  "line": 41
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 42
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 45
                },
                {
                  "name": "module_id",
                  "type": "Mapped[str | None]",
                  "line": 46
                },
                {
                  "name": "audience",
                  "type": "Mapped[str | None]",
                  "line": 47
                }
              ],
              "line": 25
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/records_artifacts.py",
          "sha256": "b1a5d007e9631a552859eae35eee34680a7366be8c2b96cca1e78c2c163feed8",
          "bytes": 2142,
          "routes": [],
          "models": [
            {
              "name": "RequestArtifact",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 11
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 12
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 13
                },
                {
                  "name": "position",
                  "type": "Mapped[int | None]",
                  "line": 14
                },
                {
                  "name": "kind",
                  "type": "Mapped[str]",
                  "line": 15
                },
                {
                  "name": "content",
                  "type": "Mapped[str]",
                  "line": 16
                },
                {
                  "name": "sha256",
                  "type": "Mapped[str]",
                  "line": 17
                },
                {
                  "name": "response_sha256",
                  "type": "Mapped[str]",
                  "line": 18
                },
                {
                  "name": "export_path",
                  "type": "Mapped[str | None]",
                  "line": 19
                },
                {
                  "name": "actor_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 20
                },
                {
                  "name": "document_count",
                  "type": "Mapped[int]",
                  "line": 21
                },
                {
                  "name": "release_artifact_count",
                  "type": "Mapped[int]",
                  "line": 22
                },
                {
                  "name": "search_session_count",
                  "type": "Mapped[int]",
                  "line": 23
                },
                {
                  "name": "release_count",
                  "type": "Mapped[int]",
                  "line": 24
                },
                {
                  "name": "redacted_count",
                  "type": "Mapped[int]",
                  "line": 25
                },
                {
                  "name": "exempt_count",
                  "type": "Mapped[int]",
                  "line": 26
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 27
                },
                {
                  "name": "completed_at",
                  "type": "Mapped[datetime | None]",
                  "line": 28
                }
              ],
              "line": 9
            },
            {
              "name": "RequestPublication",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 33
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 34
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 35
                },
                {
                  "name": "payload",
                  "type": "Mapped[str]",
                  "line": 36
                },
                {
                  "name": "payload_hash",
                  "type": "Mapped[str]",
                  "line": 37
                },
                {
                  "name": "actor_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 38
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 39
                }
              ],
              "line": 31
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/records_evidence.py",
          "sha256": "19b70c91e104240516583c37143e7926d66d891214e321eb57b9831a8a92435b",
          "bytes": 2430,
          "routes": [],
          "models": [
            {
              "name": "RequestEvidenceNote",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 23
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 24
                },
                {
                  "name": "kind",
                  "type": "Mapped[str]",
                  "line": 27
                },
                {
                  "name": "position",
                  "type": "Mapped[int]",
                  "line": 28
                },
                {
                  "name": "content",
                  "type": "Mapped[str]",
                  "line": 29
                },
                {
                  "name": "actor_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 30
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 31
                }
              ],
              "line": 16
            },
            {
              "name": "RequestExemptionDecision",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 40
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 41
                },
                {
                  "name": "flag_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 44
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 45
                },
                {
                  "name": "position",
                  "type": "Mapped[int]",
                  "line": 46
                },
                {
                  "name": "source",
                  "type": "Mapped[str]",
                  "line": 47
                },
                {
                  "name": "kind",
                  "type": "Mapped[str]",
                  "line": 48
                },
                {
                  "name": "finding",
                  "type": "Mapped[str]",
                  "line": 49
                },
                {
                  "name": "decision",
                  "type": "Mapped[str]",
                  "line": 50
                },
                {
                  "name": "basis",
                  "type": "Mapped[str]",
                  "line": 51
                },
                {
                  "name": "reviewer_label",
                  "type": "Mapped[str]",
                  "line": 52
                },
                {
                  "name": "actor_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 53
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 54
                }
              ],
              "line": 34
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/records_files.py",
          "sha256": "f09db07cce4a4bc8223c9e6dbedcf7dd5c6fc6a0aefe4b9db6468ece30310253",
          "bytes": 2003,
          "routes": [],
          "models": [
            {
              "name": "RequestFileEvidence",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 15
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 16
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 17
                },
                {
                  "name": "position",
                  "type": "Mapped[int]",
                  "line": 18
                },
                {
                  "name": "title",
                  "type": "Mapped[str]",
                  "line": 19
                },
                {
                  "name": "original_path",
                  "type": "Mapped[str]",
                  "line": 20
                },
                {
                  "name": "citation",
                  "type": "Mapped[str]",
                  "line": 21
                },
                {
                  "name": "added_by",
                  "type": "Mapped[str]",
                  "line": 22
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 23
                }
              ],
              "line": 12
            },
            {
              "name": "RequestReleaseCopy",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 29
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 30
                },
                {
                  "name": "attachment_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 31
                },
                {
                  "name": "original_path",
                  "type": "Mapped[str]",
                  "line": 32
                },
                {
                  "name": "stored_path",
                  "type": "Mapped[str]",
                  "line": 33
                },
                {
                  "name": "file_name",
                  "type": "Mapped[str]",
                  "line": 34
                },
                {
                  "name": "sha256",
                  "type": "Mapped[str]",
                  "line": 35
                },
                {
                  "name": "size_bytes",
                  "type": "Mapped[int]",
                  "line": 36
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 37
                },
                {
                  "name": "note",
                  "type": "Mapped[str]",
                  "line": 38
                },
                {
                  "name": "added_by",
                  "type": "Mapped[str]",
                  "line": 39
                },
                {
                  "name": "actor_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 40
                },
                {
                  "name": "position",
                  "type": "Mapped[int]",
                  "line": 41
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 42
                }
              ],
              "line": 26
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/request.py",
          "sha256": "928047bcbe719cbe6e007b7bd77c30325b467a3bc5d46aec367dac0b40b41653",
          "bytes": 5826,
          "routes": [],
          "models": [
            {
              "name": "RecordsRequest",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 34
                },
                {
                  "name": "requester_name",
                  "type": "Mapped[str]",
                  "line": 35
                },
                {
                  "name": "requester_email",
                  "type": "Mapped[str | None]",
                  "line": 36
                },
                {
                  "name": "date_received",
                  "type": "Mapped[datetime]",
                  "line": 37
                },
                {
                  "name": "statutory_deadline",
                  "type": "Mapped[datetime | None]",
                  "line": 38
                },
                {
                  "name": "description",
                  "type": "Mapped[str]",
                  "line": 39
                },
                {
                  "name": "status",
                  "type": "Mapped[RequestStatus]",
                  "line": 40
                },
                {
                  "name": "assigned_to",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 44
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 45
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 46
                },
                {
                  "name": "response_draft",
                  "type": "Mapped[str | None]",
                  "line": 47
                },
                {
                  "name": "review_notes",
                  "type": "Mapped[str | None]",
                  "line": 48
                },
                {
                  "name": "requester_phone",
                  "type": "Mapped[str | None]",
                  "line": 51
                },
                {
                  "name": "requester_type",
                  "type": "Mapped[str | None]",
                  "line": 52
                },
                {
                  "name": "scope_assessment",
                  "type": "Mapped[str | None]",
                  "line": 53
                },
                {
                  "name": "department_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 54
                },
                {
                  "name": "estimated_fee",
                  "type": "Mapped[float | None]",
                  "line": 55
                },
                {
                  "name": "fee_status",
                  "type": "Mapped[str | None]",
                  "line": 56
                },
                {
                  "name": "fee_waiver_requested",
                  "type": "Mapped[bool]",
                  "line": 57
                },
                {
                  "name": "priority",
                  "type": "Mapped[str]",
                  "line": 58
                },
                {
                  "name": "closed_at",
                  "type": "Mapped[datetime | None]",
                  "line": 59
                },
                {
                  "name": "closure_reason",
                  "type": "Mapped[str | None]",
                  "line": 60
                },
                {
                  "name": "desktop_id",
                  "type": "Mapped[str | None]",
                  "line": 64
                },
                {
                  "name": "public_tracking_number",
                  "type": "Mapped[str | None]",
                  "line": 65
                },
                {
                  "name": "requester_contact",
                  "type": "Mapped[str]",
                  "line": 66
                },
                {
                  "name": "submitted_via",
                  "type": "Mapped[str]",
                  "line": 67
                },
                {
                  "name": "deadline_label",
                  "type": "Mapped[str]",
                  "line": 68
                },
                {
                  "name": "deadline_basis",
                  "type": "Mapped[str]",
                  "line": 69
                },
                {
                  "name": "deadline_reviewed_at",
                  "type": "Mapped[datetime | None]",
                  "line": 70
                },
                {
                  "name": "display_status",
                  "type": "Mapped[str | None]",
                  "line": 71
                },
                {
                  "name": "assigned_label",
                  "type": "Mapped[str]",
                  "line": 72
                },
                {
                  "name": "fee_estimate_text",
                  "type": "Mapped[str]",
                  "line": 73
                },
                {
                  "name": "fee_waiver_reason",
                  "type": "Mapped[str]",
                  "line": 74
                },
                {
                  "name": "approved_at",
                  "type": "Mapped[datetime | None]",
                  "line": 75
                },
                {
                  "name": "approved_response_sha256",
                  "type": "Mapped[str | None]",
                  "line": 76
                },
                {
                  "name": "fulfilled_at",
                  "type": "Mapped[datetime | None]",
                  "line": 77
                }
              ],
              "line": 31
            },
            {
              "name": "RequestDocument",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 83
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 84
                },
                {
                  "name": "document_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 85
                },
                {
                  "name": "relevance_note",
                  "type": "Mapped[str | None]",
                  "line": 86
                },
                {
                  "name": "exemption_flags",
                  "type": "Mapped[dict | None]",
                  "line": 87
                },
                {
                  "name": "inclusion_status",
                  "type": "Mapped[InclusionStatus]",
                  "line": 88
                },
                {
                  "name": "attached_at",
                  "type": "Mapped[datetime]",
                  "line": 92
                },
                {
                  "name": "attached_by",
                  "type": "Mapped[uuid.UUID]",
                  "line": 93
                }
              ],
              "line": 80
            },
            {
              "name": "DocumentCache",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 99
                },
                {
                  "name": "document_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 100
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 101
                },
                {
                  "name": "cached_file_path",
                  "type": "Mapped[str]",
                  "line": 102
                },
                {
                  "name": "file_size",
                  "type": "Mapped[int]",
                  "line": 103
                },
                {
                  "name": "cached_at",
                  "type": "Mapped[datetime]",
                  "line": 104
                }
              ],
              "line": 96
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/request_workflow.py",
          "sha256": "77d4ac696507834c2e2bbc73c025a48988af29189930072c7d3a4240574df6f4",
          "bytes": 4059,
          "routes": [],
          "models": [
            {
              "name": "RequestTimeline",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 11
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 12
                },
                {
                  "name": "event_type",
                  "type": "Mapped[str]",
                  "line": 15
                },
                {
                  "name": "actor_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 20
                },
                {
                  "name": "actor_role",
                  "type": "Mapped[str | None]",
                  "line": 23
                },
                {
                  "name": "description",
                  "type": "Mapped[str]",
                  "line": 24
                },
                {
                  "name": "internal_note",
                  "type": "Mapped[str | None]",
                  "line": 25
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 26
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 29
                },
                {
                  "name": "actor_label",
                  "type": "Mapped[str | None]",
                  "line": 30
                },
                {
                  "name": "position",
                  "type": "Mapped[int | None]",
                  "line": 31
                }
              ],
              "line": 8
            },
            {
              "name": "RequestPublicStatus",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 37
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 38
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 41
                },
                {
                  "name": "label",
                  "type": "Mapped[str]",
                  "line": 42
                },
                {
                  "name": "summary",
                  "type": "Mapped[str]",
                  "line": 43
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 44
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 45
                },
                {
                  "name": "position",
                  "type": "Mapped[int | None]",
                  "line": 48
                }
              ],
              "line": 34
            },
            {
              "name": "RequestMessage",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 54
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 55
                },
                {
                  "name": "sender_type",
                  "type": "Mapped[str]",
                  "line": 58
                },
                {
                  "name": "sender_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 59
                },
                {
                  "name": "message_text",
                  "type": "Mapped[str]",
                  "line": 62
                },
                {
                  "name": "is_internal",
                  "type": "Mapped[bool]",
                  "line": 63
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 64
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 67
                },
                {
                  "name": "sender_label",
                  "type": "Mapped[str | None]",
                  "line": 68
                },
                {
                  "name": "position",
                  "type": "Mapped[int | None]",
                  "line": 69
                }
              ],
              "line": 51
            },
            {
              "name": "ResponseLetter",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 75
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 76
                },
                {
                  "name": "template_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 79
                },
                {
                  "name": "generated_content",
                  "type": "Mapped[str]",
                  "line": 82
                },
                {
                  "name": "edited_content",
                  "type": "Mapped[str | None]",
                  "line": 83
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 84
                },
                {
                  "name": "generated_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 85
                },
                {
                  "name": "approved_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 88
                },
                {
                  "name": "sent_at",
                  "type": "Mapped[datetime | None]",
                  "line": 91
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 92
                }
              ],
              "line": 72
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/search.py",
          "sha256": "64caa51b723290050a78027fd5de3667d214cc24dce5f3dc250f9a3ce4588bf6",
          "bytes": 2764,
          "routes": [],
          "models": [
            {
              "name": "SearchSession",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 14
                },
                {
                  "name": "user_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 15
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 16
                }
              ],
              "line": 11
            },
            {
              "name": "SearchQuery",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 22
                },
                {
                  "name": "session_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 23
                },
                {
                  "name": "query_text",
                  "type": "Mapped[str]",
                  "line": 24
                },
                {
                  "name": "filters",
                  "type": "Mapped[dict | None]",
                  "line": 25
                },
                {
                  "name": "results_count",
                  "type": "Mapped[int]",
                  "line": 26
                },
                {
                  "name": "synthesized_answer",
                  "type": "Mapped[str | None]",
                  "line": 27
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 28
                },
                {
                  "name": "request_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 29
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 32
                },
                {
                  "name": "position",
                  "type": "Mapped[int | None]",
                  "line": 33
                },
                {
                  "name": "locations",
                  "type": "Mapped[str | None]",
                  "line": 34
                },
                {
                  "name": "reviewer_label",
                  "type": "Mapped[str | None]",
                  "line": 35
                }
              ],
              "line": 19
            },
            {
              "name": "SearchResult",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 41
                },
                {
                  "name": "query_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 42
                },
                {
                  "name": "chunk_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 45
                },
                {
                  "name": "similarity_score",
                  "type": "Mapped[float | None]",
                  "line": 46
                },
                {
                  "name": "rank",
                  "type": "Mapped[int]",
                  "line": 47
                },
                {
                  "name": "normalized_score",
                  "type": "Mapped[int | None]",
                  "line": 50
                },
                {
                  "name": "legacy_id",
                  "type": "Mapped[str | None]",
                  "line": 51
                },
                {
                  "name": "title",
                  "type": "Mapped[str | None]",
                  "line": 52
                },
                {
                  "name": "citation",
                  "type": "Mapped[str | None]",
                  "line": 53
                },
                {
                  "name": "summary",
                  "type": "Mapped[str | None]",
                  "line": 54
                },
                {
                  "name": "review_status",
                  "type": "Mapped[str | None]",
                  "line": 55
                }
              ],
              "line": 38
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/service_account.py",
          "sha256": "a6a9b3d1735156d13603ed3128723a1fb5985795ab6e0919c450a4e63824c3b1",
          "bytes": 1074,
          "routes": [],
          "models": [
            {
              "name": "ServiceAccount",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 14
                },
                {
                  "name": "name",
                  "type": "Mapped[str]",
                  "line": 17
                },
                {
                  "name": "api_key_hash",
                  "type": "Mapped[str]",
                  "line": 18
                },
                {
                  "name": "role",
                  "type": "Mapped[UserRole]",
                  "line": 19
                },
                {
                  "name": "created_by",
                  "type": "Mapped[uuid.UUID]",
                  "line": 23
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 26
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 29
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/sync_failure.py",
          "sha256": "c5feb986cc08f3fe85f780170741213efc12740cf561f174a003cf9a5eb3cbc2",
          "bytes": 3057,
          "routes": [],
          "models": [
            {
              "name": "SyncFailure",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 18
                },
                {
                  "name": "source_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 19
                },
                {
                  "name": "source_path",
                  "type": "Mapped[str]",
                  "line": 22
                },
                {
                  "name": "error_message",
                  "type": "Mapped[str | None]",
                  "line": 23
                },
                {
                  "name": "error_class",
                  "type": "Mapped[str | None]",
                  "line": 24
                },
                {
                  "name": "http_status_code",
                  "type": "Mapped[int | None]",
                  "line": 25
                },
                {
                  "name": "retry_count",
                  "type": "Mapped[int]",
                  "line": 26
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 27
                },
                {
                  "name": "first_failed_at",
                  "type": "Mapped[datetime]",
                  "line": 31
                },
                {
                  "name": "last_retried_at",
                  "type": "Mapped[datetime | None]",
                  "line": 34
                },
                {
                  "name": "resolved_at",
                  "type": "Mapped[datetime | None]",
                  "line": 35
                },
                {
                  "name": "dismissed_at",
                  "type": "Mapped[datetime | None]",
                  "line": 36
                },
                {
                  "name": "dismissed_by",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 37
                }
              ],
              "line": 15
            },
            {
              "name": "SyncRunLog",
              "bases": [
                "Base"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 50
                },
                {
                  "name": "source_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 51
                },
                {
                  "name": "started_at",
                  "type": "Mapped[datetime]",
                  "line": 54
                },
                {
                  "name": "finished_at",
                  "type": "Mapped[datetime | None]",
                  "line": 57
                },
                {
                  "name": "status",
                  "type": "Mapped[str | None]",
                  "line": 58
                },
                {
                  "name": "records_attempted",
                  "type": "Mapped[int]",
                  "line": 59
                },
                {
                  "name": "records_succeeded",
                  "type": "Mapped[int]",
                  "line": 60
                },
                {
                  "name": "records_failed",
                  "type": "Mapped[int]",
                  "line": 61
                },
                {
                  "name": "error_summary",
                  "type": "Mapped[str | None]",
                  "line": 62
                }
              ],
              "line": 47
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/models/user.py",
          "sha256": "39603bc8063007391d478b52165d2ae8d4bf0c5f1a1d7f716b78ff94754b2c82",
          "bytes": 1292,
          "routes": [],
          "models": [
            {
              "name": "User",
              "bases": [
                "SQLAlchemyBaseUserTableUUID",
                "Base"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "Mapped[str]",
                  "line": 26
                },
                {
                  "name": "role",
                  "type": "Mapped[UserRole]",
                  "line": 27
                },
                {
                  "name": "created_at",
                  "type": "Mapped[datetime]",
                  "line": 31
                },
                {
                  "name": "last_login",
                  "type": "Mapped[datetime | None]",
                  "line": 34
                },
                {
                  "name": "must_change_password",
                  "type": "Mapped[bool]",
                  "line": 37
                },
                {
                  "name": "department_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 42
                }
              ],
              "line": 23
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/notifications/__init__.py",
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "bytes": 0,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/notifications/router.py",
          "sha256": "adf8fb319f45c2c1bf6b9580ed3b918ca8a74f56dfd1d36d621b2de2ae4d57ea",
          "bytes": 4369,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/notifications/templates",
              "function": "list_templates",
              "line": 22
            },
            {
              "method": "POST",
              "declared_path": "/notifications/templates",
              "function": "create_template",
              "line": 38
            },
            {
              "method": "PATCH",
              "declared_path": "/notifications/templates/{template_id}",
              "function": "update_template",
              "line": 83
            },
            {
              "method": "GET",
              "declared_path": "/notifications/log",
              "function": "list_notification_log",
              "line": 116
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/notifications/service.py",
          "sha256": "6c7e33ddb59503ebcd530df56efee8d26a31b4b3c1a95c0c238eff10423102e4",
          "bytes": 3160,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/notifications/smtp_delivery.py",
          "sha256": "084b7b456f9f665b67f55d3789e0427b2750c7f3b343de1be718acc0e79f4f6b",
          "bytes": 3599,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/notifications/sync_notifications.py",
          "sha256": "6bbd902f3bd5344014e3a641d082e87ed59a316f6d8c26f7981dcb7abf2ee8b0",
          "bytes": 4457,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/onboarding/__init__.py",
          "sha256": "fd55411077ca22c07b7f527df218bc85624000d5c3699cfa8fe341a86b125ea4",
          "bytes": 112,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/onboarding/router.py",
          "sha256": "dedc72d16f1d1ceab430a8249bca91aca9b72bed92a63e0da4d76a48c2def1a6",
          "bytes": 7179,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/interview",
              "function": "get_next_question",
              "line": 113
            }
          ],
          "models": [
            {
              "name": "InterviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "last_answer",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "last_field",
                  "type": "str | None",
                  "line": 65
                },
                {
                  "name": "skipped_fields",
                  "type": "list[str] | None",
                  "line": 70
                }
              ],
              "line": 63
            },
            {
              "name": "InterviewResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "question",
                  "type": "str",
                  "line": 74
                },
                {
                  "name": "target_field",
                  "type": "str | None",
                  "line": 75
                },
                {
                  "name": "all_complete",
                  "type": "bool",
                  "line": 76
                },
                {
                  "name": "completed_fields",
                  "type": "list[str]",
                  "line": 77
                },
                {
                  "name": "onboarding_status",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "skipped_fields",
                  "type": "list[str]",
                  "line": 79
                }
              ],
              "line": 73
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/public/__init__.py",
          "sha256": "07555697e80697fc9c90de3b9cff2b5c07dfe57210ce0aa82570f34003f11292",
          "bytes": 632,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/public/router.py",
          "sha256": "127bd6046eada11ea0195f6f9c7489a16343ff55a417b8d8ecf84e511028d46f",
          "bytes": 6923,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/requests",
              "function": "submit_public_request",
              "line": 115
            }
          ],
          "models": [
            {
              "name": "PublicRequestSubmitBody",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "description",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "phone",
                  "type": "str | None",
                  "line": 64
                }
              ],
              "line": 47
            },
            {
              "name": "PublicRequestSubmitResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 80
                },
                {
                  "name": "status",
                  "type": "RequestStatus",
                  "line": 81
                },
                {
                  "name": "submitted_at",
                  "type": "datetime",
                  "line": 82
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 83
                }
              ],
              "line": 71
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/__init__.py",
          "sha256": "474d14c31d2bb164d90cd89a4982df6987e0c15fb8ed8f663cf112fb03332b8f",
          "bytes": 104,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/artifacts.py",
          "sha256": "86793936796cb95d48b7775d2f942cca7e5cca77dde0c8d022221b41b6cf4e22",
          "bytes": 12278,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/deadline_check.py",
          "sha256": "6244989403cc69f8cc89686d5e8664e3c580fced03ca793704a2397e8987d332",
          "bytes": 5055,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/files.py",
          "sha256": "af54c3d331dc1dedeece351d2cd07ece06c1c6e1295bbb42315eaf4503752da5",
          "bytes": 7540,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/meeting_sources.py",
          "sha256": "8b1122476099897bd85c0a345a2fe8ff21e1d60962c0b9fd0899956359fa76ea",
          "bytes": 2609,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/native_public.py",
          "sha256": "926db3331f9606977db57b36301521dd462cc5e6a5436425979734678e77ede7",
          "bytes": 6497,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/planning_sources.py",
          "sha256": "4ba709347e0a34b24664d7890aaed2d6de8800d73520eba65a139700749f8dcb",
          "bytes": 1920,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/router.py",
          "sha256": "ada18d3fcc66780a458764bf34c50d546748accd9791bd83edb5b95e4299968f",
          "bytes": 48717,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/",
              "function": "create_request",
              "line": 85
            },
            {
              "method": "GET",
              "declared_path": "/",
              "function": "list_requests",
              "line": 104
            },
            {
              "method": "GET",
              "declared_path": "/stats",
              "function": "request_stats",
              "line": 136
            },
            {
              "method": "GET",
              "declared_path": "/{request_id}",
              "function": "get_request",
              "line": 189
            },
            {
              "method": "PATCH",
              "declared_path": "/{request_id}",
              "function": "update_request",
              "line": 211
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/documents",
              "function": "attach_document",
              "line": 275
            },
            {
              "method": "GET",
              "declared_path": "/{request_id}/documents",
              "function": "list_attached_documents",
              "line": 342
            },
            {
              "method": "DELETE",
              "declared_path": "/{request_id}/documents/{doc_id}",
              "function": "remove_document",
              "line": 363
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/submit-review",
              "function": "submit_for_review",
              "line": 395
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/ready-for-release",
              "function": "mark_ready_for_release",
              "line": 437
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/approve",
              "function": "approve_request",
              "line": 481
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/reject",
              "function": "reject_request",
              "line": 525
            },
            {
              "method": "GET",
              "declared_path": "/{request_id}/timeline",
              "function": "get_timeline",
              "line": 571
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/timeline",
              "function": "add_timeline_event",
              "line": 590
            },
            {
              "method": "GET",
              "declared_path": "/{request_id}/messages",
              "function": "get_messages",
              "line": 622
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/messages",
              "function": "add_message",
              "line": 641
            },
            {
              "method": "GET",
              "declared_path": "/{request_id}/fees",
              "function": "get_fees",
              "line": 672
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/fees",
              "function": "add_fee",
              "line": 692
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/estimate-fees",
              "function": "estimate_fees",
              "line": 748
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/fee-waiver",
              "function": "create_fee_waiver",
              "line": 803
            },
            {
              "method": "PATCH",
              "declared_path": "/{request_id}/fee-waiver/{waiver_id}",
              "function": "review_fee_waiver",
              "line": 848
            },
            {
              "method": "POST",
              "declared_path": "/{request_id}/response-letter",
              "function": "generate_response_letter",
              "line": 1138
            },
            {
              "method": "GET",
              "declared_path": "/{request_id}/response-letter",
              "function": "get_response_letter",
              "line": 1203
            },
            {
              "method": "PATCH",
              "declared_path": "/{request_id}/response-letter/{letter_id}",
              "function": "update_response_letter",
              "line": 1232
            }
          ],
          "models": [
            {
              "name": "FeeEstimateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "page_count",
                  "type": "int",
                  "line": 735
                },
                {
                  "name": "fee_schedule_id",
                  "type": "uuid.UUID",
                  "line": 736
                }
              ],
              "line": 734
            },
            {
              "name": "FeeEstimateResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "page_count",
                  "type": "int",
                  "line": 740
                },
                {
                  "name": "unit_price",
                  "type": "float",
                  "line": 741
                },
                {
                  "name": "total",
                  "type": "float",
                  "line": 742
                },
                {
                  "name": "fee_type",
                  "type": "str",
                  "line": 743
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 744
                }
              ],
              "line": 739
            },
            {
              "name": "FeeWaiverCreateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "waiver_type",
                  "type": "str",
                  "line": 781
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 782
                }
              ],
              "line": 780
            },
            {
              "name": "FeeWaiverReadResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 786
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 787
                },
                {
                  "name": "waiver_type",
                  "type": "str",
                  "line": 788
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 789
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 790
                },
                {
                  "name": "review_notes",
                  "type": "str | None",
                  "line": 791
                },
                {
                  "name": "created_at",
                  "type": "str",
                  "line": 792
                }
              ],
              "line": 785
            },
            {
              "name": "FeeWaiverReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 798
                },
                {
                  "name": "review_notes",
                  "type": "str | None",
                  "line": 799
                }
              ],
              "line": 797
            }
          ],
          "configuration": [
            {
              "environment": "LLM_MODEL",
              "line": 992
            }
          ]
        },
        {
          "source": "backend/townlight_records/requests/service.py",
          "sha256": "2e3d98c29dad218f7a32a1eecf013170071413a246d21180426f0fdb2a6e275c",
          "bytes": 5015,
          "routes": [],
          "models": [
            {
              "name": "RequestIntake",
              "bases": [],
              "fields": [
                {
                  "name": "requester_name",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "requester_email",
                  "type": "str | None",
                  "line": 22
                },
                {
                  "name": "requester_phone",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "requester_type",
                  "type": "str | None",
                  "line": 24
                },
                {
                  "name": "statutory_deadline",
                  "type": "datetime | None",
                  "line": 25
                },
                {
                  "name": "priority",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "scope_assessment",
                  "type": "str | None",
                  "line": 27
                },
                {
                  "name": "department_id",
                  "type": "uuid.UUID | None",
                  "line": 28
                }
              ],
              "line": 19
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/requests/workflow.py",
          "sha256": "fbffbf4434cdeecd92d3828fa92690360f01fb809f1f7aec501d42aef56d161a",
          "bytes": 18267,
          "routes": [],
          "models": [
            {
              "name": "RecordsActor",
              "bases": [],
              "fields": [
                {
                  "name": "user",
                  "type": "User",
                  "line": 26
                },
                {
                  "name": "role",
                  "type": "str",
                  "line": 27
                }
              ],
              "line": 25
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/__init__.py",
          "sha256": "7cd5688441a82abcca61eda136c29d767a8043bb0a3f7d9f0696a6443f675372",
          "bytes": 18,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/analytics.py",
          "sha256": "1b2f2d7507f1057d010c203ec7c7fa6037d7adfd1e5be4b7323402dca5693a69",
          "bytes": 411,
          "routes": [],
          "models": [
            {
              "name": "OperationalMetrics",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "average_response_time_days",
                  "type": "float | None",
                  "line": 5
                },
                {
                  "name": "median_response_time_days",
                  "type": "float | None",
                  "line": 6
                },
                {
                  "name": "requests_by_status",
                  "type": "dict[str, int]",
                  "line": 7
                },
                {
                  "name": "requests_by_department",
                  "type": "dict[str, int]",
                  "line": 8
                },
                {
                  "name": "deadline_compliance_rate",
                  "type": "float",
                  "line": 9
                },
                {
                  "name": "total_open",
                  "type": "int",
                  "line": 10
                },
                {
                  "name": "total_closed",
                  "type": "int",
                  "line": 11
                },
                {
                  "name": "total_overdue",
                  "type": "int",
                  "line": 12
                },
                {
                  "name": "clarification_frequency",
                  "type": "float",
                  "line": 13
                },
                {
                  "name": "top_request_topics",
                  "type": "list[str]",
                  "line": 14
                }
              ],
              "line": 4
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/audit.py",
          "sha256": "95b0e336b85ffdb37079359ab68aa04b9ed974e964dc9a943cbef132f99e327d",
          "bytes": 767,
          "routes": [],
          "models": [
            {
              "name": "AuditLogRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "int",
                  "line": 8
                },
                {
                  "name": "prev_hash",
                  "type": "str",
                  "line": 9
                },
                {
                  "name": "entry_hash",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "timestamp",
                  "type": "datetime",
                  "line": 11
                },
                {
                  "name": "user_id",
                  "type": "uuid.UUID | None",
                  "line": 12
                },
                {
                  "name": "action",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "resource_type",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "resource_id",
                  "type": "str | None",
                  "line": 15
                },
                {
                  "name": "details",
                  "type": "dict | None",
                  "line": 16
                },
                {
                  "name": "ai_generated",
                  "type": "bool",
                  "line": 17
                }
              ],
              "line": 7
            },
            {
              "name": "AuditLogQuery",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "resource_type",
                  "type": "str | None",
                  "line": 24
                },
                {
                  "name": "user_id",
                  "type": "uuid.UUID | None",
                  "line": 25
                },
                {
                  "name": "start_date",
                  "type": "datetime | None",
                  "line": 26
                },
                {
                  "name": "end_date",
                  "type": "datetime | None",
                  "line": 27
                },
                {
                  "name": "limit",
                  "type": "int",
                  "line": 28
                },
                {
                  "name": "offset",
                  "type": "int",
                  "line": 29
                }
              ],
              "line": 22
            },
            {
              "name": "AuditChainVerification",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "is_valid",
                  "type": "bool",
                  "line": 33
                },
                {
                  "name": "entries_checked",
                  "type": "int",
                  "line": 34
                },
                {
                  "name": "error_message",
                  "type": "str",
                  "line": 35
                }
              ],
              "line": 32
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/city_profile.py",
          "sha256": "b3187fb30ee67b36d4eb2794c2e36b31a49f01b9ad53b0db1a0d9bf87b2c2b2d",
          "bytes": 1627,
          "routes": [],
          "models": [
            {
              "name": "CityProfileCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "city_name",
                  "type": "str",
                  "line": 8
                },
                {
                  "name": "state",
                  "type": "str | None",
                  "line": 13
                },
                {
                  "name": "county",
                  "type": "str | None",
                  "line": 14
                },
                {
                  "name": "population_band",
                  "type": "str | None",
                  "line": 15
                },
                {
                  "name": "email_platform",
                  "type": "str | None",
                  "line": 16
                },
                {
                  "name": "has_dedicated_it",
                  "type": "bool | None",
                  "line": 17
                },
                {
                  "name": "monthly_request_volume",
                  "type": "str | None",
                  "line": 18
                },
                {
                  "name": "profile_data",
                  "type": "dict",
                  "line": 19
                },
                {
                  "name": "gap_map",
                  "type": "dict",
                  "line": 20
                }
              ],
              "line": 7
            },
            {
              "name": "CityProfileRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 25
                },
                {
                  "name": "city_name",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "state",
                  "type": "str | None",
                  "line": 29
                },
                {
                  "name": "county",
                  "type": "str | None",
                  "line": 30
                },
                {
                  "name": "population_band",
                  "type": "str | None",
                  "line": 31
                },
                {
                  "name": "email_platform",
                  "type": "str | None",
                  "line": 32
                },
                {
                  "name": "has_dedicated_it",
                  "type": "bool | None",
                  "line": 33
                },
                {
                  "name": "monthly_request_volume",
                  "type": "str | None",
                  "line": 34
                },
                {
                  "name": "onboarding_status",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "profile_data",
                  "type": "dict",
                  "line": 36
                },
                {
                  "name": "gap_map",
                  "type": "dict",
                  "line": 37
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 38
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 39
                }
              ],
              "line": 23
            },
            {
              "name": "CityProfileUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "city_name",
                  "type": "str | None",
                  "line": 43
                },
                {
                  "name": "state",
                  "type": "str | None",
                  "line": 44
                },
                {
                  "name": "county",
                  "type": "str | None",
                  "line": 45
                },
                {
                  "name": "population_band",
                  "type": "str | None",
                  "line": 46
                },
                {
                  "name": "email_platform",
                  "type": "str | None",
                  "line": 47
                },
                {
                  "name": "has_dedicated_it",
                  "type": "bool | None",
                  "line": 48
                },
                {
                  "name": "monthly_request_volume",
                  "type": "str | None",
                  "line": 49
                },
                {
                  "name": "onboarding_status",
                  "type": "str | None",
                  "line": 50
                },
                {
                  "name": "profile_data",
                  "type": "dict | None",
                  "line": 51
                },
                {
                  "name": "gap_map",
                  "type": "dict | None",
                  "line": 52
                }
              ],
              "line": 42
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/connectors/__init__.py",
          "sha256": "726eb96cca0ac51b015962c6574003a61edc9d81ad95c486d2f102749aeba0e1",
          "bytes": 388,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/connectors/odbc.py",
          "sha256": "7f90488d1774fdb632ed8a70cf34567966b823dded7e4ed49b71c66cd7cff2cf",
          "bytes": 2296,
          "routes": [],
          "models": [
            {
              "name": "ODBCConfig",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "connector_type",
                  "type": "Literal['odbc']",
                  "line": 18
                },
                {
                  "name": "connection_string",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "table_name",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "pk_column",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "modified_column",
                  "type": "Optional[str]",
                  "line": 23
                },
                {
                  "name": "columns",
                  "type": "Optional[list[str]]",
                  "line": 24
                },
                {
                  "name": "batch_size",
                  "type": "int",
                  "line": 26
                },
                {
                  "name": "max_row_bytes",
                  "type": "int",
                  "line": 27
                }
              ],
              "line": 17
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/connectors/rest_api.py",
          "sha256": "26bc9b8c7f3cd8d4bfdd99114486bc7b0aa926f42af3aba73754e4b8d21d3db7",
          "bytes": 2769,
          "routes": [],
          "models": [
            {
              "name": "RestApiConfig",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "connector_type",
                  "type": "Literal['rest_api']",
                  "line": 6
                },
                {
                  "name": "base_url",
                  "type": "AnyHttpUrl",
                  "line": 9
                },
                {
                  "name": "endpoint_path",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "auth_method",
                  "type": "Literal['none', 'api_key', 'bearer', 'oauth2', 'basic']",
                  "line": 13
                },
                {
                  "name": "api_key",
                  "type": "Optional[str]",
                  "line": 14
                },
                {
                  "name": "key_location",
                  "type": "Literal['header', 'query']",
                  "line": 15
                },
                {
                  "name": "key_header",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "token",
                  "type": "Optional[str]",
                  "line": 17
                },
                {
                  "name": "client_id",
                  "type": "Optional[str]",
                  "line": 18
                },
                {
                  "name": "client_secret",
                  "type": "Optional[str]",
                  "line": 19
                },
                {
                  "name": "token_url",
                  "type": "Optional[AnyHttpUrl]",
                  "line": 20
                },
                {
                  "name": "username",
                  "type": "Optional[str]",
                  "line": 21
                },
                {
                  "name": "password",
                  "type": "Optional[str]",
                  "line": 22
                },
                {
                  "name": "pagination_style",
                  "type": "Literal['none', 'page', 'offset', 'cursor']",
                  "line": 25
                },
                {
                  "name": "page_param",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "offset_param",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "limit_param",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "page_size",
                  "type": "int",
                  "line": 29
                },
                {
                  "name": "cursor_field",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "response_format",
                  "type": "Literal['json', 'xml', 'csv']",
                  "line": 33
                },
                {
                  "name": "results_field",
                  "type": "Optional[str]",
                  "line": 34
                },
                {
                  "name": "data_key",
                  "type": "Optional[str]",
                  "line": 37
                },
                {
                  "name": "id_field",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "envelope_excludes",
                  "type": "list[str]",
                  "line": 39
                },
                {
                  "name": "since_field",
                  "type": "Optional[str]",
                  "line": 42
                },
                {
                  "name": "since_format",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "max_records",
                  "type": "int",
                  "line": 46
                },
                {
                  "name": "max_response_bytes",
                  "type": "int",
                  "line": 47
                }
              ],
              "line": 5
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/department.py",
          "sha256": "5e45ab7a46abbb6a40e6c7d22b928aa65bdc0fabab5a424ee988fd31ec672c30",
          "bytes": 486,
          "routes": [],
          "models": [
            {
              "name": "DepartmentCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 7
                },
                {
                  "name": "code",
                  "type": "str",
                  "line": 8
                },
                {
                  "name": "contact_email",
                  "type": "str | None",
                  "line": 9
                }
              ],
              "line": 6
            },
            {
              "name": "DepartmentRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 13
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "code",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "contact_email",
                  "type": "str | None",
                  "line": 16
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 17
                }
              ],
              "line": 12
            },
            {
              "name": "DepartmentUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str | None",
                  "line": 22
                },
                {
                  "name": "code",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "contact_email",
                  "type": "str | None",
                  "line": 24
                }
              ],
              "line": 21
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/document.py",
          "sha256": "372c267701130f9e9a3e73833b81514f2d8753abcfe91f5f546ce919534b180c",
          "bytes": 3191,
          "routes": [],
          "models": [
            {
              "name": "DataSourceCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 8
                },
                {
                  "name": "source_type",
                  "type": "SourceType",
                  "line": 9
                },
                {
                  "name": "connection_config",
                  "type": "dict",
                  "line": 10
                },
                {
                  "name": "sync_schedule",
                  "type": "str | None",
                  "line": 11
                },
                {
                  "name": "schedule_enabled",
                  "type": "bool",
                  "line": 12
                }
              ],
              "line": 7
            },
            {
              "name": "DataSourceRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 25
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "source_type",
                  "type": "SourceType",
                  "line": 27
                },
                {
                  "name": "sync_schedule",
                  "type": "str | None",
                  "line": 28
                },
                {
                  "name": "schedule_enabled",
                  "type": "bool",
                  "line": 29
                },
                {
                  "name": "next_sync_at",
                  "type": "datetime | None",
                  "line": 30
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 31
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID",
                  "line": 32
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 33
                },
                {
                  "name": "last_ingestion_at",
                  "type": "datetime | None",
                  "line": 34
                },
                {
                  "name": "last_sync_at",
                  "type": "datetime | None",
                  "line": 35
                },
                {
                  "name": "last_sync_status",
                  "type": "str | None",
                  "line": 36
                },
                {
                  "name": "last_error_message",
                  "type": "str | None",
                  "line": 37
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "int",
                  "line": 38
                },
                {
                  "name": "sync_paused",
                  "type": "bool",
                  "line": 39
                },
                {
                  "name": "health_status",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "active_failure_count",
                  "type": "int",
                  "line": 41
                },
                {
                  "name": "connector_type",
                  "type": "str | None",
                  "line": 42
                },
                {
                  "name": "updated_at",
                  "type": "datetime | None",
                  "line": 43
                }
              ],
              "line": 23
            },
            {
              "name": "DataSourceAdminRead",
              "bases": [
                "DataSourceRead"
              ],
              "fields": [
                {
                  "name": "connection_config",
                  "type": "dict",
                  "line": 54
                }
              ],
              "line": 52
            },
            {
              "name": "DataSourceUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str | None",
                  "line": 58
                },
                {
                  "name": "connection_config",
                  "type": "dict | None",
                  "line": 59
                },
                {
                  "name": "sync_schedule",
                  "type": "str | None",
                  "line": 60
                },
                {
                  "name": "schedule_enabled",
                  "type": "bool | None",
                  "line": 61
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 62
                }
              ],
              "line": 57
            },
            {
              "name": "DocumentRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 74
                },
                {
                  "name": "source_id",
                  "type": "uuid.UUID",
                  "line": 75
                },
                {
                  "name": "source_path",
                  "type": "str",
                  "line": 76
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 77
                },
                {
                  "name": "file_type",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "file_hash",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "file_size",
                  "type": "int",
                  "line": 80
                },
                {
                  "name": "ingestion_status",
                  "type": "IngestionStatus",
                  "line": 81
                },
                {
                  "name": "ingestion_error",
                  "type": "str | None",
                  "line": 82
                },
                {
                  "name": "chunk_count",
                  "type": "int",
                  "line": 83
                },
                {
                  "name": "ingested_at",
                  "type": "datetime | None",
                  "line": 84
                },
                {
                  "name": "connector_type",
                  "type": "str | None",
                  "line": 85
                },
                {
                  "name": "updated_at",
                  "type": "datetime | None",
                  "line": 86
                }
              ],
              "line": 73
            },
            {
              "name": "DocumentChunkRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 91
                },
                {
                  "name": "document_id",
                  "type": "uuid.UUID",
                  "line": 92
                },
                {
                  "name": "chunk_index",
                  "type": "int",
                  "line": 93
                },
                {
                  "name": "content_text",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "token_count",
                  "type": "int",
                  "line": 95
                },
                {
                  "name": "page_number",
                  "type": "int | None",
                  "line": 96
                }
              ],
              "line": 90
            },
            {
              "name": "IngestionStats",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "total_sources",
                  "type": "int",
                  "line": 101
                },
                {
                  "name": "active_sources",
                  "type": "int",
                  "line": 102
                },
                {
                  "name": "total_documents",
                  "type": "int",
                  "line": 103
                },
                {
                  "name": "documents_by_status",
                  "type": "dict[str, int]",
                  "line": 104
                },
                {
                  "name": "total_chunks",
                  "type": "int",
                  "line": 105
                }
              ],
              "line": 100
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/exemption.py",
          "sha256": "ecdb2535bcbd322b3e356d21207c59f461b83dbfc7e1bb5e13e30322698f24a4",
          "bytes": 2352,
          "routes": [],
          "models": [
            {
              "name": "ExemptionRuleCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "state_code",
                  "type": "str",
                  "line": 9
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "rule_type",
                  "type": "RuleType",
                  "line": 11
                },
                {
                  "name": "rule_definition",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 13
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "line": 14
                }
              ],
              "line": 8
            },
            {
              "name": "ExemptionRuleRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 18
                },
                {
                  "name": "state_code",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "rule_type",
                  "type": "RuleType",
                  "line": 21
                },
                {
                  "name": "rule_definition",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "line": 24
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 25
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID",
                  "line": 26
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 27
                }
              ],
              "line": 17
            },
            {
              "name": "ExemptionRuleUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "rule_definition",
                  "type": "str | None",
                  "line": 32
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 33
                },
                {
                  "name": "enabled",
                  "type": "bool | None",
                  "line": 34
                }
              ],
              "line": 31
            },
            {
              "name": "ExemptionFlagRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 38
                },
                {
                  "name": "chunk_id",
                  "type": "uuid.UUID",
                  "line": 39
                },
                {
                  "name": "rule_id",
                  "type": "uuid.UUID | None",
                  "line": 40
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 41
                },
                {
                  "name": "category",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "matched_text",
                  "type": "str | None",
                  "line": 43
                },
                {
                  "name": "confidence",
                  "type": "float",
                  "line": 44
                },
                {
                  "name": "status",
                  "type": "FlagStatus",
                  "line": 45
                },
                {
                  "name": "reviewed_by",
                  "type": "uuid.UUID | None",
                  "line": 46
                },
                {
                  "name": "reviewed_at",
                  "type": "datetime | None",
                  "line": 47
                },
                {
                  "name": "review_reason",
                  "type": "str | None",
                  "line": 48
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 49
                }
              ],
              "line": 37
            },
            {
              "name": "ExemptionFlagReview",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "FlagStatus",
                  "line": 54
                },
                {
                  "name": "review_reason",
                  "type": "str | None",
                  "line": 55
                }
              ],
              "line": 53
            },
            {
              "name": "DisclosureTemplateCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "template_type",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "state_code",
                  "type": "str | None",
                  "line": 60
                },
                {
                  "name": "content",
                  "type": "str",
                  "line": 61
                }
              ],
              "line": 58
            },
            {
              "name": "DisclosureTemplateRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 65
                },
                {
                  "name": "template_type",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "state_code",
                  "type": "str | None",
                  "line": 67
                },
                {
                  "name": "content",
                  "type": "str",
                  "line": 68
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 69
                },
                {
                  "name": "updated_by",
                  "type": "uuid.UUID",
                  "line": 70
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 71
                }
              ],
              "line": 64
            },
            {
              "name": "ExemptionDashboard",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "total_flags",
                  "type": "int",
                  "line": 76
                },
                {
                  "name": "by_status",
                  "type": "dict[str, int]",
                  "line": 77
                },
                {
                  "name": "by_category",
                  "type": "dict[str, int]",
                  "line": 78
                },
                {
                  "name": "acceptance_rate",
                  "type": "float",
                  "line": 79
                },
                {
                  "name": "total_rules",
                  "type": "int",
                  "line": 80
                },
                {
                  "name": "active_rules",
                  "type": "int",
                  "line": 81
                }
              ],
              "line": 75
            },
            {
              "name": "ExemptionAccuracyReport",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "category",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "total_flags",
                  "type": "int",
                  "line": 86
                },
                {
                  "name": "accepted",
                  "type": "int",
                  "line": 87
                },
                {
                  "name": "rejected",
                  "type": "int",
                  "line": 88
                },
                {
                  "name": "pending",
                  "type": "int",
                  "line": 89
                },
                {
                  "name": "acceptance_rate",
                  "type": "float",
                  "line": 90
                }
              ],
              "line": 84
            },
            {
              "name": "DisclosureTemplateRendered",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 94
                },
                {
                  "name": "template_type",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "rendered_content",
                  "type": "str",
                  "line": 96
                },
                {
                  "name": "has_unresolved_variables",
                  "type": "bool",
                  "line": 97
                }
              ],
              "line": 93
            },
            {
              "name": "DisclosureTemplateUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "content",
                  "type": "str | None",
                  "line": 101
                },
                {
                  "name": "state_code",
                  "type": "str | None",
                  "line": 102
                }
              ],
              "line": 100
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/fee_schedule.py",
          "sha256": "132fca7b2f2484f924464e8c01bec43674d8a6fc579202849cf73e43630adf70",
          "bytes": 700,
          "routes": [],
          "models": [
            {
              "name": "FeeScheduleCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 7
                },
                {
                  "name": "fee_type",
                  "type": "str",
                  "line": 8
                },
                {
                  "name": "amount",
                  "type": "float",
                  "line": 9
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 10
                },
                {
                  "name": "effective_date",
                  "type": "date | None",
                  "line": 11
                }
              ],
              "line": 6
            },
            {
              "name": "FeeScheduleRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 15
                },
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "fee_type",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "amount",
                  "type": "float",
                  "line": 18
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 19
                },
                {
                  "name": "effective_date",
                  "type": "date | None",
                  "line": 20
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID | None",
                  "line": 21
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 22
                }
              ],
              "line": 14
            },
            {
              "name": "FeeScheduleUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "fee_type",
                  "type": "str | None",
                  "line": 27
                },
                {
                  "name": "amount",
                  "type": "float | None",
                  "line": 28
                },
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 29
                },
                {
                  "name": "effective_date",
                  "type": "date | None",
                  "line": 30
                }
              ],
              "line": 26
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/notifications.py",
          "sha256": "61d74c4b0977679c0739a374997ae5d49792d47f0f469baf6c422b77fd993fa3",
          "bytes": 928,
          "routes": [],
          "models": [
            {
              "name": "NotificationTemplateCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 8
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 9
                },
                {
                  "name": "subject_template",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "body_template",
                  "type": "str",
                  "line": 11
                }
              ],
              "line": 7
            },
            {
              "name": "NotificationTemplateRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 17
                },
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "subject_template",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "body_template",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 22
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 23
                }
              ],
              "line": 14
            },
            {
              "name": "NotificationTemplateUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "subject_template",
                  "type": "str | None",
                  "line": 27
                },
                {
                  "name": "body_template",
                  "type": "str | None",
                  "line": 28
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 29
                }
              ],
              "line": 26
            },
            {
              "name": "NotificationLogRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 35
                },
                {
                  "name": "template_id",
                  "type": "uuid.UUID | None",
                  "line": 36
                },
                {
                  "name": "recipient_email",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID | None",
                  "line": 38
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "sent_at",
                  "type": "datetime | None",
                  "line": 41
                },
                {
                  "name": "error_message",
                  "type": "str | None",
                  "line": 42
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 43
                }
              ],
              "line": 32
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/request.py",
          "sha256": "d98eea27470287dc25498bce26cd6e2594b812585113428b8647d8f5ce1e0980",
          "bytes": 4229,
          "routes": [],
          "models": [
            {
              "name": "RequestCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "requester_name",
                  "type": "str",
                  "line": 9
                },
                {
                  "name": "requester_email",
                  "type": "str | None",
                  "line": 10
                },
                {
                  "name": "requester_phone",
                  "type": "str | None",
                  "line": 11
                },
                {
                  "name": "requester_type",
                  "type": "str | None",
                  "line": 12
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "statutory_deadline",
                  "type": "datetime | None",
                  "line": 14
                },
                {
                  "name": "priority",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "scope_assessment",
                  "type": "str | None",
                  "line": 16
                },
                {
                  "name": "department_id",
                  "type": "uuid.UUID | None",
                  "line": 17
                }
              ],
              "line": 8
            },
            {
              "name": "RequestRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 21
                },
                {
                  "name": "requester_name",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "requester_email",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "requester_phone",
                  "type": "str | None",
                  "line": 24
                },
                {
                  "name": "requester_type",
                  "type": "str | None",
                  "line": 25
                },
                {
                  "name": "date_received",
                  "type": "datetime",
                  "line": 26
                },
                {
                  "name": "statutory_deadline",
                  "type": "datetime | None",
                  "line": 27
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "status",
                  "type": "RequestStatus",
                  "line": 29
                },
                {
                  "name": "assigned_to",
                  "type": "uuid.UUID | None",
                  "line": 30
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID | None",
                  "line": 31
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 32
                },
                {
                  "name": "response_draft",
                  "type": "str | None",
                  "line": 33
                },
                {
                  "name": "review_notes",
                  "type": "str | None",
                  "line": 34
                },
                {
                  "name": "department_id",
                  "type": "uuid.UUID | None",
                  "line": 35
                },
                {
                  "name": "estimated_fee",
                  "type": "float | None",
                  "line": 36
                },
                {
                  "name": "fee_status",
                  "type": "str | None",
                  "line": 37
                },
                {
                  "name": "fee_waiver_requested",
                  "type": "bool",
                  "line": 38
                },
                {
                  "name": "priority",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "scope_assessment",
                  "type": "str | None",
                  "line": 40
                },
                {
                  "name": "closed_at",
                  "type": "datetime | None",
                  "line": 41
                },
                {
                  "name": "closure_reason",
                  "type": "str | None",
                  "line": 42
                }
              ],
              "line": 20
            },
            {
              "name": "RequestUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "description",
                  "type": "str | None",
                  "line": 48
                },
                {
                  "name": "status",
                  "type": "RequestStatus | None",
                  "line": 49
                },
                {
                  "name": "assigned_to",
                  "type": "uuid.UUID | None",
                  "line": 50
                },
                {
                  "name": "response_draft",
                  "type": "str | None",
                  "line": 51
                },
                {
                  "name": "statutory_deadline",
                  "type": "datetime | None",
                  "line": 52
                },
                {
                  "name": "scope_assessment",
                  "type": "str | None",
                  "line": 53
                }
              ],
              "line": 47
            },
            {
              "name": "RequestDocumentAdd",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "document_id",
                  "type": "uuid.UUID",
                  "line": 57
                },
                {
                  "name": "relevance_note",
                  "type": "str | None",
                  "line": 58
                }
              ],
              "line": 56
            },
            {
              "name": "RequestDocumentRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 62
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 63
                },
                {
                  "name": "document_id",
                  "type": "uuid.UUID",
                  "line": 64
                },
                {
                  "name": "relevance_note",
                  "type": "str | None",
                  "line": 65
                },
                {
                  "name": "exemption_flags",
                  "type": "dict | None",
                  "line": 66
                },
                {
                  "name": "inclusion_status",
                  "type": "InclusionStatus",
                  "line": 67
                },
                {
                  "name": "attached_at",
                  "type": "datetime",
                  "line": 68
                },
                {
                  "name": "attached_by",
                  "type": "uuid.UUID",
                  "line": 69
                }
              ],
              "line": 61
            },
            {
              "name": "RequestStats",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "total_requests",
                  "type": "int",
                  "line": 75
                },
                {
                  "name": "by_status",
                  "type": "dict[str, int]",
                  "line": 76
                },
                {
                  "name": "approaching_deadline",
                  "type": "int",
                  "line": 77
                },
                {
                  "name": "overdue",
                  "type": "int",
                  "line": 78
                }
              ],
              "line": 74
            },
            {
              "name": "TimelineEventCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "internal_note",
                  "type": "str | None",
                  "line": 84
                }
              ],
              "line": 81
            },
            {
              "name": "TimelineEventRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 89
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 90
                },
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "actor_id",
                  "type": "uuid.UUID | None",
                  "line": 92
                },
                {
                  "name": "actor_role",
                  "type": "str | None",
                  "line": 93
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "internal_note",
                  "type": "str | None",
                  "line": 95
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 96
                }
              ],
              "line": 87
            },
            {
              "name": "MessageCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "message_text",
                  "type": "str",
                  "line": 100
                },
                {
                  "name": "is_internal",
                  "type": "bool",
                  "line": 101
                }
              ],
              "line": 99
            },
            {
              "name": "MessageRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 106
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 107
                },
                {
                  "name": "sender_type",
                  "type": "str",
                  "line": 108
                },
                {
                  "name": "sender_id",
                  "type": "uuid.UUID | None",
                  "line": 109
                },
                {
                  "name": "message_text",
                  "type": "str",
                  "line": 110
                },
                {
                  "name": "is_internal",
                  "type": "bool",
                  "line": 111
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 112
                }
              ],
              "line": 104
            },
            {
              "name": "FeeLineItemCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "description",
                  "type": "str",
                  "line": 116
                },
                {
                  "name": "quantity",
                  "type": "int",
                  "line": 117
                },
                {
                  "name": "unit_price",
                  "type": "float",
                  "line": 118
                },
                {
                  "name": "fee_schedule_id",
                  "type": "uuid.UUID | None",
                  "line": 119
                }
              ],
              "line": 115
            },
            {
              "name": "FeeLineItemRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 124
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 125
                },
                {
                  "name": "fee_schedule_id",
                  "type": "uuid.UUID | None",
                  "line": 126
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 127
                },
                {
                  "name": "quantity",
                  "type": "int",
                  "line": 128
                },
                {
                  "name": "unit_price",
                  "type": "float",
                  "line": 129
                },
                {
                  "name": "total",
                  "type": "float",
                  "line": 130
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 131
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 132
                }
              ],
              "line": 122
            },
            {
              "name": "ResponseLetterCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "template_id",
                  "type": "uuid.UUID | None",
                  "line": 139
                }
              ],
              "line": 138
            },
            {
              "name": "ResponseLetterRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 144
                },
                {
                  "name": "request_id",
                  "type": "uuid.UUID",
                  "line": 145
                },
                {
                  "name": "template_id",
                  "type": "uuid.UUID | None",
                  "line": 146
                },
                {
                  "name": "generated_content",
                  "type": "str",
                  "line": 147
                },
                {
                  "name": "edited_content",
                  "type": "str | None",
                  "line": 148
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 149
                },
                {
                  "name": "generated_by",
                  "type": "uuid.UUID | None",
                  "line": 150
                },
                {
                  "name": "approved_by",
                  "type": "uuid.UUID | None",
                  "line": 151
                },
                {
                  "name": "sent_at",
                  "type": "datetime | None",
                  "line": 152
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 153
                }
              ],
              "line": 142
            },
            {
              "name": "ResponseLetterUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "edited_content",
                  "type": "str | None",
                  "line": 157
                },
                {
                  "name": "status",
                  "type": "str | None",
                  "line": 158
                }
              ],
              "line": 156
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/search.py",
          "sha256": "13a5c1913290f2d1b4c9447c3b3d4d1046038e146c2b11a97a03e1bb895b3015",
          "bytes": 1150,
          "routes": [],
          "models": [
            {
              "name": "SearchRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 7
                },
                {
                  "name": "session_id",
                  "type": "uuid.UUID | None",
                  "line": 8
                },
                {
                  "name": "filters",
                  "type": "dict | None",
                  "line": 9
                },
                {
                  "name": "limit",
                  "type": "int",
                  "line": 10
                },
                {
                  "name": "synthesize",
                  "type": "bool",
                  "line": 11
                }
              ],
              "line": 6
            },
            {
              "name": "SearchResultItem",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "chunk_id",
                  "type": "uuid.UUID",
                  "line": 15
                },
                {
                  "name": "document_id",
                  "type": "uuid.UUID",
                  "line": 16
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "file_type",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "source_path",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "page_number",
                  "type": "int | None",
                  "line": 20
                },
                {
                  "name": "content_text",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "similarity_score",
                  "type": "float",
                  "line": 22
                },
                {
                  "name": "rank",
                  "type": "int",
                  "line": 23
                }
              ],
              "line": 14
            },
            {
              "name": "SearchResponse",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "query_id",
                  "type": "uuid.UUID",
                  "line": 29
                },
                {
                  "name": "session_id",
                  "type": "uuid.UUID",
                  "line": 30
                },
                {
                  "name": "query_text",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "results",
                  "type": "list[SearchResultItem]",
                  "line": 32
                },
                {
                  "name": "results_count",
                  "type": "int",
                  "line": 33
                },
                {
                  "name": "synthesized_answer",
                  "type": "str | None",
                  "line": 34
                },
                {
                  "name": "ai_generated",
                  "type": "bool",
                  "line": 35
                }
              ],
              "line": 28
            },
            {
              "name": "SearchSessionRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 39
                },
                {
                  "name": "user_id",
                  "type": "uuid.UUID",
                  "line": 40
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 41
                },
                {
                  "name": "queries",
                  "type": "list[dict]",
                  "line": 42
                }
              ],
              "line": 38
            },
            {
              "name": "SearchFilterOptions",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "file_types",
                  "type": "list[str]",
                  "line": 48
                },
                {
                  "name": "source_names",
                  "type": "list[str]",
                  "line": 49
                },
                {
                  "name": "departments",
                  "type": "list[dict]",
                  "line": 50
                },
                {
                  "name": "date_range",
                  "type": "dict | None",
                  "line": 51
                }
              ],
              "line": 47
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/service_account.py",
          "sha256": "0fe0918fc3daa11c37d371119d8a875c6d9061f82f005517efade03b19ec4210",
          "bytes": 721,
          "routes": [],
          "models": [
            {
              "name": "ServiceAccountCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "role",
                  "type": "UserRole",
                  "line": 11
                }
              ],
              "line": 9
            },
            {
              "name": "ServiceAccountRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 15
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "role",
                  "type": "UserRole",
                  "line": 17
                },
                {
                  "name": "created_by",
                  "type": "uuid.UUID",
                  "line": 18
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 19
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 20
                }
              ],
              "line": 14
            },
            {
              "name": "ServiceAccountCreated",
              "bases": [
                "ServiceAccountRead"
              ],
              "fields": [
                {
                  "name": "api_key",
                  "type": "str",
                  "line": 27
                }
              ],
              "line": 25
            },
            {
              "name": "ServiceAccountUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "role",
                  "type": "UserRole | None",
                  "line": 31
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 32
                }
              ],
              "line": 30
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/sync_failure.py",
          "sha256": "7d0f1052aba113868dc3439ef78b85b8d9941cf243eb7224ca12e1d9019f9971",
          "bytes": 905,
          "routes": [],
          "models": [
            {
              "name": "SyncFailureRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 9
                },
                {
                  "name": "source_id",
                  "type": "uuid.UUID",
                  "line": 10
                },
                {
                  "name": "source_path",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "error_message",
                  "type": "str | None",
                  "line": 12
                },
                {
                  "name": "error_class",
                  "type": "str | None",
                  "line": 13
                },
                {
                  "name": "http_status_code",
                  "type": "int | None",
                  "line": 14
                },
                {
                  "name": "retry_count",
                  "type": "int",
                  "line": 15
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "first_failed_at",
                  "type": "datetime",
                  "line": 17
                },
                {
                  "name": "last_retried_at",
                  "type": "datetime | None",
                  "line": 18
                },
                {
                  "name": "dismissed_at",
                  "type": "datetime | None",
                  "line": 19
                },
                {
                  "name": "dismissed_by",
                  "type": "uuid.UUID | None",
                  "line": 20
                }
              ],
              "line": 8
            },
            {
              "name": "SyncRunLogRead",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "uuid.UUID",
                  "line": 25
                },
                {
                  "name": "source_id",
                  "type": "uuid.UUID",
                  "line": 26
                },
                {
                  "name": "started_at",
                  "type": "datetime",
                  "line": 27
                },
                {
                  "name": "finished_at",
                  "type": "datetime | None",
                  "line": 28
                },
                {
                  "name": "status",
                  "type": "str | None",
                  "line": 29
                },
                {
                  "name": "records_attempted",
                  "type": "int",
                  "line": 30
                },
                {
                  "name": "records_succeeded",
                  "type": "int",
                  "line": 31
                },
                {
                  "name": "records_failed",
                  "type": "int",
                  "line": 32
                },
                {
                  "name": "error_summary",
                  "type": "str | None",
                  "line": 33
                }
              ],
              "line": 24
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/schemas/user.py",
          "sha256": "313f8c6927c142239ccfd22d5960378a77bb973a84e7c936052d4a77ae3507b5",
          "bytes": 3200,
          "routes": [],
          "models": [
            {
              "name": "UserRead",
              "bases": [
                "schemas.BaseUser[uuid.UUID]"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "role",
                  "type": "UserRole",
                  "line": 12
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 13
                },
                {
                  "name": "last_login",
                  "type": "datetime | None",
                  "line": 14
                },
                {
                  "name": "must_change_password",
                  "type": "bool",
                  "line": 15
                },
                {
                  "name": "department_id",
                  "type": "uuid.UUID | None",
                  "line": 16
                }
              ],
              "line": 10
            },
            {
              "name": "UserCreate",
              "bases": [
                "schemas.BaseUserCreate"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "role",
                  "type": "UserRole",
                  "line": 37
                }
              ],
              "line": 19
            },
            {
              "name": "AdminUserCreate",
              "bases": [
                "schemas.BaseUserCreate"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "role",
                  "type": "UserRole",
                  "line": 57
                },
                {
                  "name": "department_id",
                  "type": "uuid.UUID | None",
                  "line": 58
                }
              ],
              "line": 54
            },
            {
              "name": "UserUpdate",
              "bases": [
                "schemas.BaseUserUpdate"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "str | None",
                  "line": 62
                },
                {
                  "name": "role",
                  "type": "UserRole | None",
                  "line": 63
                }
              ],
              "line": 61
            },
            {
              "name": "UserSelfUpdate",
              "bases": [
                "schemas.BaseUserUpdate"
              ],
              "fields": [
                {
                  "name": "full_name",
                  "type": "str | None",
                  "line": 73
                }
              ],
              "line": 66
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/search/__init__.py",
          "sha256": "6d5a53e92963972bce100511001cfc78b65a347390a47b4273c0c62f7a88ccc9",
          "bytes": 24,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/search/engine.py",
          "sha256": "64f383a27cdafc56c200a352fa29dc9548fda0bbf61e1a45a67fb80f649d48ec",
          "bytes": 5570,
          "routes": [],
          "models": [
            {
              "name": "SearchHit",
              "bases": [],
              "fields": [
                {
                  "name": "chunk_id",
                  "type": "uuid.UUID",
                  "line": 14
                },
                {
                  "name": "document_id",
                  "type": "uuid.UUID",
                  "line": 15
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "file_type",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "source_path",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "page_number",
                  "type": "int | None",
                  "line": 19
                },
                {
                  "name": "content_text",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "similarity_score",
                  "type": "float",
                  "line": 21
                },
                {
                  "name": "rank",
                  "type": "int",
                  "line": 22
                }
              ],
              "line": 13
            }
          ],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/search/router.py",
          "sha256": "52942b33b4869a3c22ed9417723e1854a69161bf4dbaa4deeeaaad16cdd4eb65",
          "bytes": 10957,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/query",
              "function": "execute_search",
              "line": 28
            },
            {
              "method": "GET",
              "declared_path": "/sessions",
              "function": "list_sessions",
              "line": 141
            },
            {
              "method": "GET",
              "declared_path": "/sessions/{session_id}",
              "function": "get_session",
              "line": 191
            },
            {
              "method": "GET",
              "declared_path": "/filters",
              "function": "get_filter_options",
              "line": 226
            },
            {
              "method": "GET",
              "declared_path": "/export",
              "function": "export_search_results",
              "line": 270
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/search/synthesizer.py",
          "sha256": "a29ee927d6f8edf0cab05acd4d3dd523455e2eabd6f500af164d31e0372f73f8",
          "bytes": 1908,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/security/__init__.py",
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "bytes": 0,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/security/at_rest.py",
          "sha256": "63ecb19f92893043fd7ee5619a8ef86a8f37642cd009f4660288e9ef4f2852dd",
          "bytes": 1021,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/security/host_validator.py",
          "sha256": "dd87585491ae8c118c2cd80127a297bc28e60e9015fd573251af393566b1320e",
          "bytes": 710,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/seed/__init__.py",
          "sha256": "bcc25a55282ceffdac66ff70179d6a3dd07cb4333c89d568f98cc2204321e1b0",
          "bytes": 317,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/seed/first_boot.py",
          "sha256": "40b50e2e4b7f6d90f4ca2ad8fc753e4e2cf32a72b74580136ee570a5d19369ac",
          "bytes": 9964,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/service_accounts/__init__.py",
          "sha256": "2fa2428653459da5eb92239760502d74190c9183dcade5b408ec89f25bdcc040",
          "bytes": 130,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/service_accounts/router.py",
          "sha256": "a23f0364a75cfe413b75afc99825023a5e04649bc59f0be8c722da33da7046a3",
          "bytes": 3582,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/",
              "function": "create_service_account",
              "line": 29
            },
            {
              "method": "GET",
              "declared_path": "/",
              "function": "list_service_accounts",
              "line": 72
            },
            {
              "method": "PATCH",
              "declared_path": "/{account_id}",
              "function": "update_service_account",
              "line": 81
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "backend/townlight_records/worker.py",
          "sha256": "f87595f97cbc50b71ec7f8bbef0733410688b739f5e3fe842212ac9ea4fd4053",
          "bytes": 700,
          "routes": [],
          "models": [],
          "configuration": []
        }
      ]
    },
    "meetings": {
      "repository": "townlight/meetings",
      "repository_head": "581ca739e03e7a4d1161cd8c5edf1d36115f9ee6",
      "working_tree_modified": true,
      "principal_import": "townlight_meetings",
      "source": [
        {
          "source": "townlight_meetings/__init__.py",
          "sha256": "8222ea6324b101351522144baf63d9cf9359781fe8da2a5b591cc84da16846f5",
          "bytes": 68,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/agenda_intake.py",
          "sha256": "1f7832c7036b2563762bec042f226c5e0abe69d5f02e34fd7de141813b6f85fa",
          "bytes": 11673,
          "routes": [],
          "models": [
            {
              "name": "AgendaIntakeItem",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "department_name",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "submitted_by",
                  "type": "str",
                  "line": 57
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "readiness_status",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "source_references",
                  "type": "list[dict]",
                  "line": 61
                },
                {
                  "name": "reviewer",
                  "type": "str | None",
                  "line": 62
                },
                {
                  "name": "review_notes",
                  "type": "str | None",
                  "line": 63
                },
                {
                  "name": "promoted_agenda_item_id",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "promoted_at",
                  "type": "datetime | None",
                  "line": 65
                },
                {
                  "name": "promotion_audit_hash",
                  "type": "str | None",
                  "line": 66
                },
                {
                  "name": "last_audit_hash",
                  "type": "str",
                  "line": 67
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 68
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 69
                }
              ],
              "line": 51
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/agenda_lifecycle.py",
          "sha256": "aae33ddd60b2d18abfdc7cb83ab5eef396b68c882676da3e2fe0eb74d41f23a2",
          "bytes": 16632,
          "routes": [],
          "models": [
            {
              "name": "TransitionResult",
              "bases": [],
              "fields": [
                {
                  "name": "allowed",
                  "type": "bool",
                  "line": 40
                },
                {
                  "name": "http_status",
                  "type": "int",
                  "line": 41
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "audit_entry",
                  "type": "dict[str, object]",
                  "line": 44
                }
              ],
              "line": 39
            },
            {
              "name": "AgendaItemRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "department_name",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "audit_entries",
                  "type": "list[dict[str, object]]",
                  "line": 53
                },
                {
                  "name": "meeting_id",
                  "type": "str | None",
                  "line": 54
                }
              ],
              "line": 48
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/cc7_completeness.py",
          "sha256": "01318cfddf4cd5a50515e5243299625c6f88c7cfdf39c4f798fa03f68049ac49",
          "bytes": 6539,
          "routes": [],
          "models": [
            {
              "name": "ApiCategory",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "paths",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "protected",
                  "type": "bool",
                  "line": 16
                },
                {
                  "name": "auth_scope",
                  "type": "str",
                  "line": 17
                }
              ],
              "line": 12
            },
            {
              "name": "FrontendPage",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "surface",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "evidence_states",
                  "type": "tuple[str, ...]",
                  "line": 25
                }
              ],
              "line": 21
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/connector_import_sync.py",
          "sha256": "97fa12b052cd8eab7e337a3ddfb945677d7c6345f2a9cd7a2152509183afc0f0",
          "bytes": 4664,
          "routes": [],
          "models": [
            {
              "name": "ImportAttempt",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "payload_path",
                  "type": "Path",
                  "line": 16
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 17
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "normalized",
                  "type": "dict[str, Any] | None",
                  "line": 20
                }
              ],
              "line": 14
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/connectors.py",
          "sha256": "0e2e3b30400b2dda8d7d216a4396634efbdabbfa76f64adcda7d003beaf94af5",
          "bytes": 570,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/demo_seed.py",
          "sha256": "cfae73282a8bf76ee27b79693a724d383afef9617e590189b5678a92c01809a3",
          "bytes": 15324,
          "routes": [],
          "models": [
            {
              "name": "DemoSeedSummary",
              "bases": [
                "TypedDict"
              ],
              "fields": [
                {
                  "name": "city",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "meeting_body_count",
                  "type": "int",
                  "line": 39
                },
                {
                  "name": "meeting_count",
                  "type": "int",
                  "line": 40
                },
                {
                  "name": "agenda_intake_count",
                  "type": "int",
                  "line": 41
                },
                {
                  "name": "packet_count",
                  "type": "int",
                  "line": 42
                },
                {
                  "name": "notice_count",
                  "type": "int",
                  "line": 43
                },
                {
                  "name": "motion_count",
                  "type": "int",
                  "line": 44
                },
                {
                  "name": "minutes_draft_count",
                  "type": "int",
                  "line": 45
                },
                {
                  "name": "public_record_count",
                  "type": "int",
                  "line": 46
                },
                {
                  "name": "primary_meeting_id",
                  "type": "str",
                  "line": 47
                }
              ],
              "line": 35
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/desktop_delivery.py",
          "sha256": "88a1c62a24a3e6d16b3ade8d2f4f6f0fcc9c9efd6eeee316651f2d76f496a0cd",
          "bytes": 5156,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/integration_contracts.py",
          "sha256": "1d674363f0d07151c19594f8f2fbaa25997a35cad27749508b744238a5e838dc",
          "bytes": 16241,
          "routes": [],
          "models": [
            {
              "name": "IntegrationCheck",
              "bases": [],
              "fields": [
                {
                  "name": "contract_id",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 22
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 24
                }
              ],
              "line": 17
            },
            {
              "name": "IntegrationContract",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "status",
                  "type": "IntegrationStatus",
                  "line": 42
                },
                {
                  "name": "mode",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "proof_model",
                  "type": "Literal['live_wire_validation', 'in_process_boundary_validation']",
                  "line": 44
                },
                {
                  "name": "dependent_module_required",
                  "type": "bool",
                  "line": 45
                },
                {
                  "name": "network_calls",
                  "type": "bool",
                  "line": 46
                },
                {
                  "name": "contract_artifact",
                  "type": "str",
                  "line": 47
                },
                {
                  "name": "supported_operations",
                  "type": "tuple[str, ...]",
                  "line": 48
                },
                {
                  "name": "absent_dependency_behavior",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "operator_fix",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "adversarial_scenarios",
                  "type": "tuple[str, ...]",
                  "line": 51
                }
              ],
              "line": 37
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/main.py",
          "sha256": "411f2e69ac62e75e1b680ed7fd2954b159f6d0db1919da6ccceae9b646fdcb09",
          "bytes": 148590,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 492
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 550
            },
            {
              "method": "GET",
              "declared_path": "/favicon.ico",
              "function": "favicon",
              "line": 561
            },
            {
              "method": "GET",
              "declared_path": "/staff",
              "function": "staff_dashboard",
              "line": 567
            },
            {
              "method": "GET",
              "declared_path": "/public",
              "function": "public_portal",
              "line": 617
            },
            {
              "method": "GET",
              "declared_path": "/staff/session",
              "function": "staff_session",
              "line": 623
            },
            {
              "method": "GET",
              "declared_path": "/staff/login",
              "function": "staff_login",
              "line": 705
            },
            {
              "method": "GET",
              "declared_path": "/staff/oidc/callback",
              "function": "staff_oidc_callback",
              "line": 763
            },
            {
              "method": "GET",
              "declared_path": "/staff/logout",
              "function": "staff_logout",
              "line": 861
            },
            {
              "method": "POST",
              "declared_path": "/staff/logout",
              "function": "staff_logout",
              "line": 861
            },
            {
              "method": "GET",
              "declared_path": "/staff/auth-readiness",
              "function": "staff_auth_readiness",
              "line": 873
            },
            {
              "method": "GET",
              "declared_path": "/admin/config",
              "function": "admin_config",
              "line": 935
            },
            {
              "method": "GET",
              "declared_path": "/integrations/readiness",
              "function": "integrations_readiness",
              "line": 968
            },
            {
              "method": "GET",
              "declared_path": "/admin/prompts",
              "function": "admin_prompts",
              "line": 975
            },
            {
              "method": "POST",
              "declared_path": "/agenda-items",
              "function": "create_agenda_item",
              "line": 1009
            },
            {
              "method": "GET",
              "declared_path": "/agenda-items/{item_id}",
              "function": "get_agenda_item",
              "line": 1018
            },
            {
              "method": "POST",
              "declared_path": "/agenda-items/{item_id}/transitions",
              "function": "transition_agenda_item",
              "line": 1027
            },
            {
              "method": "GET",
              "declared_path": "/agenda-items/{item_id}/audit",
              "function": "get_agenda_item_audit",
              "line": 1058
            },
            {
              "method": "POST",
              "declared_path": "/agenda-intake",
              "function": "submit_agenda_intake_item",
              "line": 1067
            },
            {
              "method": "GET",
              "declared_path": "/agenda-intake",
              "function": "list_agenda_intake_items",
              "line": 1080
            },
            {
              "method": "POST",
              "declared_path": "/agenda-intake/{item_id}/review",
              "function": "review_agenda_intake_item",
              "line": 1093
            },
            {
              "method": "POST",
              "declared_path": "/agenda-intake/{item_id}/promote",
              "function": "promote_agenda_intake_item",
              "line": 1116
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/staff-reports",
              "function": "create_staff_report",
              "line": 1193
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/staff-reports",
              "function": "list_staff_reports",
              "line": 1222
            },
            {
              "method": "POST",
              "declared_path": "/meeting-bodies",
              "function": "create_meeting_body",
              "line": 1246
            },
            {
              "method": "GET",
              "declared_path": "/meeting-bodies",
              "function": "list_meeting_bodies",
              "line": 1257
            },
            {
              "method": "GET",
              "declared_path": "/meeting-bodies/{body_id}",
              "function": "get_meeting_body",
              "line": 1268
            },
            {
              "method": "PATCH",
              "declared_path": "/meeting-bodies/{body_id}",
              "function": "update_meeting_body",
              "line": 1278
            },
            {
              "method": "DELETE",
              "declared_path": "/meeting-bodies/{body_id}",
              "function": "deactivate_meeting_body",
              "line": 1296
            },
            {
              "method": "POST",
              "declared_path": "/meetings",
              "function": "create_meeting",
              "line": 1306
            },
            {
              "method": "GET",
              "declared_path": "/meetings",
              "function": "list_meetings",
              "line": 1322
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}",
              "function": "get_meeting",
              "line": 1329
            },
            {
              "method": "PATCH",
              "declared_path": "/meetings/{meeting_id}",
              "function": "update_meeting_schedule",
              "line": 1338
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/transitions",
              "function": "transition_meeting",
              "line": 1391
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/audit",
              "function": "get_meeting_audit",
              "line": 1424
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/packet-snapshots",
              "function": "create_packet_snapshot",
              "line": 1433
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/packet-snapshots",
              "function": "list_packet_snapshots",
              "line": 1449
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/packet-assemblies",
              "function": "create_packet_assembly_record",
              "line": 1463
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/packet-assemblies",
              "function": "list_packet_assembly_records",
              "line": 1489
            },
            {
              "method": "POST",
              "declared_path": "/packet-assemblies/{record_id}/finalize",
              "function": "finalize_packet_assembly_record",
              "line": 1503
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/export-bundle",
              "function": "create_packet_export_bundle",
              "line": 1524
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/notices/check",
              "function": "check_notice_compliance",
              "line": 1559
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/notice-checklists",
              "function": "create_notice_checklist_record",
              "line": 1577
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/notice-checklists",
              "function": "list_notice_checklist_records",
              "line": 1599
            },
            {
              "method": "POST",
              "declared_path": "/notice-checklists/{record_id}/posting-proof",
              "function": "attach_notice_posting_proof",
              "line": 1613
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/notices/post",
              "function": "post_notice",
              "line": 1635
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/motions",
              "function": "capture_motion",
              "line": 1653
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/motions",
              "function": "list_motions",
              "line": 1668
            },
            {
              "method": "PUT",
              "declared_path": "/motions/{motion_id}",
              "function": "reject_motion_mutation",
              "line": 1683
            },
            {
              "method": "PATCH",
              "declared_path": "/motions/{motion_id}",
              "function": "reject_motion_mutation",
              "line": 1683
            },
            {
              "method": "POST",
              "declared_path": "/motions/{motion_id}/corrections",
              "function": "correct_motion",
              "line": 1697
            },
            {
              "method": "POST",
              "declared_path": "/motions/{motion_id}/votes",
              "function": "capture_vote",
              "line": 1711
            },
            {
              "method": "GET",
              "declared_path": "/motions/{motion_id}/votes",
              "function": "list_votes",
              "line": 1728
            },
            {
              "method": "PUT",
              "declared_path": "/votes/{vote_id}",
              "function": "reject_vote_mutation",
              "line": 1743
            },
            {
              "method": "PATCH",
              "declared_path": "/votes/{vote_id}",
              "function": "reject_vote_mutation",
              "line": 1743
            },
            {
              "method": "POST",
              "declared_path": "/votes/{vote_id}/corrections",
              "function": "correct_vote",
              "line": 1757
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/action-items",
              "function": "create_action_item",
              "line": 1771
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/action-items",
              "function": "list_action_items",
              "line": 1809
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/ordinance-resolution-handoff",
              "function": "create_ordinance_resolution_handoff",
              "line": 2063
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/ordinance-resolution-handoff",
              "function": "list_ordinance_resolution_handoffs",
              "line": 2112
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/ordinance-resolution-handoff/retry",
              "function": "retry_ordinance_resolution_handoff",
              "line": 2125
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/minutes/drafts",
              "function": "create_minutes_draft",
              "line": 2159
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/minutes/ai-assist",
              "function": "create_minutes_ai_assist",
              "line": 2197
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/minutes/drafts",
              "function": "list_minutes_drafts",
              "line": 2243
            },
            {
              "method": "POST",
              "declared_path": "/minutes/{minute_id}/post",
              "function": "reject_automatic_minutes_posting",
              "line": 2257
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/transcripts",
              "function": "create_transcript_record",
              "line": 2271
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/transcripts",
              "function": "list_transcript_records",
              "line": 2295
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/public-record",
              "function": "publish_public_record",
              "line": 2309
            },
            {
              "method": "POST",
              "declared_path": "/imports/{connector_name}/meetings",
              "function": "import_connector_meeting",
              "line": 2347
            },
            {
              "method": "POST",
              "declared_path": "/vendor-live-sync/sources",
              "function": "create_vendor_live_sync_source",
              "line": 2365
            },
            {
              "method": "GET",
              "declared_path": "/vendor-live-sync/sources",
              "function": "list_vendor_live_sync_sources",
              "line": 2386
            },
            {
              "method": "POST",
              "declared_path": "/vendor-live-sync/sources/{source_id}/cursor-reset",
              "function": "reset_vendor_live_sync_cursor",
              "line": 2398
            },
            {
              "method": "POST",
              "declared_path": "/vendor-live-sync/sources/{source_id}/run-log",
              "function": "record_vendor_live_sync_run",
              "line": 2431
            },
            {
              "method": "GET",
              "declared_path": "/vendor-live-sync/sources/{source_id}/run-log",
              "function": "list_vendor_live_sync_runs",
              "line": 2463
            },
            {
              "method": "GET",
              "declared_path": "/public/meetings",
              "function": "public_meetings",
              "line": 2484
            },
            {
              "method": "GET",
              "declared_path": "/public/meetings/{record_id}",
              "function": "public_meeting_detail",
              "line": 2494
            },
            {
              "method": "GET",
              "declared_path": "/public/meetings/{record_id}/{document_kind}.txt",
              "function": "public_meeting_download",
              "line": 2503
            },
            {
              "method": "POST",
              "declared_path": "/public/meetings/{record_id}/comments",
              "function": "submit_public_comment",
              "line": 2530
            },
            {
              "method": "GET",
              "declared_path": "/public/meetings/{record_id}/comments",
              "function": "list_public_comments",
              "line": 2557
            },
            {
              "method": "GET",
              "declared_path": "/public-comments/review-queue",
              "function": "list_public_comment_review_queue",
              "line": 2567
            },
            {
              "method": "GET",
              "declared_path": "/public/archive/search",
              "function": "public_archive_search",
              "line": 2580
            }
          ],
          "models": [
            {
              "name": "AgendaItemCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 239
                },
                {
                  "name": "department_name",
                  "type": "str",
                  "line": 240
                }
              ],
              "line": 238
            },
            {
              "name": "AgendaItemTransitionRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "to_status",
                  "type": "str",
                  "line": 244
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 245
                }
              ],
              "line": 243
            },
            {
              "name": "AgendaIntakeCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 249
                },
                {
                  "name": "department_name",
                  "type": "str",
                  "line": 250
                },
                {
                  "name": "submitted_by",
                  "type": "str",
                  "line": 251
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 252
                },
                {
                  "name": "source_references",
                  "type": "list[dict]",
                  "line": 253
                }
              ],
              "line": 248
            },
            {
              "name": "AgendaIntakeReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 257
                },
                {
                  "name": "ready",
                  "type": "bool",
                  "line": 258
                },
                {
                  "name": "notes",
                  "type": "str",
                  "line": 259
                }
              ],
              "line": 256
            },
            {
              "name": "AgendaIntakePromoteRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 263
                },
                {
                  "name": "notes",
                  "type": "str",
                  "line": 264
                }
              ],
              "line": 262
            },
            {
              "name": "StaffReportCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 268
                },
                {
                  "name": "department_name",
                  "type": "str",
                  "line": 269
                },
                {
                  "name": "author",
                  "type": "str",
                  "line": 270
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 271
                },
                {
                  "name": "source_references",
                  "type": "list[dict]",
                  "line": 272
                },
                {
                  "name": "agenda_item_id",
                  "type": "str | None",
                  "line": 273
                },
                {
                  "name": "legal_reviewer",
                  "type": "str | None",
                  "line": 274
                }
              ],
              "line": 267
            },
            {
              "name": "MeetingCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 278
                },
                {
                  "name": "meeting_type",
                  "type": "str",
                  "line": 279
                },
                {
                  "name": "scheduled_start",
                  "type": "str | None",
                  "line": 280
                },
                {
                  "name": "meeting_body_id",
                  "type": "str | None",
                  "line": 281
                },
                {
                  "name": "location",
                  "type": "str | None",
                  "line": 282
                }
              ],
              "line": 277
            },
            {
              "name": "MeetingUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str | None",
                  "line": 286
                },
                {
                  "name": "meeting_type",
                  "type": "str | None",
                  "line": 287
                },
                {
                  "name": "scheduled_start",
                  "type": "str | None",
                  "line": 288
                },
                {
                  "name": "meeting_body_id",
                  "type": "str | None",
                  "line": 289
                },
                {
                  "name": "location",
                  "type": "str | None",
                  "line": 290
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 291
                }
              ],
              "line": 285
            },
            {
              "name": "MeetingBodyCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 295
                },
                {
                  "name": "body_type",
                  "type": "str",
                  "line": 296
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 297
                }
              ],
              "line": 294
            },
            {
              "name": "MeetingBodyUpdate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str | None",
                  "line": 301
                },
                {
                  "name": "body_type",
                  "type": "str | None",
                  "line": 302
                },
                {
                  "name": "is_active",
                  "type": "bool | None",
                  "line": 303
                }
              ],
              "line": 300
            },
            {
              "name": "MeetingTransitionRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "to_status",
                  "type": "str",
                  "line": 307
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 308
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 309
                }
              ],
              "line": 306
            },
            {
              "name": "PacketSnapshotCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "agenda_item_ids",
                  "type": "list[str]",
                  "line": 313
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 314
                }
              ],
              "line": 312
            },
            {
              "name": "PacketAssemblyCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 318
                },
                {
                  "name": "agenda_item_ids",
                  "type": "list[str]",
                  "line": 319
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 320
                },
                {
                  "name": "source_references",
                  "type": "list[dict]",
                  "line": 321
                },
                {
                  "name": "citations",
                  "type": "list[dict]",
                  "line": 322
                }
              ],
              "line": 317
            },
            {
              "name": "PacketAssemblyFinalizeRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "actor",
                  "type": "str",
                  "line": 326
                }
              ],
              "line": 325
            },
            {
              "name": "PacketSourceCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 330
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 331
                },
                {
                  "name": "kind",
                  "type": "str",
                  "line": 332
                },
                {
                  "name": "source_system",
                  "type": "str | None",
                  "line": 333
                },
                {
                  "name": "source_path",
                  "type": "str | None",
                  "line": 334
                },
                {
                  "name": "checksum",
                  "type": "str | None",
                  "line": 335
                },
                {
                  "name": "sensitivity_label",
                  "type": "str | None",
                  "line": 336
                },
                {
                  "name": "citation_label",
                  "type": "str | None",
                  "line": 337
                }
              ],
              "line": 329
            },
            {
              "name": "PacketExportCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "bundle_name",
                  "type": "str",
                  "line": 341
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 342
                },
                {
                  "name": "sources",
                  "type": "list[PacketSourceCreate]",
                  "line": 343
                },
                {
                  "name": "public_bundle",
                  "type": "bool",
                  "line": 344
                }
              ],
              "line": 340
            },
            {
              "name": "NoticeComplianceRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 348
                },
                {
                  "name": "posted_at",
                  "type": "datetime",
                  "line": 349
                },
                {
                  "name": "minimum_notice_hours",
                  "type": "int",
                  "line": 350
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 351
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 352
                }
              ],
              "line": 347
            },
            {
              "name": "NoticeChecklistCreate",
              "bases": [
                "NoticeComplianceRequest"
              ],
              "fields": [
                {
                  "name": "actor",
                  "type": "str",
                  "line": 356
                }
              ],
              "line": 355
            },
            {
              "name": "NoticePostingProofCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "actor",
                  "type": "str",
                  "line": 360
                },
                {
                  "name": "posting_proof",
                  "type": "dict",
                  "line": 361
                }
              ],
              "line": 359
            },
            {
              "name": "MotionCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 365
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 366
                },
                {
                  "name": "agenda_item_id",
                  "type": "str | None",
                  "line": 367
                },
                {
                  "name": "seconded_by",
                  "type": "str | None",
                  "line": 368
                }
              ],
              "line": 364
            },
            {
              "name": "MotionCorrectionCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 372
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 373
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 374
                }
              ],
              "line": 371
            },
            {
              "name": "VoteCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "voter_name",
                  "type": "str",
                  "line": 378
                },
                {
                  "name": "vote",
                  "type": "str",
                  "line": 379
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 380
                }
              ],
              "line": 377
            },
            {
              "name": "VoteCorrectionCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "vote",
                  "type": "str",
                  "line": 384
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 385
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 386
                }
              ],
              "line": 383
            },
            {
              "name": "ActionItemCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "description",
                  "type": "str",
                  "line": 390
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 391
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 392
                },
                {
                  "name": "source_motion_id",
                  "type": "str | None",
                  "line": 393
                }
              ],
              "line": 389
            },
            {
              "name": "SourceMaterialCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 397
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 398
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 399
                }
              ],
              "line": 396
            },
            {
              "name": "MinutesSentenceCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 403
                },
                {
                  "name": "citations",
                  "type": "list[str]",
                  "line": 404
                }
              ],
              "line": 402
            },
            {
              "name": "MinutesDraftCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "model",
                  "type": "str",
                  "line": 408
                },
                {
                  "name": "prompt_version",
                  "type": "str",
                  "line": 409
                },
                {
                  "name": "human_approver",
                  "type": "str",
                  "line": 410
                },
                {
                  "name": "source_materials",
                  "type": "list[SourceMaterialCreate]",
                  "line": 411
                },
                {
                  "name": "sentences",
                  "type": "list[MinutesSentenceCreate]",
                  "line": 412
                }
              ],
              "line": 407
            },
            {
              "name": "MinutesAiAssistCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "model",
                  "type": "str",
                  "line": 416
                },
                {
                  "name": "prompt_version",
                  "type": "str",
                  "line": 417
                },
                {
                  "name": "human_approver",
                  "type": "str",
                  "line": 418
                },
                {
                  "name": "source_materials",
                  "type": "list[SourceMaterialCreate]",
                  "line": 419
                },
                {
                  "name": "instruction",
                  "type": "str",
                  "line": 420
                }
              ],
              "line": 415
            },
            {
              "name": "TranscriptCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "actor",
                  "type": "str",
                  "line": 427
                },
                {
                  "name": "source_label",
                  "type": "str",
                  "line": 428
                },
                {
                  "name": "transcript_text",
                  "type": "str",
                  "line": 429
                },
                {
                  "name": "public_release_requested",
                  "type": "bool",
                  "line": 430
                },
                {
                  "name": "closed_session",
                  "type": "bool",
                  "line": 431
                }
              ],
              "line": 426
            },
            {
              "name": "OrdinanceResolutionHandoffCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "item_type",
                  "type": "str",
                  "line": 435
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 436
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 437
                },
                {
                  "name": "legal_reviewer",
                  "type": "str",
                  "line": 438
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 439
                },
                {
                  "name": "source_motion_id",
                  "type": "str | None",
                  "line": 440
                },
                {
                  "name": "ordinance_number",
                  "type": "str | None",
                  "line": 441
                },
                {
                  "name": "resolution_number",
                  "type": "str | None",
                  "line": 442
                },
                {
                  "name": "source_references",
                  "type": "list[dict]",
                  "line": 443
                },
                {
                  "name": "affected_sections",
                  "type": "list[str]",
                  "line": 444
                },
                {
                  "name": "source_document_url",
                  "type": "str | None",
                  "line": 445
                },
                {
                  "name": "source_document_hash",
                  "type": "str | None",
                  "line": 446
                }
              ],
              "line": 434
            },
            {
              "name": "OrdinanceResolutionHandoffRetry",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "handoff_id",
                  "type": "str | None",
                  "line": 450
                }
              ],
              "line": 449
            },
            {
              "name": "PublicMeetingRecordCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 454
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 455
                },
                {
                  "name": "posted_agenda",
                  "type": "str",
                  "line": 456
                },
                {
                  "name": "posted_packet",
                  "type": "str",
                  "line": 457
                },
                {
                  "name": "approved_minutes",
                  "type": "str",
                  "line": 458
                },
                {
                  "name": "public_comment_enabled",
                  "type": "bool",
                  "line": 459
                },
                {
                  "name": "plain_language_summary",
                  "type": "str | None",
                  "line": 460
                },
                {
                  "name": "minutes_adopted_at",
                  "type": "str | None",
                  "line": 461
                },
                {
                  "name": "minutes_signed_by",
                  "type": "str | None",
                  "line": 462
                },
                {
                  "name": "closed_session_notes",
                  "type": "str | None",
                  "line": 463
                }
              ],
              "line": 453
            },
            {
              "name": "PublicCommentCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "commenter_name",
                  "type": "str",
                  "line": 467
                },
                {
                  "name": "comment",
                  "type": "str",
                  "line": 468
                }
              ],
              "line": 466
            },
            {
              "name": "VendorSyncSourceCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 472
                },
                {
                  "name": "source_name",
                  "type": "str",
                  "line": 473
                },
                {
                  "name": "source_url",
                  "type": "str",
                  "line": 474
                },
                {
                  "name": "auth_method",
                  "type": "str",
                  "line": 475
                }
              ],
              "line": 471
            },
            {
              "name": "VendorSyncRunRecordCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "records_discovered",
                  "type": "int",
                  "line": 479
                },
                {
                  "name": "records_succeeded",
                  "type": "int",
                  "line": 480
                },
                {
                  "name": "records_failed",
                  "type": "int",
                  "line": 481
                },
                {
                  "name": "retries_attempted",
                  "type": "int",
                  "line": 482
                },
                {
                  "name": "error_summary",
                  "type": "str | None",
                  "line": 483
                }
              ],
              "line": 478
            },
            {
              "name": "VendorSyncCursorReset",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "cursor_at",
                  "type": "datetime | None",
                  "line": 487
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 488
                }
              ],
              "line": 486
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_MEETINGS_EXPORT_ROOT",
              "line": 3457
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_AGENDA_INTAKE_DB_URL",
              "line": 3463
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_AGENDA_ITEM_DB_URL",
              "line": 3472
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_PACKET_ASSEMBLY_DB_URL",
              "line": 3483
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_NOTICE_CHECKLIST_DB_URL",
              "line": 3492
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_MEETING_BODY_DB_URL",
              "line": 3501
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_MEETING_DB_URL",
              "line": 3510
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_VENDOR_SYNC_DB_URL",
              "line": 3521
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_MOTION_VOTE_DB_URL",
              "line": 3530
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_MINUTES_DB_URL",
              "line": 3541
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_PUBLIC_ARCHIVE_DB_URL",
              "line": 3552
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_PUBLIC_ARCHIVE_DB_URL",
              "line": 3563
            }
          ]
        },
        {
          "source": "townlight_meetings/meeting_body.py",
          "sha256": "8d942a6b5c5ee54118fad110a69342de050b3ade33d29d6ff7b816be169d4c52",
          "bytes": 5165,
          "routes": [],
          "models": [
            {
              "name": "MeetingBodyRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "UUID",
                  "line": 32
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "body_type",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "is_active",
                  "type": "bool",
                  "line": 35
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 36
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 37
                }
              ],
              "line": 29
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/meeting_lifecycle.py",
          "sha256": "8e85facc34e20861bf12bf4787094963057f731d908ba68c8369c347edcaee14",
          "bytes": 22805,
          "routes": [],
          "models": [
            {
              "name": "TransitionResult",
              "bases": [],
              "fields": [
                {
                  "name": "allowed",
                  "type": "bool",
                  "line": 75
                },
                {
                  "name": "http_status",
                  "type": "int",
                  "line": 76
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 77
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "audit_entry",
                  "type": "dict[str, object]",
                  "line": 79
                }
              ],
              "line": 74
            },
            {
              "name": "MeetingRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 84
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "meeting_type",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "scheduled_start",
                  "type": "datetime | None",
                  "line": 87
                },
                {
                  "name": "meeting_body_id",
                  "type": "str | None",
                  "line": 88
                },
                {
                  "name": "location",
                  "type": "str | None",
                  "line": 89
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "audit_entries",
                  "type": "list[dict[str, object]]",
                  "line": 91
                }
              ],
              "line": 83
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/__init__.py",
          "sha256": "2f702ea1ab0e065bdfe893ab61f83640ed21e3d1ed0369c064c1220775ea3bc7",
          "bytes": 53,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/alembic.ini",
          "sha256": "92766d392cd23d39d3896a835c5e9377caf76545f263183e1dafaf90779203bb",
          "bytes": 770,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/env.py",
          "sha256": "2dac3fa33b6c23c15a3e22b0a047df52b21987faca89267dc220b9a45df75191",
          "bytes": 2428,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 24
            }
          ]
        },
        {
          "source": "townlight_meetings/migrations/guards.py",
          "sha256": "c15233f35fdb6aad0659926a9f86ce17ab2c05461c1ad5dda4797bb0a2ec5068",
          "bytes": 514,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/__init__.py",
          "sha256": "0c884013c778ac8bcf273f0a0c5bc159f488c2213e5d9580519ca057e3f93b17",
          "bytes": 54,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0001_schema.py",
          "sha256": "0e0ce48ca01b2c4a26a71b78456256ae250ea441342e8c6f8e7d6ac15fbb2c39",
          "bytes": 7272,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0002_agenda_intake_queue.py",
          "sha256": "49a9425fe4a1bb816c536aeeba439e78e0f83a13de3b740c42e8745a8c27f7bb",
          "bytes": 1490,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0003_packet_assembly_records.py",
          "sha256": "9a75aa6a86e6e273944c702dc0528ed4b1932d352e248bc74738fa569cf3d223",
          "bytes": 1666,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0004_notice_checklist_records.py",
          "sha256": "9d48fdc8044458a30e95139831e1b72061943f9c819b0b3c0633f1152d378010",
          "bytes": 1735,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0005_meeting_records.py",
          "sha256": "24f50601c97f145ad6a959fc8e617806286cf2f9c5a959014c14e9ba5d81e204",
          "bytes": 1169,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0006_agenda_item_lifecycle_records.py",
          "sha256": "d4adce2b58d003d0320198f152cc1e69c3158512a6a19ce3b94e31fd464f9d9c",
          "bytes": 1127,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0007_meeting_schedule_fields.py",
          "sha256": "b6bec8f062dc9f032ffd7191fa04b2b477c0ce6adcd3bde80ae66c6a90746abd",
          "bytes": 1489,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0008_agenda_intake_promotion.py",
          "sha256": "ee3b2ea4b1240a5d3db4e257672b3aa167b8b6a0cc73e26ba483544ff2652192",
          "bytes": 1834,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0009_vendor_sync_persistence.py",
          "sha256": "5c5712c4cdeb9447e060ae6e0d465e2bf75f2c888d7d7702f180ca67be901048",
          "bytes": 3709,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0010_vendor_sync_cursor.py",
          "sha256": "a09f09862e8a279445feea66be71b26cff83c44ff272a0c15b95248ed7cadce3",
          "bytes": 858,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0011_data_model_completion.py",
          "sha256": "58a960f8a84cb532d39b4af9b3088360fe5507b028aebb64a11210b93c17e5b7",
          "bytes": 9389,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0012_action_item_actor.py",
          "sha256": "e4efccca64d15074c36296f4a2666e02110298de02c13f8ac772798089fd8a4c",
          "bytes": 999,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0013_minutes_model_posted.py",
          "sha256": "50a8125f9c7ea967f8187d0d2e06c592604e64953f6a452dfc96523ebb92df41",
          "bytes": 1267,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0014_public_meeting_records.py",
          "sha256": "ccc0bf6229a9c9a278ee57c7ea018744ac9125bc18d3f21636869a64b5ec6b15",
          "bytes": 2153,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0015_capture_seq.py",
          "sha256": "598bbab49533f1aba774703d83efd35776ec3a41107195030edbfca23d832584",
          "bytes": 2348,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0016_archive_indexes.py",
          "sha256": "72f55f23307d04c70502674a9b6f99a23497fa96c81cccad3b1a0eeb8316a3f5",
          "bytes": 1891,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0017_meeting_authority.py",
          "sha256": "a78e6c3dab3f60fe864846b68387e5961d2689bf3178f635a6ef9f9d5657743c",
          "bytes": 2368,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0018_agenda_authority.py",
          "sha256": "eee17737b39bc3ba6ca894b093265c222794de97e560720cb3780483b914ed02",
          "bytes": 1738,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0019_minutes_decisions.py",
          "sha256": "740f4f76740008ed0ff1f95f02b6b6d022542236d0978ee7a131f472fb7c14d7",
          "bytes": 550,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0020_delivery_history.py",
          "sha256": "7dc873a822e2f85f1d30380c55e86d6c32fd9aaf7b050595134c03396d8d50d7",
          "bytes": 769,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/migrations/versions/townlight_meetings_0021_sources_archive.py",
          "sha256": "bdfda03eb565680a2444b17bdb743dd1dff95e9c612f80accaab7f03c55b3121",
          "bytes": 923,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/minutes.py",
          "sha256": "2054ae33051ea48015f65b0c3caee89c3c12d43dcd8536c372cccbf6cf281e24",
          "bytes": 18230,
          "routes": [],
          "models": [
            {
              "name": "MinutesProvenance",
              "bases": [],
              "fields": [
                {
                  "name": "model",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "prompt_version",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "data_sources",
                  "type": "tuple[str, ...]",
                  "line": 29
                },
                {
                  "name": "human_approver",
                  "type": "str",
                  "line": 30
                }
              ],
              "line": 26
            },
            {
              "name": "MinutesDraft",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "sentences",
                  "type": "tuple[MinutesSentence, ...]",
                  "line": 46
                },
                {
                  "name": "source_materials",
                  "type": "tuple[SourceMaterial, ...]",
                  "line": 47
                },
                {
                  "name": "provenance",
                  "type": "MinutesProvenance",
                  "line": 48
                },
                {
                  "name": "adopted",
                  "type": "bool",
                  "line": 49
                },
                {
                  "name": "posted",
                  "type": "bool",
                  "line": 50
                },
                {
                  "name": "signed_by",
                  "type": "str | None",
                  "line": 51
                },
                {
                  "name": "decision_history",
                  "type": "tuple[dict, ...]",
                  "line": 52
                }
              ],
              "line": 42
            },
            {
              "name": "MinutesValidationError",
              "bases": [],
              "fields": [
                {
                  "name": "message",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 73
                }
              ],
              "line": 71
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/mock_city_environment.py",
          "sha256": "71c8698fa5b24cdf89b020e6aab68752563f6349b01d11ce38d20a06244f9cad",
          "bytes": 32670,
          "routes": [],
          "models": [
            {
              "name": "MockCityHostileFixture",
              "bases": [],
              "fields": [
                {
                  "name": "area",
                  "type": "HostileArea",
                  "line": 50
                },
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "target",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "trigger",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "expected_behavior",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "sample",
                  "type": "dict[str, Any]",
                  "line": 56
                }
              ],
              "line": 47
            },
            {
              "name": "MockCityHostileCheck",
              "bases": [],
              "fields": [
                {
                  "name": "area",
                  "type": "HostileArea",
                  "line": 74
                },
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 75
                },
                {
                  "name": "target",
                  "type": "str",
                  "line": 76
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 77
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 79
                }
              ],
              "line": 71
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/models.py",
          "sha256": "5607a664757054913929de1cc5cc9a4f6cdce53ec73e93b4ef7e2eb9d4437195",
          "bytes": 11996,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/motion_vote.py",
          "sha256": "e94fb8bc6a02951c67aba8bd91e8be64f04dfe72197e147ae84339d04e53fc0b",
          "bytes": 26765,
          "routes": [],
          "models": [
            {
              "name": "MotionRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "agenda_item_id",
                  "type": "str | None",
                  "line": 22
                },
                {
                  "name": "seconded_by",
                  "type": "str | None",
                  "line": 23
                },
                {
                  "name": "correction_of_id",
                  "type": "str | None",
                  "line": 24
                },
                {
                  "name": "correction_reason",
                  "type": "str | None",
                  "line": 25
                },
                {
                  "name": "captured",
                  "type": "bool",
                  "line": 26
                }
              ],
              "line": 17
            },
            {
              "name": "VoteRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "motion_id",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "voter_name",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "vote",
                  "type": "str",
                  "line": 47
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "correction_of_id",
                  "type": "str | None",
                  "line": 49
                },
                {
                  "name": "correction_reason",
                  "type": "str | None",
                  "line": 50
                },
                {
                  "name": "captured",
                  "type": "bool",
                  "line": 51
                }
              ],
              "line": 43
            },
            {
              "name": "ActionItemRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 68
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 69
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 72
                },
                {
                  "name": "source_motion_id",
                  "type": "str | None",
                  "line": 73
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 74
                }
              ],
              "line": 67
            },
            {
              "name": "MeetingOutcomeSummary",
              "bases": [],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "motion_id",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "vote_count",
                  "type": "int",
                  "line": 95
                },
                {
                  "name": "action_item_count",
                  "type": "int",
                  "line": 96
                }
              ],
              "line": 89
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/notice_checklist.py",
          "sha256": "53a49cd45e73aec06f89b7354f4b43fd4c3741ab095be39852339eb21989299a",
          "bytes": 12416,
          "routes": [],
          "models": [
            {
              "name": "NoticeChecklistRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "compliant",
                  "type": "bool",
                  "line": 57
                },
                {
                  "name": "http_status",
                  "type": "int",
                  "line": 58
                },
                {
                  "name": "warnings",
                  "type": "list[dict]",
                  "line": 59
                },
                {
                  "name": "deadline_at",
                  "type": "datetime",
                  "line": 60
                },
                {
                  "name": "posted_at",
                  "type": "datetime",
                  "line": 61
                },
                {
                  "name": "minimum_notice_hours",
                  "type": "int",
                  "line": 62
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 63
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "posting_proof",
                  "type": "dict | None",
                  "line": 65
                },
                {
                  "name": "last_audit_hash",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 67
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 68
                },
                {
                  "name": "audit_entries",
                  "type": "list[dict]",
                  "line": 69
                }
              ],
              "line": 50
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/oidc_auth.py",
          "sha256": "56e8cf18103a38230f8b77c27d86d0fd948adfcb5c1383056d676ed26979cf36",
          "bytes": 14727,
          "routes": [],
          "models": [
            {
              "name": "OidcStaffAuthConfig",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "issuer",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "jwks_url",
                  "type": "str | None",
                  "line": 25
                },
                {
                  "name": "jwks_json",
                  "type": "str | None",
                  "line": 26
                },
                {
                  "name": "role_claims",
                  "type": "tuple[str, ...]",
                  "line": 27
                },
                {
                  "name": "algorithms",
                  "type": "tuple[str, ...]",
                  "line": 28
                },
                {
                  "name": "authorization_url",
                  "type": "str | None",
                  "line": 29
                },
                {
                  "name": "token_url",
                  "type": "str | None",
                  "line": 30
                },
                {
                  "name": "client_id",
                  "type": "str | None",
                  "line": 31
                },
                {
                  "name": "client_secret",
                  "type": "str | None",
                  "line": 32
                },
                {
                  "name": "redirect_uri",
                  "type": "str | None",
                  "line": 33
                },
                {
                  "name": "session_cookie_secret",
                  "type": "str | None",
                  "line": 34
                }
              ],
              "line": 21
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/packet_assembly.py",
          "sha256": "053cbccbb5a8f2c61ab38c74a2a9e1cbfcdaedceadd30b745768935c75af68c6",
          "bytes": 11617,
          "routes": [],
          "models": [
            {
              "name": "PacketAssemblyRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "packet_snapshot_id",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "packet_version",
                  "type": "int",
                  "line": 57
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "agenda_item_ids",
                  "type": "list[str]",
                  "line": 61
                },
                {
                  "name": "source_references",
                  "type": "list[dict]",
                  "line": 62
                },
                {
                  "name": "citations",
                  "type": "list[dict]",
                  "line": 63
                },
                {
                  "name": "finalized_by",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "finalized_at",
                  "type": "datetime | None",
                  "line": 65
                },
                {
                  "name": "last_audit_hash",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 67
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 68
                },
                {
                  "name": "snapshot_content",
                  "type": "list[dict]",
                  "line": 69
                },
                {
                  "name": "delivery_history",
                  "type": "list[dict]",
                  "line": 70
                },
                {
                  "name": "audit_entries",
                  "type": "list[dict]",
                  "line": 71
                }
              ],
              "line": 51
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/packet_notice.py",
          "sha256": "f6740f9e3a8e74e9e7c10ff91284df7cb8700f7c781f099bdb29f9492575f911",
          "bytes": 18322,
          "routes": [],
          "models": [
            {
              "name": "PacketSource",
              "bases": [],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 62
                },
                {
                  "name": "kind",
                  "type": "str",
                  "line": 63
                },
                {
                  "name": "source_system",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "source_path",
                  "type": "str | None",
                  "line": 65
                },
                {
                  "name": "checksum",
                  "type": "str | None",
                  "line": 66
                },
                {
                  "name": "sensitivity_label",
                  "type": "str | None",
                  "line": 67
                },
                {
                  "name": "citation_label",
                  "type": "str | None",
                  "line": 68
                }
              ],
              "line": 58
            },
            {
              "name": "PacketSnapshot",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "version",
                  "type": "int",
                  "line": 95
                },
                {
                  "name": "agenda_item_ids",
                  "type": "tuple[str, ...]",
                  "line": 96
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 98
                }
              ],
              "line": 92
            },
            {
              "name": "PacketExportResult",
              "bases": [],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 115
                },
                {
                  "name": "bundle_path",
                  "type": "str",
                  "line": 116
                },
                {
                  "name": "manifest_path",
                  "type": "str",
                  "line": 117
                },
                {
                  "name": "checksums_path",
                  "type": "str",
                  "line": 118
                },
                {
                  "name": "townlight_core_version",
                  "type": "str",
                  "line": 119
                },
                {
                  "name": "packet_version",
                  "type": "int",
                  "line": 120
                },
                {
                  "name": "audit_hash",
                  "type": "str",
                  "line": 121
                },
                {
                  "name": "generated_files",
                  "type": "tuple[str, ...]",
                  "line": 122
                }
              ],
              "line": 112
            },
            {
              "name": "NoticeComplianceResult",
              "bases": [],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 344
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 345
                },
                {
                  "name": "scheduled_start",
                  "type": "datetime",
                  "line": 346
                },
                {
                  "name": "posted_at",
                  "type": "datetime",
                  "line": 347
                },
                {
                  "name": "minimum_notice_hours",
                  "type": "int",
                  "line": 348
                },
                {
                  "name": "deadline_at",
                  "type": "datetime",
                  "line": 349
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 350
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 351
                },
                {
                  "name": "compliant",
                  "type": "bool",
                  "line": 352
                },
                {
                  "name": "http_status",
                  "type": "int",
                  "line": 353
                },
                {
                  "name": "warnings",
                  "type": "list[dict[str, str]]",
                  "line": 354
                }
              ],
              "line": 343
            },
            {
              "name": "PostedNotice",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 373
                },
                {
                  "name": "result",
                  "type": "NoticeComplianceResult",
                  "line": 374
                }
              ],
              "line": 372
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/prompt_evals.py",
          "sha256": "5f7be9d93cd550d8b09877d1db9330fd30614140318b3d6425221c816f8c79dd",
          "bytes": 5642,
          "routes": [],
          "models": [
            {
              "name": "PromptEvalResult",
              "bases": [],
              "fields": [
                {
                  "name": "prompt_reference",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "provider",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "offline",
                  "type": "bool",
                  "line": 20
                },
                {
                  "name": "passed",
                  "type": "bool",
                  "line": 21
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 22
                }
              ],
              "line": 17
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_CORE_LLM_PROVIDER",
              "line": 128
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_EVAL_OFFLINE",
              "line": 129
            }
          ]
        },
        {
          "source": "townlight_meetings/prompt_library.py",
          "sha256": "4bed68dc61c582fea26f61a36861dafe570d8a82b5c115c457eec19148759212",
          "bytes": 10325,
          "routes": [],
          "models": [
            {
              "name": "PromptEvaluation",
              "bases": [],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "required_phrases",
                  "type": "tuple[str, ...]",
                  "line": 36
                }
              ],
              "line": 34
            },
            {
              "name": "PromptDefinition",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "version",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "provider",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "purpose",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "required_variables",
                  "type": "tuple[str, ...]",
                  "line": 45
                },
                {
                  "name": "system_prompt",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "template",
                  "type": "str",
                  "line": 47
                },
                {
                  "name": "evaluations",
                  "type": "tuple[PromptEvaluation, ...]",
                  "line": 48
                },
                {
                  "name": "public_facing",
                  "type": "bool",
                  "line": 49
                },
                {
                  "name": "approval_required",
                  "type": "str | None",
                  "line": 50
                }
              ],
              "line": 40
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/public_archive.py",
          "sha256": "cc16f9a752bd853688a04c001e4a867e53f329fce32776e0f93ff06679f8fab2",
          "bytes": 28574,
          "routes": [],
          "models": [
            {
              "name": "PublicMeetingRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "meeting_id",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "posted_agenda",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "posted_packet",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "approved_minutes",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "public_comment_enabled",
                  "type": "bool",
                  "line": 35
                },
                {
                  "name": "plain_language_summary",
                  "type": "str | None",
                  "line": 36
                },
                {
                  "name": "agenda_download_url",
                  "type": "str | None",
                  "line": 37
                },
                {
                  "name": "packet_download_url",
                  "type": "str | None",
                  "line": 38
                },
                {
                  "name": "minutes_download_url",
                  "type": "str | None",
                  "line": 39
                },
                {
                  "name": "minutes_adopted_at",
                  "type": "str | None",
                  "line": 40
                },
                {
                  "name": "minutes_signed_by",
                  "type": "str | None",
                  "line": 41
                },
                {
                  "name": "closed_session_notes",
                  "type": "str | None",
                  "line": 42
                },
                {
                  "name": "audit_entries",
                  "type": "list[dict]",
                  "line": 43
                }
              ],
              "line": 27
            },
            {
              "name": "PublicCommentRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "public_record_id",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "commenter_name",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "comment",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "submitted_at",
                  "type": "str",
                  "line": 74
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 75
                }
              ],
              "line": 69
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/public_ui.py",
          "sha256": "3a5c15cf99279eb3bf66168902fe02b29ff5f4bfc13382535ff7222a5aa85ac6",
          "bytes": 13818,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/records_sources.py",
          "sha256": "7de91ba5712b2518ccc1d16780b008a7a1007f85d9b2074e7153a2b29b69f239",
          "bytes": 1851,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/staff_ui.py",
          "sha256": "42a675c24f34d4e48dc5e06cfab93c78623f70854171afda214df6d01f529552",
          "bytes": 80954,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/suite_session_compat.py",
          "sha256": "aad63f43710236fdbc6766b4eca1053d016c5e80a0c8ebfa174c9a69fb0f934c",
          "bytes": 5898,
          "routes": [],
          "models": [
            {
              "name": "SuiteSessionPrincipal",
              "bases": [],
              "fields": [
                {
                  "name": "subject",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 32
                },
                {
                  "name": "session_id",
                  "type": "str",
                  "line": 33
                }
              ],
              "line": 28
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/transcripts.py",
          "sha256": "736ed66a6deb8554bb973410f315b3b7c83ab5bae96c5fe96a259536f0799e5a",
          "bytes": 3358,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/vendor_delta.py",
          "sha256": "a6ab9f820ff2541b93951e34ba18825f5901784b8b546dfc77e2eb47dee54d43",
          "bytes": 358,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_meetings/vendor_live_sync.py",
          "sha256": "5e3423fa73ea3d6c3ea2339fdd7cb050d35c3f26040ab3ea254dccc77e3224fe",
          "bytes": 6024,
          "routes": [],
          "models": [
            {
              "name": "LiveSyncCheck",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "Literal['PASS', 'FAIL']",
                  "line": 50
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 53
                }
              ],
              "line": 49
            },
            {
              "name": "VendorLiveSyncConfig",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "source_url",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "auth_method",
                  "type": "AuthMethod",
                  "line": 60
                }
              ],
              "line": 57
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/vendor_network_sync.py",
          "sha256": "03d533069a867a5ba04e37564e56b823a4b213f55ecf1fbb4f8700925a72f0f3",
          "bytes": 15115,
          "routes": [],
          "models": [
            {
              "name": "VendorNetworkSyncAttempt",
              "bases": [],
              "fields": [
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 32
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "external_meeting_id",
                  "type": "str | None",
                  "line": 35
                },
                {
                  "name": "error_class",
                  "type": "str | None",
                  "line": 36
                }
              ],
              "line": 31
            },
            {
              "name": "VendorNetworkSyncReport",
              "bases": [],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "connector",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "network_calls",
                  "type": "bool",
                  "line": 43
                },
                {
                  "name": "records_discovered",
                  "type": "int",
                  "line": 44
                },
                {
                  "name": "records_succeeded",
                  "type": "int",
                  "line": 45
                },
                {
                  "name": "records_failed",
                  "type": "int",
                  "line": 46
                },
                {
                  "name": "run_status",
                  "type": "str | None",
                  "line": 47
                },
                {
                  "name": "source_health_status",
                  "type": "str | None",
                  "line": 48
                },
                {
                  "name": "delta_request_url",
                  "type": "str | None",
                  "line": 49
                },
                {
                  "name": "cursor_param",
                  "type": "str | None",
                  "line": 50
                },
                {
                  "name": "cursor_value",
                  "type": "str | None",
                  "line": 51
                },
                {
                  "name": "cursor_advanced_at",
                  "type": "str | None",
                  "line": 52
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "attempts",
                  "type": "list[VendorNetworkSyncAttempt]",
                  "line": 55
                }
              ],
              "line": 40
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/vendor_sync_persistence.py",
          "sha256": "5802f8231c3792e8b747b2aa44a098b7ba5aa57f2b51e3a5e3f2d7ceb2d8df19",
          "bytes": 17427,
          "routes": [],
          "models": [
            {
              "name": "VendorSyncSourceRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "connector",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "source_name",
                  "type": "str",
                  "line": 84
                },
                {
                  "name": "source_url",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "auth_method",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "consecutive_failure_count",
                  "type": "int",
                  "line": 87
                },
                {
                  "name": "active_failure_count",
                  "type": "int",
                  "line": 88
                },
                {
                  "name": "sync_paused",
                  "type": "bool",
                  "line": 89
                },
                {
                  "name": "sync_paused_at",
                  "type": "datetime | None",
                  "line": 90
                },
                {
                  "name": "sync_paused_reason",
                  "type": "str | None",
                  "line": 91
                },
                {
                  "name": "last_sync_status",
                  "type": "str | None",
                  "line": 92
                },
                {
                  "name": "last_error_at",
                  "type": "datetime | None",
                  "line": 93
                },
                {
                  "name": "last_success_cursor_at",
                  "type": "datetime | None",
                  "line": 94
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 95
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 96
                }
              ],
              "line": 81
            },
            {
              "name": "VendorSyncRunRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 141
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 143
                },
                {
                  "name": "records_discovered",
                  "type": "int",
                  "line": 144
                },
                {
                  "name": "records_succeeded",
                  "type": "int",
                  "line": 145
                },
                {
                  "name": "records_failed",
                  "type": "int",
                  "line": 146
                },
                {
                  "name": "retries_attempted",
                  "type": "int",
                  "line": 147
                },
                {
                  "name": "error_summary",
                  "type": "str | None",
                  "line": 148
                },
                {
                  "name": "started_at",
                  "type": "datetime",
                  "line": 149
                },
                {
                  "name": "finished_at",
                  "type": "datetime",
                  "line": 150
                }
              ],
              "line": 140
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_meetings/worker.py",
          "sha256": "19a5a6f39fb8c0e5d4da12dda8b8c6cabfad2566f8446875b2ff607c836d725e",
          "bytes": 10175,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "TOWNLIGHT_MEETINGS_REDIS_URL",
              "line": 46
            }
          ]
        }
      ]
    },
    "code": {
      "repository": "townlight/ordinances",
      "repository_head": "53f0314e91d6c41ba073a4f764e95d438038767d",
      "working_tree_modified": true,
      "principal_import": "townlight_code",
      "source": [
        {
          "source": "townlight_code/__init__.py",
          "sha256": "2c43921d2ff34bdcf86cfcbb9eae6733fbb701514ad741e877a0218ca7b8acca",
          "bytes": 128,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/ai_answer.py",
          "sha256": "25e5053a66a4cc9b6bdd943b8d94c67cee2d62fdbcf9033428b4a9bb07dd2043",
          "bytes": 3927,
          "routes": [],
          "models": [
            {
              "name": "LocalLLMConfig",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "base_url",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "model",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "timeout_seconds",
                  "type": "float",
                  "line": 22
                }
              ],
              "line": 18
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_URL",
              "line": 28
            },
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_TIMEOUT_SECONDS",
              "line": 35
            },
            {
              "environment": "TOWNLIGHT_CODE_AI_MODE",
              "line": 27
            },
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_MODEL",
              "line": 34
            }
          ]
        },
        {
          "source": "townlight_code/citation_contract.py",
          "sha256": "988fbe7893bf0ec957b2a5f04d8871b2ae9c6c1244e3a2b4a68b491fed942f98",
          "bytes": 2453,
          "routes": [],
          "models": [
            {
              "name": "CitationRefusal",
              "bases": [],
              "fields": [
                {
                  "name": "reason",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "refusal_type",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 10
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/codifier_sync.py",
          "sha256": "afc3b1ce364a0a77d70d554d29dc3a79e637f82a278ebb8c261082163ad8834e",
          "bytes": 24683,
          "routes": [],
          "models": [
            {
              "name": "CodifierDeltaPlan",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "request_url",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "delta_enabled",
                  "type": "bool",
                  "line": 61
                },
                {
                  "name": "cursor_param",
                  "type": "str | None",
                  "line": 62
                },
                {
                  "name": "cursor_value",
                  "type": "str | None",
                  "line": 63
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 64
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 65
                }
              ],
              "line": 56
            },
            {
              "name": "CodifierSyncSource",
              "bases": [],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "connector",
                  "type": "str",
                  "line": 84
                },
                {
                  "name": "source_name",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "source_url",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "sync_schedule",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "allowlisted_hosts",
                  "type": "tuple[str, ...]",
                  "line": 88
                },
                {
                  "name": "last_successful_sync_at",
                  "type": "datetime | None",
                  "line": 89
                },
                {
                  "name": "last_attempted_sync_at",
                  "type": "datetime | None",
                  "line": 90
                },
                {
                  "name": "last_import_job_id",
                  "type": "str | None",
                  "line": 91
                },
                {
                  "name": "next_sync_at_recorded",
                  "type": "datetime | None",
                  "line": 92
                },
                {
                  "name": "host_validation",
                  "type": "dict[str, Any]",
                  "line": 93
                },
                {
                  "name": "delta_plan_history",
                  "type": "list[dict[str, Any]]",
                  "line": 94
                },
                {
                  "name": "state",
                  "type": "SyncCircuitState",
                  "line": 95
                }
              ],
              "line": 80
            },
            {
              "name": "CodifierSyncRun",
              "bases": [],
              "fields": [
                {
                  "name": "source",
                  "type": "CodifierSyncSource",
                  "line": 106
                },
                {
                  "name": "job_payload",
                  "type": "dict[str, Any]",
                  "line": 107
                },
                {
                  "name": "delta_plan",
                  "type": "CodifierDeltaPlan",
                  "line": 108
                }
              ],
              "line": 103
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/fixtures/portland/code/13.10-purpose-and-definitions.txt",
          "sha256": "e86888d89e29382a48f0276aaabb9f6dbfbdb6a8456c17f51b5cc947cbb53d51",
          "bytes": 814,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/fixtures/portland/code/13.40-keeping-livestock.txt",
          "sha256": "178245740c874fcc13a7a12f9534692e01e232d771959d198e93d2425e8f2d74",
          "bytes": 995,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/frontend_dist/assets/index-aK7NGgo8.js",
          "sha256": "2780361ddd2b444b2da05ca9e33be44f7645e83d21f1d28b20e4644229deefae",
          "bytes": 198313,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/frontend_dist/assets/index-DhfojJY0.css",
          "sha256": "6002a43b0b5fbae50c24bd238b9b90a9a79abb5fb29ac758a8f93bfe755f8f12",
          "bytes": 3921,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/frontend_dist/index.html",
          "sha256": "43202d3699bc76ea94416777ff6f34654f179da57d4e03b5120390239a9578c4",
          "bytes": 450,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/import_connectors.py",
          "sha256": "77ca2b4da579a284ad3212126498fce7df28636e6b5df2648b0a364baa702024",
          "bytes": 19826,
          "routes": [],
          "models": [
            {
              "name": "ImportJob",
              "bases": [],
              "fields": [
                {
                  "name": "job_id",
                  "type": "str",
                  "line": 57
                },
                {
                  "name": "connector_type",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "retry_of",
                  "type": "str | None",
                  "line": 61
                },
                {
                  "name": "counts",
                  "type": "dict[str, int]",
                  "line": 62
                },
                {
                  "name": "provenance",
                  "type": "dict[str, Any]",
                  "line": 63
                },
                {
                  "name": "failure",
                  "type": "dict[str, str] | None",
                  "line": 64
                },
                {
                  "name": "source_id",
                  "type": "str | None",
                  "line": 65
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 66
                },
                {
                  "name": "completed_at",
                  "type": "datetime | None",
                  "line": 67
                }
              ],
              "line": 54
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/main.py",
          "sha256": "08a9c16106b52ee8a5aeeee6ad00e1721c59e2c27c40d7e83b96b89256a15e3b",
          "bytes": 88337,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 786
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code",
              "function": "public_lookup_home",
              "line": 834
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code/app",
              "function": "townlight_code_frontend_app",
              "line": 845
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code/app/",
              "function": "townlight_code_frontend_app",
              "line": 845
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code/search",
              "function": "public_lookup_search",
              "line": 858
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code/answer",
              "function": "public_lookup_answer",
              "line": 878
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code/sections/{section_ref}",
              "function": "public_section_detail",
              "line": 901
            },
            {
              "method": "GET",
              "declared_path": "/townlight_code/sections/{section_ref}/export",
              "function": "public_section_export",
              "line": 937
            },
            {
              "method": "GET",
              "declared_path": "/staff/sources",
              "function": "staff_source_workspace",
              "line": 953
            },
            {
              "method": "GET",
              "declared_path": "/staff/code",
              "function": "staff_code_workspace",
              "line": 970
            },
            {
              "method": "GET",
              "declared_path": "/staff/sync",
              "function": "staff_sync_workspace",
              "line": 983
            },
            {
              "method": "GET",
              "declared_path": "/staff/imports",
              "function": "staff_import_ledger",
              "line": 1000
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 1013
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/operational-state",
              "function": "get_staff_operational_state",
              "line": 1024
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sources/catalog",
              "function": "source_registry_catalog",
              "line": 1036
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/sources",
              "function": "create_source",
              "line": 1050
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sources",
              "function": "list_public_sources",
              "line": 1068
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sources/{source_id}",
              "function": "get_public_source",
              "line": 1079
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/sources",
              "function": "list_staff_sources",
              "line": 1097
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/sources/{source_id}",
              "function": "get_staff_source",
              "line": 1112
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/sources/{source_id}/transitions",
              "function": "transition_source",
              "line": 1127
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/titles",
              "function": "create_title",
              "line": 1148
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/chapters",
              "function": "create_chapter",
              "line": 1163
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/sections",
              "function": "create_section",
              "line": 1178
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/sections/{section_id}/versions",
              "function": "create_section_version",
              "line": 1193
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sections/lookup",
              "function": "lookup_section",
              "line": 1244
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/sections/resolve",
              "function": "resolve_section",
              "line": 1255
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sections/{section_id}/history",
              "function": "section_history",
              "line": 1354
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sections/{section_id}/permalink",
              "function": "section_permalink",
              "line": 1363
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/search",
              "function": "search_sections",
              "line": 1372
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/popular-questions",
              "function": "list_popular_questions",
              "line": 1381
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/popular-questions",
              "function": "create_popular_question",
              "line": 1403
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sections/{section_number}/related",
              "function": "related_materials",
              "line": 1453
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/citations/build",
              "function": "build_citation",
              "line": 1466
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sections/{section_ref}/export",
              "function": "export_section",
              "line": 1472
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/questions/answer",
              "function": "answer_question",
              "line": 1478
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/sections/{section_id}/notes",
              "function": "create_interpretation_note",
              "line": 1494
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/sections/{section_id}/notes",
              "function": "list_interpretation_notes",
              "line": 1517
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/audit-events",
              "function": "list_staff_audit_events",
              "line": 1532
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/imports/local-bundle",
              "function": "create_local_import_job",
              "line": 1548
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/imports/shared-pdf",
              "function": "create_shared_pdf_import_job",
              "line": 1560
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/imports",
              "function": "list_import_jobs",
              "line": 1594
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/imports/{job_id}",
              "function": "get_import_job",
              "line": 1604
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/imports/{job_id}/retry",
              "function": "retry_import_job",
              "line": 1619
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/imports/{job_id}/provenance",
              "function": "get_import_provenance",
              "line": 1635
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/imports/{job_id}/tree",
              "function": "get_imported_tree",
              "line": 1650
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/sync/codifier-sources",
              "function": "configure_codifier_sync_source",
              "line": 1673
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/staff/sync/codifier-sources",
              "function": "list_codifier_sync_sources",
              "line": 1694
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/sync/codifier-sources/{source_id}/run",
              "function": "run_codifier_sync_source",
              "line": 1709
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/townlight_meetings/ordinance-events",
              "function": "create_townlight_meetings_ordinance_event",
              "line": 1730
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/townlight_meetings/ordinance-events/{event_id}/resolve",
              "function": "resolve_townlight_meetings_ordinance_event",
              "line": 1756
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/sections/{section_id}/summaries",
              "function": "create_plain_language_summary",
              "line": 1806
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/summaries/{summary_id}/approve",
              "function": "approve_plain_language_summary",
              "line": 1841
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_code/sections/{section_id}/summaries",
              "function": "list_public_plain_language_summaries",
              "line": 1866
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_code/staff/questions/answer",
              "function": "answer_staff_question",
              "line": 1895
            }
          ],
          "models": [
            {
              "name": "SourceCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str | None",
                  "line": 291
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 292
                },
                {
                  "name": "publisher",
                  "type": "str",
                  "line": 293
                },
                {
                  "name": "source_type",
                  "type": "str",
                  "line": 294
                },
                {
                  "name": "source_category",
                  "type": "str",
                  "line": 295
                },
                {
                  "name": "source_url",
                  "type": "str | None",
                  "line": 296
                },
                {
                  "name": "file_reference",
                  "type": "str | None",
                  "line": 297
                },
                {
                  "name": "retrieved_at",
                  "type": "datetime | None",
                  "line": 298
                },
                {
                  "name": "retrieval_method",
                  "type": "str | None",
                  "line": 299
                },
                {
                  "name": "checksum",
                  "type": "str | None",
                  "line": 300
                },
                {
                  "name": "source_owner",
                  "type": "str | None",
                  "line": 301
                },
                {
                  "name": "is_official",
                  "type": "bool",
                  "line": 302
                },
                {
                  "name": "official_status_note",
                  "type": "str | None",
                  "line": 303
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 304
                },
                {
                  "name": "staff_notes",
                  "type": "str | None",
                  "line": 305
                }
              ],
              "line": 286
            },
            {
              "name": "SourceTransitionRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "to_status",
                  "type": "str",
                  "line": 313
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 314
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 315
                }
              ],
              "line": 308
            },
            {
              "name": "TitleCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title_id",
                  "type": "str | None",
                  "line": 323
                },
                {
                  "name": "title_number",
                  "type": "str",
                  "line": 324
                },
                {
                  "name": "title_name",
                  "type": "str",
                  "line": 325
                },
                {
                  "name": "sort_order",
                  "type": "int",
                  "line": 326
                }
              ],
              "line": 318
            },
            {
              "name": "ChapterCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "chapter_id",
                  "type": "str | None",
                  "line": 334
                },
                {
                  "name": "title_id",
                  "type": "str",
                  "line": 335
                },
                {
                  "name": "chapter_number",
                  "type": "str",
                  "line": 336
                },
                {
                  "name": "chapter_name",
                  "type": "str",
                  "line": 337
                },
                {
                  "name": "sort_order",
                  "type": "int",
                  "line": 338
                }
              ],
              "line": 329
            },
            {
              "name": "SectionCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "section_id",
                  "type": "str | None",
                  "line": 346
                },
                {
                  "name": "chapter_id",
                  "type": "str",
                  "line": 347
                },
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 348
                },
                {
                  "name": "section_heading",
                  "type": "str",
                  "line": 349
                },
                {
                  "name": "parent_section_id",
                  "type": "str | None",
                  "line": 350
                },
                {
                  "name": "sort_order",
                  "type": "int",
                  "line": 351
                },
                {
                  "name": "administrative_regulation_refs",
                  "type": "list[str]",
                  "line": 352
                },
                {
                  "name": "resolution_refs",
                  "type": "list[str]",
                  "line": 353
                },
                {
                  "name": "policy_refs",
                  "type": "list[str]",
                  "line": 354
                },
                {
                  "name": "approved_summary_refs",
                  "type": "list[str]",
                  "line": 355
                }
              ],
              "line": 341
            },
            {
              "name": "SectionVersionCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "version_id",
                  "type": "str | None",
                  "line": 363
                },
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 364
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 365
                },
                {
                  "name": "version_label",
                  "type": "str",
                  "line": 366
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 367
                },
                {
                  "name": "effective_start",
                  "type": "date",
                  "line": 368
                },
                {
                  "name": "effective_end",
                  "type": "date | None",
                  "line": 369
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 370
                },
                {
                  "name": "is_current",
                  "type": "bool",
                  "line": 371
                },
                {
                  "name": "adoption_event_id",
                  "type": "str | None",
                  "line": 372
                },
                {
                  "name": "amendment_event_id",
                  "type": "str | None",
                  "line": 373
                },
                {
                  "name": "amendment_summary",
                  "type": "str | None",
                  "line": 374
                },
                {
                  "name": "prior_version_id",
                  "type": "str | None",
                  "line": 375
                }
              ],
              "line": 358
            },
            {
              "name": "QuestionAnswerRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "question",
                  "type": "str",
                  "line": 383
                },
                {
                  "name": "section_number",
                  "type": "str | None",
                  "line": 384
                },
                {
                  "name": "as_of",
                  "type": "date | None",
                  "line": 385
                }
              ],
              "line": 378
            },
            {
              "name": "SectionResolveRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "consumer_module",
                  "type": "str",
                  "line": 393
                },
                {
                  "name": "section_number",
                  "type": "str | None",
                  "line": 394
                },
                {
                  "name": "query",
                  "type": "str | None",
                  "line": 395
                },
                {
                  "name": "as_of",
                  "type": "date | None",
                  "line": 396
                }
              ],
              "line": 388
            },
            {
              "name": "PopularQuestionCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "question_id",
                  "type": "str | None",
                  "line": 404
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 405
                },
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 406
                },
                {
                  "name": "answer_excerpt",
                  "type": "str",
                  "line": 407
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 408
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 409
                },
                {
                  "name": "is_popular",
                  "type": "bool",
                  "line": 410
                }
              ],
              "line": 399
            },
            {
              "name": "InterpretationNoteCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "note_id",
                  "type": "str | None",
                  "line": 418
                },
                {
                  "name": "note_text",
                  "type": "str",
                  "line": 419
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 420
                }
              ],
              "line": 413
            },
            {
              "name": "PlainLanguageSummaryCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "summary_id",
                  "type": "str | None",
                  "line": 428
                },
                {
                  "name": "section_version_id",
                  "type": "str",
                  "line": 429
                },
                {
                  "name": "summary_text",
                  "type": "str",
                  "line": 430
                },
                {
                  "name": "language_code",
                  "type": "str",
                  "line": 431
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 432
                }
              ],
              "line": 423
            },
            {
              "name": "TownlightMeetingsOrdinanceEventCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str | None",
                  "line": 440
                },
                {
                  "name": "external_event_id",
                  "type": "str",
                  "line": 441
                },
                {
                  "name": "townlight_meetings_meeting_id",
                  "type": "str",
                  "line": 442
                },
                {
                  "name": "townlight_meetings_agenda_item_id",
                  "type": "str",
                  "line": 443
                },
                {
                  "name": "ordinance_number",
                  "type": "str",
                  "line": 444
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 445
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 446
                },
                {
                  "name": "affected_sections",
                  "type": "list[str]",
                  "line": 447
                },
                {
                  "name": "source_document_url",
                  "type": "str",
                  "line": 448
                },
                {
                  "name": "source_document_hash",
                  "type": "str",
                  "line": 449
                },
                {
                  "name": "ordinance_text",
                  "type": "str",
                  "line": 450
                },
                {
                  "name": "adopted_at",
                  "type": "datetime | None",
                  "line": 451
                },
                {
                  "name": "failure_reason",
                  "type": "str | None",
                  "line": 452
                }
              ],
              "line": 435
            },
            {
              "name": "TownlightMeetingsOrdinanceEventResolve",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "section_version_id",
                  "type": "str",
                  "line": 460
                }
              ],
              "line": 455
            },
            {
              "name": "ImportBundleCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "job_id",
                  "type": "str | None",
                  "line": 468
                },
                {
                  "name": "connector_type",
                  "type": "str",
                  "line": 469
                },
                {
                  "name": "source",
                  "type": "SourceCreate",
                  "line": 470
                },
                {
                  "name": "sources",
                  "type": "list[SourceCreate]",
                  "line": 471
                },
                {
                  "name": "titles",
                  "type": "list[TitleCreate]",
                  "line": 472
                },
                {
                  "name": "chapters",
                  "type": "list[ChapterCreate]",
                  "line": 473
                },
                {
                  "name": "sections",
                  "type": "list[SectionCreate]",
                  "line": 474
                },
                {
                  "name": "versions",
                  "type": "list[SectionVersionCreate]",
                  "line": 475
                },
                {
                  "name": "provenance",
                  "type": "dict[str, Any]",
                  "line": 476
                }
              ],
              "line": 463
            },
            {
              "name": "SharedPdfImportCreate",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "pdf_path",
                  "type": "str",
                  "line": 484
                },
                {
                  "name": "force_reingest",
                  "type": "bool",
                  "line": 485
                }
              ],
              "line": 479
            },
            {
              "name": "CodifierSyncConfigureRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 493
                },
                {
                  "name": "sync_schedule",
                  "type": "str",
                  "line": 494
                },
                {
                  "name": "allowlisted_hosts",
                  "type": "list[str]",
                  "line": 495
                }
              ],
              "line": 488
            },
            {
              "name": "CodifierSyncRunRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "payload",
                  "type": "ImportBundleCreate",
                  "line": 503
                },
                {
                  "name": "changed_since",
                  "type": "datetime | None",
                  "line": 504
                }
              ],
              "line": 498
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 1988
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 1999
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 2010
            },
            {
              "environment": "TOWNLIGHT_CODE_DEMO_ACTOR",
              "line": 2062
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 173
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 201
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 224
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 252
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 1567
            },
            {
              "environment": "DATABASE_URL",
              "line": 1567
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 2020
            },
            {
              "environment": "TOWNLIGHT_CODE_DEMO_SEED",
              "line": 2056
            }
          ]
        },
        {
          "source": "townlight_code/migrations/__init__.py",
          "sha256": "df7969bd664b7d37c15448defbfc1facdeabac4576ebe265dbeb6e4a20bf17b8",
          "bytes": 48,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/alembic.ini",
          "sha256": "bd5b1e30a38e20eeef817cd43e76fe592f9c13874624b2421a83d52a78e02440",
          "bytes": 761,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/env.py",
          "sha256": "a6be395a9afcff83bf1b2334cf1f3744409e12c15f226027249df1a0f713366c",
          "bytes": 2408,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 24
            }
          ]
        },
        {
          "source": "townlight_code/migrations/guards.py",
          "sha256": "db594a5a1532e7edc1b68d7c056e5b105e4be028e034ffecc3ba62f8e088124f",
          "bytes": 618,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/__init__.py",
          "sha256": "c86c118637e0149a6a9613dc4d6b106a0777add135b92a628ca3a481bceaad1e",
          "bytes": 47,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0001_schema.py",
          "sha256": "fbaae32609abcfe3b8ac6fe4135f98007fd30c0ed87343acdae133d0de3d17fa",
          "bytes": 7349,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0002_source_registry_records.py",
          "sha256": "3f4ea306bed500f106e2fb3e3c72a699a9fb4834d0467e4670ae54bfcd806749",
          "bytes": 1710,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0003_popular_question_records.py",
          "sha256": "d63be371906b6dbf380391f32892b0c52d9099de8de426a50be6cec0597eca40",
          "bytes": 1766,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0004_section_lifecycle_records.py",
          "sha256": "7930b4b319f4328d518c9500b35cb065aea8fe6b0c15eae9fdaf2844f125c0f0",
          "bytes": 3664,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0005_staff_summary_records.py",
          "sha256": "cfa383851d01d6a8c9a19175c36ab1754af06d8ef9151029d7f7b8a1905dab9d",
          "bytes": 3264,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0006_ordinance_handoff_records.py",
          "sha256": "82d7888ed0048e5e4b2c79ec4eab96ba223527bc1c5bf264525292fce658ef20",
          "bytes": 2283,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0007_import_job_records.py",
          "sha256": "0aadb2d3d74e0f8c166e140fa9ded8b549af7bfc00354ac57bf7645e5e5142d1",
          "bytes": 1429,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0008_codifier_sync.py",
          "sha256": "c0bcc3e99b24e7e4ce2f4a24c8ee2e556b5d7fa77ba55c3627b42b6b7efc368f",
          "bytes": 3028,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0009_operational_state.py",
          "sha256": "fd06ecb49b1f75ab7dbddfc2b29cf3a4730f259c4c2d08a35ef42fcc7d65ef5b",
          "bytes": 1708,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0010_handoff_resolution.py",
          "sha256": "154c2f55ce0b8a5b5d6a301e3ba476f52d0cd6f9757a2821912b4d1c26f5cabf",
          "bytes": 1404,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0011_semantic_search.py",
          "sha256": "dbf61708c6b5ae68dcc085b528b56fb37be906936d225dcce5f12d359ee2a80c",
          "bytes": 1696,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/migrations/versions/townlight_code_0012_drop_local_search.py",
          "sha256": "2665db8af43b4ada8a889cf2745f1e2cd59d69a32e29070650019b035119e290",
          "bytes": 641,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/mock_city_environment.py",
          "sha256": "13ccb031171bc7bfb0dfea4e66dcf3617559be54eaa4c93c9883bef6050ba5c2",
          "bytes": 14208,
          "routes": [],
          "models": [
            {
              "name": "MockCityCodifierContract",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "publisher",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "source_type",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "interface_status",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "source_url",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "retrieval_method",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "auth_method",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "delta_query_param",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "sample_file",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "source_owner",
                  "type": "str",
                  "line": 43
                }
              ],
              "line": 31
            },
            {
              "name": "MockCityCodeCheck",
              "bases": [],
              "fields": [
                {
                  "name": "connector",
                  "type": "str",
                  "line": 69
                },
                {
                  "name": "ok",
                  "type": "bool",
                  "line": 70
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "source_id",
                  "type": "str | None",
                  "line": 73
                },
                {
                  "name": "import_job_id",
                  "type": "str | None",
                  "line": 74
                },
                {
                  "name": "delta_request_url",
                  "type": "str | None",
                  "line": 75
                },
                {
                  "name": "checked_sections",
                  "type": "tuple[str, ...]",
                  "line": 76
                }
              ],
              "line": 66
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/models.py",
          "sha256": "4e3ae05293b927f6b1ce149abf707af12abb5a4181ddfcc77b85f37e5b5da03f",
          "bytes": 7837,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/operational_readiness.py",
          "sha256": "359353d77cf6742700c48f8533149390a9a84daf2a068f71259fb0445d0e4510",
          "bytes": 7124,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/operational_state.py",
          "sha256": "cdb7bd2baa6731dafafbf91f054f28cb763fbfd0a65f80905da44e4da66c6c94",
          "bytes": 11156,
          "routes": [],
          "models": [
            {
              "name": "OperationalStateRecord",
              "bases": [],
              "fields": [
                {
                  "name": "record_id",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "lane",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "record_type",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "subject_id",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "attempt_count",
                  "type": "int",
                  "line": 29
                },
                {
                  "name": "next_attempt_at",
                  "type": "datetime | None",
                  "line": 30
                },
                {
                  "name": "cursor_key",
                  "type": "str | None",
                  "line": 31
                },
                {
                  "name": "cursor_value",
                  "type": "str | None",
                  "line": 32
                },
                {
                  "name": "replay_of",
                  "type": "str | None",
                  "line": 33
                },
                {
                  "name": "payload_hash",
                  "type": "str | None",
                  "line": 34
                },
                {
                  "name": "details",
                  "type": "dict[str, Any]",
                  "line": 35
                },
                {
                  "name": "failure",
                  "type": "dict[str, Any] | None",
                  "line": 36
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 37
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 38
                }
              ],
              "line": 20
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/ordinance_handoff.py",
          "sha256": "3b6c0315d2398e4a967d5c5cbfda07759949495eee24157ed4995a61ca41fe75",
          "bytes": 21987,
          "routes": [],
          "models": [
            {
              "name": "OrdinanceEvent",
              "bases": [],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "external_event_id",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "townlight_meetings_meeting_id",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "townlight_meetings_agenda_item_id",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "ordinance_number",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "affected_sections",
                  "type": "list[str]",
                  "line": 47
                },
                {
                  "name": "source_document_url",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "source_document_hash",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "ordinance_text",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "adopted_at",
                  "type": "datetime | None",
                  "line": 51
                },
                {
                  "name": "failure_reason",
                  "type": "str | None",
                  "line": 52
                },
                {
                  "name": "resolved_section_version_id",
                  "type": "str | None",
                  "line": 53
                },
                {
                  "name": "resolved_by",
                  "type": "str | None",
                  "line": 54
                },
                {
                  "name": "resolved_at",
                  "type": "datetime | None",
                  "line": 55
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 57
                }
              ],
              "line": 39
            },
            {
              "name": "HandoffAuditEvent",
              "bases": [],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "target_id",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 74
                }
              ],
              "line": 69
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/plain_language.py",
          "sha256": "c333624bd8677938ed7817055a4f96d46169c147425a05b2972ea696862ee45e",
          "bytes": 14321,
          "routes": [],
          "models": [
            {
              "name": "PlainLanguageSummary",
              "bases": [],
              "fields": [
                {
                  "name": "summary_id",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "section_version_id",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "summary_text",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "language_code",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 39
                },
                {
                  "name": "approved_at",
                  "type": "datetime | None",
                  "line": 40
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 41
                }
              ],
              "line": 31
            },
            {
              "name": "SummaryAuditEvent",
              "bases": [],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "target_id",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 55
                }
              ],
              "line": 49
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/public_discovery.py",
          "sha256": "656e72f672dc2839d58cc4a26252169ba712265533f60ef7b35e11fc6f6c4a94",
          "bytes": 10332,
          "routes": [],
          "models": [
            {
              "name": "PopularQuestion",
              "bases": [],
              "fields": [
                {
                  "name": "question_id",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "section_heading",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "answer_excerpt",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "citation_payload",
                  "type": "dict[str, Any]",
                  "line": 41
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "is_popular",
                  "type": "bool",
                  "line": 44
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 45
                },
                {
                  "name": "approved_at",
                  "type": "datetime | None",
                  "line": 46
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 47
                }
              ],
              "line": 34
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/public_exports.py",
          "sha256": "9a8a8a7f9db81da204be0d48a0aa9c50df56363d2d3ff37388460b81a447d372",
          "bytes": 6800,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/public_lookup.py",
          "sha256": "15d1d309c6034daade696531c73d5d5d3fbcf48cf459097646b2892422dc38c9",
          "bytes": 23186,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/qa_harness.py",
          "sha256": "db2f1e72367a5c7bd64bff9540bc7c65c6447624e06afc52479da2fc49fde34a",
          "bytes": 5986,
          "routes": [],
          "models": [
            {
              "name": "QuestionRequestContext",
              "bases": [],
              "fields": [
                {
                  "name": "question",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "section_number",
                  "type": "str | None",
                  "line": 41
                },
                {
                  "name": "as_of",
                  "type": "date | None",
                  "line": 42
                }
              ],
              "line": 37
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/real_municipal_fixtures.py",
          "sha256": "e8e7814607ede1b28e0df15341aa44cbc7dad32a07122e4a08205f7db9dacc46",
          "bytes": 10397,
          "routes": [],
          "models": [
            {
              "name": "PortlandSectionFixture",
              "bases": [],
              "fields": [
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "heading",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "source_url",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "file_reference",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "effective_start",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "adoption_event_id",
                  "type": "str | None",
                  "line": 31
                }
              ],
              "line": 22
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/section_lifecycle.py",
          "sha256": "51fd91c02b020575641fcfbc1e2529aaedaad796559742b1aad956a3d7fd1b11",
          "bytes": 42407,
          "routes": [],
          "models": [
            {
              "name": "CodeTitle",
              "bases": [],
              "fields": [
                {
                  "name": "title_id",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "title_number",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "title_name",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "sort_order",
                  "type": "int",
                  "line": 46
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 47
                }
              ],
              "line": 42
            },
            {
              "name": "CodeChapter",
              "bases": [],
              "fields": [
                {
                  "name": "chapter_id",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "title_id",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "chapter_number",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "chapter_name",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "sort_order",
                  "type": "int",
                  "line": 56
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 57
                }
              ],
              "line": 51
            },
            {
              "name": "CodeSection",
              "bases": [],
              "fields": [
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 62
                },
                {
                  "name": "chapter_id",
                  "type": "str",
                  "line": 63
                },
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 64
                },
                {
                  "name": "section_heading",
                  "type": "str",
                  "line": 65
                },
                {
                  "name": "parent_section_id",
                  "type": "str | None",
                  "line": 66
                },
                {
                  "name": "sort_order",
                  "type": "int",
                  "line": 67
                },
                {
                  "name": "administrative_regulation_refs",
                  "type": "list[str]",
                  "line": 68
                },
                {
                  "name": "resolution_refs",
                  "type": "list[str]",
                  "line": 69
                },
                {
                  "name": "policy_refs",
                  "type": "list[str]",
                  "line": 70
                },
                {
                  "name": "approved_summary_refs",
                  "type": "list[str]",
                  "line": 71
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 72
                }
              ],
              "line": 61
            },
            {
              "name": "SectionVersion",
              "bases": [],
              "fields": [
                {
                  "name": "version_id",
                  "type": "str",
                  "line": 77
                },
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "version_label",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "effective_start",
                  "type": "date",
                  "line": 82
                },
                {
                  "name": "effective_end",
                  "type": "date | None",
                  "line": 83
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 84
                },
                {
                  "name": "is_current",
                  "type": "bool",
                  "line": 85
                },
                {
                  "name": "adoption_event_id",
                  "type": "str | None",
                  "line": 86
                },
                {
                  "name": "amendment_event_id",
                  "type": "str | None",
                  "line": 87
                },
                {
                  "name": "amendment_summary",
                  "type": "str | None",
                  "line": 88
                },
                {
                  "name": "prior_version_id",
                  "type": "str | None",
                  "line": 89
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 90
                }
              ],
              "line": 76
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_CODE_SEMANTIC_SCORE_FLOOR",
              "line": 929
            }
          ]
        },
        {
          "source": "townlight_code/semantic_search.py",
          "sha256": "21c05a1238ee9b84e68289c4b7f91e631e4c0a66d30de537b589bce1029fa9f7",
          "bytes": 3889,
          "routes": [],
          "models": [
            {
              "name": "SemanticDocument",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "version_id",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 27
                }
              ],
              "line": 24
            },
            {
              "name": "EmbeddingConfig",
              "bases": [],
              "fields": [
                {
                  "name": "mode",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "base_url",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "model",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "timeout_seconds",
                  "type": "float",
                  "line": 35
                }
              ],
              "line": 31
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_EMBEDDING_MODEL",
              "line": 49
            },
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_EMBEDDING_URL",
              "line": 45
            },
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_URL",
              "line": 46
            },
            {
              "environment": "OLLAMA_BASE_URL",
              "line": 47
            },
            {
              "environment": "TOWNLIGHT_CODE_OLLAMA_EMBEDDING_TIMEOUT_SECONDS",
              "line": 50
            },
            {
              "environment": "TOWNLIGHT_CODE_EMBEDDING_MODE",
              "line": 40
            }
          ]
        },
        {
          "source": "townlight_code/shared_ingestion.py",
          "sha256": "1d16228fdafa8c533a52e528fa9e99e71c9a009099d99e8e6291baa72b14eb5e",
          "bytes": 28230,
          "routes": [],
          "models": [
            {
              "name": "SharedIngestionImport",
              "bases": [],
              "fields": [
                {
                  "name": "payload",
                  "type": "dict[str, Any]",
                  "line": 68
                },
                {
                  "name": "proof",
                  "type": "dict[str, Any]",
                  "line": 69
                }
              ],
              "line": 65
            }
          ],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 172
            },
            {
              "environment": "TOWNLIGHT_CODE_SHARED_INGEST_CHUNK_SIZE",
              "line": 88
            },
            {
              "environment": "TOWNLIGHT_CODE_SHARED_INGEST_CHUNK_OVERLAP",
              "line": 89
            },
            {
              "environment": "TOWNLIGHT_CODE_SHARED_INGEST_ALLOWED_DIRS",
              "line": 252
            },
            {
              "environment": "TOWNLIGHT_CODE_SHARED_INGEST_ALLOWED_DIR",
              "line": 252
            }
          ]
        },
        {
          "source": "townlight_code/source_registry.py",
          "sha256": "4a9b4df376bb2a8456676f95de554ee7508b58892fda9e0342c27186a4740a76",
          "bytes": 20364,
          "routes": [],
          "models": [
            {
              "name": "CodeSource",
              "bases": [],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 77
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "publisher",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "source_type",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "source_category",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "source_url",
                  "type": "str | None",
                  "line": 82
                },
                {
                  "name": "file_reference",
                  "type": "str | None",
                  "line": 83
                },
                {
                  "name": "retrieved_at",
                  "type": "datetime | None",
                  "line": 84
                },
                {
                  "name": "retrieval_method",
                  "type": "str | None",
                  "line": 85
                },
                {
                  "name": "checksum",
                  "type": "str | None",
                  "line": 86
                },
                {
                  "name": "source_owner",
                  "type": "str | None",
                  "line": 87
                },
                {
                  "name": "is_official",
                  "type": "bool",
                  "line": 88
                },
                {
                  "name": "official_status_note",
                  "type": "str | None",
                  "line": 89
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "staff_notes",
                  "type": "str | None",
                  "line": 91
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 92
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 93
                }
              ],
              "line": 74
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/staff_code.py",
          "sha256": "5e182127807244627eee862325e0d8f8bf971487727fd7c82d3a7a96cf35a4de",
          "bytes": 11716,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/staff_imports.py",
          "sha256": "25d0008a594aa2292eea2f3a02a5b8e0d0cc46ff5ba5b3cfbda02c99ee308823",
          "bytes": 12231,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/staff_sources.py",
          "sha256": "2e726e0776a086d4395657fa6d76e3254322faf9329b015c023dafeb3146041e",
          "bytes": 10334,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/staff_sync.py",
          "sha256": "8b8eabf1485a67e877348050645be5d7751d4a0567f3ca3fe404334f230e0b3e",
          "bytes": 12704,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_code/staff_workbench.py",
          "sha256": "542b379f07c9a0ab41f5b002b7eb78b5a193d8c75d011b11bbf683b66b08e60d",
          "bytes": 9134,
          "routes": [],
          "models": [
            {
              "name": "InterpretationNote",
              "bases": [],
              "fields": [
                {
                  "name": "note_id",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "section_id",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "note_text",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 38
                }
              ],
              "line": 31
            },
            {
              "name": "AuditEvent",
              "bases": [],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "event_type",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "section_id",
                  "type": "str | None",
                  "line": 46
                },
                {
                  "name": "target_id",
                  "type": "str | None",
                  "line": 47
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 48
                }
              ],
              "line": 42
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_code/suite_session_auth.py",
          "sha256": "91ee6d997570b8c1e27f3aa2507b1ec005cf2a1bd3e51536fe622d3c03e5a12c",
          "bytes": 9854,
          "routes": [],
          "models": [
            {
              "name": "SuiteSessionPrincipal",
              "bases": [],
              "fields": [
                {
                  "name": "subject",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "roles",
                  "type": "frozenset[str]",
                  "line": 36
                },
                {
                  "name": "session_id",
                  "type": "str",
                  "line": 37
                }
              ],
              "line": 32
            }
          ],
          "configuration": []
        }
      ]
    },
    "zoning": {
      "repository": "townlight/zone",
      "repository_head": "4d2a77a653e42a17aaea8d83d0b196ba83413c57",
      "working_tree_modified": true,
      "principal_import": "townlight_zoning",
      "source": [
        {
          "source": "townlight_zoning/__init__.py",
          "sha256": "c92eb3c3aa9d0fd13b8904cbdc0d75828d3eb4a0cbeaba1165140254ce0889a7",
          "bytes": 58,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/cited_questions.py",
          "sha256": "a243c3887ee4358698008f4753a4877d17c4179ef7f59672ef06429013ea2537",
          "bytes": 12311,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/cited_rules.py",
          "sha256": "ed8c7210d9f0fd320713f32e9c06a9ea03c94252ddcced19d4c60edf98c549ff",
          "bytes": 8521,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/connected_sources.py",
          "sha256": "8bf1acad90f7f66e637a45727fc751a5d74f2c98f893c43f91a41914f8735883",
          "bytes": 11235,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/discretionary.py",
          "sha256": "cd7afa08af24988604e6e3daa7c2db3f6d9103b64d64cc55716725f9ef50afd6",
          "bytes": 10195,
          "routes": [],
          "models": [
            {
              "name": "Unavailable",
              "bases": [],
              "fields": [
                {
                  "name": "reason",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 50
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 51
                }
              ],
              "line": 45
            },
            {
              "name": "NonconformityFlag",
              "bases": [],
              "fields": [
                {
                  "name": "observed",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "standard",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "basis",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 62
                },
                {
                  "name": "determination_made",
                  "type": "bool",
                  "line": 63
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 64
                }
              ],
              "line": 55
            },
            {
              "name": "ProcessExplanation",
              "bases": [],
              "fields": [
                {
                  "name": "process",
                  "type": "str",
                  "line": 69
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "what",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "standard_citation",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "needs",
                  "type": "list",
                  "line": 73
                },
                {
                  "name": "review",
                  "type": "list",
                  "line": 74
                },
                {
                  "name": "source_citation",
                  "type": "dict",
                  "line": 75
                },
                {
                  "name": "standards",
                  "type": "list",
                  "line": 76
                },
                {
                  "name": "flags",
                  "type": "list",
                  "line": 77
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 78
                },
                {
                  "name": "determination_made",
                  "type": "bool",
                  "line": 79
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "as_of",
                  "type": "str | None",
                  "line": 81
                }
              ],
              "line": 68
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/geo_import.py",
          "sha256": "8926ce327572fe40e18e513c04928920a5d14306df6b003fd3e0a466914a5a26",
          "bytes": 13686,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/geo_spatial.py",
          "sha256": "dfe4c88a940a20825c5c493babacb0cb0a96a70cb31a831c3ff1ecb4b77ebc13",
          "bytes": 5469,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/geo_validate.py",
          "sha256": "65b4a2b84722be8c25decfaeb80c6177ff30588259379927e853f7727d767178",
          "bytes": 6419,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/integration_mocks.py",
          "sha256": "a31da986c6165cf5528bf2065ac856d25fdf3576c11e6fed4cf4656dca683bed",
          "bytes": 14445,
          "routes": [],
          "models": [
            {
              "name": "IntegrationError",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "code",
                  "type": "str",
                  "line": 31
                }
              ],
              "line": 27
            },
            {
              "name": "IntegrationResult",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "records",
                  "type": "tuple[dict[str, Any], ...]",
                  "line": 37
                },
                {
                  "name": "source",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "warnings",
                  "type": "tuple[str, ...]",
                  "line": 39
                },
                {
                  "name": "stale",
                  "type": "bool",
                  "line": 40
                }
              ],
              "line": 35
            },
            {
              "name": "LocalIntegrationAdapter",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "dependency",
                  "type": "str | None",
                  "line": 45
                }
              ],
              "line": 43
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/main.py",
          "sha256": "90e869902f36672be17516e85aca88a348e37d2942243deb415cb5f6018f7183",
          "bytes": 27978,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 74
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 92
            },
            {
              "method": "GET",
              "declared_path": "/townlight_zoning",
              "function": "public_townlight_zoning_page",
              "line": 104
            },
            {
              "method": "GET",
              "declared_path": "/townlight_zoning/staff",
              "function": "staff_townlight_zoning_page",
              "line": 111
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/parcels/lookup",
              "function": "parcel_lookup",
              "line": 220
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/rules/use",
              "function": "use_rule_lookup",
              "line": 246
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/rules/dimensional",
              "function": "dimensional_rule_lookup",
              "line": 261
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/standards/process-explanation",
              "function": "discretionary_explanation",
              "line": 283
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/questions/answer",
              "function": "zone_question_answer",
              "line": 353
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/planner-review/classify",
              "function": "planner_review_classify",
              "line": 378
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_zoning/staff/precedents/{precedent_id}",
              "function": "staff_precedent",
              "line": 384
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/staff/questions/answer",
              "function": "staff_question_answer",
              "line": 402
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/staff/ambiguity-reviews",
              "function": "create_ambiguity_review",
              "line": 415
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_zoning/staff/ambiguity-reviews",
              "function": "list_ambiguity_reviews",
              "line": 429
            },
            {
              "method": "PATCH",
              "declared_path": "/api/v1/townlight_zoning/staff/ambiguity-reviews/{item_id}",
              "function": "update_ambiguity_review",
              "line": 443
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_zoning/staff/questions/analytics",
              "function": "staff_question_analytics",
              "line": 472
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/staff/reports/outline",
              "function": "staff_report_outline",
              "line": 496
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_zoning/staff/flagged-answers",
              "function": "create_flagged_answer_review",
              "line": 520
            },
            {
              "method": "PATCH",
              "declared_path": "/api/v1/townlight_zoning/staff/flagged-answers/{review_id}/improve",
              "function": "improve_flagged_answer_review",
              "line": 536
            }
          ],
          "models": [
            {
              "name": "StaffPrincipal",
              "bases": [],
              "fields": [
                {
                  "name": "subject",
                  "type": "str",
                  "line": 69
                },
                {
                  "name": "roles",
                  "type": "tuple[str, ...]",
                  "line": 70
                }
              ],
              "line": 68
            },
            {
              "name": "ParcelLookupRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "parcel_number",
                  "type": "str | None",
                  "line": 118
                },
                {
                  "name": "address",
                  "type": "str | None",
                  "line": 119
                }
              ],
              "line": 117
            },
            {
              "name": "UseRuleLookupRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 123
                },
                {
                  "name": "use",
                  "type": "str",
                  "line": 124
                }
              ],
              "line": 122
            },
            {
              "name": "DimensionalRuleLookupRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 128
                },
                {
                  "name": "rule_type",
                  "type": "str",
                  "line": 129
                }
              ],
              "line": 127
            },
            {
              "name": "ZoneQuestionRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 133
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 134
                }
              ],
              "line": 132
            },
            {
              "name": "PlannerReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "question",
                  "type": "str",
                  "line": 138
                }
              ],
              "line": 137
            },
            {
              "name": "StaffQuestionAnswerRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 143
                }
              ],
              "line": 141
            },
            {
              "name": "AmbiguityReviewCreateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 147
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 148
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 149
                }
              ],
              "line": 146
            },
            {
              "name": "AmbiguityReviewUpdateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 153
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 154
                },
                {
                  "name": "resolution",
                  "type": "str | None",
                  "line": 155
                }
              ],
              "line": 152
            },
            {
              "name": "StaffReportOutlineRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 159
                },
                {
                  "name": "question_ids",
                  "type": "list[str]",
                  "line": 160
                },
                {
                  "name": "queue_item_ids",
                  "type": "list[str]",
                  "line": 161
                }
              ],
              "line": 158
            },
            {
              "name": "FlaggedAnswerCreateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 165
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 166
                },
                {
                  "name": "original_answer",
                  "type": "str",
                  "line": 167
                },
                {
                  "name": "flag_reason",
                  "type": "str",
                  "line": 168
                },
                {
                  "name": "citations",
                  "type": "list[str]",
                  "line": 169
                }
              ],
              "line": 164
            },
            {
              "name": "FlaggedAnswerImproveRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "improved_answer",
                  "type": "str",
                  "line": 173
                },
                {
                  "name": "improvement_notes",
                  "type": "str",
                  "line": 174
                }
              ],
              "line": 172
            },
            {
              "name": "DiscretionaryExplanationRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "process_section",
                  "type": "str",
                  "line": 275
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 276
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 277
                },
                {
                  "name": "rule_types",
                  "type": "list[str]",
                  "line": 278
                },
                {
                  "name": "observed",
                  "type": "dict[str, str]",
                  "line": 279
                }
              ],
              "line": 274
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_ZONING_PARCEL_RULE_DB_URL",
              "line": 559
            }
          ]
        },
        {
          "source": "townlight_zoning/migrations/__init__.py",
          "sha256": "5b0db2ee33fc0c4091e615e58fc97420e861a39c50b7a37a090ba8e117c9869e",
          "bytes": 43,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/alembic.ini",
          "sha256": "d5dee873fc4cceb1d53bfae71f8fbed319dd4c1b93934e35cbb271d3b97c9c08",
          "bytes": 580,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/env.py",
          "sha256": "5d437b18f5267667c260fe384f6617648d57d940e2d3a91de05b79aa87598e21",
          "bytes": 2206,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 22
            }
          ]
        },
        {
          "source": "townlight_zoning/migrations/guards.py",
          "sha256": "6dff39d29a7936155d1bd5e3ff9b84e09548beeff7a031cdf1172a6855128398",
          "bytes": 543,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/__init__.py",
          "sha256": "6529bd8ce272c2c512ceda3ababea3a9d17dc04e8842f3a7f991657e1c7a8d72",
          "bytes": 44,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/townlight_zoning_0001_schema.py",
          "sha256": "c0a1010064afac0904ec92314f0c03c6820a360e75f36df523962226008fd2bf",
          "bytes": 5813,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/townlight_zoning_0002_parcel_rule_lookup_records.py",
          "sha256": "1a69bdf0eee9bd044ca970eb5ea23eb72abb778dbf313c9c53cb00ca57f374ab",
          "bytes": 2733,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/townlight_zoning_0003_question_ledger.py",
          "sha256": "5161cc3504e7be2f7b59c893d7d94f2fc42ab141b501b01c745c86833d9cc943",
          "bytes": 1372,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/townlight_zoning_0004_staff_workflows.py",
          "sha256": "a6101844d74baca978f82703ceedcaa817452cb2bcabe20cb6863fdd8d8714ef",
          "bytes": 3447,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/townlight_zoning_0005_geo_import.py",
          "sha256": "e0a14dadd86311b9af7e66c34c33d94ea9b3a2489c59c3b188b870e77ba48c6f",
          "bytes": 3920,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/migrations/versions/townlight_zoning_0006_cited_questions.py",
          "sha256": "5195cf011c8c384b5c0a3b7cf7abc1b3414f59dc8e92a37c5248c6f8dfada527",
          "bytes": 2398,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/models.py",
          "sha256": "bdbc7553151a8bd14d24bd9f50a929087a08fa9ce8a17cd8398cd665753aee93",
          "bytes": 6251,
          "routes": [],
          "models": [
            {
              "name": "TimestampMixin",
              "bases": [],
              "fields": [
                {
                  "name": "created_at",
                  "type": "Mapped[object]",
                  "line": 13
                },
                {
                  "name": "updated_at",
                  "type": "Mapped[object]",
                  "line": 16
                }
              ],
              "line": 12
            },
            {
              "name": "IdMixin",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 22
                }
              ],
              "line": 21
            },
            {
              "name": "Zone",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 29
                },
                {
                  "name": "code",
                  "type": "Mapped[str]",
                  "line": 31
                },
                {
                  "name": "name",
                  "type": "Mapped[str]",
                  "line": 32
                },
                {
                  "name": "description",
                  "type": "Mapped[str | None]",
                  "line": 33
                },
                {
                  "name": "jurisdiction",
                  "type": "Mapped[str]",
                  "line": 34
                },
                {
                  "name": "source_section_ref",
                  "type": "Mapped[str | None]",
                  "line": 35
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 36
                }
              ],
              "line": 27
            },
            {
              "name": "Overlay",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 41
                },
                {
                  "name": "code",
                  "type": "Mapped[str]",
                  "line": 43
                },
                {
                  "name": "name",
                  "type": "Mapped[str]",
                  "line": 44
                },
                {
                  "name": "description",
                  "type": "Mapped[str | None]",
                  "line": 45
                },
                {
                  "name": "source_section_ref",
                  "type": "Mapped[str | None]",
                  "line": 46
                },
                {
                  "name": "is_active",
                  "type": "Mapped[bool]",
                  "line": 47
                }
              ],
              "line": 39
            },
            {
              "name": "Parcel",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 52
                },
                {
                  "name": "parcel_number",
                  "type": "Mapped[str]",
                  "line": 54
                },
                {
                  "name": "address",
                  "type": "Mapped[str]",
                  "line": 55
                },
                {
                  "name": "zone_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 56
                },
                {
                  "name": "overlay_payload",
                  "type": "Mapped[dict]",
                  "line": 57
                },
                {
                  "name": "geometry_ref",
                  "type": "Mapped[str | None]",
                  "line": 58
                },
                {
                  "name": "source_payload",
                  "type": "Mapped[dict]",
                  "line": 59
                }
              ],
              "line": 50
            },
            {
              "name": "UseCategory",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 64
                },
                {
                  "name": "code",
                  "type": "Mapped[str]",
                  "line": 66
                },
                {
                  "name": "label",
                  "type": "Mapped[str]",
                  "line": 67
                },
                {
                  "name": "description",
                  "type": "Mapped[str | None]",
                  "line": 68
                }
              ],
              "line": 62
            },
            {
              "name": "UseRule",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 73
                },
                {
                  "name": "zone_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 75
                },
                {
                  "name": "use_category_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 76
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 79
                },
                {
                  "name": "review_path",
                  "type": "Mapped[str | None]",
                  "line": 80
                },
                {
                  "name": "source_section_ref",
                  "type": "Mapped[str | None]",
                  "line": 81
                },
                {
                  "name": "conditions",
                  "type": "Mapped[dict]",
                  "line": 82
                }
              ],
              "line": 71
            },
            {
              "name": "DimensionalRule",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 87
                },
                {
                  "name": "zone_id",
                  "type": "Mapped[uuid.UUID]",
                  "line": 89
                },
                {
                  "name": "rule_type",
                  "type": "Mapped[str]",
                  "line": 90
                },
                {
                  "name": "value_text",
                  "type": "Mapped[str]",
                  "line": 91
                },
                {
                  "name": "source_section_ref",
                  "type": "Mapped[str | None]",
                  "line": 92
                },
                {
                  "name": "applies_to",
                  "type": "Mapped[str | None]",
                  "line": 93
                }
              ],
              "line": 85
            },
            {
              "name": "Citation",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 98
                },
                {
                  "name": "source_section_ref",
                  "type": "Mapped[str]",
                  "line": 100
                },
                {
                  "name": "citation_text",
                  "type": "Mapped[str]",
                  "line": 101
                },
                {
                  "name": "url",
                  "type": "Mapped[str | None]",
                  "line": 102
                },
                {
                  "name": "retrieved_at",
                  "type": "Mapped[object | None]",
                  "line": 103
                }
              ],
              "line": 96
            },
            {
              "name": "Precedent",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 108
                },
                {
                  "name": "title",
                  "type": "Mapped[str]",
                  "line": 110
                },
                {
                  "name": "body",
                  "type": "Mapped[str]",
                  "line": 111
                },
                {
                  "name": "visibility",
                  "type": "Mapped[str]",
                  "line": 112
                },
                {
                  "name": "source_ref",
                  "type": "Mapped[str | None]",
                  "line": 113
                },
                {
                  "name": "tags",
                  "type": "Mapped[dict]",
                  "line": 114
                }
              ],
              "line": 106
            },
            {
              "name": "InterpretationNote",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 119
                },
                {
                  "name": "zone_id",
                  "type": "Mapped[uuid.UUID | None]",
                  "line": 121
                },
                {
                  "name": "note_text",
                  "type": "Mapped[str]",
                  "line": 122
                },
                {
                  "name": "visibility",
                  "type": "Mapped[str]",
                  "line": 123
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 124
                }
              ],
              "line": 117
            },
            {
              "name": "ZoneQuestion",
              "bases": [
                "IdMixin",
                "TimestampMixin",
                "Base"
              ],
              "fields": [
                {
                  "name": "__table_args__",
                  "type": "ClassVar[dict]",
                  "line": 129
                },
                {
                  "name": "question_text",
                  "type": "Mapped[str]",
                  "line": 131
                },
                {
                  "name": "audience",
                  "type": "Mapped[str]",
                  "line": 132
                },
                {
                  "name": "status",
                  "type": "Mapped[str]",
                  "line": 133
                },
                {
                  "name": "answer_text",
                  "type": "Mapped[str | None]",
                  "line": 134
                },
                {
                  "name": "citation_payload",
                  "type": "Mapped[dict]",
                  "line": 135
                },
                {
                  "name": "escalation_reason",
                  "type": "Mapped[str | None]",
                  "line": 136
                }
              ],
              "line": 127
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/parcel_lookup.py",
          "sha256": "45703bbce2f91f8c6f2b86b3571314d6bafeaf58ba6965b6a7e9c7e3b01b925f",
          "bytes": 6367,
          "routes": [],
          "models": [
            {
              "name": "ParcelLookupResult",
              "bases": [],
              "fields": [
                {
                  "name": "parcel_number",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "address",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "zone_name",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "overlays",
                  "type": "tuple[str, ...]",
                  "line": 17
                },
                {
                  "name": "constraints",
                  "type": "tuple[str, ...]",
                  "line": 18
                },
                {
                  "name": "source",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 20
                }
              ],
              "line": 12
            },
            {
              "name": "ParcelLookupError",
              "bases": [],
              "fields": [
                {
                  "name": "message",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 26
                }
              ],
              "line": 24
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/public_ui.py",
          "sha256": "494537866bf7b7198eef0cefa59d83c8ad6608ccc44b1c521a4b1a58a041a58c",
          "bytes": 12835,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/qa.py",
          "sha256": "adad43278cb57b3c83032117d46df2b48b919354cb92083162389993cfb29f85",
          "bytes": 4699,
          "routes": [],
          "models": [
            {
              "name": "ZoneAnswer",
              "bases": [],
              "fields": [
                {
                  "name": "answer",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 18
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "confidence",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "next_step",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 23
                }
              ],
              "line": 16
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/question_ledger.py",
          "sha256": "7895c6ba5ec3eb4fba1666cf42ba131a389570c308237b01a91473b937c761b6",
          "bytes": 4945,
          "routes": [],
          "models": [
            {
              "name": "ZoneQuestionLedgerRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "answer_text",
                  "type": "str | None",
                  "line": 38
                },
                {
                  "name": "citation_payload",
                  "type": "tuple[str, ...]",
                  "line": 39
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "escalation_reason",
                  "type": "str | None",
                  "line": 41
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 42
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 43
                }
              ],
              "line": 32
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/rule_lookup.py",
          "sha256": "b69c6e8a89cf2586b05984ccb6079164c75fa460c053fca546c3e771ea8c75f5",
          "bytes": 9642,
          "routes": [],
          "models": [
            {
              "name": "UseRuleResult",
              "bases": [],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "use",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "review_path",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 20
                }
              ],
              "line": 14
            },
            {
              "name": "DimensionalRuleResult",
              "bases": [],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "rule_type",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "value",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 29
                }
              ],
              "line": 24
            },
            {
              "name": "RuleLookupError",
              "bases": [],
              "fields": [
                {
                  "name": "message",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 35
                }
              ],
              "line": 33
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/staff_context.py",
          "sha256": "50784c2b595741098e2de9d9ad90a7957607ae09839afe6167af13e38037c91c",
          "bytes": 1368,
          "routes": [],
          "models": [
            {
              "name": "EscalationResult",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "next_step",
                  "type": "str",
                  "line": 12
                }
              ],
              "line": 9
            },
            {
              "name": "StaffPrecedent",
              "bases": [],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 19
                }
              ],
              "line": 16
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_zoning/staff_ui.py",
          "sha256": "0b9f26845887662a88e643224360e3c89b11d0fbe88dcca0e865c57fecb623ee",
          "bytes": 8358,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_zoning/staff_workflows.py",
          "sha256": "620797c1132212795b703d5a452553be1d0b4f2ae73082e9b26c52615a95b498",
          "bytes": 24606,
          "routes": [],
          "models": [
            {
              "name": "CodeCrossReference",
              "bases": [],
              "fields": [
                {
                  "name": "citation",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "source",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "relevance",
                  "type": "str",
                  "line": 83
                }
              ],
              "line": 80
            },
            {
              "name": "StaffQuestionRecord",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 88
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 89
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "answer_text",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 93
                },
                {
                  "name": "code_cross_references",
                  "type": "tuple[CodeCrossReference, ...]",
                  "line": 94
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 96
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 98
                }
              ],
              "line": 87
            },
            {
              "name": "AmbiguityReviewItem",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 103
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 104
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 105
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 106
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 107
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 108
                },
                {
                  "name": "resolution",
                  "type": "str | None",
                  "line": 109
                },
                {
                  "name": "source_question_id",
                  "type": "str | None",
                  "line": 110
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 111
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 112
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 113
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 114
                }
              ],
              "line": 102
            },
            {
              "name": "HighVolumeQuestion",
              "bases": [],
              "fields": [
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 119
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 120
                },
                {
                  "name": "count",
                  "type": "int",
                  "line": 121
                },
                {
                  "name": "statuses",
                  "type": "tuple[str, ...]",
                  "line": 122
                },
                {
                  "name": "latest_question_id",
                  "type": "str",
                  "line": 123
                }
              ],
              "line": 118
            },
            {
              "name": "StaffQuestionAnalytics",
              "bases": [],
              "fields": [
                {
                  "name": "total_questions",
                  "type": "int",
                  "line": 128
                },
                {
                  "name": "by_status",
                  "type": "dict[str, int]",
                  "line": 129
                },
                {
                  "name": "high_volume_questions",
                  "type": "tuple[HighVolumeQuestion, ...]",
                  "line": 130
                },
                {
                  "name": "generated_at",
                  "type": "datetime",
                  "line": 131
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 132
                }
              ],
              "line": 127
            },
            {
              "name": "StaffReportOutline",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 137
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 138
                },
                {
                  "name": "sections",
                  "type": "tuple[dict[str, object], ...]",
                  "line": 139
                },
                {
                  "name": "source_question_ids",
                  "type": "tuple[str, ...]",
                  "line": 140
                },
                {
                  "name": "source_queue_item_ids",
                  "type": "tuple[str, ...]",
                  "line": 141
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 143
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 144
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 145
                }
              ],
              "line": 136
            },
            {
              "name": "FlaggedAnswerReview",
              "bases": [],
              "fields": [
                {
                  "name": "id",
                  "type": "str",
                  "line": 150
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 151
                },
                {
                  "name": "question_text",
                  "type": "str",
                  "line": 152
                },
                {
                  "name": "original_answer",
                  "type": "str",
                  "line": 153
                },
                {
                  "name": "flag_reason",
                  "type": "str",
                  "line": 154
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 155
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 156
                },
                {
                  "name": "improved_answer",
                  "type": "str | None",
                  "line": 157
                },
                {
                  "name": "improvement_notes",
                  "type": "str | None",
                  "line": 158
                },
                {
                  "name": "reviewed_by",
                  "type": "str | None",
                  "line": 159
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 160
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 161
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 162
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 163
                }
              ],
              "line": 149
            }
          ],
          "configuration": []
        }
      ]
    },
    "planning": {
      "repository": "townlight/plan",
      "repository_head": "8dc9e455a5f4bb916b66d65da820914cfab42af1",
      "working_tree_modified": true,
      "principal_import": "townlight_planning",
      "source": [
        {
          "source": "townlight_planning/__init__.py",
          "sha256": "e435f903a2e808bb3d38271366e0a2bad2d7333e20d4cb69839f5a4891fe8af6",
          "bytes": 65,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/connections.py",
          "sha256": "649c8474e787fca1e30a11f153d2f776283204b5dc8053b7e88fbc325cdcf944",
          "bytes": 2293,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/consistency.py",
          "sha256": "6bfcecb82ae9ebdceb7760c10eb9ae00b5d6895474cb4dc636b8bc0e448e4aaf",
          "bytes": 1759,
          "routes": [],
          "models": [
            {
              "name": "ConsistencyCheck",
              "bases": [],
              "fields": [
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "factors",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "staff_next_step",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/integration_mocks.py",
          "sha256": "f70c0cc39c08cd7e5044c67e39e735fea4857313a6f8eae9f8d1cf838523215f",
          "bytes": 5350,
          "routes": [],
          "models": [
            {
              "name": "IntegrationError",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "code",
                  "type": "str",
                  "line": 22
                }
              ],
              "line": 18
            },
            {
              "name": "IntegrationResult",
              "bases": [],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "records",
                  "type": "tuple[dict[str, Any], ...]",
                  "line": 28
                },
                {
                  "name": "source",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "warnings",
                  "type": "tuple[str, ...]",
                  "line": 30
                }
              ],
              "line": 26
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/main.py",
          "sha256": "f1132f0cd9b3b169a835565f146a8575b918687ff95650ba87ac917daa462c6d",
          "bytes": 25178,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 130
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 148
            },
            {
              "method": "GET",
              "declared_path": "/townlight_planning",
              "function": "public_townlight_planning_page",
              "line": 194
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_planning/public/plan-explore",
              "function": "public_plan_explore",
              "line": 221
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_planning/public/policy/{revision_id}/{policy_id}",
              "function": "public_policy_citation",
              "line": 238
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/policies/lookup",
              "function": "policy_lookup",
              "line": 257
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/policies/ingest",
              "function": "ingest_policy",
              "line": 271
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_planning/plans/navigator",
              "function": "plans_navigator",
              "line": 284
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/questions/answer",
              "function": "plan_question_answer",
              "line": 293
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/plans/synthesis",
              "function": "plan_synthesis",
              "line": 307
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/context/townlight_meetings",
              "function": "townlight_meetings_context",
              "line": 315
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/integrations/mock",
              "function": "integration_mock",
              "line": 329
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/context/zoning",
              "function": "zoning_policy_context",
              "line": 350
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/consistency/check",
              "function": "consistency_check",
              "line": 379
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/staff-analysis/draft",
              "function": "staff_analysis",
              "line": 393
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_planning/staff-analysis/{analysis_id}",
              "function": "get_staff_analysis",
              "line": 420
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_planning/export",
              "function": "policy_export",
              "line": 452
            }
          ],
          "models": [
            {
              "name": "PolicyLookupRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "topic",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 67
                }
              ],
              "line": 65
            },
            {
              "name": "ZoningPolicyContextRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "topic",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "zone_code",
                  "type": "str | None",
                  "line": 72
                },
                {
                  "name": "use",
                  "type": "str | None",
                  "line": 73
                },
                {
                  "name": "parcel_number",
                  "type": "str | None",
                  "line": 74
                },
                {
                  "name": "address",
                  "type": "str | None",
                  "line": 75
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 76
                },
                {
                  "name": "townlight_zoning_context_id",
                  "type": "str | None",
                  "line": 77
                }
              ],
              "line": 70
            },
            {
              "name": "ConsistencyRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 82
                }
              ],
              "line": 80
            },
            {
              "name": "StaffAnalysisRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 88
                }
              ],
              "line": 85
            },
            {
              "name": "PolicyExportRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "snapshot_id",
                  "type": "str | None",
                  "line": 95
                }
              ],
              "line": 91
            },
            {
              "name": "PolicyIngestRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "topic_key",
                  "type": "str",
                  "line": 99
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 100
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 101
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 102
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 103
                },
                {
                  "name": "excerpt",
                  "type": "str",
                  "line": 104
                },
                {
                  "name": "relevance",
                  "type": "str",
                  "line": 105
                },
                {
                  "name": "adoption_status",
                  "type": "str",
                  "line": 106
                },
                {
                  "name": "source_document",
                  "type": "str",
                  "line": 107
                }
              ],
              "line": 98
            },
            {
              "name": "PlanQuestionRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "question",
                  "type": "str",
                  "line": 111
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 112
                }
              ],
              "line": 110
            },
            {
              "name": "PlanSynthesisRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "topic",
                  "type": "str",
                  "line": 116
                }
              ],
              "line": 115
            },
            {
              "name": "TownlightMeetingsContextRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "agenda_item",
                  "type": "str",
                  "line": 120
                },
                {
                  "name": "topic",
                  "type": "str",
                  "line": 121
                }
              ],
              "line": 119
            },
            {
              "name": "IntegrationMockRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "str",
                  "line": 125
                },
                {
                  "name": "payload",
                  "type": "dict[str, object]",
                  "line": 126
                }
              ],
              "line": 124
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_PLANNING_POLICY_DB_URL",
              "line": 470
            },
            {
              "environment": "TOWNLIGHT_PLANNING_DEMO_MODE",
              "line": 497
            }
          ]
        },
        {
          "source": "townlight_planning/migrations/__init__.py",
          "sha256": "d633520d0fcec8ca93f8f5dc22e206cc65ea5c646a8a61e89eb6614d51008986",
          "bytes": 2183,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/migrations/__main__.py",
          "sha256": "dc61223a3923f9e2b085e0dab9e033dcf799f99b08f4c808638824e0d303d13b",
          "bytes": 647,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "TOWNLIGHT_PLANNING_POLICY_DB_URL",
              "line": 7
            }
          ]
        },
        {
          "source": "townlight_planning/migrations/env.py",
          "sha256": "c1dcc827b65af850e94f41ac02aec0528ad0abaf5b0d6a22e5773df2ceadaafc",
          "bytes": 442,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/migrations/versions/townlight_planning_0001_sources.py",
          "sha256": "0552047ca4ca0eee1eaf5878f3f8f759e188da8d371a377efc93df9867ac2601",
          "bytes": 1608,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/migrations/versions/townlight_planning_0002_workflows.py",
          "sha256": "eba85cad351b499cd7456e68305309d92cb4c3087e355417df5259458d9c3f4f",
          "bytes": 1093,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/migrations/versions/townlight_planning_0003_municipal.py",
          "sha256": "c66314f036cb2c96263eafece836760e1fb0c31b96578238c5c900cdd5477417",
          "bytes": 1200,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/migrations/versions/townlight_planning_0004_neighborhoods.py",
          "sha256": "5db83c05d550ab4f9f0a414c6f139fa454bdc03ae1c7963e55290ecbc8fd644a",
          "bytes": 853,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/municipal.py",
          "sha256": "97e153119e296d9529f3c6b4e51d40be446fb3fed12a41c301b0fc3aa70b4e10",
          "bytes": 12736,
          "routes": [],
          "models": [
            {
              "name": "Measurement",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "recorded_on",
                  "type": "date",
                  "line": 42
                },
                {
                  "name": "value",
                  "type": "Decimal",
                  "line": 43
                },
                {
                  "name": "evidence",
                  "type": "str",
                  "line": 44
                }
              ],
              "line": 41
            },
            {
              "name": "Milestone",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "due_on",
                  "type": "date",
                  "line": 55
                },
                {
                  "name": "completed_on",
                  "type": "date | None",
                  "line": 56
                },
                {
                  "name": "evidence",
                  "type": "str",
                  "line": 57
                }
              ],
              "line": 53
            },
            {
              "name": "InitiativeInput",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "str | None",
                  "line": 67
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 68
                },
                {
                  "name": "policy",
                  "type": "PolicySelection",
                  "line": 69
                },
                {
                  "name": "responsible_staff",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "target",
                  "type": "Decimal",
                  "line": 71
                },
                {
                  "name": "unit",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "due_on",
                  "type": "date",
                  "line": 73
                },
                {
                  "name": "status",
                  "type": "Literal['planned', 'active', 'completed', 'cancelled']",
                  "line": 74
                },
                {
                  "name": "milestones",
                  "type": "list[Milestone]",
                  "line": 75
                },
                {
                  "name": "measurements",
                  "type": "list[Measurement]",
                  "line": 76
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 77
                }
              ],
              "line": 66
            },
            {
              "name": "AmendmentInput",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "str | None",
                  "line": 91
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "policy",
                  "type": "PolicySelection",
                  "line": 93
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "responsible_staff",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "status",
                  "type": "Literal['draft', 'review', 'adopted', 'withdrawn']",
                  "line": 96
                },
                {
                  "name": "review_note",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "adoption_revision",
                  "type": "str | None",
                  "line": 98
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 99
                }
              ],
              "line": 90
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/municipal_api.py",
          "sha256": "8b6b99a44b2a2b186f1e2c6c0c09a4815c8aa7184f60993aab6e45ffbc2fa5bd",
          "bytes": 2323,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/initiatives",
              "function": "create_initiative",
              "line": 17
            },
            {
              "method": "POST",
              "declared_path": "/initiatives/{item_id}/revisions",
              "function": "update_initiative",
              "line": 22
            },
            {
              "method": "POST",
              "declared_path": "/amendments",
              "function": "create_amendment",
              "line": 29
            },
            {
              "method": "POST",
              "declared_path": "/amendments/{item_id}/revisions",
              "function": "update_amendment",
              "line": 34
            },
            {
              "method": "GET",
              "declared_path": "/municipal-work/{item_id}/history",
              "function": "history",
              "line": 41
            },
            {
              "method": "GET",
              "declared_path": "/progress/targets",
              "function": "progress",
              "line": 49
            },
            {
              "method": "GET",
              "declared_path": "/amendments/history",
              "function": "amendments",
              "line": 60
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/persistence.py",
          "sha256": "3a19584080cbb99c2a3bccd9673fe57d0abf20ecae8ad541cabccb42bccc9465",
          "bytes": 10309,
          "routes": [],
          "models": [
            {
              "name": "StoredStaffAnalysis",
              "bases": [],
              "fields": [
                {
                  "name": "analysis_id",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 54
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "heading",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "bullets",
                  "type": "tuple[str, ...]",
                  "line": 57
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 58
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 59
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 61
                }
              ],
              "line": 51
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/plan_workflows.py",
          "sha256": "d303125e8b39b632081b320ca96869c729c3941fd29d1e34d8daae3e35038414",
          "bytes": 7954,
          "routes": [],
          "models": [
            {
              "name": "PlanPolicyIngestRecord",
              "bases": [],
              "fields": [
                {
                  "name": "topic_key",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "policy",
                  "type": "PlanPolicy",
                  "line": 16
                },
                {
                  "name": "adoption_status",
                  "type": "PlanStatus",
                  "line": 17
                },
                {
                  "name": "source_document",
                  "type": "str",
                  "line": 18
                }
              ],
              "line": 14
            },
            {
              "name": "PlanQuestionAnswer",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "answer",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 25
                },
                {
                  "name": "source_policy_ids",
                  "type": "tuple[str, ...]",
                  "line": 26
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 27
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 28
                }
              ],
              "line": 22
            },
            {
              "name": "PlanAmendment",
              "bases": [],
              "fields": [
                {
                  "name": "amendment_id",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "adoption_status",
                  "type": "PlanStatus",
                  "line": 36
                },
                {
                  "name": "adopted_date",
                  "type": "str | None",
                  "line": 37
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 39
                }
              ],
              "line": 32
            },
            {
              "name": "ProgressTarget",
              "bases": [],
              "fields": [
                {
                  "name": "target_id",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "metric",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 47
                },
                {
                  "name": "evidence",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 50
                }
              ],
              "line": 43
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/policy_lookup.py",
          "sha256": "eef53ba621332d75f069f00ddcac34c19bca42d469a697fd22555eb3d11c68b2",
          "bytes": 3155,
          "routes": [],
          "models": [
            {
              "name": "PlanPolicy",
              "bases": [],
              "fields": [
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "excerpt",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "relevance",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 23
                }
              ],
              "line": 16
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/policy_service.py",
          "sha256": "27fa2483c62a98d4bb4b80a8b88598e7366c9a8ad421701e594e0f71d7f1ddc4",
          "bytes": 5990,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/public_explore.py",
          "sha256": "2ff3160485f6a947db8e6cf38f56b7e0259c0f5492b714aed40dafd974351dd3",
          "bytes": 7151,
          "routes": [],
          "models": [
            {
              "name": "Exploration",
              "bases": [],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "goal",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "topic",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "neighborhood",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "plans",
                  "type": "list",
                  "line": 42
                },
                {
                  "name": "total",
                  "type": "int",
                  "line": 43
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 44
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "empty_reason",
                  "type": "str | None",
                  "line": 46
                },
                {
                  "name": "facets",
                  "type": "dict",
                  "line": 49
                }
              ],
              "line": 34
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/public_explore_ui.py",
          "sha256": "609356af82f905829d271060c9150ddb4f5576b201ae7d91a9a6027252406869",
          "bytes": 9868,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/public_ui.py",
          "sha256": "8551ce36f854a4a7fc4573a20b73dbb0b6f01d7b60b7267d8c73b5f21f246ccc",
          "bytes": 6946,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/records_export.py",
          "sha256": "f846832525f23c4183db12742de37c3ce68fe4c57219762e2a5ac81947965d1c",
          "bytes": 1294,
          "routes": [],
          "models": [
            {
              "name": "PolicyExport",
              "bases": [],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "retention_note",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/source_api.py",
          "sha256": "42ff7e02374c4624112c104bcb8a246b62f3fbc68110b008e5a1fbfa66295207",
          "bytes": 3468,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/source-imports",
              "function": "import_sources",
              "line": 51
            },
            {
              "method": "GET",
              "declared_path": "/source-plans/{plan_id}/history",
              "function": "source_history",
              "line": 63
            },
            {
              "method": "GET",
              "declared_path": "/source-revisions/{revision_id}",
              "function": "source_revision",
              "line": 68
            },
            {
              "method": "GET",
              "declared_path": "/source-revisions/{revision_id}/documents/{document_id}",
              "function": "source_document",
              "line": 76
            }
          ],
          "models": [
            {
              "name": "ImportRequest",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "PlanBundle",
                  "line": 46
                },
                {
                  "name": "expected_previous_revision",
                  "type": "str | None",
                  "line": 47
                }
              ],
              "line": 45
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_PLANNING_POLICY_DB_URL",
              "line": 31
            }
          ]
        },
        {
          "source": "townlight_planning/source_bundle.py",
          "sha256": "f6547516067e27697dfcd6ba80de6e2ca03d1473370209aa354a5bf95b7db98a",
          "bytes": 6466,
          "routes": [],
          "models": [
            {
              "name": "SourceDocument",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "document_id",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "media_type",
                  "type": "Literal['text/plain', 'text/markdown', 'application/pdf', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']",
                  "line": 21
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "content_base64",
                  "type": "str",
                  "line": 26
                }
              ],
              "line": 18
            },
            {
              "name": "SourcePolicy",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 63
                },
                {
                  "name": "document_id",
                  "type": "str",
                  "line": 64
                },
                {
                  "name": "goal",
                  "type": "str",
                  "line": 65
                },
                {
                  "name": "objective",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "topic_key",
                  "type": "str",
                  "line": 67
                },
                {
                  "name": "neighborhoods",
                  "type": "list[str]",
                  "line": 68
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 69
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "anchor",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "excerpt",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "relevance",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "staff_verified",
                  "type": "Literal[True]",
                  "line": 74
                }
              ],
              "line": 62
            },
            {
              "name": "AdoptionEvidence",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "kind",
                  "type": "Literal['manual-record', 'meeting-reference', 'source-document']",
                  "line": 78
                },
                {
                  "name": "reference",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "document_id",
                  "type": "str | None",
                  "line": 80
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 81
                }
              ],
              "line": 77
            },
            {
              "name": "PlanBundle",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "schema_version",
                  "type": "Literal[1]",
                  "line": 85
                },
                {
                  "name": "plan_id",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 88
                },
                {
                  "name": "plan_type",
                  "type": "PlanType",
                  "line": 89
                },
                {
                  "name": "status",
                  "type": "Literal['pending', 'adopted', 'superseded']",
                  "line": 90
                },
                {
                  "name": "visibility",
                  "type": "Literal['staff', 'public']",
                  "line": 91
                },
                {
                  "name": "dataset_kind",
                  "type": "Literal['municipal', 'demo']",
                  "line": 92
                },
                {
                  "name": "source_date",
                  "type": "date",
                  "line": 93
                },
                {
                  "name": "adopted_on",
                  "type": "date | None",
                  "line": 94
                },
                {
                  "name": "effective_on",
                  "type": "date | None",
                  "line": 95
                },
                {
                  "name": "change_note",
                  "type": "str",
                  "line": 96
                },
                {
                  "name": "reviewer_label",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "documents",
                  "type": "list[SourceDocument]",
                  "line": 98
                },
                {
                  "name": "policies",
                  "type": "list[SourcePolicy]",
                  "line": 99
                },
                {
                  "name": "adoption_evidence",
                  "type": "list[AdoptionEvidence]",
                  "line": 100
                }
              ],
              "line": 84
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/source_schema.py",
          "sha256": "24e5350df4f9e1439327a8e72097dc50b7e4a35b1fe8f87d9db0ab4d92114b52",
          "bytes": 4535,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/source_store.py",
          "sha256": "7d04677e0c94acd7831d5bfad930c7e8d1583fb1ed9ca6e654da9df4fded76bb",
          "bytes": 14109,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/staff_analysis.py",
          "sha256": "2cb81dca0930e2289daa9fa8550b7ee8518d114efc4c3be89ea8b954eb3cec1d",
          "bytes": 1369,
          "routes": [],
          "models": [
            {
              "name": "StaffAnalysisDraft",
              "bases": [],
              "fields": [
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "heading",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "bullets",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "citations",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 17
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 18
                }
              ],
              "line": 12
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/workflow_api.py",
          "sha256": "4aaf78976e900770cb6d1d1e7bdb8fdf489646a541ad460b8261786751a265e3",
          "bytes": 5797,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/analyses",
              "function": "create_analysis",
              "line": 45
            },
            {
              "method": "POST",
              "declared_path": "/analyses/{analysis_id}/revisions",
              "function": "revise_analysis",
              "line": 52
            },
            {
              "method": "GET",
              "declared_path": "/analyses/{analysis_id}",
              "function": "read_analysis",
              "line": 59
            },
            {
              "method": "GET",
              "declared_path": "/analyses/{analysis_id}/history",
              "function": "analysis_history",
              "line": 67
            },
            {
              "method": "POST",
              "declared_path": "/analyses/{analysis_id}/snapshots",
              "function": "create_snapshot",
              "line": 77
            },
            {
              "method": "GET",
              "declared_path": "/snapshots/{snapshot_id}",
              "function": "read_snapshot",
              "line": 82
            },
            {
              "method": "GET",
              "declared_path": "/snapshots/{snapshot_id}/export",
              "function": "export_snapshot",
              "line": 90
            },
            {
              "method": "POST",
              "declared_path": "/snapshots/{snapshot_id}/access-advice",
              "function": "access_advice",
              "line": 98
            },
            {
              "method": "POST",
              "declared_path": "/policies/search",
              "function": "search_policies",
              "line": 108
            },
            {
              "method": "POST",
              "declared_path": "/connections/search",
              "function": "search_connections",
              "line": 118
            },
            {
              "method": "GET",
              "declared_path": "/policy-sources/{revision_id}/documents/{document_id}",
              "function": "public_original",
              "line": 123
            }
          ],
          "models": [
            {
              "name": "SnapshotInput",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "visibility",
                  "type": "Literal['staff_only', 'public']",
                  "line": 73
                }
              ],
              "line": 71
            },
            {
              "name": "SearchInput",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 103
                },
                {
                  "name": "plan_type",
                  "type": "str | None",
                  "line": 104
                }
              ],
              "line": 102
            },
            {
              "name": "ConnectionSearch",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['meetings', 'zoning']",
                  "line": 113
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 114
                }
              ],
              "line": 112
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/workflow_models.py",
          "sha256": "26e6d23b365d440c827351d639fbe825ca28f0d76c98da5f64e34a464d856ffe",
          "bytes": 2748,
          "routes": [],
          "models": [
            {
              "name": "PolicySelection",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "plan_id",
                  "type": "str",
                  "line": 8
                },
                {
                  "name": "revision_id",
                  "type": "str",
                  "line": 9
                },
                {
                  "name": "policy_id",
                  "type": "str",
                  "line": 10
                }
              ],
              "line": 7
            },
            {
              "name": "LinkedSource",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['meetings', 'zoning']",
                  "line": 14
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "relation",
                  "type": "Literal['adoption-evidence', 'hearing', 'context', 'precedent']",
                  "line": 17
                }
              ],
              "line": 13
            },
            {
              "name": "Consideration",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "policy",
                  "type": "PolicySelection",
                  "line": 21
                },
                {
                  "name": "stance",
                  "type": "Literal['supporting', 'conflicting', 'uncertain']",
                  "line": 22
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 23
                }
              ],
              "line": 20
            },
            {
              "name": "AnalysisInput",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "expected_previous_revision",
                  "type": "str | None",
                  "line": 27
                },
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "selected_policies",
                  "type": "list[PolicySelection]",
                  "line": 30
                },
                {
                  "name": "considerations",
                  "type": "list[Consideration]",
                  "line": 31
                },
                {
                  "name": "analysis_text",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "public_summary",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "staff_notes",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "audience",
                  "type": "Literal['staff', 'public']",
                  "line": 35
                },
                {
                  "name": "review_state",
                  "type": "Literal['draft', 'reviewed']",
                  "line": 36
                },
                {
                  "name": "reviewer_label",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "reviewed_on",
                  "type": "date | None",
                  "line": 38
                },
                {
                  "name": "review_notes",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "linked_sources",
                  "type": "list[LinkedSource]",
                  "line": 40
                }
              ],
              "line": 26
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_planning/workflow_schema.py",
          "sha256": "4976be5b782694c5b5ab126bc47d3fff1cd96fdec4b04a6fa9b01871e23ef98b",
          "bytes": 2272,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_planning/workflow_store.py",
          "sha256": "abf17394c1d03528208f26343afece0dd928e96920e9ecc7c46885d0f1543aef",
          "bytes": 17298,
          "routes": [],
          "models": [],
          "configuration": []
        }
      ]
    },
    "permitting": {
      "repository": "townlight/permit",
      "repository_head": "7d3f0cf0aff294c2a2372ae393d340f4e4ce1bc8",
      "working_tree_modified": true,
      "principal_import": "townlight_permitting",
      "source": [
        {
          "source": "townlight_permitting/__init__.py",
          "sha256": "bedf11d628d9eb33c3d6724f11c532296889b719a6b5fe71c23b4eec6c7e55d8",
          "bytes": 68,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/connections.py",
          "sha256": "4159a4eb4a407bebbefeb49bb760788cff3ac51a45c34af094d3be4b5a746798",
          "bytes": 1995,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/intake_review.py",
          "sha256": "50aff3cf1b85c1789bf989edeaba444e124e42c49449c845fe0cd66053d9738c",
          "bytes": 1626,
          "routes": [],
          "models": [
            {
              "name": "IntakeReadiness",
              "bases": [],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "missing_or_unclear",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "next_step",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/integration_mocks.py",
          "sha256": "dbdd49fba6836940936e5112076582a43d94bcff8c9c87faa2f80a49e4e5736c",
          "bytes": 2023,
          "routes": [],
          "models": [
            {
              "name": "IntegrationMockResult",
              "bases": [],
              "fields": [
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 13
                },
                {
                  "name": "findings",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "boundary",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 10
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/main.py",
          "sha256": "6c554e6d74ff5be743db71541d4b05f0c7118f65cb442ec0b784eaa131f99cd7",
          "bytes": 24021,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 104
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 124
            },
            {
              "method": "GET",
              "declared_path": "/townlight_permitting",
              "function": "public_townlight_permitting_page",
              "line": 163
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/requirements/lookup",
              "function": "requirement_lookup",
              "line": 170
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/intake/review",
              "function": "intake_review",
              "line": 179
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/pathway/explain",
              "function": "pathway_explain",
              "line": 305
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/pathway/explain-assisted",
              "function": "pathway_explain_assisted",
              "line": 319
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/context/development-review",
              "function": "development_review_context",
              "line": 339
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/integrations/mock/development-review",
              "function": "integration_mock_development_review",
              "line": 372
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_permitting/intake/{intake_id}",
              "function": "get_intake_review",
              "line": 384
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/submittal/outline",
              "function": "submittal_outline",
              "line": 411
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/export",
              "function": "permit_export",
              "line": 421
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_permitting/staff/reviews",
              "function": "create_staff_review",
              "line": 431
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_permitting/staff/reviews",
              "function": "list_staff_reviews",
              "line": 449
            },
            {
              "method": "PATCH",
              "declared_path": "/api/v1/townlight_permitting/staff/reviews/{review_id}",
              "function": "update_staff_review",
              "line": 466
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_permitting/staff/reviews/summary",
              "function": "staff_review_summary",
              "line": 498
            }
          ],
          "models": [
            {
              "name": "RequirementLookupRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "location_context",
                  "type": "str",
                  "line": 47
                }
              ],
              "line": 45
            },
            {
              "name": "IntakeReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 52
                }
              ],
              "line": 50
            },
            {
              "name": "DevelopmentReviewContextRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "location_context",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "zoning_context_id",
                  "type": "str | None",
                  "line": 61
                },
                {
                  "name": "code_context_id",
                  "type": "str | None",
                  "line": 62
                }
              ],
              "line": 55
            },
            {
              "name": "SubmittalOutlineRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 67
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 68
                }
              ],
              "line": 65
            },
            {
              "name": "PermitExportRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 74
                }
              ],
              "line": 71
            },
            {
              "name": "StaffReviewCreateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "intake_id",
                  "type": "str | None",
                  "line": 81
                }
              ],
              "line": 77
            },
            {
              "name": "StaffReviewUpdateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 86
                },
                {
                  "name": "resolution",
                  "type": "str | None",
                  "line": 87
                }
              ],
              "line": 84
            },
            {
              "name": "PathwayRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "location_context",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "use_model_assistance",
                  "type": "bool",
                  "line": 94
                }
              ],
              "line": 90
            },
            {
              "name": "IntegrationMockRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 100
                }
              ],
              "line": 97
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_PERMITTING_INTAKE_DB_URL",
              "line": 508
            },
            {
              "environment": "TOWNLIGHT_PERMITTING_LLM_MODEL",
              "line": 233
            },
            {
              "environment": "TOWNLIGHT_PERMITTING_LLM_PROVIDER",
              "line": 218
            }
          ]
        },
        {
          "source": "townlight_permitting/migrations/__init__.py",
          "sha256": "ef1b983ce930e61e3f65c585e38d76dc54005d07ad81dcc67bd0bffc842b66af",
          "bytes": 1872,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/migrations/env.py",
          "sha256": "b802c986b358b031ff58863a84322c332fcef243d7376fa60e44bcc9563bff88",
          "bytes": 439,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/migrations/versions/townlight_permitting_0001_connected.py",
          "sha256": "8ca41fd995d6c4b4ed938d6aa5b13467df6db04224344544a0ad38d40d420765",
          "bytes": 1343,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/pathway.py",
          "sha256": "52b79c81f8cf016145a074f877171896a99268b31917314e221b2ca395698e75",
          "bytes": 14992,
          "routes": [],
          "models": [
            {
              "name": "AssistantProvider",
              "bases": [
                "Protocol"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 77
                }
              ],
              "line": 74
            },
            {
              "name": "PathwayStage",
              "bases": [],
              "fields": [
                {
                  "name": "key",
                  "type": "str",
                  "line": 99
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 100
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 101
                },
                {
                  "name": "typical_time",
                  "type": "str",
                  "line": 102
                }
              ],
              "line": 91
            },
            {
              "name": "Pathway",
              "bases": [],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 107
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 108
                },
                {
                  "name": "stages",
                  "type": "tuple[PathwayStage, ...]",
                  "line": 109
                },
                {
                  "name": "attachments_citation",
                  "type": "str",
                  "line": 110
                },
                {
                  "name": "attachments",
                  "type": "tuple[str, ...]",
                  "line": 111
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 112
                }
              ],
              "line": 106
            },
            {
              "name": "PathwayExplanation",
              "bases": [],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 135
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 136
                },
                {
                  "name": "likely_permits",
                  "type": "list[dict[str, str]]",
                  "line": 137
                },
                {
                  "name": "attachments",
                  "type": "list[dict[str, str]]",
                  "line": 138
                },
                {
                  "name": "timeline",
                  "type": "list[dict[str, str]]",
                  "line": 139
                },
                {
                  "name": "unavailable",
                  "type": "list[dict[str, str]]",
                  "line": 140
                },
                {
                  "name": "fee",
                  "type": "dict[str, object]",
                  "line": 141
                },
                {
                  "name": "resident_explanation",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "assistance",
                  "type": "dict[str, object]",
                  "line": 143
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 144
                },
                {
                  "name": "determination_made",
                  "type": "bool",
                  "line": 145
                },
                {
                  "name": "citations",
                  "type": "list[str]",
                  "line": 146
                },
                {
                  "name": "boundary",
                  "type": "str",
                  "line": 147
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 148
                }
              ],
              "line": 132
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/persistence.py",
          "sha256": "71b13022235e2f7a248c0638f3f2909e292b3519812dbbf33ac75bf7d78bf315",
          "bytes": 14453,
          "routes": [],
          "models": [
            {
              "name": "StoredIntakeReview",
              "bases": [],
              "fields": [
                {
                  "name": "intake_id",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 74
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 75
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 76
                },
                {
                  "name": "missing_or_unclear",
                  "type": "tuple[str, ...]",
                  "line": 77
                },
                {
                  "name": "next_step",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 80
                }
              ],
              "line": 72
            },
            {
              "name": "StaffReviewQueueItem",
              "bases": [],
              "fields": [
                {
                  "name": "review_id",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "intake_id",
                  "type": "str | None",
                  "line": 86
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 88
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 89
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 91
                },
                {
                  "name": "resolution",
                  "type": "str | None",
                  "line": 92
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 94
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 95
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 96
                }
              ],
              "line": 84
            },
            {
              "name": "StaffReviewSummary",
              "bases": [],
              "fields": [
                {
                  "name": "total_items",
                  "type": "int",
                  "line": 101
                },
                {
                  "name": "by_status",
                  "type": "dict[str, int]",
                  "line": 102
                },
                {
                  "name": "open_items",
                  "type": "int",
                  "line": 103
                },
                {
                  "name": "generated_at",
                  "type": "datetime",
                  "line": 104
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 105
                }
              ],
              "line": 100
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/public_ui.py",
          "sha256": "e0e1e6056acb09ce92cde228bcf91711ce57b9b93b374acff51d462227c9f3c8",
          "bytes": 11183,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/records_export.py",
          "sha256": "990c764b82130895bea153363e48e65a812a06d8589a8e5376f3709b4d84aecd",
          "bytes": 1335,
          "routes": [],
          "models": [
            {
              "name": "PermitExport",
              "bases": [],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "retention_note",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/requirement_lookup.py",
          "sha256": "f9a1fbd111096e7d4c00cc6cb7f25b9cf91af522f26c743f86234a0ecffe783c",
          "bytes": 2998,
          "routes": [],
          "models": [
            {
              "name": "PermitRequirement",
              "bases": [],
              "fields": [
                {
                  "name": "requirement_id",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "required_materials",
                  "type": "tuple[str, ...]",
                  "line": 21
                },
                {
                  "name": "staff_note",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 23
                }
              ],
              "line": 16
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/sources.py",
          "sha256": "b49dd295c25b33f48a9756c86d6063137e35d76fdc8c4ff0f29ed8e22c4207df",
          "bytes": 4372,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/submittal_outline.py",
          "sha256": "14f980ef5a70f3bc712f582a1c27b1b596e8d35e86f28b2aeb110460e4859eff",
          "bytes": 1365,
          "routes": [],
          "models": [
            {
              "name": "SubmittalOutline",
              "bases": [],
              "fields": [
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "heading",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "required_materials",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "applicant_message",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 17
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 18
                }
              ],
              "line": 12
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/workflow_models.py",
          "sha256": "3d09f3ae137c5c48091e22a60a3e732ea3ec299236778d377df55807bb8bbfdd",
          "bytes": 4405,
          "routes": [],
          "models": [
            {
              "name": "Material",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "material_id",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 23
                }
              ],
              "line": 20
            },
            {
              "name": "PathwayStep",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "step",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "typical_time",
                  "type": "str",
                  "line": 29
                }
              ],
              "line": 26
            },
            {
              "name": "SourceLink",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['code', 'zoning']",
                  "line": 33
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 35
                }
              ],
              "line": 32
            },
            {
              "name": "RequirementBundle",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "requirement_id",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 42
                },
                {
                  "name": "source_reference",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "source_date",
                  "type": "date",
                  "line": 44
                },
                {
                  "name": "effective_on",
                  "type": "date",
                  "line": 45
                },
                {
                  "name": "dataset_kind",
                  "type": "Literal['municipal', 'fictional']",
                  "line": 46
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 47
                },
                {
                  "name": "content_base64",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "materials",
                  "type": "list[Material]",
                  "line": 50
                },
                {
                  "name": "pathway",
                  "type": "list[PathwayStep]",
                  "line": 51
                },
                {
                  "name": "fee_link",
                  "type": "SourceLink | None",
                  "line": 52
                },
                {
                  "name": "staff_note",
                  "type": "str",
                  "line": 53
                },
                {
                  "name": "change_note",
                  "type": "str",
                  "line": 54
                }
              ],
              "line": 38
            },
            {
              "name": "MaterialReview",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "material_id",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "status",
                  "type": "Literal['not_reviewed', 'provided', 'missing', 'unclear']",
                  "line": 72
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 73
                }
              ],
              "line": 70
            },
            {
              "name": "IntakeInput",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "UUID | None",
                  "line": 77
                },
                {
                  "name": "project_name",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "project_description",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "applicant_contact",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "requirement_revision",
                  "type": "UUID",
                  "line": 82
                },
                {
                  "name": "materials",
                  "type": "list[MaterialReview]",
                  "line": 83
                },
                {
                  "name": "linked_sources",
                  "type": "list[SourceLink]",
                  "line": 84
                },
                {
                  "name": "staff_notes",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "assigned_to",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "review_state",
                  "type": "Literal['draft', 'follow_up', 'reviewed']",
                  "line": 87
                },
                {
                  "name": "review_notes",
                  "type": "str",
                  "line": 88
                },
                {
                  "name": "public_summary",
                  "type": "str",
                  "line": 89
                }
              ],
              "line": 76
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_permitting/workflow_schema.py",
          "sha256": "6797fd13cbe6ba85884fc522c05e56aefe0fea3796d5a269d5be8824da3809c5",
          "bytes": 2263,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_permitting/workflow_store.py",
          "sha256": "451c6ee455cf85d1b5a18a1e54ac02653b52a1d2e479adbe9213f086104ddd94",
          "bytes": 15521,
          "routes": [],
          "models": [],
          "configuration": []
        }
      ]
    },
    "inspections": {
      "repository": "townlight/inspect",
      "repository_head": "e058106d36b9164b702acac878fb00c3e533e4a6",
      "working_tree_modified": true,
      "principal_import": "townlight_inspections",
      "source": [
        {
          "source": "townlight_inspections/__init__.py",
          "sha256": "f1a274959add447eba3a43e59f72d62e4abbe6189a62c723c7ce2d127baa2096",
          "bytes": 69,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/_whistle_driver.py",
          "sha256": "90ce9276c7d1de4d3259a2c00ff581e5d55d28dd8da913ed7b8bd2d7c89a5264",
          "bytes": 1419,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "TEXTFLOWKIT_MODELS_DIR",
              "line": 19
            },
            {
              "environment": "TEXTFLOWKIT_OFFLINE",
              "line": 20
            }
          ]
        },
        {
          "source": "townlight_inspections/adapters.py",
          "sha256": "6ac1d1b2d1a57c63c1c03af1e23bfa9540136bb1b8b2fba9eda3f27e42ecfd9e",
          "bytes": 5419,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/case_lookup.py",
          "sha256": "b68030ecdf6a7f83ed35aec636afcb70c5ce247a40ed7d60a3283655bfdb3214",
          "bytes": 1538,
          "routes": [],
          "models": [
            {
              "name": "RepeatCaseResult",
              "bases": [],
              "fields": [
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "violation_type",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "repeat_case_count",
                  "type": "int",
                  "line": 18
                },
                {
                  "name": "related_case_ids",
                  "type": "tuple[str, ...]",
                  "line": 19
                },
                {
                  "name": "staff_note",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 21
                }
              ],
              "line": 15
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/connections.py",
          "sha256": "a32e5723ed2b93b0e72a6659ac0db8f614db1be7cc5cb4881a40b9abdff85e60",
          "bytes": 1969,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/integration_mocks.py",
          "sha256": "a22c28a8d47e6357b3c4b526b1d4690e8b98cc9d9115c93c74656734a58901ce",
          "bytes": 2337,
          "routes": [],
          "models": [
            {
              "name": "IntegrationMockResult",
              "bases": [],
              "fields": [
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 13
                },
                {
                  "name": "findings",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "boundary",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 10
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/main.py",
          "sha256": "d6f4908f4898ef87372b61527536fa73542630d4c96b5fad5cdf9e626698db65",
          "bytes": 19966,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 130
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 150
            },
            {
              "method": "GET",
              "declared_path": "/townlight_inspections",
              "function": "public_townlight_inspections_page",
              "line": 162
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/cases/repeat-lookup",
              "function": "repeat_case_lookup",
              "line": 169
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/reports/draft",
              "function": "inspection_report_draft",
              "line": 178
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_inspections/reports/{report_id}",
              "function": "get_inspection_report",
              "line": 215
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/evidence/retain",
              "function": "retain_evidence_route",
              "line": 291
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/media/analyse",
              "function": "media_analyse",
              "line": 307
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/notices/draft",
              "function": "notice_draft",
              "line": 325
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/context/inspection-review",
              "function": "inspection_review_context",
              "line": 336
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/integrations/mock/inspection-context",
              "function": "integration_mock_inspection_context",
              "line": 365
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/export",
              "function": "inspection_export",
              "line": 377
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_inspections/staff/reviews",
              "function": "create_staff_review",
              "line": 387
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_inspections/staff/reviews",
              "function": "list_staff_reviews",
              "line": 403
            },
            {
              "method": "PATCH",
              "declared_path": "/api/v1/townlight_inspections/staff/reviews/{review_id}",
              "function": "update_staff_review",
              "line": 418
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_inspections/staff/reviews/summary",
              "function": "staff_review_summary",
              "line": 448
            }
          ],
          "models": [
            {
              "name": "RepeatCaseLookupRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "violation_type",
                  "type": "str",
                  "line": 52
                }
              ],
              "line": 50
            },
            {
              "name": "ReportDraftRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "inspection_id",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 57
                },
                {
                  "name": "inspector_notes",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "photo_observations",
                  "type": "list[str]",
                  "line": 59
                },
                {
                  "name": "voice_notes",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "analysis",
                  "type": "AnalysisRecord | None",
                  "line": 61
                }
              ],
              "line": 55
            },
            {
              "name": "NoticeDraftRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "case_id",
                  "type": "str",
                  "line": 65
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "violation_type",
                  "type": "str",
                  "line": 67
                },
                {
                  "name": "observations",
                  "type": "list[str]",
                  "line": 68
                }
              ],
              "line": 64
            },
            {
              "name": "InspectionExportRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "case_id",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 74
                }
              ],
              "line": 71
            },
            {
              "name": "InspectionContextRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "inspection_id",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "violation_type",
                  "type": "str",
                  "line": 80
                },
                {
                  "name": "code_context_id",
                  "type": "str",
                  "line": 81
                },
                {
                  "name": "case_context_id",
                  "type": "str",
                  "line": 82
                },
                {
                  "name": "source_date_status",
                  "type": "str",
                  "line": 83
                }
              ],
              "line": 77
            },
            {
              "name": "IntegrationMockRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "scenario",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "role",
                  "type": "str",
                  "line": 88
                },
                {
                  "name": "code_context_id",
                  "type": "str",
                  "line": 89
                },
                {
                  "name": "case_context_id",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "official_finding",
                  "type": "bool",
                  "line": 91
                },
                {
                  "name": "citation_issued",
                  "type": "bool",
                  "line": 92
                },
                {
                  "name": "fine_amount",
                  "type": "str | None",
                  "line": 93
                },
                {
                  "name": "photo_analysis_source",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "source_date_status",
                  "type": "str",
                  "line": 95
                }
              ],
              "line": 86
            },
            {
              "name": "EvidenceItemRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "filename",
                  "type": "str",
                  "line": 99
                },
                {
                  "name": "media_type",
                  "type": "str",
                  "line": 100
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 101
                },
                {
                  "name": "content_base64",
                  "type": "str",
                  "line": 102
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 103
                }
              ],
              "line": 98
            },
            {
              "name": "EvidenceRetainRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "items",
                  "type": "list[EvidenceItemRequest]",
                  "line": 107
                }
              ],
              "line": 106
            },
            {
              "name": "MediaAnalysisRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "items",
                  "type": "list[EvidenceItemRequest]",
                  "line": 111
                },
                {
                  "name": "code_links",
                  "type": "list[dict[str, str]]",
                  "line": 112
                },
                {
                  "name": "inspector_supplied_text",
                  "type": "str",
                  "line": 113
                }
              ],
              "line": 110
            },
            {
              "name": "StaffReviewCreateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "inspection_id",
                  "type": "str",
                  "line": 117
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 118
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 119
                },
                {
                  "name": "report_id",
                  "type": "str | None",
                  "line": 120
                }
              ],
              "line": 116
            },
            {
              "name": "StaffReviewUpdateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 124
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 125
                },
                {
                  "name": "resolution",
                  "type": "str | None",
                  "line": 126
                }
              ],
              "line": 123
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_INSPECTIONS_CASE_DB_URL",
              "line": 456
            }
          ]
        },
        {
          "source": "townlight_inspections/media_analysis.py",
          "sha256": "b976ff774c8bb158346a34cd1976dc2d6b553bdef7c0f435808c133c6d062dd1",
          "bytes": 14084,
          "routes": [],
          "models": [
            {
              "name": "RetainedEvidence",
              "bases": [],
              "fields": [
                {
                  "name": "filename",
                  "type": "str",
                  "line": 58
                },
                {
                  "name": "media_type",
                  "type": "str",
                  "line": 59
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 60
                },
                {
                  "name": "size_bytes",
                  "type": "int",
                  "line": 61
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 62
                },
                {
                  "name": "raw",
                  "type": "bytes",
                  "line": 63
                }
              ],
              "line": 55
            },
            {
              "name": "VisionProvider",
              "bases": [
                "Protocol"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 113
                },
                {
                  "name": "supports_images",
                  "type": "bool",
                  "line": 114
                }
              ],
              "line": 110
            },
            {
              "name": "TranscriptionProvider",
              "bases": [
                "Protocol"
              ],
              "fields": [
                {
                  "name": "name",
                  "type": "str",
                  "line": 124
                }
              ],
              "line": 121
            },
            {
              "name": "MediaAnalysis",
              "bases": [],
              "fields": [
                {
                  "name": "draft_observations",
                  "type": "list[dict[str, Any]]",
                  "line": 142
                },
                {
                  "name": "cited_sections",
                  "type": "list[dict[str, str]]",
                  "line": 143
                },
                {
                  "name": "unavailable",
                  "type": "list[dict[str, str]]",
                  "line": 144
                },
                {
                  "name": "retained",
                  "type": "list[dict[str, Any]]",
                  "line": 145
                },
                {
                  "name": "runtime",
                  "type": "dict[str, Any]",
                  "line": 146
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 147
                },
                {
                  "name": "determination_made",
                  "type": "bool",
                  "line": 148
                },
                {
                  "name": "boundary",
                  "type": "str",
                  "line": 149
                }
              ],
              "line": 139
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/migrations/__init__.py",
          "sha256": "80c59209c59d5bc08d3c46e01a38ec9afef712d6e660c9d3842684be9c7bacf9",
          "bytes": 1879,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/migrations/env.py",
          "sha256": "a3a7ca12e132a15db797733d493de4b07f6596cf3e92127b12102c3b0c7ae1ec",
          "bytes": 442,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/migrations/versions/townlight_inspections_0001_connected.py",
          "sha256": "1f8aaf5660480513bf538ee1b4145e287f4fd29f4495ce3fdf6f0c13ee030494",
          "bytes": 1350,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/notice_draft.py",
          "sha256": "30a230f05dc3b31aad29dc1389ec713af4ee89ca306a8b30ed39cf60d4db6417",
          "bytes": 1831,
          "routes": [],
          "models": [
            {
              "name": "NoticeDraft",
              "bases": [],
              "fields": [
                {
                  "name": "case_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "heading",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "draft_body",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "required_staff_actions",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 17
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/persistence.py",
          "sha256": "0145cd2f96215ca17f9d6bbb5f1249777e9f9e87ab23863792be4deb4b05458a",
          "bytes": 14471,
          "routes": [],
          "models": [
            {
              "name": "StoredInspectionReport",
              "bases": [],
              "fields": [
                {
                  "name": "report_id",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "inspection_id",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 73
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 74
                },
                {
                  "name": "observation_bullets",
                  "type": "tuple[str, ...]",
                  "line": 75
                },
                {
                  "name": "inspector_review_required",
                  "type": "bool",
                  "line": 76
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 77
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 78
                }
              ],
              "line": 70
            },
            {
              "name": "StaffReviewQueueItem",
              "bases": [],
              "fields": [
                {
                  "name": "review_id",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "report_id",
                  "type": "str | None",
                  "line": 84
                },
                {
                  "name": "inspection_id",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 86
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 88
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 89
                },
                {
                  "name": "resolution",
                  "type": "str | None",
                  "line": 90
                },
                {
                  "name": "created_by",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 92
                },
                {
                  "name": "updated_at",
                  "type": "datetime",
                  "line": 93
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 94
                }
              ],
              "line": 82
            },
            {
              "name": "StaffReviewSummary",
              "bases": [],
              "fields": [
                {
                  "name": "total_items",
                  "type": "int",
                  "line": 99
                },
                {
                  "name": "by_status",
                  "type": "dict[str, int]",
                  "line": 100
                },
                {
                  "name": "open_items",
                  "type": "int",
                  "line": 101
                },
                {
                  "name": "generated_at",
                  "type": "datetime",
                  "line": 102
                },
                {
                  "name": "visibility",
                  "type": "str",
                  "line": 103
                }
              ],
              "line": 98
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/public_ui.py",
          "sha256": "c14bd5b3d45dc1434edeffb931cd6abb8804bff675989769c8eb89c85a46f965",
          "bytes": 8120,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/records_export.py",
          "sha256": "6adcb9a04cbff7d9d455f41598a0bdb1dfd736aa13f439a61f1e2ed98f8b49bb",
          "bytes": 1178,
          "routes": [],
          "models": [
            {
              "name": "InspectionExport",
              "bases": [],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "case_id",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 13
                },
                {
                  "name": "retention_note",
                  "type": "str",
                  "line": 14
                }
              ],
              "line": 9
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/report_draft.py",
          "sha256": "9de0986afe2e0aee2e39e913af1ea6dd7b8f37c91f0b26d4294566fbc0f0a03c",
          "bytes": 2420,
          "routes": [],
          "models": [
            {
              "name": "InspectionReportDraft",
              "bases": [],
              "fields": [
                {
                  "name": "inspection_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "summary",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "observation_bullets",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "inspector_review_required",
                  "type": "bool",
                  "line": 16
                },
                {
                  "name": "cited_sections",
                  "type": "tuple[str, ...]",
                  "line": 17
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 18
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/transcription.py",
          "sha256": "632f91d1c28aa4ed00c383cec0fd903cbaba42734b99f08fd67d4f384a263ab1",
          "bytes": 6488,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "TOWNLIGHT_INSPECTIONS_FFMPEG",
              "line": 53
            },
            {
              "environment": "TOWNLIGHT_INSPECTIONS_TEXTFLOWKIT_PYTHON",
              "line": 49
            }
          ]
        },
        {
          "source": "townlight_inspections/workflow_models.py",
          "sha256": "8f2a9ee259a26d05c35efa1e63225094934256922e2477337c15ca987119d5e7",
          "bytes": 7436,
          "routes": [],
          "models": [
            {
              "name": "AnalysisObservation",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "source",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "filename",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "media_type",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 29
                },
                {
                  "name": "adapter",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "citation_source_ids",
                  "type": "list[str]",
                  "line": 31
                }
              ],
              "line": 23
            },
            {
              "name": "CitedSection",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 43
                },
                {
                  "name": "citation",
                  "type": "str",
                  "line": 44
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "version",
                  "type": "str",
                  "line": 46
                }
              ],
              "line": 40
            },
            {
              "name": "AnalysisRecord",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "observations",
                  "type": "list[AnalysisObservation]",
                  "line": 52
                },
                {
                  "name": "cited_sections",
                  "type": "list[CitedSection]",
                  "line": 53
                },
                {
                  "name": "unavailable",
                  "type": "list[str]",
                  "line": 54
                },
                {
                  "name": "runtime",
                  "type": "dict",
                  "line": 55
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 56
                }
              ],
              "line": 49
            },
            {
              "name": "Evidence",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "filename",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "media_type",
                  "type": "Literal['text/plain', 'image/jpeg', 'image/png', 'image/webp', 'application/pdf', 'audio/webm', 'audio/ogg', 'audio/wav', 'audio/mpeg', 'audio/mp4']",
                  "line": 96
                },
                {
                  "name": "content_base64",
                  "type": "str",
                  "line": 99
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 100
                }
              ],
              "line": 93
            },
            {
              "name": "SourceLink",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['code']",
                  "line": 114
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 115
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 116
                }
              ],
              "line": 113
            },
            {
              "name": "InspectionInput",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "UUID | None",
                  "line": 120
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 121
                },
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 122
                },
                {
                  "name": "inspection_reference",
                  "type": "str",
                  "line": 123
                },
                {
                  "name": "dataset_kind",
                  "type": "Literal['municipal', 'fictional']",
                  "line": 124
                },
                {
                  "name": "inspector_notes",
                  "type": "str",
                  "line": 125
                },
                {
                  "name": "photo_observations",
                  "type": "list[str]",
                  "line": 126
                },
                {
                  "name": "voice_notes",
                  "type": "str",
                  "line": 127
                },
                {
                  "name": "evidence",
                  "type": "list[Evidence]",
                  "line": 128
                },
                {
                  "name": "linked_sources",
                  "type": "list[SourceLink]",
                  "line": 129
                },
                {
                  "name": "assigned_to",
                  "type": "str",
                  "line": 130
                },
                {
                  "name": "staff_notes",
                  "type": "str",
                  "line": 131
                },
                {
                  "name": "notice_draft",
                  "type": "str",
                  "line": 132
                },
                {
                  "name": "review_state",
                  "type": "Literal['draft', 'follow_up', 'reviewed']",
                  "line": 133
                },
                {
                  "name": "review_notes",
                  "type": "str",
                  "line": 134
                },
                {
                  "name": "public_summary",
                  "type": "str",
                  "line": 135
                },
                {
                  "name": "analysis",
                  "type": "AnalysisRecord | None",
                  "line": 136
                }
              ],
              "line": 119
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_inspections/workflow_schema.py",
          "sha256": "1d7b0976826350a2e34671ea569918471848639ea09a571d5b775e9646b9db2a",
          "bytes": 2264,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_inspections/workflow_store.py",
          "sha256": "1ebe80dee56578f11dd5aeac643a0b899325a2bc250af399600979075fa9911d",
          "bytes": 17794,
          "routes": [],
          "models": [],
          "configuration": []
        }
      ]
    },
    "access": {
      "repository": "townlight/access",
      "repository_head": "a70b56263aa0eef26d4021a5e47b5fb0a7ba7e97",
      "working_tree_modified": true,
      "principal_import": "townlight_access",
      "source": [
        {
          "source": "townlight_access/__init__.py",
          "sha256": "f49d540adddb1dde0dbc6b109c82349cdd0b1af029bb06a6b41c28e799bff0f5",
          "bytes": 58,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_access/access_review.py",
          "sha256": "511b887896e468aa0954e1a8763d0445d4ba4ea10f2fcf99a462dc725e98746e",
          "bytes": 13859,
          "routes": [],
          "models": [
            {
              "name": "AccessibilityFinding",
              "bases": [],
              "fields": [
                {
                  "name": "code",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "severity",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "wcag_reference",
                  "type": "str",
                  "line": 20
                }
              ],
              "line": 15
            },
            {
              "name": "AccessibilityReview",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "findings",
                  "type": "tuple[AccessibilityFinding, ...]",
                  "line": 26
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 27
                },
                {
                  "name": "next_steps",
                  "type": "tuple[str, ...]",
                  "line": 28
                }
              ],
              "line": 24
            },
            {
              "name": "StoredAccessibilityReview",
              "bases": [],
              "fields": [
                {
                  "name": "review_id",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "has_alt_text",
                  "type": "bool",
                  "line": 36
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 38
                },
                {
                  "name": "findings",
                  "type": "tuple[AccessibilityFinding, ...]",
                  "line": 39
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 40
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 41
                }
              ],
              "line": 32
            },
            {
              "name": "SchemaStatus",
              "bases": [],
              "fields": [
                {
                  "name": "schema_version",
                  "type": "str | None",
                  "line": 91
                },
                {
                  "name": "expected_schema_version",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "ready",
                  "type": "bool",
                  "line": 93
                },
                {
                  "name": "missing_tables",
                  "type": "tuple[str, ...]",
                  "line": 94
                },
                {
                  "name": "dialect",
                  "type": "str",
                  "line": 95
                }
              ],
              "line": 90
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_access/db_admin.py",
          "sha256": "c9b86df06388061de0646c9c7bc1c6964cdf075113a04fdda3b6a4103aa988c0",
          "bytes": 1099,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_access/exports.py",
          "sha256": "f6496dc04cae8445a25c779d1556a8026f27dd304d7b1c22325e143faedb48ab",
          "bytes": 1793,
          "routes": [],
          "models": [
            {
              "name": "AccessibleExport",
              "bases": [],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 10
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 11
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 12
                },
                {
                  "name": "retention_note",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "fix",
                  "type": "str | None",
                  "line": 15
                }
              ],
              "line": 9
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_access/main.py",
          "sha256": "0eb87c6acb2c97e6c43f928a457bb226a826d807a8bc3c5afc347bf88c8daf8e",
          "bytes": 18671,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 87
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 103
            },
            {
              "method": "GET",
              "declared_path": "/ready",
              "function": "ready",
              "line": 142
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_access/readiness",
              "function": "readiness",
              "line": 149
            },
            {
              "method": "GET",
              "declared_path": "/townlight_access",
              "function": "public_townlight_access_page",
              "line": 156
            },
            {
              "method": "GET",
              "declared_path": "/townlight_access/staff",
              "function": "staff_townlight_access_page",
              "line": 163
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/analyze",
              "function": "analyze_accessibility",
              "line": 173
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/review",
              "function": "accessibility_review",
              "line": 192
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_access/reviews",
              "function": "list_accessibility_reviews",
              "line": 207
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_access/reviews/{review_id}",
              "function": "get_accessibility_review",
              "line": 217
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/reviews/{review_id}/records-export",
              "function": "export_accessibility_review_record",
              "line": 231
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_access/integration-contracts",
              "function": "integration_contracts",
              "line": 278
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/plain-language",
              "function": "plain_language_rewrite",
              "line": 307
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/language-variant",
              "function": "language_variant",
              "line": 313
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/forms",
              "function": "accessible_form",
              "line": 319
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/publishing-workflow",
              "function": "publishing_workflow",
              "line": 331
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/ada-title-ii",
              "function": "ada_title_ii_review",
              "line": 348
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/tagged-pdf",
              "function": "tagged_pdf_expectations",
              "line": 363
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_access/export",
              "function": "accessible_export",
              "line": 374
            }
          ],
          "models": [
            {
              "name": "AccessibilityReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 45
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 46
                },
                {
                  "name": "has_alt_text",
                  "type": "bool",
                  "line": 47
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 48
                }
              ],
              "line": 44
            },
            {
              "name": "PlainLanguageRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 52
                }
              ],
              "line": 51
            },
            {
              "name": "LanguageVariantRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 57
                }
              ],
              "line": 55
            },
            {
              "name": "AccessibleExportRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 62
                }
              ],
              "line": 60
            },
            {
              "name": "AccessibleFormRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "form_name",
                  "type": "str",
                  "line": 66
                },
                {
                  "name": "fields",
                  "type": "list[str]",
                  "line": 67
                }
              ],
              "line": 65
            },
            {
              "name": "PublishingWorkflowRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 71
                },
                {
                  "name": "has_review",
                  "type": "bool",
                  "line": 72
                },
                {
                  "name": "has_plain_language",
                  "type": "bool",
                  "line": 73
                },
                {
                  "name": "has_translation_review",
                  "type": "bool",
                  "line": 74
                }
              ],
              "line": 70
            },
            {
              "name": "AdaTitleIiReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "service_area",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "has_coordinator_review",
                  "type": "bool",
                  "line": 79
                }
              ],
              "line": 77
            },
            {
              "name": "TaggedPdfExpectationRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "heading_levels",
                  "type": "list[int]",
                  "line": 83
                }
              ],
              "line": 82
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_ACCESS_TRUSTED_WRITE_TOKEN",
              "line": 387
            },
            {
              "environment": "TOWNLIGHT_ACCESS_REVIEW_DB_URL",
              "line": 427
            },
            {
              "environment": "DATABASE_URL",
              "line": 431
            },
            {
              "environment": "TOWNLIGHT_ACCESS_DATA_DIR",
              "line": 435
            }
          ]
        },
        {
          "source": "townlight_access/multilingual.py",
          "sha256": "49903d5b7cddc2453fe99989e519306d4ac1796e8a45713cae0651c00aae9be6",
          "bytes": 1630,
          "routes": [],
          "models": [
            {
              "name": "LanguageVariant",
              "bases": [],
              "fields": [
                {
                  "name": "source_text",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 15
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "translation_performed",
                  "type": "bool",
                  "line": 18
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 19
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_access/plain_language.py",
          "sha256": "7677832cee72ad515490486489749b41f0a209fc66a75fb76e7a7190bf69ca26",
          "bytes": 1420,
          "routes": [],
          "models": [
            {
              "name": "PlainLanguageRewrite",
              "bases": [],
              "fields": [
                {
                  "name": "original",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "rewritten",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "reading_level",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "review_required",
                  "type": "bool",
                  "line": 15
                },
                {
                  "name": "provenance",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 17
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_access/public_ui.py",
          "sha256": "78168321622a780a4d373b35432668daad0d5f6a0a3f011c8e41862c9998068e",
          "bytes": 20623,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_access/record_artifact.py",
          "sha256": "57d8966dbdbd0764b323355fdca5ef6ff52f7ca86594f22926b2ffa96f4b8d29",
          "bytes": 985,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_access/workflows.py",
          "sha256": "87d7787f658c9cb43ff2bee670ad78e532d836944ba4d26bdbc15b5b9c66f860",
          "bytes": 5913,
          "routes": [],
          "models": [
            {
              "name": "AccessibleFormPlan",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "missing_fields",
                  "type": "tuple[str, ...]",
                  "line": 13
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "fix",
                  "type": "str | None",
                  "line": 15
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            },
            {
              "name": "PublishingWorkflowPlan",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "steps",
                  "type": "tuple[str, ...]",
                  "line": 22
                },
                {
                  "name": "blockers",
                  "type": "tuple[str, ...]",
                  "line": 23
                },
                {
                  "name": "fix",
                  "type": "str | None",
                  "line": 24
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 25
                }
              ],
              "line": 20
            },
            {
              "name": "AdaTitleIiReviewPlan",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 31
                },
                {
                  "name": "reviewer_required",
                  "type": "bool",
                  "line": 32
                },
                {
                  "name": "fix",
                  "type": "str | None",
                  "line": 33
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 34
                }
              ],
              "line": 29
            },
            {
              "name": "TaggedPdfExpectationPlan",
              "bases": [],
              "fields": [
                {
                  "name": "status",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 40
                },
                {
                  "name": "fix",
                  "type": "str | None",
                  "line": 41
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 42
                }
              ],
              "line": 38
            }
          ],
          "configuration": []
        }
      ]
    },
    "notice": {
      "repository": "townlight/notice",
      "repository_head": "6c7bc4435cdd700fd4673486d3c7b3794d5def82",
      "working_tree_modified": true,
      "principal_import": "townlight_notice",
      "source": [
        {
          "source": "townlight_notice/__init__.py",
          "sha256": "cdce8d39689ef3269af032210d1990198318fdbe04f6eb0a739241f347102890",
          "bytes": 64,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_notice/accessibility_review.py",
          "sha256": "a2f9463a4362b03ef0b2a41d00c0991a0e99346d2cf8b64c6909bf06328fb23f",
          "bytes": 3448,
          "routes": [],
          "models": [
            {
              "name": "NoticeAccessibilityReview",
              "bases": [],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "missing_accessibility_items",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "plain_language_flags",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "translation_tasks",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "attachment_review_required",
                  "type": "bool",
                  "line": 17
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 18
                },
                {
                  "name": "review_notes",
                  "type": "tuple[str, ...]",
                  "line": 19
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 20
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/archive_packet.py",
          "sha256": "05db28385a7e2854cfeb96148751f119586e888e2ce0460f3686ed651f16ae32",
          "bytes": 3101,
          "routes": [],
          "models": [
            {
              "name": "NoticeArchivePacket",
              "bases": [],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "source_record_id",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "evidence_items",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "missing_items",
                  "type": "tuple[str, ...]",
                  "line": 17
                },
                {
                  "name": "handoff_targets",
                  "type": "tuple[str, ...]",
                  "line": 18
                },
                {
                  "name": "readiness_status",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 20
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 21
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/channel_plan.py",
          "sha256": "acdce60fa24fcfbd903100e02df1d730ed9b913013a52f8287839272bf58a643",
          "bytes": 1182,
          "routes": [],
          "models": [
            {
              "name": "ChannelPlan",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "channels",
                  "type": "tuple[str, ...]",
                  "line": 13
                },
                {
                  "name": "accessibility_notes",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 15
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/deadline_tracker.py",
          "sha256": "7dd15044ff4cf2597be1b0eebd525ea641328388d7f79ff2ad42d7f1063b6c8d",
          "bytes": 1106,
          "routes": [],
          "models": [
            {
              "name": "DeadlinePlan",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 15
                },
                {
                  "name": "reminders",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 17
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 18
                }
              ],
              "line": 13
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/main.py",
          "sha256": "5074a5d9d80332f672401cfa37035d13ec4e5b9707b155ea154d1a689404c920",
          "bytes": 23999,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/",
              "function": "root",
              "line": 186
            },
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 206
            },
            {
              "method": "GET",
              "declared_path": "/townlight_notice",
              "function": "public_townlight_notice_page",
              "line": 218
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/registry",
              "function": "notice_registry",
              "line": 225
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_notice/registry/{record_id}",
              "function": "get_notice_registry",
              "line": 250
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/deadlines",
              "function": "deadline_plan",
              "line": 272
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_notice/deadlines/{plan_id}",
              "function": "get_deadline_plan",
              "line": 297
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/publication-proof",
              "function": "publication_proof",
              "line": 319
            },
            {
              "method": "GET",
              "declared_path": "/api/v1/townlight_notice/publication-proof/{proof_id}",
              "function": "get_publication_proof",
              "line": 352
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/publication-check",
              "function": "publication_checklist",
              "line": 376
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/rule-check",
              "function": "rule_check",
              "line": 384
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/templates",
              "function": "notice_template",
              "line": 404
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/channels",
              "function": "channel_plan",
              "line": 421
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/subscribers/plan",
              "function": "subscriber_delivery_plan",
              "line": 429
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/accessibility-review",
              "function": "accessibility_review",
              "line": 451
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/archive-packet",
              "function": "archive_packet",
              "line": 465
            },
            {
              "method": "POST",
              "declared_path": "/api/v1/townlight_notice/export",
              "function": "records_export",
              "line": 483
            }
          ],
          "models": [
            {
              "name": "NoticeRegistryRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 55
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 56
                },
                {
                  "name": "owner",
                  "type": "str",
                  "line": 57
                }
              ],
              "line": 54
            },
            {
              "name": "DeadlineRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 61
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 62
                },
                {
                  "name": "lead_days",
                  "type": "int",
                  "line": 63
                }
              ],
              "line": 60
            },
            {
              "name": "PublicationRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 67
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 68
                }
              ],
              "line": 66
            },
            {
              "name": "RuleCheckRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 77
                },
                {
                  "name": "publication_dates",
                  "type": "list[date]",
                  "line": 81
                },
                {
                  "name": "channels",
                  "type": "list[str]",
                  "line": 86
                },
                {
                  "name": "content_fields",
                  "type": "list[str]",
                  "line": 91
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 96
                }
              ],
              "line": 71
            },
            {
              "name": "NoticeTemplateRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 105
                },
                {
                  "name": "matter_title",
                  "type": "str",
                  "line": 110
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 111
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 112
                },
                {
                  "name": "contact",
                  "type": "str",
                  "line": 113
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 114
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 115
                }
              ],
              "line": 104
            },
            {
              "name": "ChannelRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 119
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 120
                }
              ],
              "line": 118
            },
            {
              "name": "SubscriberRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "subscriber_id",
                  "type": "str",
                  "line": 124
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 125
                },
                {
                  "name": "email",
                  "type": "str",
                  "line": 126
                },
                {
                  "name": "channels",
                  "type": "list[str]",
                  "line": 127
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 128
                },
                {
                  "name": "active",
                  "type": "bool",
                  "line": 129
                }
              ],
              "line": 123
            },
            {
              "name": "SubscriberDeliveryRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 133
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 134
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 135
                },
                {
                  "name": "subscribers",
                  "type": "list[SubscriberRequest]",
                  "line": 136
                },
                {
                  "name": "required_channels",
                  "type": "list[str]",
                  "line": 137
                }
              ],
              "line": 132
            },
            {
              "name": "AccessibilityReviewRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 141
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "notice_text",
                  "type": "str",
                  "line": 143
                },
                {
                  "name": "target_languages",
                  "type": "list[str]",
                  "line": 144
                },
                {
                  "name": "attachments",
                  "type": "list[str]",
                  "line": 145
                },
                {
                  "name": "has_contact",
                  "type": "bool",
                  "line": 146
                },
                {
                  "name": "has_event_date",
                  "type": "bool",
                  "line": 147
                },
                {
                  "name": "has_plain_language_summary",
                  "type": "bool",
                  "line": 148
                }
              ],
              "line": 140
            },
            {
              "name": "ArchivePacketRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 152
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 153
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 154
                },
                {
                  "name": "source_record_id",
                  "type": "str",
                  "line": 155
                },
                {
                  "name": "registry_record_id",
                  "type": "str",
                  "line": 156
                },
                {
                  "name": "deadline_plan_id",
                  "type": "str",
                  "line": 157
                },
                {
                  "name": "publication_proof_id",
                  "type": "str",
                  "line": 158
                },
                {
                  "name": "rule_check_complete",
                  "type": "bool",
                  "line": 159
                },
                {
                  "name": "template_complete",
                  "type": "bool",
                  "line": 160
                },
                {
                  "name": "accessibility_review_complete",
                  "type": "bool",
                  "line": 161
                },
                {
                  "name": "subscriber_delivery_complete",
                  "type": "bool",
                  "line": 162
                },
                {
                  "name": "records_export_complete",
                  "type": "bool",
                  "line": 163
                }
              ],
              "line": 151
            },
            {
              "name": "RecordsExportRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 167
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 168
                },
                {
                  "name": "format",
                  "type": "str",
                  "line": 169
                }
              ],
              "line": 166
            },
            {
              "name": "PublicationProofRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 173
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 174
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 175
                },
                {
                  "name": "source_record_id",
                  "type": "str",
                  "line": 176
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 177
                },
                {
                  "name": "published_at",
                  "type": "str",
                  "line": 178
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 179
                },
                {
                  "name": "confirmation_reference",
                  "type": "str",
                  "line": 180
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 181
                },
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 182
                }
              ],
              "line": 172
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_NOTICE_WORKPAPER_DB_URL",
              "line": 492
            },
            {
              "environment": "TOWNLIGHT_NOTICE_TRUSTED_WRITE_TOKEN",
              "line": 496
            }
          ]
        },
        {
          "source": "townlight_notice/notice_registry.py",
          "sha256": "8a5195d4c87f4bb76e1b499bf7cc188ded3bf62d8d9c54113a9d86b04cba1418",
          "bytes": 1258,
          "routes": [],
          "models": [
            {
              "name": "NoticeRecord",
              "bases": [],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "owner",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "registry_notes",
                  "type": "tuple[str, ...]",
                  "line": 20
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 21
                }
              ],
              "line": 16
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/notice_templates.py",
          "sha256": "fcd44c4e05afcd8ed6dd5c3913a8d522bf6c0bd5b7d291f2937842a5b49fd6ac",
          "bytes": 2176,
          "routes": [],
          "models": [
            {
              "name": "NoticeTemplate",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "template_lines",
                  "type": "tuple[str, ...]",
                  "line": 17
                },
                {
                  "name": "required_fields",
                  "type": "tuple[str, ...]",
                  "line": 18
                },
                {
                  "name": "placeholders_remaining",
                  "type": "tuple[str, ...]",
                  "line": 19
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 20
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 21
                }
              ],
              "line": 13
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/persistence.py",
          "sha256": "bfc2871328900220b9dad1a01d07aeae6f0f7e7b1ab25e66a2908b5766f9d2d6",
          "bytes": 11387,
          "routes": [],
          "models": [
            {
              "name": "StoredNoticeRecord",
              "bases": [],
              "fields": [
                {
                  "name": "record_id",
                  "type": "str",
                  "line": 67
                },
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 68
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 69
                },
                {
                  "name": "owner",
                  "type": "str",
                  "line": 70
                },
                {
                  "name": "registry_notes",
                  "type": "tuple[str, ...]",
                  "line": 71
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 73
                }
              ],
              "line": 66
            },
            {
              "name": "StoredDeadlinePlan",
              "bases": [],
              "fields": [
                {
                  "name": "plan_id",
                  "type": "str",
                  "line": 78
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 79
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 80
                },
                {
                  "name": "reminders",
                  "type": "tuple[str, ...]",
                  "line": 81
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 82
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 83
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 84
                }
              ],
              "line": 77
            },
            {
              "name": "StoredPublicationProof",
              "bases": [],
              "fields": [
                {
                  "name": "proof_id",
                  "type": "str",
                  "line": 89
                },
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 90
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 91
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 92
                },
                {
                  "name": "source_record_id",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 94
                },
                {
                  "name": "published_at",
                  "type": "str",
                  "line": 95
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 96
                },
                {
                  "name": "confirmation_reference",
                  "type": "str",
                  "line": 97
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 98
                },
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 99
                },
                {
                  "name": "proof_notes",
                  "type": "tuple[str, ...]",
                  "line": 100
                },
                {
                  "name": "compliance_status",
                  "type": "str",
                  "line": 101
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 102
                },
                {
                  "name": "created_at",
                  "type": "datetime",
                  "line": 103
                }
              ],
              "line": 88
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/public_ui.py",
          "sha256": "d3c07a7bd9c4bbef24d49107824941812ee5d04bce9ee53a2c83a63e541aa32e",
          "bytes": 6462,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "townlight_notice/publication_check.py",
          "sha256": "e19f0d812ddd348aca7f30e9bcf28cd6d15dc5552a1e79a04f0d35f5f04997ac",
          "bytes": 1107,
          "routes": [],
          "models": [
            {
              "name": "PublicationChecklist",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 13
                },
                {
                  "name": "proof_required",
                  "type": "bool",
                  "line": 14
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/publication_proof.py",
          "sha256": "807dd53445c1fdfa6e0c6bc5988ad4be5c255abfefd5acefaf60dc13a3fc350f",
          "bytes": 2390,
          "routes": [],
          "models": [
            {
              "name": "PublicationProof",
              "bases": [],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "source_module",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "source_record_id",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "channel",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "published_at",
                  "type": "str",
                  "line": 17
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 18
                },
                {
                  "name": "confirmation_reference",
                  "type": "str",
                  "line": 19
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 20
                },
                {
                  "name": "reviewer",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "proof_notes",
                  "type": "tuple[str, ...]",
                  "line": 22
                },
                {
                  "name": "compliance_status",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 24
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/records_export.py",
          "sha256": "faa93c41f8f38bc89b4924e328a7ae354b45ad1478236bd02e924dd4bd8c8f6c",
          "bytes": 1290,
          "routes": [],
          "models": [
            {
              "name": "NoticeRecordsExport",
              "bases": [],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "checklist",
                  "type": "tuple[str, ...]",
                  "line": 14
                },
                {
                  "name": "retention_note",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 11
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/statutory_rules.py",
          "sha256": "0f56cf2c90af07981225565e44ecfc6e7e5468440f4141cc8ee1448703b8fe0a",
          "bytes": 6430,
          "routes": [],
          "models": [
            {
              "name": "NoticeRule",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "minimum_lead_days",
                  "type": "int",
                  "line": 14
                },
                {
                  "name": "required_publications",
                  "type": "int",
                  "line": 15
                },
                {
                  "name": "required_channels",
                  "type": "tuple[str, ...]",
                  "line": 16
                },
                {
                  "name": "required_content",
                  "type": "tuple[str, ...]",
                  "line": 17
                },
                {
                  "name": "emergency_path_allowed",
                  "type": "bool",
                  "line": 18
                }
              ],
              "line": 12
            },
            {
              "name": "StatutoryRuleCheck",
              "bases": [],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 24
                },
                {
                  "name": "required_deadline_date",
                  "type": "date",
                  "line": 25
                },
                {
                  "name": "publication_dates",
                  "type": "tuple[date, ...]",
                  "line": 26
                },
                {
                  "name": "channels",
                  "type": "tuple[str, ...]",
                  "line": 27
                },
                {
                  "name": "required_publications",
                  "type": "int",
                  "line": 28
                },
                {
                  "name": "required_channels",
                  "type": "tuple[str, ...]",
                  "line": 29
                },
                {
                  "name": "missing_channels",
                  "type": "tuple[str, ...]",
                  "line": 30
                },
                {
                  "name": "required_content",
                  "type": "tuple[str, ...]",
                  "line": 31
                },
                {
                  "name": "missing_content",
                  "type": "tuple[str, ...]",
                  "line": 32
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "deadline_status",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "publication_count_status",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 36
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 37
                }
              ],
              "line": 22
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/subscriber_delivery.py",
          "sha256": "2defdbcd6c807b2f4c9171afe21559d5b566acaef5376aecb1a5e7faeeb58f94",
          "bytes": 3445,
          "routes": [],
          "models": [
            {
              "name": "Subscriber",
              "bases": [],
              "fields": [
                {
                  "name": "subscriber_id",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "name",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "email",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "channels",
                  "type": "tuple[str, ...]",
                  "line": 15
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 16
                },
                {
                  "name": "active",
                  "type": "bool",
                  "line": 17
                }
              ],
              "line": 11
            },
            {
              "name": "SubscriberDeliveryPlan",
              "bases": [],
              "fields": [
                {
                  "name": "notice_id",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "audience",
                  "type": "str",
                  "line": 24
                },
                {
                  "name": "active_subscriber_count",
                  "type": "int",
                  "line": 25
                },
                {
                  "name": "suppressed_subscriber_count",
                  "type": "int",
                  "line": 26
                },
                {
                  "name": "delivery_channels",
                  "type": "tuple[str, ...]",
                  "line": 27
                },
                {
                  "name": "email_recipients",
                  "type": "tuple[str, ...]",
                  "line": 28
                },
                {
                  "name": "missing_required_channels",
                  "type": "tuple[str, ...]",
                  "line": 29
                },
                {
                  "name": "language_review_required",
                  "type": "bool",
                  "line": 30
                },
                {
                  "name": "staff_review_required",
                  "type": "bool",
                  "line": 31
                },
                {
                  "name": "delivery_notes",
                  "type": "tuple[str, ...]",
                  "line": 32
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 33
                }
              ],
              "line": 21
            }
          ],
          "configuration": []
        },
        {
          "source": "townlight_notice/workflow.py",
          "sha256": "b88b0fe7488519206ed84a22e69d5577c5746dece7d47e7d91b673abc4d1b8e1",
          "bytes": 14094,
          "routes": [],
          "models": [
            {
              "name": "NoticeDraft",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 33
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 34
                },
                {
                  "name": "notice_type",
                  "type": "str",
                  "line": 35
                },
                {
                  "name": "statutory_basis",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "event_date",
                  "type": "date",
                  "line": 37
                },
                {
                  "name": "lead_days",
                  "type": "int",
                  "line": 38
                }
              ],
              "line": 31
            }
          ],
          "configuration": []
        }
      ]
    },
    "station": {
      "repository": "townlight/station",
      "repository_head": "4b5afac07dda1c7f725993d06860a820959d7e06",
      "working_tree_modified": true,
      "principal_import": "townlight_station",
      "source": [
        {
          "source": "beta-1/townlight_station/__init__.py",
          "sha256": "0e4ae6948a7b82358592fa123efcb0f2f19edd0322d93e8077da9db1dcde1ccc",
          "bytes": 132,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/air.py",
          "sha256": "07bbb24d673c73ecb17274965c3aeefaca4b904c2a16af772009088c65b37cb5",
          "bytes": 10038,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/airplay.py",
          "sha256": "1a55dd17541478f97a86d7ff4e3054c6d998c95070bf86bb0d27fa5eeea1d231",
          "bytes": 13211,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/api.py",
          "sha256": "fa99dd6f913fb5020ce4790db6043bd080424bcd99f2e8d97e576daa96432a36",
          "bytes": 14339,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "health",
              "line": 80
            },
            {
              "method": "GET",
              "declared_path": "/v1/identity",
              "function": "identity",
              "line": 85
            },
            {
              "method": "POST",
              "declared_path": "/v1/recordings",
              "function": "capture",
              "line": 90
            },
            {
              "method": "GET",
              "declared_path": "/v1/recordings/{identity}",
              "function": "get_record",
              "line": 192
            },
            {
              "method": "GET",
              "declared_path": "/v1/recordings/{identity}/content",
              "function": "content",
              "line": 196
            },
            {
              "method": "POST",
              "declared_path": "/v1/recordings/{identity}/retry",
              "function": "retry",
              "line": 207
            },
            {
              "method": "GET",
              "declared_path": "/v1/live-sources",
              "function": "live_sources",
              "line": 220
            },
            {
              "method": "GET",
              "declared_path": "/v1/recordings",
              "function": "list_records",
              "line": 225
            },
            {
              "method": "POST",
              "declared_path": "/v1/recordings/{identity}/stop",
              "function": "stop_live",
              "line": 231
            }
          ],
          "models": [
            {
              "name": "Capture",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "UUID",
                  "line": 36
                },
                {
                  "name": "agenda_ids",
                  "type": "list[UUID]",
                  "line": 37
                },
                {
                  "name": "source_file",
                  "type": "str | None",
                  "line": 38
                },
                {
                  "name": "live_source_id",
                  "type": "str | None",
                  "line": 39
                },
                {
                  "name": "civiccast_feed_id",
                  "type": "str | None",
                  "line": 40
                },
                {
                  "name": "captions_file",
                  "type": "str | None",
                  "line": 41
                },
                {
                  "name": "idempotency_key",
                  "type": "str",
                  "line": 42
                }
              ],
              "line": 34
            }
          ],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/boundary.py",
          "sha256": "700a35e89a4e0292a5e10e53957cda336fdfd1419ade5041982c653cc6af81a3",
          "bytes": 7458,
          "routes": [],
          "models": [
            {
              "name": "Settings",
              "bases": [],
              "fields": [
                {
                  "name": "data",
                  "type": "Path",
                  "line": 46
                },
                {
                  "name": "database_url",
                  "type": "str",
                  "line": 47
                },
                {
                  "name": "suite_url",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "media_source",
                  "type": "Path",
                  "line": 49
                },
                {
                  "name": "media_python",
                  "type": "Path",
                  "line": 50
                },
                {
                  "name": "media_runtime",
                  "type": "Path",
                  "line": 51
                },
                {
                  "name": "ffprobe",
                  "type": "Path",
                  "line": 52
                },
                {
                  "name": "max_seconds",
                  "type": "int",
                  "line": 53
                },
                {
                  "name": "max_bytes",
                  "type": "int",
                  "line": 54
                },
                {
                  "name": "width",
                  "type": "int",
                  "line": 55
                },
                {
                  "name": "height",
                  "type": "int",
                  "line": 56
                },
                {
                  "name": "fps",
                  "type": "int",
                  "line": 57
                },
                {
                  "name": "bitrate_kbps",
                  "type": "int",
                  "line": 58
                }
              ],
              "line": 45
            }
          ],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/cli.py",
          "sha256": "b67d712170f08a90e3477d2c12b04ecef0581e6844f6ad79c661bf0e8f86b722",
          "bytes": 2362,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/delivery.py",
          "sha256": "c0a850ee43c111e125b79504f4f12c2f99b2b04813ade8f8cfcbc6ace60c0065",
          "bytes": 11456,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/v1/civiccast-feeds",
              "function": "catalog",
              "line": 56
            },
            {
              "method": "POST",
              "declared_path": "/v1/recordings/{identity}/youtube",
              "function": "upload",
              "line": 61
            },
            {
              "method": "GET",
              "declared_path": "/v1/youtube-uploads",
              "function": "list_uploads",
              "line": 92
            },
            {
              "method": "POST",
              "declared_path": "/v1/youtube-uploads/{identity}/retry",
              "function": "retry",
              "line": 98
            }
          ],
          "models": [
            {
              "name": "Upload",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 48
                },
                {
                  "name": "privacy",
                  "type": "Literal['private', 'unlisted', 'public']",
                  "line": 49
                },
                {
                  "name": "approval_note",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "idempotency_key",
                  "type": "str",
                  "line": 51
                }
              ],
              "line": 46
            }
          ],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/feed_job.py",
          "sha256": "a2e08fa43b4fb5b7f036de8fdef256cff1a6c39f2b4adabc08b09aa3fedb21f1",
          "bytes": 4086,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/live.py",
          "sha256": "5f32afd8d2b5e74296a083436b367fec3940da6ae33123fc17842bf0c6c05cce",
          "bytes": 1251,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/media-lock.json",
          "sha256": "df53ec1559329e1c10c49febd38664a7ced17831bd346044145155d2b3600064",
          "bytes": 83333,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/media_job.py",
          "sha256": "15237eaa872c9772c548aaf57dced25ec51a343489b894a462d95de19507e59b",
          "bytes": 4024,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/operations.py",
          "sha256": "69019673d277ee4850d4dd1789e0576b6883d684b0f1ead2be9f965cfdf7b7d2",
          "bytes": 19402,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/v1/schedules",
              "function": "create_schedule",
              "line": 106
            },
            {
              "method": "GET",
              "declared_path": "/v1/schedules",
              "function": "list_schedules",
              "line": 143
            },
            {
              "method": "POST",
              "declared_path": "/v1/schedules/{identity}/cancel",
              "function": "cancel_schedule",
              "line": 151
            },
            {
              "method": "POST",
              "declared_path": "/v1/playouts",
              "function": "create_playout",
              "line": 163
            },
            {
              "method": "GET",
              "declared_path": "/v1/playouts",
              "function": "list_playouts",
              "line": 187
            },
            {
              "method": "GET",
              "declared_path": "/v1/playouts/{identity}",
              "function": "get_playout",
              "line": 194
            },
            {
              "method": "GET",
              "declared_path": "/v1/on-air",
              "function": "on_air",
              "line": 203
            },
            {
              "method": "POST",
              "declared_path": "/v1/on-air/live",
              "function": "live_override",
              "line": 215
            },
            {
              "method": "POST",
              "declared_path": "/v1/on-air/return-to-schedule",
              "function": "return_to_schedule",
              "line": 232
            },
            {
              "method": "POST",
              "declared_path": "/v1/playouts/{identity}/approve",
              "function": "approve",
              "line": 243
            },
            {
              "method": "POST",
              "declared_path": "/v1/playouts/{identity}/publish",
              "function": "publish",
              "line": 256
            },
            {
              "method": "GET",
              "declared_path": "/v1/public/playback/{identity}",
              "function": "public_playback",
              "line": 285
            },
            {
              "method": "GET",
              "declared_path": "/v1/public/playback/{identity}/captions",
              "function": "public_captions",
              "line": 301
            },
            {
              "method": "GET",
              "declared_path": "/v1/public/playback/{identity}/program",
              "function": "public_program",
              "line": 315
            }
          ],
          "models": [
            {
              "name": "ScheduleRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "UUID",
                  "line": 60
                },
                {
                  "name": "agenda_ids",
                  "type": "list[UUID]",
                  "line": 61
                },
                {
                  "name": "source_file",
                  "type": "str | None",
                  "line": 62
                },
                {
                  "name": "live_source_id",
                  "type": "str | None",
                  "line": 63
                },
                {
                  "name": "captions_file",
                  "type": "str | None",
                  "line": 64
                },
                {
                  "name": "start_at",
                  "type": "datetime",
                  "line": 65
                },
                {
                  "name": "idempotency_key",
                  "type": "str",
                  "line": 66
                }
              ],
              "line": 58
            },
            {
              "name": "PlayoutRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "recording_id",
                  "type": "UUID",
                  "line": 71
                },
                {
                  "name": "mode",
                  "type": "str",
                  "line": 72
                },
                {
                  "name": "idempotency_key",
                  "type": "str",
                  "line": 73
                }
              ],
              "line": 69
            },
            {
              "name": "ApprovalRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "note",
                  "type": "str",
                  "line": 78
                }
              ],
              "line": 76
            },
            {
              "name": "LiveOverrideRequest",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "live_source_id",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 86
                }
              ],
              "line": 81
            }
          ],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/operator.py",
          "sha256": "6471894a1240b611a2bf006867ce79848630f6dc69270e29e54b71dbb26f3837",
          "bytes": 6737,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/v1/operator-ticket",
              "function": "issue",
              "line": 51
            },
            {
              "method": "POST",
              "declared_path": "/operator/session",
              "function": "exchange",
              "line": 60
            },
            {
              "method": "POST",
              "declared_path": "/operator/logout",
              "function": "logout",
              "line": 75
            },
            {
              "method": "GET",
              "declared_path": "/operator/catalog",
              "function": "catalog",
              "line": 82
            },
            {
              "method": "GET",
              "declared_path": "/operator/meeting/{identity}",
              "function": "meeting",
              "line": 102
            },
            {
              "method": "POST",
              "declared_path": "/operator/handoff",
              "function": "handoff",
              "line": 106
            },
            {
              "method": "GET",
              "declared_path": "/",
              "function": "page",
              "line": 124
            },
            {
              "method": "GET",
              "declared_path": "/operator.js",
              "function": "script",
              "line": 128
            },
            {
              "method": "GET",
              "declared_path": "/operator.css",
              "function": "style",
              "line": 132
            }
          ],
          "models": [
            {
              "name": "Ticket",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "ticket",
                  "type": "str",
                  "line": 15
                }
              ],
              "line": 13
            },
            {
              "name": "Handoff",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "request_id",
                  "type": "UUID",
                  "line": 20
                },
                {
                  "name": "recording_id",
                  "type": "UUID",
                  "line": 21
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 22
                }
              ],
              "line": 18
            }
          ],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/packaging.py",
          "sha256": "e53a0b87870b728f6ee5015672e08f9ca05eab0e3c33f5d4c8ecb08b88d92158",
          "bytes": 3726,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/store.py",
          "sha256": "a075061d7de057e3dbc523ae499ff4160e9ea8db65e6a2816ec2b7bfda62a313",
          "bytes": 5756,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/ui/index.html",
          "sha256": "89f91f83f2fb28e34aa77ec361209a3c7049b7d38ef48d3f13befc30dbbf5c79",
          "bytes": 383,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/ui/operator.css",
          "sha256": "689079902c8b58f4737a47bdc8a4352f9845c21d0d6bbc017660bf1c21015ec9",
          "bytes": 1723,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/ui/operator.js",
          "sha256": "0e55284e2359e62006879948dd6e0f90fc4d6f1095230cafd58e5af3651ae2e7",
          "bytes": 202782,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/vod_job.py",
          "sha256": "d55a20bdf377142d6acd857aaca86d17468837ee638311dd3ac0fb76b571821d",
          "bytes": 4583,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/windows_service.py",
          "sha256": "8eebfbe5d14fcae26cbd67ff712e7980444b9ae2a2e600283dc577025552a050",
          "bytes": 3456,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "beta-1/townlight_station/worker.py",
          "sha256": "dd69aaf49e1af7a887a104b1aee7c5a0f459dc95d6a3d520bacb88ad82748e32",
          "bytes": 21320,
          "routes": [],
          "models": [],
          "configuration": []
        }
      ]
    },
    "runtime": {
      "repository": "townlight/townlight",
      "repository_head": "1bad62a1107e9f50bee17ea01ee5cc2e3d0a8bea",
      "working_tree_modified": true,
      "principal_import": "townlight_runtime",
      "source": [
        {
          "source": "desktop/runtime/python-services/townlight_runtime/__init__.py",
          "sha256": "db3facb7198193860bfabca8f0942a86c69e0739b28475fc6ab43d82ba7515dd",
          "bytes": 118,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/access_bridge.py",
          "sha256": "2a6631747d98cb0e2681fc06455c699a0f1d92584c74d5ca7beae5b9df128ecb",
          "bytes": 21767,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/state",
              "function": "access_state",
              "line": 190
            },
            {
              "method": "POST",
              "declared_path": "/review-context",
              "function": "review_context",
              "line": 195
            },
            {
              "method": "POST",
              "declared_path": "/reviews",
              "function": "save_review",
              "line": 209
            },
            {
              "method": "POST",
              "declared_path": "/reviews/{review_id}/delete",
              "function": "delete_review",
              "line": 239
            },
            {
              "method": "POST",
              "declared_path": "/tools",
              "function": "tool",
              "line": 255
            },
            {
              "method": "POST",
              "declared_path": "/rewrite-context",
              "function": "rewrite_context",
              "line": 285
            },
            {
              "method": "POST",
              "declared_path": "/rewrite-result",
              "function": "rewrite_result",
              "line": 300
            },
            {
              "method": "POST",
              "declared_path": "/reviews/{review_id}/export",
              "function": "prepare_export",
              "line": 334
            },
            {
              "method": "POST",
              "declared_path": "/drafts/{draft_id}/export",
              "function": "export_draft",
              "line": 345
            },
            {
              "method": "POST",
              "declared_path": "/exports/{artifact_id}/complete",
              "function": "complete_export",
              "line": 373
            }
          ],
          "models": [
            {
              "name": "ReviewInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 84
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "hasAltText",
                  "type": "bool",
                  "line": 86
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 87
                }
              ],
              "line": 82
            },
            {
              "name": "SaveReview",
              "bases": [
                "ReviewInput"
              ],
              "fields": [
                {
                  "name": "ai_analysis",
                  "type": "str | None",
                  "line": 92
                },
                {
                  "name": "ai_analysis_model",
                  "type": "str | None",
                  "line": 93
                },
                {
                  "name": "ai_outcome",
                  "type": "Literal['generated', 'unavailable', 'failed']",
                  "line": 94
                }
              ],
              "line": 90
            },
            {
              "name": "FormPlan",
              "bases": [
                "ToolInput"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['form-plan']",
                  "line": 102
                },
                {
                  "name": "formName",
                  "type": "str",
                  "line": 103
                },
                {
                  "name": "fields",
                  "type": "list[str]",
                  "line": 104
                }
              ],
              "line": 101
            },
            {
              "name": "PublishingPlan",
              "bases": [
                "ToolInput"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['publishing-workflow']",
                  "line": 108
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 109
                },
                {
                  "name": "hasReview",
                  "type": "bool",
                  "line": 110
                },
                {
                  "name": "hasPlainLanguage",
                  "type": "bool",
                  "line": 111
                },
                {
                  "name": "hasTranslationReview",
                  "type": "bool",
                  "line": 112
                }
              ],
              "line": 107
            },
            {
              "name": "AdaPlan",
              "bases": [
                "ToolInput"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['ada-title-ii']",
                  "line": 116
                },
                {
                  "name": "serviceArea",
                  "type": "str",
                  "line": 117
                },
                {
                  "name": "hasCoordinatorReview",
                  "type": "bool",
                  "line": 118
                }
              ],
              "line": 115
            },
            {
              "name": "TaggedPlan",
              "bases": [
                "ToolInput"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['tagged-pdf']",
                  "line": 122
                },
                {
                  "name": "headingLevels",
                  "type": "list[Annotated[int, Field(ge=0, le=4294967295, strict=True)]]",
                  "line": 123
                }
              ],
              "line": 121
            },
            {
              "name": "RewriteInput",
              "bases": [
                "ToolInput"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['plain-language', 'language-variant']",
                  "line": 130
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 131
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 132
                }
              ],
              "line": 129
            },
            {
              "name": "RewriteResult",
              "bases": [
                "RewriteInput"
              ],
              "fields": [
                {
                  "name": "outcome",
                  "type": "Literal['generated', 'unavailable']",
                  "line": 136
                },
                {
                  "name": "generated",
                  "type": "str | None",
                  "line": 137
                },
                {
                  "name": "model",
                  "type": "str | None",
                  "line": 138
                }
              ],
              "line": 135
            },
            {
              "name": "ExportReceipt",
              "bases": [
                "ToolInput"
              ],
              "fields": [
                {
                  "name": "export_path",
                  "type": "str",
                  "line": 142
                }
              ],
              "line": 141
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/code_bridge.py",
          "sha256": "62a20112343434f75867e6feefeca235688b9e6f37b08410f332a3a0e185774c",
          "bytes": 5279,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/imports",
              "function": "imports",
              "line": 46
            },
            {
              "method": "GET",
              "declared_path": "/sources",
              "function": "sources",
              "line": 55
            },
            {
              "method": "GET",
              "declared_path": "/workspace",
              "function": "workspace",
              "line": 60
            },
            {
              "method": "GET",
              "declared_path": "/lookup",
              "function": "lookup",
              "line": 68
            },
            {
              "method": "GET",
              "declared_path": "/sections/{section_id}/history",
              "function": "section_history",
              "line": 77
            },
            {
              "method": "GET",
              "declared_path": "/citation",
              "function": "citation",
              "line": 82
            },
            {
              "method": "GET",
              "declared_path": "/search",
              "function": "search",
              "line": 89
            },
            {
              "method": "GET",
              "declared_path": "/imports",
              "function": "list_imports",
              "line": 100
            },
            {
              "method": "GET",
              "declared_path": "/imports/{job_id}/tree",
              "function": "import_tree",
              "line": 105
            },
            {
              "method": "GET",
              "declared_path": "/imports/{job_id}/provenance",
              "function": "import_provenance",
              "line": 110
            },
            {
              "method": "GET",
              "declared_path": "/export",
              "function": "export_section",
              "line": 115
            },
            {
              "method": "POST",
              "declared_path": "/questions",
              "function": "questions",
              "line": 120
            },
            {
              "method": "POST",
              "declared_path": "/sections/{section_id}/notes",
              "function": "create_note",
              "line": 125
            },
            {
              "method": "GET",
              "declared_path": "/sections/{section_id}/notes",
              "function": "list_notes",
              "line": 130
            },
            {
              "method": "POST",
              "declared_path": "/sections/{section_id}/summaries",
              "function": "create_summary",
              "line": 135
            },
            {
              "method": "POST",
              "declared_path": "/summaries/{summary_id}/approve",
              "function": "approve_summary",
              "line": 140
            },
            {
              "method": "GET",
              "declared_path": "/sections/{section_id}/summaries",
              "function": "list_summaries",
              "line": 145
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/code_meetings.py",
          "sha256": "dafae58b355e09ae4fcf81037c25801d48fe38ca7f0f379d5ca44e9145e808a3",
          "bytes": 13399,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/code_meetings_bridge.py",
          "sha256": "eed7d1036cdc81b98288246e960194057d90edd6df6d3634a7f9cfce1ddc52e0",
          "bytes": 4635,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/connections",
              "function": "list_connections",
              "line": 87
            },
            {
              "method": "GET",
              "declared_path": "/connections/{connection_id}",
              "function": "get_connection",
              "line": 92
            },
            {
              "method": "POST",
              "declared_path": "/connections",
              "function": "create_connection",
              "line": 97
            },
            {
              "method": "POST",
              "declared_path": "/connections/{connection_id}/closeout",
              "function": "closeout_connection",
              "line": 104
            },
            {
              "method": "GET",
              "declared_path": "/code-connections",
              "function": "list_code_connections",
              "line": 111
            },
            {
              "method": "GET",
              "declared_path": "/code-connections/{connection_id}",
              "function": "get_code_connection",
              "line": 116
            },
            {
              "method": "POST",
              "declared_path": "/code-connections/{connection_id}/decisions",
              "function": "record_decision",
              "line": 121
            }
          ],
          "models": [
            {
              "name": "Proposal",
              "bases": [
                "_Strict"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Key",
                  "line": 27
                },
                {
                  "name": "version_id",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "meeting_id",
                  "type": "UUID",
                  "line": 29
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 30
                },
                {
                  "name": "ordinance_number",
                  "type": "str",
                  "line": 31
                },
                {
                  "name": "proposed_text",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "supersedes_id",
                  "type": "Key | None",
                  "line": 33
                },
                {
                  "name": "reconciliation_note",
                  "type": "str | None",
                  "line": 34
                }
              ],
              "line": 26
            },
            {
              "name": "Decision",
              "bases": [
                "_Strict"
              ],
              "fields": [
                {
                  "name": "id",
                  "type": "Key",
                  "line": 38
                },
                {
                  "name": "outcome",
                  "type": "Literal['adopted', 'not_adopted', 'deferred', 'withdrawn']",
                  "line": 39
                },
                {
                  "name": "decided_at",
                  "type": "AwareDatetime | None",
                  "line": 40
                },
                {
                  "name": "decision_text",
                  "type": "str",
                  "line": 41
                },
                {
                  "name": "supporting_references",
                  "type": "list[str]",
                  "line": 42
                },
                {
                  "name": "supersedes_decision_id",
                  "type": "Key | None",
                  "line": 43
                },
                {
                  "name": "reconciliation_note",
                  "type": "str | None",
                  "line": 44
                }
              ],
              "line": 37
            },
            {
              "name": "Closeout",
              "bases": [
                "_Strict"
              ],
              "fields": [
                {
                  "name": "decision_id",
                  "type": "Key",
                  "line": 48
                },
                {
                  "name": "version_id",
                  "type": "str",
                  "line": 49
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 50
                },
                {
                  "name": "version_label",
                  "type": "str",
                  "line": 51
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 52
                },
                {
                  "name": "effective_start",
                  "type": "date",
                  "line": 53
                },
                {
                  "name": "effective_end",
                  "type": "date | None",
                  "line": 54
                },
                {
                  "name": "is_current",
                  "type": "bool",
                  "line": 55
                },
                {
                  "name": "reconciliation_note",
                  "type": "str | None",
                  "line": 56
                }
              ],
              "line": 47
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/code_public.py",
          "sha256": "8c28292fed544f4db88541054f02d60d707130c11c70a1f10b42916302a02433",
          "bytes": 4822,
          "routes": [
            {
              "method": "GET",
              "declared_path": "",
              "function": "home",
              "line": 66
            },
            {
              "method": "GET",
              "declared_path": "/search",
              "function": "search",
              "line": 71
            },
            {
              "method": "GET",
              "declared_path": "/answer",
              "function": "answer",
              "line": 80
            },
            {
              "method": "GET",
              "declared_path": "/sections/{section_ref}",
              "function": "detail",
              "line": 91
            },
            {
              "method": "GET",
              "declared_path": "/sections/{section_ref}/export",
              "function": "export",
              "line": 109
            }
          ],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/code_records.py",
          "sha256": "d7a78ddc87493c02c78b9f027a69708b55040c8c4445644ba4b36340fd459bc4",
          "bytes": 3174,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/database_identity.py",
          "sha256": "7aaf74fe0ab5b5e13c5527f1069e5ad15a4b66c13df98c327969b3bad2c3bd7d",
          "bytes": 1624,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/fixtures/redstone-valley-records-demo-v1.json",
          "sha256": "859a65633f6f4575bb53f5db61a11b0a092cc1f9b145b828e70729cfd28e6a34",
          "bytes": 6629,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/inspections_bridge.py",
          "sha256": "6c840905c53d00a5d7ab5f39b8ca276924098ff11929913fe9b02bba457bf553",
          "bytes": 10132,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/repeat-cases",
              "function": "repeat_cases",
              "line": 93
            },
            {
              "method": "POST",
              "declared_path": "/notice-draft",
              "function": "notice",
              "line": 98
            },
            {
              "method": "GET",
              "declared_path": "/cases",
              "function": "cases",
              "line": 105
            },
            {
              "method": "POST",
              "declared_path": "/cases",
              "function": "create_case",
              "line": 110
            },
            {
              "method": "GET",
              "declared_path": "/cases/{case_id}",
              "function": "case",
              "line": 115
            },
            {
              "method": "POST",
              "declared_path": "/cases/{case_id}/revisions",
              "function": "revise",
              "line": 120
            },
            {
              "method": "GET",
              "declared_path": "/cases/{case_id}/history",
              "function": "history",
              "line": 125
            },
            {
              "method": "POST",
              "declared_path": "/cases/{case_id}/packets",
              "function": "packet",
              "line": 135
            },
            {
              "method": "GET",
              "declared_path": "/packets/{packet_id}",
              "function": "document",
              "line": 140
            },
            {
              "method": "GET",
              "declared_path": "/evidence/supported-types",
              "function": "supported_types",
              "line": 179
            },
            {
              "method": "POST",
              "declared_path": "/evidence/retain",
              "function": "retain",
              "line": 188
            },
            {
              "method": "POST",
              "declared_path": "/media/analyse",
              "function": "media_analyse",
              "line": 199
            },
            {
              "method": "POST",
              "declared_path": "/connections/search",
              "function": "connections",
              "line": 234
            }
          ],
          "models": [
            {
              "name": "RepeatLookup",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "property_reference",
                  "type": "str",
                  "line": 89
                }
              ],
              "line": 88
            },
            {
              "name": "Packet",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "UUID",
                  "line": 130
                },
                {
                  "name": "visibility",
                  "type": "Literal['staff_only', 'records_copy']",
                  "line": 131
                }
              ],
              "line": 129
            },
            {
              "name": "EvidenceItem",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "filename",
                  "type": "str",
                  "line": 145
                },
                {
                  "name": "media_type",
                  "type": "str",
                  "line": 146
                },
                {
                  "name": "description",
                  "type": "str",
                  "line": 147
                },
                {
                  "name": "content_base64",
                  "type": "str",
                  "line": 148
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 149
                }
              ],
              "line": 144
            },
            {
              "name": "EvidenceItems",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "items",
                  "type": "list[EvidenceItem]",
                  "line": 153
                }
              ],
              "line": 152
            },
            {
              "name": "CodeLink",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['code']",
                  "line": 157
                },
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 158
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 159
                }
              ],
              "line": 156
            },
            {
              "name": "MediaAnalysis",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "items",
                  "type": "list[EvidenceItem]",
                  "line": 163
                },
                {
                  "name": "code_links",
                  "type": "list[CodeLink]",
                  "line": 164
                },
                {
                  "name": "inspector_supplied_text",
                  "type": "str",
                  "line": 165
                }
              ],
              "line": 162
            },
            {
              "name": "Search",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['code']",
                  "line": 229
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 230
                }
              ],
              "line": 228
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/meetings_bridge.py",
          "sha256": "c188c7f52163681ffbd3dcee61da2f7cba24df6839adb421be804087dca4ff4c",
          "bytes": 29127,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/stages",
              "function": "record_meeting_stage",
              "line": 106
            },
            {
              "method": "POST",
              "declared_path": "/meetings",
              "function": "create_meeting",
              "line": 128
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}",
              "function": "get_meeting",
              "line": 136
            },
            {
              "method": "POST",
              "declared_path": "/agenda-items",
              "function": "create_agenda_item",
              "line": 141
            },
            {
              "method": "GET",
              "declared_path": "/agenda-items/{item_id}",
              "function": "get_agenda_item",
              "line": 148
            },
            {
              "method": "POST",
              "declared_path": "/agenda-items/{item_id}/reviews",
              "function": "record_agenda_review",
              "line": 164
            },
            {
              "method": "POST",
              "declared_path": "/agenda-items/{item_id}/meeting",
              "function": "assign_agenda",
              "line": 170
            },
            {
              "method": "GET",
              "declared_path": "/notices/{notice_id}/template",
              "function": "notice_template",
              "line": 249
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/document",
              "function": "notice_document",
              "line": 264
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/notice-checks",
              "function": "check_notice",
              "line": 278
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/proof",
              "function": "record_notice_proof",
              "line": 295
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/transcripts",
              "function": "capture_transcript",
              "line": 332
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/action-items",
              "function": "capture_action_item",
              "line": 344
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/archive",
              "function": "archive_meeting",
              "line": 356
            },
            {
              "method": "GET",
              "declared_path": "",
              "function": "public_archive_index",
              "line": 399
            },
            {
              "method": "GET",
              "declared_path": "/{record_id}",
              "function": "public_archive_detail",
              "line": 407
            },
            {
              "method": "GET",
              "declared_path": "/{record_id}/{kind}.txt",
              "function": "public_archive_download",
              "line": 417
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/packet-snapshots",
              "function": "capture_packet",
              "line": 441
            },
            {
              "method": "POST",
              "declared_path": "/packets/{packet_id}/deliver",
              "function": "export_packet",
              "line": 462
            },
            {
              "method": "POST",
              "declared_path": "/minutes/{draft_id}/decisions",
              "function": "decide_minutes",
              "line": 475
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/motions",
              "function": "capture_motion",
              "line": 498
            },
            {
              "method": "POST",
              "declared_path": "/motions/{motion_id}/corrections",
              "function": "correct_motion",
              "line": 505
            },
            {
              "method": "POST",
              "declared_path": "/motions/{motion_id}/votes",
              "function": "capture_vote",
              "line": 511
            },
            {
              "method": "POST",
              "declared_path": "/votes/{vote_id}/corrections",
              "function": "correct_vote",
              "line": 517
            },
            {
              "method": "POST",
              "declared_path": "/meetings/{meeting_id}/minutes/drafts",
              "function": "create_minutes",
              "line": 523
            },
            {
              "method": "GET",
              "declared_path": "/meetings/{meeting_id}/proceedings",
              "function": "proceedings",
              "line": 532
            },
            {
              "method": "GET",
              "declared_path": "/station/catalog",
              "function": "station_catalog",
              "line": 552
            }
          ],
          "models": [
            {
              "name": "MeetingInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 85
                },
                {
                  "name": "scheduled_start",
                  "type": "AwareDatetime",
                  "line": 86
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 87
                },
                {
                  "name": "meeting_type",
                  "type": "Literal['regular', 'special', 'emergency', 'closed_session', 'executive']",
                  "line": 88
                }
              ],
              "line": 83
            },
            {
              "name": "AgendaInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 93
                },
                {
                  "name": "department_name",
                  "type": "str",
                  "line": 94
                }
              ],
              "line": 91
            },
            {
              "name": "MeetingStageInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "to_status",
                  "type": "Literal['SCHEDULED', 'NOTICED', 'PACKET_POSTED', 'IN_PROGRESS', 'RECESSED', 'ADJOURNED', 'TRANSCRIPT_READY', 'MINUTES_DRAFTED', 'MINUTES_POSTED', 'MINUTES_ADOPTED', 'MINUTES_SIGNED', 'ARCHIVED', 'CANCELLED']",
                  "line": 99
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 102
                }
              ],
              "line": 97
            },
            {
              "name": "AgendaReviewInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "to_status",
                  "type": "Literal['DRAFTED', 'SUBMITTED', 'DEPT_APPROVED', 'LEGAL_REVIEWED', 'CLERK_ACCEPTED', 'ON_AGENDA', 'IN_PACKET', 'POSTED', 'HEARD', 'DISPOSED', 'ARCHIVED']",
                  "line": 154
                }
              ],
              "line": 152
            },
            {
              "name": "AgendaAssignment",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "meeting_id",
                  "type": "UUID",
                  "line": 160
                }
              ],
              "line": 158
            },
            {
              "name": "MotionInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 180
                },
                {
                  "name": "seconded_by",
                  "type": "str | None",
                  "line": 181
                }
              ],
              "line": 178
            },
            {
              "name": "MotionCorrection",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 186
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 187
                }
              ],
              "line": 184
            },
            {
              "name": "VoteInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "voter_name",
                  "type": "str",
                  "line": 192
                },
                {
                  "name": "vote",
                  "type": "str",
                  "line": 193
                }
              ],
              "line": 190
            },
            {
              "name": "VoteCorrection",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "vote",
                  "type": "str",
                  "line": 198
                },
                {
                  "name": "reason",
                  "type": "str",
                  "line": 199
                }
              ],
              "line": 196
            },
            {
              "name": "SourceInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 204
                },
                {
                  "name": "label",
                  "type": "str",
                  "line": 205
                },
                {
                  "name": "text",
                  "type": "str",
                  "line": 206
                }
              ],
              "line": 202
            },
            {
              "name": "SentenceInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 211
                },
                {
                  "name": "citations",
                  "type": "list[str]",
                  "line": 212
                }
              ],
              "line": 209
            },
            {
              "name": "DraftInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_materials",
                  "type": "list[SourceInput]",
                  "line": 217
                },
                {
                  "name": "sentences",
                  "type": "list[SentenceInput]",
                  "line": 218
                }
              ],
              "line": 215
            },
            {
              "name": "MinutesDecision",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "action",
                  "type": "Literal['post', 'adopt', 'sign']",
                  "line": 223
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 224
                }
              ],
              "line": 221
            },
            {
              "name": "NoticeInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "notice_type",
                  "type": "Literal['regular', 'special', 'emergency', 'closed_session', 'executive']",
                  "line": 229
                },
                {
                  "name": "posted_at",
                  "type": "AwareDatetime",
                  "line": 230
                },
                {
                  "name": "minimum_notice_hours",
                  "type": "int",
                  "line": 231
                },
                {
                  "name": "statutory_basis",
                  "type": "str | None",
                  "line": 232
                },
                {
                  "name": "approved_by",
                  "type": "str | None",
                  "line": 233
                }
              ],
              "line": 227
            },
            {
              "name": "NoticeProofInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "location",
                  "type": "str",
                  "line": 238
                },
                {
                  "name": "note",
                  "type": "str",
                  "line": 239
                },
                {
                  "name": "document_delivery_id",
                  "type": "str | None",
                  "line": 240
                }
              ],
              "line": 236
            },
            {
              "name": "NoticeDocumentInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "text",
                  "type": "str",
                  "line": 245
                }
              ],
              "line": 243
            },
            {
              "name": "PacketInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "agenda_item_ids",
                  "type": "list[UUID]",
                  "line": 305
                },
                {
                  "name": "source_files",
                  "type": "list['ManagedSource']",
                  "line": 306
                }
              ],
              "line": 303
            },
            {
              "name": "TranscriptInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "source_label",
                  "type": "str",
                  "line": 311
                },
                {
                  "name": "transcript_text",
                  "type": "str",
                  "line": 312
                },
                {
                  "name": "correction_of_id",
                  "type": "UUID | None",
                  "line": 313
                }
              ],
              "line": 309
            },
            {
              "name": "ActionItemInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "description",
                  "type": "str",
                  "line": 318
                },
                {
                  "name": "assigned_to",
                  "type": "str | None",
                  "line": 319
                },
                {
                  "name": "source_motion_id",
                  "type": "UUID | None",
                  "line": 320
                }
              ],
              "line": 316
            },
            {
              "name": "ArchiveInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "visibility",
                  "type": "Literal['public', 'closed_session']",
                  "line": 325
                },
                {
                  "name": "packet_id",
                  "type": "UUID | None",
                  "line": 326
                },
                {
                  "name": "minutes_id",
                  "type": "UUID | None",
                  "line": 327
                },
                {
                  "name": "plain_language_summary",
                  "type": "str",
                  "line": 328
                }
              ],
              "line": 323
            },
            {
              "name": "ManagedSource",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "original_path",
                  "type": "str",
                  "line": 426
                },
                {
                  "name": "stored_path",
                  "type": "str",
                  "line": 427
                },
                {
                  "name": "file_name",
                  "type": "str",
                  "line": 428
                },
                {
                  "name": "sha256",
                  "type": "str",
                  "line": 429
                },
                {
                  "name": "size_bytes",
                  "type": "int",
                  "line": 430
                }
              ],
              "line": 424
            }
          ],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 38
            },
            {
              "environment": "TOWNLIGHT_PROFILE_ROOT",
              "line": 434
            }
          ]
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/migrate.py",
          "sha256": "072bcee7c652a1858a69cac4056fd7a6ecd0d19e59ca7affa536fb32d39ea081",
          "bytes": 6108,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "DATABASE_URL",
              "line": 41
            }
          ]
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/native_accounts.py",
          "sha256": "497fb326fccb61dec69b58daf35a382ab832adeed190e65d2a7f87098fb3c6e7",
          "bytes": 4090,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/notice_bridge.py",
          "sha256": "23de374634960f6ee5b07f13f445fcec07af84a44d6393def6559224f4231b4b",
          "bytes": 7532,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/notices",
              "function": "inventory",
              "line": 69
            },
            {
              "method": "POST",
              "declared_path": "/notices",
              "function": "create",
              "line": 74
            },
            {
              "method": "GET",
              "declared_path": "/notices/{notice_id}",
              "function": "read",
              "line": 79
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/revisions",
              "function": "edit",
              "line": 85
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/review",
              "function": "review",
              "line": 90
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/approval",
              "function": "approve",
              "line": 95
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/proof",
              "function": "proof",
              "line": 100
            },
            {
              "method": "POST",
              "declared_path": "/notices/{notice_id}/archive",
              "function": "archive",
              "line": 110
            },
            {
              "method": "GET",
              "declared_path": "/archives/{archive_id}",
              "function": "export",
              "line": 115
            },
            {
              "method": "POST",
              "declared_path": "/archives/{archive_id}/records",
              "function": "handoff",
              "line": 127
            }
          ],
          "models": [
            {
              "name": "Version",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "sequence",
                  "type": "int",
                  "line": 50
                }
              ],
              "line": 48
            },
            {
              "name": "Revision",
              "bases": [
                "Version"
              ],
              "fields": [
                {
                  "name": "document",
                  "type": "NoticeDraft",
                  "line": 54
                }
              ],
              "line": 53
            },
            {
              "name": "Review",
              "bases": [
                "Version"
              ],
              "fields": [
                {
                  "name": "note",
                  "type": "str",
                  "line": 58
                }
              ],
              "line": 57
            },
            {
              "name": "Proof",
              "bases": [
                "Version"
              ],
              "fields": [
                {
                  "name": "filename",
                  "type": "str",
                  "line": 62
                },
                {
                  "name": "content_base64",
                  "type": "str",
                  "line": 63
                },
                {
                  "name": "location",
                  "type": "str",
                  "line": 64
                },
                {
                  "name": "published_at",
                  "type": "str",
                  "line": 65
                }
              ],
              "line": 61
            },
            {
              "name": "Handoff",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "request_id",
                  "type": "UUID",
                  "line": 123
                }
              ],
              "line": 121
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/permitting_bridge.py",
          "sha256": "3505589503441a72fe6c6094b6cd6d31a111ce633f912e85ccd72edd08cf2535",
          "bytes": 9103,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/requirements",
              "function": "import_requirements",
              "line": 85
            },
            {
              "method": "GET",
              "declared_path": "/requirements",
              "function": "requirements",
              "line": 91
            },
            {
              "method": "GET",
              "declared_path": "/requirements/{revision_id}",
              "function": "requirement",
              "line": 96
            },
            {
              "method": "GET",
              "declared_path": "/cases",
              "function": "cases",
              "line": 101
            },
            {
              "method": "POST",
              "declared_path": "/cases",
              "function": "create_case",
              "line": 106
            },
            {
              "method": "GET",
              "declared_path": "/cases/{case_id}",
              "function": "case",
              "line": 111
            },
            {
              "method": "POST",
              "declared_path": "/cases/{case_id}/revisions",
              "function": "revise",
              "line": 116
            },
            {
              "method": "GET",
              "declared_path": "/cases/{case_id}/history",
              "function": "history",
              "line": 121
            },
            {
              "method": "POST",
              "declared_path": "/cases/{case_id}/packets",
              "function": "packet",
              "line": 131
            },
            {
              "method": "GET",
              "declared_path": "/packets/{packet_id}",
              "function": "document",
              "line": 136
            },
            {
              "method": "POST",
              "declared_path": "/pathway",
              "function": "pathway",
              "line": 149
            },
            {
              "method": "POST",
              "declared_path": "/connections/search",
              "function": "connections",
              "line": 199
            }
          ],
          "models": [
            {
              "name": "Import",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "RequirementBundle",
                  "line": 80
                },
                {
                  "name": "expected_revision",
                  "type": "UUID | None",
                  "line": 81
                }
              ],
              "line": 79
            },
            {
              "name": "Packet",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "UUID",
                  "line": 126
                },
                {
                  "name": "visibility",
                  "type": "Literal['staff_only', 'records_copy']",
                  "line": 127
                }
              ],
              "line": 125
            },
            {
              "name": "Pathway",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "project_type",
                  "type": "str",
                  "line": 141
                },
                {
                  "name": "proposal",
                  "type": "str",
                  "line": 142
                },
                {
                  "name": "location_context",
                  "type": "str",
                  "line": 143
                },
                {
                  "name": "requirement_revision",
                  "type": "UUID | None",
                  "line": 144
                },
                {
                  "name": "fee_link",
                  "type": "SourceLink | None",
                  "line": 145
                }
              ],
              "line": 140
            },
            {
              "name": "Search",
              "bases": [
                "Model"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['code', 'zoning']",
                  "line": 194
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 195
                }
              ],
              "line": 193
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/planning_bridge.py",
          "sha256": "9722286324a54d1dd831ae2f978c8337450b98bd90dee74fe15ff8cbd771992c",
          "bytes": 14570,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/imports/preview",
              "function": "preview_import",
              "line": 80
            },
            {
              "method": "POST",
              "declared_path": "/imports",
              "function": "import_source",
              "line": 89
            },
            {
              "method": "GET",
              "declared_path": "/sources",
              "function": "source_list",
              "line": 98
            },
            {
              "method": "GET",
              "declared_path": "/sources/{plan_id}/history",
              "function": "source_history",
              "line": 104
            },
            {
              "method": "GET",
              "declared_path": "/revisions/{revision_id}",
              "function": "revision",
              "line": 109
            },
            {
              "method": "GET",
              "declared_path": "/revisions/{revision_id}/documents/{document_id}",
              "function": "staff_original",
              "line": 127
            },
            {
              "method": "POST",
              "declared_path": "/policies/search",
              "function": "policies",
              "line": 137
            },
            {
              "method": "GET",
              "declared_path": "/analyses",
              "function": "analyses",
              "line": 142
            },
            {
              "method": "POST",
              "declared_path": "/analyses",
              "function": "create_analysis",
              "line": 155
            },
            {
              "method": "POST",
              "declared_path": "/analyses/{analysis_id}/revisions",
              "function": "revise_analysis",
              "line": 165
            },
            {
              "method": "GET",
              "declared_path": "/analyses/{analysis_id}",
              "function": "analysis",
              "line": 175
            },
            {
              "method": "GET",
              "declared_path": "/analyses/{analysis_id}/history",
              "function": "analysis_history",
              "line": 180
            },
            {
              "method": "POST",
              "declared_path": "/analyses/{analysis_id}/snapshot-preview",
              "function": "preview_snapshot",
              "line": 190
            },
            {
              "method": "POST",
              "declared_path": "/analyses/{analysis_id}/snapshots",
              "function": "snapshot",
              "line": 195
            },
            {
              "method": "GET",
              "declared_path": "/snapshots",
              "function": "snapshots",
              "line": 200
            },
            {
              "method": "GET",
              "declared_path": "/snapshots/{snapshot_id}",
              "function": "document",
              "line": 206
            },
            {
              "method": "POST",
              "declared_path": "/snapshots/{snapshot_id}/access-advice",
              "function": "access_advice",
              "line": 211
            },
            {
              "method": "POST",
              "declared_path": "/connections/search",
              "function": "connections",
              "line": 221
            },
            {
              "method": "POST",
              "declared_path": "/policies/search",
              "function": "public_policies",
              "line": 226
            },
            {
              "method": "POST",
              "declared_path": "/plan-explore",
              "function": "public_plan_explore",
              "line": 238
            },
            {
              "method": "GET",
              "declared_path": "/snapshots",
              "function": "public_snapshots",
              "line": 254
            },
            {
              "method": "GET",
              "declared_path": "/snapshots/{snapshot_id}",
              "function": "public_document",
              "line": 260
            },
            {
              "method": "GET",
              "declared_path": "/revisions/{revision_id}/documents/{document_id}",
              "function": "public_original",
              "line": 265
            },
            {
              "method": "GET",
              "declared_path": "/progress/targets",
              "function": "municipal_progress",
              "line": 270
            },
            {
              "method": "GET",
              "declared_path": "/amendments/history",
              "function": "municipal_amendments",
              "line": 275
            },
            {
              "method": "GET",
              "declared_path": "/municipal-work/{item_id}/history",
              "function": "municipal_history",
              "line": 280
            },
            {
              "method": "POST",
              "declared_path": "/initiatives",
              "function": "create_initiative",
              "line": 285
            },
            {
              "method": "POST",
              "declared_path": "/initiatives/{item_id}/revisions",
              "function": "update_initiative",
              "line": 290
            },
            {
              "method": "POST",
              "declared_path": "/amendments",
              "function": "create_amendment",
              "line": 295
            },
            {
              "method": "POST",
              "declared_path": "/amendments/{item_id}/revisions",
              "function": "update_amendment",
              "line": 300
            }
          ],
          "models": [
            {
              "name": "Import",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "dict",
                  "line": 75
                },
                {
                  "name": "expected_previous_revision",
                  "type": "str | None",
                  "line": 76
                }
              ],
              "line": 74
            },
            {
              "name": "Search",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 132
                },
                {
                  "name": "plan_type",
                  "type": "str | None",
                  "line": 133
                }
              ],
              "line": 131
            },
            {
              "name": "Snapshot",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "expected_revision",
                  "type": "UUID",
                  "line": 185
                },
                {
                  "name": "visibility",
                  "type": "Literal['staff_only', 'public']",
                  "line": 186
                }
              ],
              "line": 184
            },
            {
              "name": "ConnectionSearch",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "Literal['meetings', 'zoning']",
                  "line": 216
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 217
                }
              ],
              "line": 215
            },
            {
              "name": "PublicExplore",
              "bases": [
                "BundleModel"
              ],
              "fields": [
                {
                  "name": "goal",
                  "type": "str",
                  "line": 231
                },
                {
                  "name": "topic",
                  "type": "str",
                  "line": 232
                },
                {
                  "name": "neighborhood",
                  "type": "str",
                  "line": 233
                },
                {
                  "name": "plan_type",
                  "type": "str",
                  "line": 234
                }
              ],
              "line": 230
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/planning_connections.py",
          "sha256": "116b2e0cf1d1acaba1d5135f746a91e283cbd5fb238631379a4672496d96ae77",
          "bytes": 2494,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/records_cutover.py",
          "sha256": "e0c2f9b4ef95e913c8c096bf5bc472bde66ff1eab1d1775026e8923f900675e0",
          "bytes": 4650,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/records_demo.py",
          "sha256": "fe5d902ba81e6c55bcce095ce7eb13071254c028c2dd730393a7cce10c6a7263",
          "bytes": 7341,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/records_import.py",
          "sha256": "7baa9f06e3d046711b4111bb2ba28e89adcaed156bd896ec3caeab03feb2622e",
          "bytes": 8613,
          "routes": [],
          "models": [
            {
              "name": "ImportPreflight",
              "bases": [],
              "fields": [
                {
                  "name": "source_path",
                  "type": "Path",
                  "line": 30
                },
                {
                  "name": "source_bytes",
                  "type": "bytes",
                  "line": 31
                },
                {
                  "name": "source_sha256",
                  "type": "str",
                  "line": 32
                },
                {
                  "name": "original",
                  "type": "dict",
                  "line": 33
                },
                {
                  "name": "records",
                  "type": "tuple[RecordsView, ...]",
                  "line": 34
                },
                {
                  "name": "verified_files",
                  "type": "tuple[tuple[str, str, int], ...]",
                  "line": 35
                },
                {
                  "name": "legacy_audit_head",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "unhashed_audit_entries",
                  "type": "int",
                  "line": 37
                }
              ],
              "line": 29
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/records_import_access.py",
          "sha256": "51ccf503c5901e60d836a657972539a880e723285482821d418065053addf8fa",
          "bytes": 3191,
          "routes": [],
          "models": [
            {
              "name": "Finding",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "code",
                  "type": "str",
                  "line": 12
                },
                {
                  "name": "severity",
                  "type": "str",
                  "line": 13
                },
                {
                  "name": "message",
                  "type": "str",
                  "line": 14
                },
                {
                  "name": "fix",
                  "type": "str",
                  "line": 15
                },
                {
                  "name": "wcag_reference",
                  "type": "str",
                  "line": 16
                }
              ],
              "line": 10
            },
            {
              "name": "Review",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "review_id",
                  "type": "str",
                  "line": 21
                },
                {
                  "name": "title",
                  "type": "str",
                  "line": 22
                },
                {
                  "name": "body",
                  "type": "str",
                  "line": 23
                },
                {
                  "name": "has_alt_text",
                  "type": "bool",
                  "line": 24
                },
                {
                  "name": "language",
                  "type": "str",
                  "line": 25
                },
                {
                  "name": "status",
                  "type": "str",
                  "line": 26
                },
                {
                  "name": "findings",
                  "type": "list[Finding]",
                  "line": 27
                },
                {
                  "name": "disclaimer",
                  "type": "str",
                  "line": 28
                },
                {
                  "name": "ai_analysis",
                  "type": "str | None",
                  "line": 29
                },
                {
                  "name": "ai_analysis_model",
                  "type": "str | None",
                  "line": 30
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 31
                }
              ],
              "line": 19
            },
            {
              "name": "Event",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "event_id",
                  "type": "str",
                  "line": 36
                },
                {
                  "name": "action",
                  "type": "str",
                  "line": 37
                },
                {
                  "name": "subject_id",
                  "type": "str | None",
                  "line": 38
                },
                {
                  "name": "actor",
                  "type": "str",
                  "line": 39
                },
                {
                  "name": "created_at_unix_seconds",
                  "type": "int",
                  "line": 40
                }
              ],
              "line": 34
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/records_import_store.py",
          "sha256": "e5f116e7620d86cca0b46f37561dd7b1f714c83178be681f51bd6a9db942edcd",
          "bytes": 16872,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/records_snapshot.py",
          "sha256": "aa5bb7ee752f961c1cda5f5ebd1001d0fe603bdf3fa39857a7f28363ef8bb87d",
          "bytes": 7220,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/state",
              "function": "suite_state",
              "line": 67
            },
            {
              "method": "POST",
              "declared_path": "/search",
              "function": "search",
              "line": 85
            }
          ],
          "models": [
            {
              "name": "SearchInput",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 73
                }
              ],
              "line": 71
            }
          ],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/services.py",
          "sha256": "c2839cde26f3bd8937d492c33129b6709898c3213a8f57416710c2e8253e10bf",
          "bytes": 23688,
          "routes": [
            {
              "method": "GET",
              "declared_path": "/health",
              "function": "runtime_health",
              "line": 443
            },
            {
              "method": "GET",
              "declared_path": "/modules",
              "function": "runtime_health",
              "line": 443
            },
            {
              "method": "GET",
              "declared_path": "/ready",
              "function": "domain_ready",
              "line": 448
            }
          ],
          "models": [],
          "configuration": [
            {
              "environment": "TOWNLIGHT_PROFILE_ROOT",
              "line": 56
            },
            {
              "environment": "TOWNLIGHT_DATA_DIR",
              "line": 61
            },
            {
              "environment": "LOCALAPPDATA",
              "line": 64
            },
            {
              "environment": "JWT_SECRET_FILE",
              "line": 92
            },
            {
              "environment": "FIRST_ADMIN_PASSWORD_FILE",
              "line": 93
            },
            {
              "environment": "ENCRYPTION_KEY",
              "line": 94
            },
            {
              "environment": "PORTAL_MODE",
              "line": 99
            },
            {
              "environment": "OLLAMA_BASE_URL",
              "line": 100
            },
            {
              "environment": "TOWNLIGHT_MEETINGS_OLLAMA_BASE_URL",
              "line": 101
            },
            {
              "environment": "TOWNLIGHT_CORE_LLM_PROVIDER",
              "line": 102
            },
            {
              "environment": "DATABASE_URL",
              "line": 103
            },
            {
              "environment": "DATABASE_URL",
              "line": 148
            },
            {
              "environment": "TOWNLIGHT_RUNTIME_HOST",
              "line": 483
            },
            {
              "environment": "TESTING",
              "line": 113
            },
            {
              "environment": "TOWNLIGHT_CODE_SOURCE_REGISTRY_DB_URL",
              "line": 242
            },
            {
              "environment": "DATABASE_URL",
              "line": 302
            },
            {
              "environment": "TOWNLIGHT_RUNTIME_PORT",
              "line": 486
            }
          ]
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/storage.py",
          "sha256": "d5c7aaa30c2b781ef9869de8cf9414e11ddfc855824439ba8d292bfb1fd1b9c3",
          "bytes": 1016,
          "routes": [],
          "models": [],
          "configuration": [
            {
              "environment": "TOWNLIGHT_FILE_STORAGE_DIR",
              "line": 12
            },
            {
              "environment": "TOWNLIGHT_DATA_DIR",
              "line": 15
            }
          ]
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/env.py",
          "sha256": "8928b9156c23c2d63337d21c908784f87077cb515c758d3ccf0d6f88ac07ce45",
          "bytes": 2922,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/001_initial.py",
          "sha256": "cac7c6704232487a16a7443e45ccaa18a28bbd9d5b2bec975ef57c39d5165381",
          "bytes": 4352,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/002_documents.py",
          "sha256": "21474b7be697e152f256622a5396aa19b8defe67614aa1decaf9b1809aea496f",
          "bytes": 3862,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/003_model_registry.py",
          "sha256": "a4a1bf77d4e82f8b4ea763d5e65ef5ba6286c906a4e8f02b38b604ed1a442e2a",
          "bytes": 1223,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/004_search.py",
          "sha256": "ee9a39dcb25fbcdf16de136673655bd01c71b107cca27c41dacf8879a7fad948",
          "bytes": 3541,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/005_requests.py",
          "sha256": "0a55883877cd95959d495b8865efec727f18b8bbb86bf8269a938d876e575e55",
          "bytes": 3782,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/006_exemptions.py",
          "sha256": "c2935f1b3fa8771375a78fe065bb5274721a87c1650efb0146be4091ee475675",
          "bytes": 3843,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/008_extend_request_status_enum.py",
          "sha256": "b98949215e447bbef20643a34445f21018e9c1719c78634dca1485740911c3f4",
          "bytes": 1156,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/009_fee_waivers.py",
          "sha256": "3374202e15d16b5e1f64679bd6720c27ed2ebe63993c045bf75e6cc68b8fadb8",
          "bytes": 1446,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/010_remove_sent_status.py",
          "sha256": "45aca2a0b308c0b3e519f087711e6229ff92edc5bedf538e8572c433245336c7",
          "bytes": 4012,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/011_fix_schema_drift.py",
          "sha256": "a152698912070e923c7909ed98105bb29a739222b4cd5695e26e95351cf8d698",
          "bytes": 4011,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/012_add_liaison_public_roles.py",
          "sha256": "f5823d9a088125f055f6e6c2c5577a94002a899836b03e8a3f54adec50826879",
          "bytes": 2217,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/013_add_connector_types.py",
          "sha256": "234267eca383c478fa62403d7c34f93c0c2d721c557f40442febcb087da5baa0",
          "bytes": 1524,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/014_p6a_idempotency.py",
          "sha256": "3f6d96173809739a5990f53f855b63f169419810f6d68fffb28d5ab240cb1282",
          "bytes": 3476,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/015_p6b_scheduler.py",
          "sha256": "92c3929d3b951b22bd65d67e41409b07b19420dbe87442e45cabeeffd6fba945",
          "bytes": 7272,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/016_p7_sync_failures.py",
          "sha256": "99344bf472ac7fc854aeb78ae8bb9687543d20d65d1c097947f8a89aff543339",
          "bytes": 3955,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/017_rename_connector_enum_values.py",
          "sha256": "0d419b2ee2d571a96a947f700c73bfee07561cffa55ebb62d12aaaf3148522cc",
          "bytes": 2053,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/018_city_profile_state_nullable.py",
          "sha256": "5b78e57ccd12ecb2c322f144403cea522e802d9ee8abd9459c70deac06c53b8f",
          "bytes": 2068,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/019_encrypt_connection_config.py",
          "sha256": "7665ba8bc10db28244384d8cdcf55162907e9657a75899464b037e075802f8a9",
          "bytes": 5735,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/020_phase2_consumer_app_backfill.py",
          "sha256": "2376c670acb4bf7ae9fb4a6e323641c5e59231c413262b2c6e6b4c1a6c0e287c",
          "bytes": 2601,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/021_first_admin_password_rotation.py",
          "sha256": "365d7fdfe5d733077649d00fe6983fdefd0dc2d9fc078b9cea0753d0d5f734e7",
          "bytes": 796,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/022_native_records_mapping.py",
          "sha256": "1ae8180ca83c5863c1718274e5435fe1419ec48a4737ccf2434f531a4f2fd7b8",
          "bytes": 4271,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/023_native_records_lifecycle.py",
          "sha256": "00633480cbda11121fc6f98aa10b978ca24213a3626ddd4106c1aa5f660e599e",
          "bytes": 6067,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/024_records_file_evidence.py",
          "sha256": "09c48872ab8e378d709542e20f8495cb1857146b78238e73de570a21151f2fcf",
          "bytes": 2553,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/025_records_artifacts.py",
          "sha256": "b4f4c62211d57b123978fe78ae3dc0c7503110ccae9422776e1bd6d13d003b8a",
          "bytes": 2526,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/026_native_public_actor.py",
          "sha256": "3958251d4c9710ffc20572ee7dcc0fe2dbc169e6f56bd1461d6c1239c2ac231c",
          "bytes": 631,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/027_import_artifact_order.py",
          "sha256": "9ef98e386a1dc848a1fab6893b009198d70556020482df207618519a3301faf8",
          "bytes": 430,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic/versions/787207afc66a_phase2_extensions_12_new_tables_and_.py",
          "sha256": "4d3c03861b6061058d19953a8deb8d8c46cdba775154bf05eed055ee16b26e24",
          "bytes": 18344,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/townlight_records_alembic/alembic.ini",
          "sha256": "60e69c28e3c87e101995977223073125b196202555e1fc18902feed2afdc7e7e",
          "bytes": 524,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/zoning_bridge.py",
          "sha256": "9bb3476d8f8365285cd486b86bdc27b0e28d34519610fdc379d2c58d42d2de54",
          "bytes": 15192,
          "routes": [
            {
              "method": "POST",
              "declared_path": "/imports",
              "function": "imports",
              "line": 68
            },
            {
              "method": "POST",
              "declared_path": "/parcels/lookup",
              "function": "parcel_lookup",
              "line": 91
            },
            {
              "method": "GET",
              "declared_path": "/questions/{question_id}/history",
              "function": "question_history",
              "line": 209
            },
            {
              "method": "POST",
              "declared_path": "/meetings/search",
              "function": "search_meetings",
              "line": 216
            },
            {
              "method": "POST",
              "declared_path": "/questions/{question_id}/meetings",
              "function": "link_meeting",
              "line": 242
            },
            {
              "method": "POST",
              "declared_path": "/questions/{question_id}/snapshots",
              "function": "create_snapshot",
              "line": 259
            },
            {
              "method": "POST",
              "declared_path": "/rules",
              "function": "create_rule",
              "line": 291
            },
            {
              "method": "POST",
              "declared_path": "/questions",
              "function": "create_question",
              "line": 300
            },
            {
              "method": "GET",
              "declared_path": "/workspace",
              "function": "get_workspace",
              "line": 313
            },
            {
              "method": "POST",
              "declared_path": "/questions/{question_id}/reviews",
              "function": "create_review",
              "line": 318
            },
            {
              "method": "POST",
              "declared_path": "/outlines",
              "function": "create_outline",
              "line": 325
            },
            {
              "method": "POST",
              "declared_path": "/code-context",
              "function": "create_code_context",
              "line": 332
            },
            {
              "method": "POST",
              "declared_path": "/standards/process-explanation",
              "function": "standards_explanation",
              "line": 373
            },
            {
              "method": "POST",
              "declared_path": "/questions",
              "function": "public_question",
              "line": 423
            },
            {
              "method": "POST",
              "declared_path": "/parcels/lookup",
              "function": "public_parcel_lookup",
              "line": 434
            }
          ],
          "models": [
            {
              "name": "_ParcelLookupIn",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 63
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 64
                }
              ],
              "line": 60
            },
            {
              "name": "Question",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 151
                },
                {
                  "name": "query",
                  "type": "str",
                  "line": 152
                },
                {
                  "name": "question",
                  "type": "str",
                  "line": 153
                },
                {
                  "name": "kind",
                  "type": "Literal['use', 'dimension']",
                  "line": 154
                },
                {
                  "name": "key",
                  "type": "str",
                  "line": 155
                },
                {
                  "name": "audience",
                  "type": "Literal['resident', 'staff']",
                  "line": 156
                }
              ],
              "line": 150
            },
            {
              "name": "Rule",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "jurisdiction",
                  "type": "str",
                  "line": 160
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 161
                },
                {
                  "name": "key",
                  "type": "str",
                  "line": 162
                },
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 163
                },
                {
                  "name": "kind",
                  "type": "Literal['use', 'dimension']",
                  "line": 164
                },
                {
                  "name": "value",
                  "type": "str",
                  "line": 165
                },
                {
                  "name": "overlay_code",
                  "type": "str | None",
                  "line": 166
                }
              ],
              "line": 159
            },
            {
              "name": "Review",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "answer",
                  "type": "str",
                  "line": 170
                },
                {
                  "name": "notes",
                  "type": "str",
                  "line": 171
                },
                {
                  "name": "queue_status",
                  "type": "Literal['open', 'in_review', 'resolved', 'closed']",
                  "line": 172
                }
              ],
              "line": 169
            },
            {
              "name": "Outline",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "title",
                  "type": "str",
                  "line": 176
                },
                {
                  "name": "question_ids",
                  "type": "list[UUID]",
                  "line": 177
                }
              ],
              "line": 175
            },
            {
              "name": "CodeContext",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "section_number",
                  "type": "str",
                  "line": 181
                },
                {
                  "name": "as_of",
                  "type": "date | None",
                  "line": 182
                }
              ],
              "line": 180
            },
            {
              "name": "MeetingSearch",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "str",
                  "line": 186
                }
              ],
              "line": 185
            },
            {
              "name": "MeetingLink",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "source_id",
                  "type": "str",
                  "line": 190
                },
                {
                  "name": "expected_sha256",
                  "type": "str",
                  "line": 191
                },
                {
                  "name": "relation",
                  "type": "Literal['hearing', 'context', 'precedent']",
                  "line": 192
                }
              ],
              "line": 189
            },
            {
              "name": "SourceSnapshot",
              "bases": [
                "Strict"
              ],
              "fields": [
                {
                  "name": "visibility",
                  "type": "Literal['public', 'staff_only']",
                  "line": 196
                },
                {
                  "name": "meeting_event_ids",
                  "type": "list[UUID]",
                  "line": 197
                }
              ],
              "line": 195
            },
            {
              "name": "StandardsExplanation",
              "bases": [
                "BaseModel"
              ],
              "fields": [
                {
                  "name": "question",
                  "type": "str",
                  "line": 345
                },
                {
                  "name": "process_section",
                  "type": "str",
                  "line": 346
                },
                {
                  "name": "zone_code",
                  "type": "str",
                  "line": 347
                },
                {
                  "name": "rule_types",
                  "type": "list[str]",
                  "line": 348
                },
                {
                  "name": "observed",
                  "type": "dict[str, str]",
                  "line": 349
                }
              ],
              "line": 342
            }
          ],
          "configuration": [
            {
              "environment": "TOWNLIGHT_ZONING_PARCEL_RULE_DB_URL",
              "line": 359
            }
          ]
        },
        {
          "source": "desktop/runtime/python-services/townlight_runtime/zoning_records.py",
          "sha256": "c4cb908e45e90baeaedff9fd4c668ca65229e129bc298b4d893d515046e73449",
          "bytes": 1700,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/atomic_io.rs",
          "sha256": "f48017db219a365b17988522616e2f5ab332986936064712fb12c5f228ab3d35",
          "bytes": 5543,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/auth.rs",
          "sha256": "e5d5febef258b15f03edb006f2204467e87890b08259db1f8ffeec5f208ee156",
          "bytes": 45187,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/code_client.rs",
          "sha256": "7f07c7b90ccf97bfb8883541525417d598c6f385d54a9694d65e9ac40890cdad",
          "bytes": 9186,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/demo_fixture.rs",
          "sha256": "118bf6c8ebdc6fe8d7210bb08c7f7aae7c7f58b99ca25a805f74b49264b51725",
          "bytes": 9823,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/domain_client.rs",
          "sha256": "95e608acfac2f5621205314a61a317f50437f53b1bbee9cdd2e59431ee893a2c",
          "bytes": 41159,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/domain_files.rs",
          "sha256": "85e715da4f8b0762bd2496755c76cbc1b7bc3e81f7d23995cf3ecc16b55a5095",
          "bytes": 13384,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/first_run.rs",
          "sha256": "45e42d7fae458cf4546bedb6b55d5e25cdc617ebda8fc612cef9e0838124b00f",
          "bytes": 56023,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/inspections_client.rs",
          "sha256": "88f582cd2941c27ddd1245df18666d6cfe95ad5523225ea2186bc6d3a5a6643c",
          "bytes": 4521,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/local_paths.rs",
          "sha256": "f07d2a74cef04beaa64cf92a37eef8e1095dbc16d8c8d48e679702666a1b6f19",
          "bytes": 4291,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/local_shell.rs",
          "sha256": "feeb5b6b396c0ad3eea0ecc8505068745eaaf0354bac1e97274aad9a68971100",
          "bytes": 2428,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/main.rs",
          "sha256": "a0b4dd53a0b7c2c4a4e10ae19d236c5bafadc5c3d01065ed89a6fdbfbac31378",
          "bytes": 80956,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/model.rs",
          "sha256": "dbec92b4eb25790ac05c55cde83458819559d5918c97dee0c57258b0cdb36d4c",
          "bytes": 100505,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/module_registry.rs",
          "sha256": "d7afcece112c88cd421932c4502446280dffbbf732ee99b06951a2054edf050a",
          "bytes": 61224,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/notice_client.rs",
          "sha256": "6ae504993b9f503b05dbc4acbbedf58a52895c19f9c16298723de094a17d4ae3",
          "bytes": 2591,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/permitting_client.rs",
          "sha256": "2efc10f71c22cb9167b2f4c6e2ab9c24a6ea3301d37a1bdc04c0e3a76fbd882a",
          "bytes": 4373,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/planning_client.rs",
          "sha256": "5733d0364c2d28d6e98af4ea5357c6b22d1f605f69c58630ce561327112eee1f",
          "bytes": 10603,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/profile_gate.rs",
          "sha256": "5efaedda31be755a165b86d34e87c71d54cd01db94efdcc2b596d50d54cd5b66",
          "bytes": 1809,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/profile_identity.rs",
          "sha256": "04f49fc1fcf51adadf958a100204db63c8527034fbb679df15a589794c01fb3a",
          "bytes": 2536,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/records_authority.rs",
          "sha256": "87f47a88d1675425dbea11bb630c552d32d2b04c7dcf5010af6cf1ef32c1ab11",
          "bytes": 2970,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/supervisor.rs",
          "sha256": "9266597ef98e59e965241df5b9e48face47c1f2483af634733c67a3de352616a",
          "bytes": 212785,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/workflows.rs",
          "sha256": "f0a1a9fdfd3b62852c88a3997c6425510078194727cd5d605b411ce68b2abee0",
          "bytes": 42706,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src-tauri/src/zoning_client.rs",
          "sha256": "3ffa1fe93379491ca5efb00fefc4044ae35479bd04479f674bc0f2ee77e4ee85",
          "bytes": 4140,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/code/client.ts",
          "sha256": "82e69121ebba5c8d617a4b9afcc7b6a9d9fa360464bb1a62778cbfe2ea40e22c",
          "bytes": 5805,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/code/view.js",
          "sha256": "cd4de8e1f4caae9a7a5331e1f34beadf2a8faef00883b14ac6a4e8be06be53e6",
          "bytes": 10101,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/inspections/view.js",
          "sha256": "7f3bb66fbaf5f78705c729e2db82dafd77b6c0ea6a2accd2aed57ad057d980bf",
          "bytes": 17631,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/main.js",
          "sha256": "1c3cd828e8c142fbcb0242a172c967dcbc56dacec400c8063a339238bfae5c02",
          "bytes": 356383,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/meetings/client.ts",
          "sha256": "ba12839650f17a66d5eff5782c0e5feb1a9ad7abfbe1442958b86d9f7813e1cc",
          "bytes": 6896,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/meetings/view.js",
          "sha256": "3d12d5fde231bd777eb3717aac068a8397afe4b2182debff3711592c9881ac24",
          "bytes": 17252,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/notice/view.js",
          "sha256": "05fdae1f9647ea84ef1afee51dda4aad72fdf2765dd32dab8e987c043b14cbf1",
          "bytes": 9626,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/permitting/view.js",
          "sha256": "261b6bcbdffc4c107bfddcfb46c7c8013de78e94b22171560034e3353e545a01",
          "bytes": 19392,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/planning/client.ts",
          "sha256": "90f5f834e301189b907bcf2cc6a83ecd5b9f5bc10199a61b7cd06224905c6584",
          "bytes": 1249,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/planning/municipal.js",
          "sha256": "b3e0cb7dd66e81584d317a6f270e9cf1892147805349e1f3ec91e453ece90d70",
          "bytes": 9154,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/planning/planning.css",
          "sha256": "477e8f96587001e6d67f406bea2768d112fa519ae2e8cde55e18ad2eda678cfb",
          "bytes": 7003,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/planning/view.js",
          "sha256": "9b3b76c9ec43ac09df553469ed20263ba60c2cde65cfcaa8e32a591f59078a36",
          "bytes": 44120,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/access-client.ts",
          "sha256": "6c284a448745a2f3872b2a36dbe1ccd30d0426212362f8c944a923061656b5a7",
          "bytes": 3525,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/client.ts",
          "sha256": "9df93865a964bbb3ba991956f89bc51053511a6497e92b230f01a7a366420e6c",
          "bytes": 6675,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/code-sources.ts",
          "sha256": "52755e6d4248bbfc6268c62f9c663edef7526497dac27acb29b887d5b7b9d0d4",
          "bytes": 4716,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/controller.ts",
          "sha256": "f57adefbdb21a06a96b818b043f9be7e1d52d081738085bae1d95f9172efebb9",
          "bytes": 3420,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/meetings-sources.ts",
          "sha256": "ba5be1b8f0c1854ec777a69e7f5e307785f34d4a929179eabbcea6cf09712c6f",
          "bytes": 3211,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/planning-sources.ts",
          "sha256": "98217a4d2c88068c036e9c9d5c2ba8e89f47fc74cc8054e3d4230c421199cbad",
          "bytes": 3383,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/view.js",
          "sha256": "78b60d7322fffa44e77e9431ed194fae3470fc0210f81801aa2961c186b73db1",
          "bytes": 26073,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/records/zoning-sources.ts",
          "sha256": "333ba5a17c34e45627b04b185e4259a128cb624b2842943be770aa1db323064c",
          "bytes": 3340,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/styles.css",
          "sha256": "9e3baf03bb8bc258d3fd4548ba0d1fdab73edde1fc30f20bf055675ee6b7ee99",
          "bytes": 19655,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/zoning/client.ts",
          "sha256": "aac2300bcc8ca6be214937da2905b03e65cecd4ae671a35052ec0f2e59f8b9ee",
          "bytes": 5810,
          "routes": [],
          "models": [],
          "configuration": []
        },
        {
          "source": "desktop/src/zoning/view.js",
          "sha256": "3548b0755bde1ec2db0396e03f4f56f5b3dfa679fa25da7f1473844cfa4a5b4d",
          "bytes": 11823,
          "routes": [],
          "models": [],
          "configuration": []
        }
      ]
    }
  }
}
