diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..cb7d5d3 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,16 @@ +# GovOPlaN Dashboard Codex Guide + +## Scope + +This repository owns configurable dashboards, widget layouts, view-specific dashboard state, and module-announced widget rendering. + +## Documentation Contract + +- Treat documentation as part of every behavior change. Update this module's manifest-driven `DocumentationTopic` contributions for affected user and administrator behavior. +- Keep feature content here; `govoplan-docs` projects it without importing Dashboard internals. +- Maintain a static user/admin baseline and run `/mnt/DATA/git/govoplan/tools/checks/check-manifest-shapes.py` after behavior or manifest changes. + +## Boundaries + +- Widgets never grant access and must preserve provider-side authorization. +- Consume widget contributions without importing optional module internals. diff --git a/src/govoplan_dashboard/backend/manifest.py b/src/govoplan_dashboard/backend/manifest.py index 48f0c40..5c08b44 100644 --- a/src/govoplan_dashboard/backend/manifest.py +++ b/src/govoplan_dashboard/backend/manifest.py @@ -15,6 +15,7 @@ from govoplan_core.core.modules import ( ModuleManifest, NavItem, ) +from govoplan_core.core.provider_governance import declared_module_architecture from govoplan_core.core.views import ViewSurface from govoplan_core.db.base import Base from govoplan_dashboard.backend.db.models import DashboardLayout @@ -97,6 +98,16 @@ manifest = ModuleManifest( order=20, ), ), + architecture=declared_module_architecture( + layer="data_reporting_integration", + kind="presentation", + maturity="vertical_slice", + documentation_ref="README.md", + test_ref="tests/test_dashboard_layouts.py", + known_limits=("Widget configuration depth and target accessibility evidence vary by contributing module.",), + owned_concepts=("dashboard layout", "widget placement", "view-specific dashboard"), + non_owned_concepts=("widget domain data", "report definition", "view policy"), + ), )