1 WiSACS V1 Prototype Specification

2 Document Status

This Pandoc Markdown specification records the local implementation contract for the WiSACS V1 prototype. It is repository-maintained and is intended to be edited with the implementation changes it describes.

The prototype exposes a deterministic local API under:

/api/v1

The implementation is simulation-first by default. It models discovery, situational awareness, RF/IP network inventory, and advisory interoperability recommendations without real radio control, real active RF sensing, certified emergency-services deployment, or automatic live network bridging.

Artifact Role
specification/catalog.py Canonical, typed normative requirement catalog.
docs/spec/*.md Repository-maintained informative and explanatory chapters.
docs/generated/* Deterministic requirements, contracts, and semantic traceability outputs.
scripts/build_wisacs_spec_docs.py Cross-platform Python/Pandoc renderer for normal PDF, review PDF, LaTeX, and HTML outputs.

3 Update Workflow

  1. Update catalog.py when normative intent, lifecycle, or evidence changes.
  2. Run make spec-generate, review the generated diff, and run make spec-check.
  3. Update docs/spec/*.md only for explanatory design material that is not generated from code.
  4. Render review output with line numbers when needed:
uv run python scripts/build_wisacs_spec_docs.py --mode review --format pdf

4 Pandoc Markdown Conventions

This specification uses Pandoc Markdown rather than plain CommonMark so the source can carry stable requirement anchors, document metadata, pipe tables, definition lists, fenced code blocks, and PDF-oriented review controls without requiring authors to write LaTeX.

Generated requirement headings use explicit identifiers such as:

### WISACS-CATEGORY-NNN: Requirement Title {#WISACS-CATEGORY-NNN}

Catalog evidence uses tracked paths, Python qualified names, OpenAPI operation IDs, and collected test node IDs. The semantic validator resolves those references rather than counting identifier mentions in prose.

5 Normative Language

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in RFC 2119 and RFC 8174 when, and only when, they appear in uppercase.

The generated catalog defines the normative conformance rules for these two profiles:

Simulation Profile
The deterministic local API implemented in this repository. A Simulation Profile implementation MAY use seeded demo users, local SQLite state, simulated incident data, and caller-supplied observations, but it MUST expose those limitations.
Production Profile
A target operational WiSACS implementation. A Production Profile implementation MUST satisfy Simulation Profile requirements that are not explicitly marked simulation-only, and MUST additionally satisfy production identity, persistence, cryptographic, operational-safety, audit-retention, and incident-data governance requirements.

Profile descriptions in this narrative are informative summaries. The identified requirements in the generated requirements chapter are authoritative.

6 Specification Parts

The complete rendered specification is assembled by build_wisacs_spec_docs.py in this order:

  1. System definition and workflow.
  2. API contract.
  3. Data model.
  4. Security posture.
  5. SCA alignment.
  6. Render deployment.
  7. Traceability workflow.
  8. Generated normative requirements and executable contracts.
  9. Generated implementation, verification, and traceability maps.

That split keeps reviewed intent in a side-effect-free catalog, explanatory prose in docs/spec/, and executable facts in generated artifacts.

6.1 Purpose

WiSACS defines a prototype system for disaster-response wireless situation awareness and coordination. The system helps responders and incident coordinators answer three early-scene questions:

  1. Who is present?
  2. Where are personnel, devices, and observed RF/IP systems?
  3. Which communication paths appear technically plausible enough for human review?

This specification describes V1 prototype behavior. It is not a production emergency-services certification, a live network-bridging standard, or a formal SCA conformance profile.

6.2 Scope

V1 covers discovery, inventory, visualization support, advisory interoperability recommendations, and reviewable SCA-ready metadata. V1 intentionally excludes automatic radio control, automatic cross-network bridging, active RF scanning hardware control, production identity federation, and operational policy automation.

6.3 Terms and Definitions

Incident
An emergency-scene operating context that bounds responders, devices, networks, observations, recommendations, and event history.
Responder
A person, crew role, or operational unit participating in an incident.
Field device
A radio, handset, tablet, gateway, router, SDR sensor, laptop, or other deployed system that may communicate, observe RF conditions, or provide services.
Network
An observed RF, IP, voice, mesh, satellite, or other communication system present at the incident.
Network attachment
Evidence that a field device is associated with a network, including optional address, signal, reachability, and observation metadata.
RF observation
A report of spectrum activity at a frequency with optional bandwidth, RSSI, protocol guess, modulation guess, confidence, source, and location.
Service endpoint
A TCP/IP-reachable service reported for a device or network.
Interoperability recommendation
An advisory result that summarizes a candidate communication path and its supporting evidence for human review.
SCA-ready descriptor
A draft JSON representation of device/component metadata that is shaped to support later SCA descriptor work but is not a conformance artifact.

6.4 Informative System Overview

The V1 prototype uses a cloud-hosted API as the shared incident state. Field users, simulation tools, or later hardware probes submit observations. The backend stores these observations, computes advisory recommendations, and exposes inventory data to client applications. The single-origin public deployment serves documentation at the root path, a lightweight HTML/SVG browser operational dashboard at /visualization, and the operational API under /api/v1. The Godot visualization can run as an installed client against the same hosted API, while the Flutter scaffold remains available for later cross-platform client development.

The system is deliberately conservative. WiSACS may identify that multiple devices share an IP network, that a gateway is attached to more than one network, or that a voice-only path must be preserved. WiSACS does not activate a bridge or change live network policy in V1.

6.5 Normative Requirements

Normative requirements are generated from the typed catalog and assembled later in this document. This chapter intentionally contains no hand-maintained requirement declarations.

6.6 Non-Normative Notes

V1 discovery is manual entry plus simulator/probe ingestion. Active RF scanning, production identity federation, and live data relay are deferred.

6.7 Informative V1 Workflow

A typical demonstration flow is:

  1. An incident coordinator authenticates to the API.
  2. The demo scenario or a probe tool posts responders, field devices, networks, attachments, RF observations, and service endpoints.
  3. The backend computes interoperability recommendations from the current incident inventory.
  4. The client displays the operating area, responders, devices, networks, observations, and recommendations.
  5. Reviewers inspect each recommendation and its evidence before any real-world action is taken outside WiSACS.

7 WiSACS API Specification

7.1 Purpose

The WiSACS API is the system boundary between clients, probe tools, stored incident state, and interoperability recommendation logic. The API is designed to be inspectable through OpenAPI and usable by both the Flutter client and lightweight command-line tools.

7.2 API Conventions

All operational REST endpoints are under /api/v1. Root-level health and readiness endpoints are provided for hosting platforms that expect simple unauthenticated checks. JSON is the default request and response format. Identifier fields are opaque strings and should not be parsed by clients.

Bearer-token authentication is used for V1 operational endpoints. Demo users are seeded by the prototype for local review, but production deployments should replace this with an incident-appropriate identity and authorization design.

7.3 Roles

Admin
A user with prototype administrative access.
Commander
A user allowed to perform privileged setup actions such as loading the demo scenario.
Responder
A field user expected to contribute or inspect incident observations.
Observer
A read-only review user. Observer credentials MUST NOT create or mutate incident inventory.

7.4 Resource Families

The API is grouped around the incident lifecycle:

7.5 Normative Requirements

The normative API requirements and their resolved implementation and verification evidence are generated from specification/catalog.py. The generated API reference is derived directly from the side-effect-free FastAPI OpenAPI contract.

7.6 API Shape

All operational REST endpoints are under /api/v1. The OpenAPI document is the executable API reference for V1.

7.7 Informative Error Handling

The prototype uses normal HTTP status codes: 401 for invalid or missing credentials, 403 for insufficient role authorization, 404 for missing resources, and 422 for schema validation errors generated by FastAPI/Pydantic. Future versions should standardize a structured error body once client behavior depends on machine-readable error categories.

8 WiSACS Data Model Specification

8.1 Purpose

The WiSACS data model preserves the minimum shared incident state needed to understand who is present, which communication systems are present, and which interoperability options can be reviewed. The model favors explicit incident scoping and flexible metadata fields because early disaster-response observations are incomplete and evolve quickly.

8.2 Entity Overview

Incident
The root entity for an emergency-scene dataset.
Responder
A person or operational unit associated with an incident.
Field device
Equipment associated with a responder or incident.
Network
A detected or manually entered RF/IP/voice/mesh/satellite communication system.
Network attachment
A relationship between a device and a network with reachability evidence.
RF observation
A spectrum observation produced manually, by a simulator, or by future sensor ingestion.
Service endpoint
A reachable service exposed by a device on a network.
Interop recommendation
A computed advisory record with evidence and risk metadata.
Event log
A lightweight audit/event record for incident state changes.

8.3 Relationship Model

Every operational entity is scoped to an incident. Devices may be assigned to responders, may attach to one or more networks, and may expose service endpoints. Networks may have many device attachments and may carry service endpoints. RF observations may be sourced by a device when the observer is known.

The V1 schema stores latitude and longitude as scalar fields for broad client compatibility. Operational areas and coverage areas are represented as GeoJSON-compatible JSON so the API can support maps without requiring every deployment to use spatial queries immediately.

8.4 Normative Requirements

Normative data requirements and resolved evidence are generated from the typed catalog. The generated data dictionary is derived from SQLAlchemy metadata; Alembic revisions remain the authoritative deployed schema history.

8.5 Storage

PostgreSQL with PostGIS is the production datastore. SQLite is permitted as a local development and automated-test fallback.

Local/test setup may create an empty schema directly. Every change to a populated or deployed database, including additions, renames, drops, type changes, backfills, and stricter constraints, belongs in a reviewed Alembic revision.

8.6 Informative Metadata Guidance

The metadata_tags, properties, and descriptor metadata fields are intended for ontology tags, source-system hints, confidence annotations, and newly discovered attributes. These fields should not become a dumping ground for stable fields that clients depend on; stable cross-client behavior should graduate into named schema fields in later versions.

9 WiSACS Security Specification

9.1 Purpose

WiSACS V1 handles operationally sensitive situational-awareness data. Even in prototype form, the API distinguishes public health checks from authenticated operational behavior and avoids taking automatic live-network actions.

9.2 Security Boundary

The V1 backend is the trust boundary for incident state. Clients and probe tools are treated as untrusted input sources. The backend validates request schemas, authenticates users, applies role checks to privileged actions, and records state through the database model.

9.3 Threat Model

The prototype is primarily concerned with:

The prototype does not yet address production-grade federation, hardware attestation, incident-specific access policy, encrypted offline synchronization, or regulated audit retention.

9.4 Normative Requirements

Normative security requirements, route access classifications, and their executable evidence are generated from the catalog and application contract. This chapter retains the threat model and design explanation only.

9.5 V1 Security Posture

V1 may use explicitly enabled local demonstration users in the Simulation Profile. Production Profile rejects demo identities, demo scenario mutation, and the development signing secret. Production federation, audit retention rules, and incident-specific membership policy remain future work.

9.6 Same-Origin Web Notes

The preferred public deployment places documentation, browser visualization, and API calls on the same HTTPS origin. This avoids making cross-origin API access part of the default security posture. Same-origin deployment does not remove the need for authentication, input validation, content security policy review, or production identity replacement.

9.7 Informative Authorization Notes

Authentication proves that a caller has a recognized prototype user identity. Authorization determines whether that caller can perform a privileged action. V1 uses simple role checks to keep the prototype reviewable. A production deployment should replace seeded users, static roles, and development secrets before use with real incident data. Non-privileged responders and observers are additionally scoped by explicit incident memberships; observers receive read-only memberships and mutation routes reject them.

10 WiSACS SCA Alignment Specification

10.1 Purpose

WiSACS V1 is SCA-ready rather than SCA-compliant. The prototype captures device and service metadata in a shape that can be reviewed by SCA practitioners and later transformed into formal descriptor artifacts if the workgroup chooses that direction.

10.2 Informative Alignment Goals

The V1 alignment work has three goals:

  1. Preserve component-like metadata for field devices.
  2. Represent ports and properties in a form that can be inspected outside the application.
  3. Avoid overstating compliance before a dedicated conformance profile, descriptor format, and validation process exist.

10.3 Conceptual Mapping

WiSACS concept SCA-adjacent concept V1 treatment
Field device Device or component Stored with optional sca_profile and component_kind.
Capability Component capability or property Stored as structured JSON for later refinement.
Service endpoint Port or service access point Stored as protocol, port, URI, and status.
Device properties Descriptor properties Stored in the properties JSON field.
Descriptor metadata Descriptor review context Returned by the draft descriptor endpoint.

10.4 Normative Requirements

Normative SCA-alignment requirements and executable evidence are generated from the typed catalog. The mapping below is explanatory and is not a formal SCA conformance claim.

10.5 Mapping

WiSACS field devices map loosely to SCA components or devices. Service endpoints map to exposed ports. Device properties and descriptor metadata preserve values that may later be transformed into formal SCA descriptor artifacts.

10.6 Informative Conformance Note

Reviewers should treat V1 descriptors as traceable metadata exports. They are useful for discussing SCA alignment, but they are not XML descriptor files, are not generated by an SCA toolchain, and are not validated against an SCA conformance suite.

11 WiSACS Render Deployment Specification

11.1 Purpose

The WiSACS deployment profile describes how the prototype can be hosted as a single Render-backed web application and managed PostgreSQL database. The public deployment uses one origin, https://wisacs.winnforum.org, for documentation, browser visualization, and /api/v1 API calls. The same project can run locally with SQLite for quick review or Docker Compose for a local PostgreSQL/PostGIS workflow.

11.2 Deployment Components

Web application service
Runs the FastAPI application with Uvicorn, serves the documentation landing page, serves the lightweight HTML/SVG browser visualization, and exposes the operational API under /api/v1.
Installed clients
Godot and future Flutter clients may run on handsets or desktops and call the same hosted API origin.
PostgreSQL database
Stores incident, inventory, observation, recommendation, user, and event data.
PostGIS extension
Provides the production geospatial foundation for future spatial queries and indexes.

11.3 Configuration Model

Render supplies DATABASE_URL from the managed database. The web application also reads WISACS_SECRET_KEY, WISACS_ENV, WISACS_PROFILE, WISACS_ENABLE_DEMO_USERS, WISACS_ENABLE_DEMO_SCENARIO, WISACS_BOOTSTRAP_ADMIN_USERNAME, WISACS_BOOTSTRAP_ADMIN_PASSWORD, WISACS_AUTO_CREATE_SCHEMA, and WISACS_PUBLIC_BASE_URL; Render additionally selects the pinned PYTHON_VERSION. Local development may omit DATABASE_URL, in which case the application uses SQLite. Deployment environment and conformance profile are independent settings.

The optional ontology LLM planner uses WiSACS_OPENAI_API_KEY (secret), WISACS_QA_LLM_ENABLED=false, WISACS_QA_LLM_MODEL=gpt-5.6-luna, WISACS_QA_LLM_REASONING_EFFORT=medium (one of none, low, medium, high, xhigh, or max), WISACS_QA_LLM_TIMEOUT_SECONDS, WISACS_QA_LLM_MAX_OUTPUT_TOKENS, WISACS_QA_LLM_MAX_REPAIRS, and WISACS_QA_LLM_ALLOW_PUBLIC=false. Configure the secret through Render’s secret management; do not place credential material in source, blueprints, or documentation. The public qa_html LLM form requires both LLM enablement and the explicit public-mode setting, and it must remain disabled until rate and cost controls are accepted. Published token rates are model-specific; higher reasoning effort can consume more reasoning and output tokens and increase latency. Consult the provider’s current model pricing rather than recording volatile dollar rates here.

11.4 Normative Requirements

Normative deployment requirements and the deployment matrix are generated from the catalog and checked deployment descriptors. This chapter explains the intended Render topology and operational posture.

11.5 Deployment Notes

The backend start command runs uv run --no-sync python scripts/migrate_database.py before uv run --no-sync uvicorn wisacs_api.main:app --host 0.0.0.0 --port $PORT. Render supplies the database connection string through DATABASE_URL. The render.yaml blueprint attaches wisacs.winnforum.org to the web service, references the Render PostgreSQL resource as wisacs-db, and uses /ready as the health check path.

The hosted service uses production environment safeguards with the Simulation Profile. Published demo users remain disabled, the distinct Harbor/Milwaukee and Place Victoria/Old Montreal inventory fixtures are enabled, and a generated bootstrap password creates wisacs-admin only when that username does not exist. Existing Harbor demo deployments backfill the companion Old Montreal fixture at startup without replacing either incident identity. Changing the bootstrap environment password later does not rotate an existing database credential.

When enabled, model input contains the submitted question plus compact, process-cached and versioned TBox context. It returns a strict structured plan that WiSACS validates against the ontology and supported query capability, with at most one repair. The existing compiler alone produces incident-scoped SPARQL. Incident facts and IDs are never model input; the provider key authenticates the API request but is never prompt content.

11.6 Informative Operations Notes

The V1 deployment profile is suitable for prototype review and demonstration. Before production use, operators should add managed secret rotation, database backups, stronger identity integration, TLS/domain review, incident data retention policy, operational monitoring, and a decision on whether demo credentials are disabled or isolated from operational incident data.

12 WiSACS Traceability Specification

12.1 Purpose

Traceability keeps reviewed intent, executable contracts, implementation, and tests moving together. Each normative requirement has a stable ID and semantically resolvable implementation and verification evidence.

12.2 Traceability Model

Normative requirement
A typed record declared in specification/catalog.py with a stable WISACS-* ID and RFC-style requirement language.
Implementation reference
A Git-tracked path, qualified Python symbol, or OpenAPI operation ID resolved by the semantic validator.
Verification reference
A collected test node ID or an explicitly classified manual verification record.
Review PDF
A Pandoc/LaTeX PDF with line numbers intended for comment-based review.

12.3 Normative Requirements

Normative traceability requirements and their evidence are generated from the typed catalog. The generated trace matrix is the review surface for resolved and missing evidence.

12.4 Review Practice

Normative requirement IDs are stable anchors. Review comments should cite catalog IDs and line numbers from generated PDFs when available.

12.5 Informative Maintenance Workflow

When a requirement changes, update its catalog record and executable evidence in the same change, regenerate artifacts, and review the semantic diff. Automated resolution proves that evidence exists and targets a real symbol, operation, or test; human review still decides whether the evidence actually satisfies the requirement.

13 Generated Normative Requirements

Specification version: 0.1.0. Release date: 2026-07-10. Source hash: 7c8856a289d3eea6d28a12bed1bd3469318d4d20bfe8a1494f8693e05f5e880a.

Generated from specification/catalog.py; do not edit this file directly.

13.1 API Requirements

13.1.1 WISACS-API-004: Role-Based Access Control

The API MUST enforce role-based access control, restricting administrative and commander operations.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.2 WISACS-API-008: Incident Membership Scoping

The API MUST verify incident membership permissions before allowing data mutation.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.3 WISACS-API-001: Health and Readiness

The API MUST expose health and readiness endpoints for local and hosted deployment checks.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.4 WISACS-API-002: Authentication Identity

The API MUST provide a login endpoint and an authenticated current-user endpoint.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.5 WISACS-API-003: Incident Read & Write Operations

The API MUST allow authenticated users to list accessible incidents.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.6 WISACS-API-007: Strict Schema Validation

The API MUST enforce strict Pydantic input schema validation rejecting unknown fields and out-of-range bounds.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.7 WISACS-API-005: OpenAPI Contract Integrity

The implementation MUST generate valid OpenAPI schemas without database initialization side-effects.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.1.8 WISACS-API-006: Rate Limiting Safeguards

The API MUST enforce sliding window rate limiting on sensitive login and map tile endpoints.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.2 System Requirements

13.2.1 WISACS-SYS-004: FastAPI Standard Architecture

The implementation MUST construct its API endpoints using FastAPI routers and OpenAPI contracts.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.2.2 WISACS-SYS-001: Incident-Scoped Inventory

The system MUST maintain an incident-scoped inventory of responders, field devices, networks, RF observations, reachable service endpoints, recommendations, memberships, and events.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.2.3 WISACS-SYS-005: In-Memory Database & Persistence Isolation

The system MUST support SQLite file and in-memory isolated databases for testing and simulation.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.2.4 WISACS-SYS-006: PostgreSQL Dialect Schema Support

The system MUST support PostGIS extensions and dialect-aware schema creation.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.2.5 WISACS-SYS-002: Location Data for Client Display

The system MUST expose validated location data for clients to show responders, devices, observations, and incident operating areas on a map.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.2.6 WISACS-SYS-003: Advisory Interoperability Only

The V1 system MUST NOT automatically bridge live networks; it MAY recommend candidate interoperability actions for human review.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.3 Deployment Requirements

13.3.1 WISACS-DEPLOY-001: Render Deployment Protocol

The system MUST parse environment configuration variables for Render hosted deployment environments.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.3.2 WISACS-DEPLOY-002: Hosted PostgreSQL Database Support

The system MUST support production PostgreSQL databases over encrypted TLS connections.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.3.3 WISACS-DEPLOY-003: Container & Process Integrity

The system MUST serve root documentation and landing pages directly from process routes.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4 Ontology Requirements

13.4.1 WISACS-ONT-001: Core OWL 2 DL Domain Ontology

The system MUST declare and parse a formal OWL 2 DL domain ontology defining upper-level concepts, spatial entities, responder roles, networks, and radio equipment.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4.2 WISACS-ONT-003: SPARQL 1.1 Query Engine

The system MUST provide a SPARQL 1.1 graph query engine supporting SELECT and ASK graph pattern matching against operational incident subgraphs.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4.3 WISACS-ONT-007: Versioned Local Ontology Alignment Registry

The system MUST load ontology alignment modules only from a bounded, versioned, hash-pinned local registry.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4.4 WISACS-ONT-005: Cognitive Linguistics 5D Modeling

The system SHOULD structure operational situational awareness using Cognitive Linguistics concepts (Things, Places, Paths, Actions, Causes) across People, Equipment, Space, Time, and RF dimensions.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4.5 WISACS-ONT-004: Reasoning-Based Interoperability Rules

The system SHOULD infer candidate gateway bridges, shared IP paths, and voice channels using SPARQL CONSTRUCT reasoning rules.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4.6 WISACS-ONT-006: Natural Language Question-Answering

The system MAY provide natural language question-answering interfaces that map operator questions to executable SPARQL queries.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.4.7 WISACS-ONT-002: Operational Semantic Lifting

The system MUST lift relational database models and operational records into subject-predicate-object RDF triples.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.5 Security Requirements

13.5.1 WISACS-SEC-001: PBKDF2 Password Hashing

The system MUST store user passwords hashed with PBKDF2-HMAC-SHA256 and constant-time password verification.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.5.2 WISACS-SEC-002: Bearer Token Authentication

The system MUST issue cryptographically signed JWT bearer tokens for authenticated API sessions.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.5.3 WISACS-SEC-004: CORS Policy Control

The system MUST restrict cross-origin resource sharing unless explicit origins are configured.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.5.4 WISACS-SEC-003: Incident Boundary Isolation

The system MUST isolate incident inventories and resource access strictly by authorized user membership.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.6 Data Invariants Requirements

13.6.1 WISACS-DATA-002: Strict Cascade Delete Invariants

The system MUST enforce strict foreign key cascade deletions across all incident sub-resources.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.6.2 WISACS-DATA-001: SQLite Isolation Invariant

The system MUST support complete database table schema drops and reset isolations.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.6.3 WISACS-DATA-004: Deterministic Scenario Import

The system MUST support deterministic scenario fixtures for disaster disruption and spectrum congestion simulations.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.6.4 WISACS-DATA-003: OpenStreetMap Tile Caching

The system MUST cache OpenStreetMap tiles locally and enforce strict bounded tile request proxying.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.7 SCA Integration Requirements

13.7.1 WISACS-SCA-002: Real-Time Semantic WebSocket Triple Broadcast

The system MUST stream real-time JSON-LD RDF triple deltas over incident WebSockets.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.7.2 WISACS-SCA-003: Old Montreal 3D Ray-Tracing Targets

The system MUST parse 3D footprint vector geometry for Place Victoria target building simulations.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.7.3 WISACS-SCA-001: SCA Compliant Metadata Descriptors

The system MUST generate draft SCA-compliant component descriptors for field devices and radios.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

13.8 Traceability Requirements

13.8.1 WISACS-TRACE-001: Automated Traceability Matrix

The system MUST generate an automated traceability matrix verifying implementation and verification evidence for all normative requirements.

Profiles: simulation, production. Lifecycle: approved. Implementation status: implemented.

Rationale: Defines the repository-maintained WiSACS contract.

Acceptance criteria:

14 Generated API Contract

Method Path Operation ID Access Requirements Request schema Success schema
GET /api/v1/attachments list_attachments authenticated WISACS-API-005, WISACS-SYS-001 array[NetworkAttachmentRead]
POST /api/v1/attachments create_attachment authenticated WISACS-API-005, WISACS-SYS-001 NetworkAttachmentCreate NetworkAttachmentRead
POST /api/v1/auth/login login public WISACS-API-002, WISACS-SEC-001 LoginRequest TokenResponse
GET /api/v1/auth/me me authenticated WISACS-API-002, WISACS-SEC-001 UserRead
GET /api/v1/devices list_devices authenticated WISACS-API-004, WISACS-SYS-001, WISACS-SCA-001 array[FieldDeviceRead]
POST /api/v1/devices create_device authenticated WISACS-API-004, WISACS-SYS-001, WISACS-SCA-001 FieldDeviceCreate FieldDeviceRead
GET /api/v1/events list_events authenticated WISACS-SYS-001 array[EventLogRead]
GET /api/v1/health health public WISACS-API-001 object
POST /api/v1/imports/demo-scenario import_demo authenticated WISACS-DATA-004 DemoImportRequest DemoImportResponse
GET /api/v1/incidents list_incidents authenticated WISACS-API-003, WISACS-SYS-001 array[IncidentRead]
POST /api/v1/incidents create_incident authenticated WISACS-API-003, WISACS-SYS-001 IncidentCreate IncidentRead
GET /api/v1/incidents/{incident_id} get_incident authenticated WISACS-API-003, WISACS-SYS-001 IncidentRead
GET /api/v1/interop/recommendations list_interop_recommendations authenticated WISACS-SYS-003, WISACS-SEC-003 array[InteropRecommendationRead]
POST /api/v1/interop/recommendations/recompute recompute_interop_recommendations authenticated WISACS-SYS-003, WISACS-SEC-003 array[InteropRecommendationRead]
GET /api/v1/legal legal_notice public object
GET /api/v1/memberships list_memberships authenticated WISACS-SEC-002, WISACS-SYS-001 array[IncidentMembershipRead]
POST /api/v1/memberships create_membership authenticated WISACS-SEC-002, WISACS-SYS-001 IncidentMembershipCreate IncidentMembershipRead
GET /api/v1/networks list_networks authenticated WISACS-API-004, WISACS-SYS-001 array[NetworkRead]
POST /api/v1/networks create_network authenticated WISACS-API-004, WISACS-SYS-001 NetworkCreate NetworkRead
GET /api/v1/ontology/classes wisacs_ontology_list_classes authenticated WISACS-ONT-001 array[OntologyClassRead]
POST /api/v1/ontology/lift/{incident_id} wisacs_ontology_lift_incident authenticated WISACS-ONT-002 OntologyLiftResponse
GET /api/v1/ontology/qa wisacs_ontology_public_question_answering public WISACS-ONT-006 QaQueryResponse
POST /api/v1/ontology/qa wisacs_ontology_question_answering authenticated WISACS-ONT-006 QaQueryRequest QaQueryResponse
GET /api/v1/ontology/qa_html wisacs_ontology_public_question_answering_html public WISACS-ONT-006
POST /api/v1/ontology/sparql wisacs_ontology_query_sparql authenticated WISACS-ONT-003, WISACS-SEC-003 SparqlQueryRequest SparqlQueryResponse
GET /api/v1/ontology/triples/{incident_id} wisacs_ontology_get_incident_triples authenticated WISACS-ONT-002
GET /api/v1/ready ready public WISACS-API-001 object
GET /api/v1/responders list_responders authenticated WISACS-API-004, WISACS-SYS-001 array[ResponderRead]
POST /api/v1/responders create_responder authenticated WISACS-API-004, WISACS-SYS-001 ResponderCreate ResponderRead
GET /api/v1/rf-observations list_rf_observations authenticated WISACS-API-005, WISACS-SYS-001, WISACS-DATA-002 array[RfObservationRead]
POST /api/v1/rf-observations create_rf_observation authenticated WISACS-API-005, WISACS-SYS-001, WISACS-DATA-002 RfObservationCreate RfObservationRead
GET /api/v1/sca/descriptors/{device_id} get_sca_descriptor authenticated WISACS-SCA-001, WISACS-SCA-002 ScaDescriptor
GET /api/v1/scenarios list_scenarios authenticated WISACS-DATA-004 array[ScenarioDefinition]
GET /api/v1/scenarios/{scenario_id} get_scenario authenticated WISACS-DATA-004 ScenarioDefinition
GET /api/v1/service-endpoints list_service_endpoints authenticated WISACS-API-005, WISACS-SYS-001 array[ServiceEndpointRead]
POST /api/v1/service-endpoints create_service_endpoint authenticated WISACS-API-005, WISACS-SYS-001 ServiceEndpointCreate ServiceEndpointRead
GET /api/v1/visualization/old-montreal/target-building visualization_old_montreal_target_building authenticated WISACS-SYS-002, WISACS-DATA-002, WISACS-SEC-001 object
GET /api/v1/visualization/osm-map visualization_osm_map authenticated WISACS-SYS-002, WISACS-DATA-002, WISACS-SEC-001
GET /health root_health public WISACS-API-001 object
GET /ready root_ready public WISACS-API-001 object

15 Generated Data Model

Table Column SQL type Nullable Primary key Foreign key
incidents id VARCHAR(36) False True | | `incidents` | `name` | `VARCHAR(200)` | False | False |
incidents description TEXT False False | | `incidents` | `status` | `VARCHAR(40)` | False | False |
incidents latitude FLOAT False False | | `incidents` | `longitude` | `FLOAT` | False | False |
incidents scenario_id VARCHAR(120) True False | | `incidents` | `operational_area` | `JSON` | False | False |
incidents metadata_tags JSON False False | | `incidents` | `created_at` | `DATETIME` | False | False |
incidents updated_at DATETIME False False | | `users` | `id` | `VARCHAR(36)` | False | True |
users username VARCHAR(80) False False | | `users` | `display_name` | `VARCHAR(160)` | False | False |
users role VARCHAR(40) False False | | `users` | `password_hash` | `VARCHAR(256)` | False | False |
users is_active BOOLEAN False False | | `users` | `created_at` | `DATETIME` | False | False |
users updated_at DATETIME False False | | `event_log` | `id` | `VARCHAR(36)` | False | True |
event_log incident_id VARCHAR(36) True False incidents.id
event_log actor VARCHAR(120) False False | | `event_log` | `event_type` | `VARCHAR(80)` | False | False |
event_log payload JSON False False | | `event_log` | `created_at` | `DATETIME` | False | False |
event_log updated_at DATETIME False False | | `incident_memberships` | `id` | `VARCHAR(36)` | False | True |
incident_memberships incident_id VARCHAR(36) False False incidents.id
incident_memberships user_id VARCHAR(36) False False users.id
incident_memberships incident_role VARCHAR(80) False False | | `incident_memberships` | `can_write` | `BOOLEAN` | False | False |
incident_memberships created_at DATETIME False False | | `incident_memberships` | `updated_at` | `DATETIME` | False | False |
interop_recommendations id VARCHAR(36) False True | | `interop_recommendations` | `incident_id` | `VARCHAR(36)` | False | False | `incidents.id` | | `interop_recommendations` | `recommendation_type` | `VARCHAR(80)` | False | False |
interop_recommendations title VARCHAR(180) False False | | `interop_recommendations` | `summary` | `TEXT` | False | False |
interop_recommendations confidence FLOAT False False | | `interop_recommendations` | `risk` | `VARCHAR(40)` | False | False |
interop_recommendations source VARCHAR(80) False False | | `interop_recommendations` | `evidence` | `JSON` | False | False |
interop_recommendations status VARCHAR(40) False False | | `interop_recommendations` | `created_at` | `DATETIME` | False | False |
interop_recommendations updated_at DATETIME False False | | `networks` | `id` | `VARCHAR(36)` | False | True |
networks incident_id VARCHAR(36) False False incidents.id
networks name VARCHAR(160) False False | | `networks` | `network_type` | `VARCHAR(80)` | False | False |
networks ip_cidr VARCHAR(80) True False | | `networks` | `frequency_mhz` | `FLOAT` | True | False |
networks bandwidth_khz FLOAT True False | | `networks` | `channel` | `VARCHAR(80)` | True | False |
networks talkgroup VARCHAR(80) True False | | `networks` | `ssid` | `VARCHAR(120)` | True | False |
networks security_label VARCHAR(80) False False | | `networks` | `status` | `VARCHAR(40)` | False | False |
networks coverage_area JSON False False | | `networks` | `metadata_tags` | `JSON` | False | False |
networks created_at DATETIME False False | | `networks` | `updated_at` | `DATETIME` | False | False |
responders id VARCHAR(36) False True | | `responders` | `incident_id` | `VARCHAR(36)` | False | False | `incidents.id` | | `responders` | `name` | `VARCHAR(160)` | False | False |
responders agency VARCHAR(160) False False | | `responders` | `role` | `VARCHAR(80)` | False | False |
responders status VARCHAR(40) False False | | `responders` | `latitude` | `FLOAT` | True | False |
responders longitude FLOAT True False | | `responders` | `last_seen_at` | `DATETIME` | True | False |
responders metadata_tags JSON False False | | `responders` | `created_at` | `DATETIME` | False | False |
responders updated_at DATETIME False False | | `field_devices` | `id` | `VARCHAR(36)` | False | True |
field_devices incident_id VARCHAR(36) False False incidents.id
field_devices responder_id VARCHAR(36) True False responders.id
field_devices name VARCHAR(160) False False | | `field_devices` | `device_type` | `VARCHAR(80)` | False | False |
field_devices manufacturer VARCHAR(120) False False | | `field_devices` | `model` | `VARCHAR(120)` | False | False |
field_devices serial_number VARCHAR(120) False False | | `field_devices` | `ip_address` | `VARCHAR(64)` | True | False |
field_devices mac_address VARCHAR(64) True False | | `field_devices` | `latitude` | `FLOAT` | True | False |
field_devices longitude FLOAT True False | | `field_devices` | `status` | `VARCHAR(40)` | False | False |
field_devices capabilities JSON False False | | `field_devices` | `sca_profile` | `VARCHAR(80)` | True | False |
field_devices component_kind VARCHAR(80) True False | | `field_devices` | `ports` | `JSON` | False | False |
field_devices properties JSON False False | | `field_devices` | `descriptor_metadata` | `JSON` | False | False |
field_devices metadata_tags JSON False False | | `field_devices` | `created_at` | `DATETIME` | False | False |
field_devices updated_at DATETIME False False | | `network_attachments` | `id` | `VARCHAR(36)` | False | True |
network_attachments incident_id VARCHAR(36) False False incidents.id
network_attachments device_id VARCHAR(36) False False field_devices.id
network_attachments network_id VARCHAR(36) False False networks.id
network_attachments ip_address VARCHAR(64) True False | | `network_attachments` | `mac_address` | `VARCHAR(64)` | True | False |
network_attachments signal_dbm FLOAT True False | | `network_attachments` | `reachability` | `VARCHAR(40)` | False | False |
network_attachments observed_at DATETIME False False | | `network_attachments` | `metadata_tags` | `JSON` | False | False |
network_attachments created_at DATETIME False False | | `network_attachments` | `updated_at` | `DATETIME` | False | False |
rf_observations id VARCHAR(36) False True | | `rf_observations` | `incident_id` | `VARCHAR(36)` | False | False | `incidents.id` | | `rf_observations` | `source_device_id` | `VARCHAR(36)` | True | False | `field_devices.id` | | `rf_observations` | `latitude` | `FLOAT` | True | False |
rf_observations longitude FLOAT True False | | `rf_observations` | `frequency_mhz` | `FLOAT` | False | False |
rf_observations bandwidth_khz FLOAT True False | | `rf_observations` | `rssi_dbm` | `FLOAT` | True | False |
rf_observations protocol_guess VARCHAR(120) True False | | `rf_observations` | `modulation_guess` | `VARCHAR(120)` | True | False |
rf_observations confidence FLOAT False False | | `rf_observations` | `observed_at` | `DATETIME` | False | False |
rf_observations metadata_tags JSON False False | | `rf_observations` | `created_at` | `DATETIME` | False | False |
rf_observations updated_at DATETIME False False | | `service_endpoints` | `id` | `VARCHAR(36)` | False | True |
service_endpoints incident_id VARCHAR(36) False False incidents.id
service_endpoints device_id VARCHAR(36) False False field_devices.id
service_endpoints network_id VARCHAR(36) True False networks.id
service_endpoints name VARCHAR(160) False False | | `service_endpoints` | `protocol` | `VARCHAR(40)` | False | False |
service_endpoints port INTEGER False False | | `service_endpoints` | `uri` | `VARCHAR(240)` | True | False |
service_endpoints status VARCHAR(40) False False | | `service_endpoints` | `metadata_tags` | `JSON` | False | False |
service_endpoints created_at DATETIME False False | | `service_endpoints` | `updated_at` | `DATETIME` | False | False |

16 Generated Event Contract

Channel Operation ID Access Authorization Delivery Ordering Replay
/api/v1/ws/incidents/{incident_id} subscribe_incident_events authenticated active incident membership or admin/commander role at-most-once in-process Simulation Profile fanout per-process publication order not supported; use GET /api/v1/events for persisted audit history

Message schema: EventMessage.

16.1 Persisted audit event types

Event type Meaning
incident.created Incident inventory record created.
membership.created Incident membership created.
responder.created Responder inventory record created.
device.created Field-device inventory record created.
network.created Network inventory record created.
attachment.created Device-to-network attachment created.
rf_observation.created RF observation ingested.
service_endpoint.created Reachable service endpoint ingested.
interop.recomputed Advisory recommendations recomputed.
demo.imported Versioned demonstration scenario imported.

16.2 WebSocket message event types

Event type Meaning
connected Subscription accepted for the authorized incident.
incident.created Incident inventory record created.
responder.created Responder inventory record created.
device.created Field-device inventory record created.
network.created Network inventory record created.
attachment.created Device-to-network attachment created.
rf_observation.created RF observation ingested.
service_endpoint.created Reachable service endpoint ingested.
demo.imported Versioned demonstration scenario imported.

17 Generated Profiles and Limitations

17.1 Simulation Profile

17.2 Production Profile

18 Generated Public and Authenticated Surface

18.1 Explicit Public HTTP Allowlist

Path Purpose
/ Repository documentation landing page
/visualization Browser shell; operational data calls remain authenticated
/visualization/ Canonical browser-shell redirect
/spec Generated specification HTML
/spec/ Canonical specification redirect
/spec/final.pdf Generated final specification PDF
/spec/review.pdf Generated line-numbered review PDF
/spec/review.tex Generated line-numbered review source
/docs OpenAPI user interface
/docs/oauth2-redirect OpenAPI OAuth redirect helper
/openapi.json Machine-readable API contract
/redoc Alternative API documentation
/health Hosting health check
/ready Hosting readiness check
/api/v1/health Versioned API health check
/api/v1/ready Versioned API readiness check
/api/v1/legal License, source, and warranty notice
/api/v1/auth/login Bearer-token issuance
/api/v1/ontology/qa Address-bar Q&A for the explicitly configured public demo incident
/api/v1/ontology/qa_html Browser-rendered Q&A for the explicitly configured public demo incident

18.2 OpenAPI Operations

Operation Access
GET /api/v1/attachments authenticated
GET /api/v1/auth/me authenticated
GET /api/v1/devices authenticated
GET /api/v1/events authenticated
GET /api/v1/health public
GET /api/v1/incidents authenticated
GET /api/v1/incidents/{incident_id} authenticated
GET /api/v1/interop/recommendations authenticated
GET /api/v1/legal public
GET /api/v1/memberships authenticated
GET /api/v1/networks authenticated
GET /api/v1/ontology/classes authenticated
GET /api/v1/ontology/qa public
GET /api/v1/ontology/qa_html public
GET /api/v1/ontology/triples/{incident_id} authenticated
GET /api/v1/ready public
GET /api/v1/responders authenticated
GET /api/v1/rf-observations authenticated
GET /api/v1/sca/descriptors/{device_id} authenticated
GET /api/v1/scenarios authenticated
GET /api/v1/scenarios/{scenario_id} authenticated
GET /api/v1/service-endpoints authenticated
GET /api/v1/visualization/old-montreal/target-building authenticated
GET /api/v1/visualization/osm-map authenticated
GET /health public
GET /ready public
POST /api/v1/attachments authenticated
POST /api/v1/auth/login public
POST /api/v1/devices authenticated
POST /api/v1/imports/demo-scenario authenticated
POST /api/v1/incidents authenticated
POST /api/v1/interop/recommendations/recompute authenticated
POST /api/v1/memberships authenticated
POST /api/v1/networks authenticated
POST /api/v1/ontology/lift/{incident_id} authenticated
POST /api/v1/ontology/qa authenticated
POST /api/v1/ontology/sparql authenticated
POST /api/v1/responders authenticated
POST /api/v1/rf-observations authenticated
POST /api/v1/service-endpoints authenticated

18.3 WebSocket

/api/v1/ws/incidents/{incident_id} is authenticated.

19 Generated Scenario Catalog

ID Version Name Geography Importable inventory Responders Networks Expected recommendations Provenance
emergency-disruption-ontology-v1 1.1 Hurricane Infrastructure Disruption & Emergency COW Deployment Hurricane Disruption Sector 4 (29.9511, -90.0715) no 2 2 Not applicable WiSACS Working Group (AGPL-3.0-or-later)
harbor-district-flood-v1 1.2 Harbor District Flood Response Milwaukee Harbor District (43.0328, -87.9095) yes 4 5 shared_network, candidate_gateway, ip_relay_possible, voice_only_manual_coordination WiSACS repository maintainers (AGPL-3.0-or-later)
old-montreal-response-v1 1.2 Old Montreal Place Victoria Response Place Victoria, Old Montreal (45.5011, -73.556) yes 6 5 shared_network, candidate_gateway, ip_relay_possible, voice_only_manual_coordination WiSACS repository maintainers and OpenStreetMap contributors (AGPL-3.0-or-later; OSM data ODbL)
rf-congestion-event-v1 1.1 Major Public Event Severe Spectrum Congestion Stadium Public Event Sector A (41.8781, -87.6298) no 1 2 Not applicable WiSACS Working Group (AGPL-3.0-or-later)

20 Generated Configuration Reference

Environment variable Type Default Source
DATABASE_URL str 'sqlite:///./wisacs.db' AST-parsed from backend/src/wisacs_api/core/config.py
LOCALAPPDATA str required/empty AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_ACCESS_TOKEN_MINUTES int 8 * 60 AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_API_PREFIX str '/api/v1' AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_AUTO_CREATE_SCHEMA bool True AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_BOOTSTRAP_ADMIN_PASSWORD SecretStr | None <redacted> AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_BOOTSTRAP_ADMIN_USERNAME str | None None AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_CACHE_DIR Path | None None AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_CORS_ORIGINS list[str] [] AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_ENABLE_DEMO_SCENARIO bool False AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_ENABLE_DEMO_USERS bool False AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_ENV Literal['development', 'test', 'production'] 'development' AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_OPENAI_API_KEY SecretStr | None None AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_PROFILE Literal['simulation', 'production'] 'simulation' AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_PUBLIC_BASE_URL str 'http://localhost:8001' AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_ALLOW_PUBLIC bool False AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_ENABLED bool False AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_MAX_OUTPUT_TOKENS int 800 AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_MAX_REPAIRS int 1 AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_MODEL str 'gpt-5.6-luna' AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_REASONING_EFFORT Literal['none', 'low', 'medium', 'high', 'xhigh', 'max'] 'medium' AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_QA_LLM_TIMEOUT_SECONDS float 15.0 AST-parsed from backend/src/wisacs_api/core/config.py
WISACS_SECRET_KEY str <redacted> AST-parsed from backend/src/wisacs_api/core/config.py
XDG_CACHE_HOME str required/empty AST-parsed from backend/src/wisacs_api/core/config.py

21 Generated Deployment Reference

The Render blueprint declares 1 service(s) and 1 database(s). Docker Compose declares 1 local service(s). The Makefile exposes 22 executable workflow target(s): audit, backend-test, check-frontend-godot, coverage, db-current, db-upgrade, demo, docs, docs-all, docs-pdf, docs-review, docs-review-tex, format-check, lint, package, run-api, run-frontend-godot, spec-check, spec-generate, test, tool-test, traceability.

Kind Name Runtime/version Health/start
service wisacs-web python /ready / uv run --no-sync python scripts/migrate_database.py && uv run --no-sync uvicorn wisacs_api.main:app --host 0.0.0.0 --port $PORT
database wisacs-db PostgreSQL 16 managed

22 Generated Implementation Map

Generated; do not edit.

22.1 WISACS-API-004 Implementation

22.2 WISACS-API-008 Implementation

22.3 WISACS-SYS-004 Implementation

22.4 WISACS-API-001 Implementation

22.5 WISACS-API-002 Implementation

22.6 WISACS-API-003 Implementation

22.7 WISACS-DEPLOY-001 Implementation

22.8 WISACS-ONT-001 Implementation

22.9 WISACS-ONT-003 Implementation

22.10 WISACS-ONT-007 Implementation

22.11 WISACS-SEC-001 Implementation

22.12 WISACS-SEC-002 Implementation

22.13 WISACS-SYS-001 Implementation

22.14 WISACS-DATA-002 Implementation

22.15 WISACS-SYS-005 Implementation

22.16 WISACS-DEPLOY-002 Implementation

22.17 WISACS-SYS-006 Implementation

22.18 WISACS-DATA-001 Implementation

22.19 WISACS-ONT-005 Implementation

22.20 WISACS-DATA-004 Implementation

22.21 WISACS-API-007 Implementation

22.22 WISACS-SYS-002 Implementation

22.23 WISACS-SEC-004 Implementation

22.24 WISACS-DEPLOY-003 Implementation

22.25 WISACS-API-005 Implementation

22.26 WISACS-SYS-003 Implementation

22.27 WISACS-SEC-003 Implementation

22.28 WISACS-SCA-002 Implementation

22.29 WISACS-ONT-004 Implementation

22.30 WISACS-DATA-003 Implementation

22.31 WISACS-SCA-003 Implementation

22.32 WISACS-ONT-006 Implementation

22.33 WISACS-API-006 Implementation

22.34 WISACS-SCA-001 Implementation

22.35 WISACS-ONT-002 Implementation

22.36 WISACS-TRACE-001 Implementation

23 Generated Verification Map

Generated; do not edit.

23.1 WISACS-API-004 Verification

23.2 WISACS-API-008 Verification

23.3 WISACS-SYS-004 Verification

23.4 WISACS-API-001 Verification

23.5 WISACS-API-002 Verification

23.6 WISACS-API-003 Verification

23.7 WISACS-DEPLOY-001 Verification

23.8 WISACS-ONT-001 Verification

23.9 WISACS-ONT-003 Verification

23.10 WISACS-ONT-007 Verification

23.11 WISACS-SEC-001 Verification

23.12 WISACS-SEC-002 Verification

23.13 WISACS-SYS-001 Verification

23.14 WISACS-DATA-002 Verification

23.15 WISACS-SYS-005 Verification

23.16 WISACS-DEPLOY-002 Verification

23.17 WISACS-SYS-006 Verification

23.18 WISACS-DATA-001 Verification

23.19 WISACS-ONT-005 Verification

23.20 WISACS-DATA-004 Verification

23.21 WISACS-API-007 Verification

23.22 WISACS-SYS-002 Verification

23.23 WISACS-SEC-004 Verification

23.24 WISACS-DEPLOY-003 Verification

23.25 WISACS-API-005 Verification

23.26 WISACS-SYS-003 Verification

23.27 WISACS-SEC-003 Verification

23.28 WISACS-SCA-002 Verification

23.29 WISACS-ONT-004 Verification

23.30 WISACS-DATA-003 Verification

23.31 WISACS-SCA-003 Verification

23.32 WISACS-ONT-006 Verification

23.33 WISACS-API-006 Verification

23.34 WISACS-SCA-001 Verification

23.35 WISACS-ONT-002 Verification

23.36 WISACS-TRACE-001 Verification

24 Generated Traceability Matrix

Requirement Profile Status Implementation evidence Verification evidence
WISACS-API-004 simulation, production implemented 2 1
WISACS-API-008 simulation, production implemented 1 1
WISACS-SYS-004 simulation, production implemented 1 1
WISACS-API-001 simulation, production implemented 3 1
WISACS-API-002 simulation, production implemented 3 1
WISACS-API-003 simulation, production implemented 2 1
WISACS-DEPLOY-001 simulation, production implemented 1 1
WISACS-ONT-001 simulation, production implemented 2 1
WISACS-ONT-003 simulation, production implemented 2 3
WISACS-ONT-007 simulation, production implemented 1 3
WISACS-SEC-001 simulation, production implemented 3 1
WISACS-SEC-002 simulation, production implemented 1 1
WISACS-SYS-001 simulation, production implemented 2 1
WISACS-DATA-002 simulation, production implemented 1 1
WISACS-SYS-005 simulation, production implemented 1 1
WISACS-DEPLOY-002 simulation, production implemented 1 1
WISACS-SYS-006 simulation, production implemented 1 1
WISACS-DATA-001 simulation, production implemented 1 1
WISACS-ONT-005 simulation, production implemented 1 1
WISACS-DATA-004 simulation, production implemented 3 1
WISACS-API-007 simulation, production implemented 1 1
WISACS-SYS-002 simulation, production implemented 2 1
WISACS-SEC-004 simulation, production implemented 1 1
WISACS-DEPLOY-003 simulation, production implemented 1 1
WISACS-API-005 simulation, production implemented 1 1
WISACS-SYS-003 simulation, production implemented 3 1
WISACS-SEC-003 simulation, production implemented 4 3
WISACS-SCA-002 simulation, production implemented 2 1
WISACS-ONT-004 simulation, production implemented 1 1
WISACS-DATA-003 simulation, production implemented 1 1
WISACS-SCA-003 simulation, production implemented 1 1
WISACS-ONT-006 simulation, production implemented 2 8
WISACS-API-006 simulation, production implemented 1 1
WISACS-SCA-001 simulation, production implemented 3 1
WISACS-ONT-002 simulation, production implemented 2 3
WISACS-TRACE-001 simulation, production implemented 1 1