[Feature] Platform-wide conditional GET and delta API foundation #222
Closed
opened 2026-07-09 11:32:59 +02:00 by zemion
·
13 comments
Labels
Clear labels
area/api
HTTP API contracts, routers, schemas, or API smoke behavior.
area/auth
Authentication, sessions, access bootstrap, or login behavior.
area/db
Database sessions, models, transactions, or persistence primitives.
area/deployment
Deployment, release, operations, or runtime packaging.
area/devex
Local developer workflow, scripts, tests, tooling, or release helpers.
area/docs
Durable documentation and project guidance.
area/governance
Governance policy, audit, privacy, retention, or compliance behavior.
area/marketing
Public website, product messaging, publication copy, or legal page content.
area/migrations
Alembic migrations, schema bootstrap, or persistence evolution.
area/module-system
Module discovery, manifests, capabilities, routing, or optional integrations.
area/rbac
Permissions, roles, delegation, or authorization policy.
area/release
Versioning, release locks, tags, packaging, or dependency pins.
area/security
Security posture, static analysis, supply-chain hardening, or vulnerability remediation.
area/tenancy
Tenant boundaries, provisioning, or tenant-scoped data behavior.
area/webui
Shared WebUI shell, frontend components, routing, or frontend tests.
audit/complexity
Complexity finding from Radon, Xenon, or equivalent maintainability scans.
audit/duplication
Duplicated-code finding from jscpd or equivalent similarity scans.
audit/false-positive
Audit finding reviewed as a narrow false positive or acceptable risk.
audit/needs-design
Audit finding that needs an architectural or product decision before implementation.
audit/quick-fix
Audit finding that appears narrow and directly fixable.
audit/structural
Audit finding that needs design, refactoring, or behavior review.
codex/needs-human
Needs an explicit human decision before Codex should implement.
codex/ready
Suitable for Codex to pick up with the existing issue context.
module/access
GovOPlaN access, identity, authentication, RBAC, and administration behavior.
module/addresses
GovOPlaN Addresses module behavior or integration.
module/admin
GovOPlaN Admin module behavior or integration.
module/appointments
GovOPlaN Appointments module behavior or integration.
module/approvals
GovOPlaN Approvals module behavior or integration.
module/assets
GovOPlaN Assets module behavior or integration.
module/audit
GovOPlaN Audit module behavior or integration.
module/booking
GovOPlaN Booking module behavior or integration.
module/calendar
GovOPlaN Calendar module behavior or integration.
module/campaign
GovOPlaN campaign module behavior or integration.
module/cases
GovOPlaN Cases module behavior or integration.
module/certificates
GovOPlaN Certificates module behavior or integration.
module/committee
GovOPlaN Committee module behavior or integration.
module/connectors
GovOPlaN Connectors module behavior or integration.
module/consultation
GovOPlaN Consultation module behavior or integration.
module/contracts
GovOPlaN Contracts module behavior or integration.
module/core
GovOPlaN core runner, shared primitives, shell, or extension points.
module/dist-lists
GovOPlaN Distribution Lists module behavior or integration.
module/dms
GovOPlaN Dms module behavior or integration.
module/docs
GovOPlaN documentation layer behavior or integration.
module/erp
GovOPlaN Erp module behavior or integration.
module/evaluation
GovOPlaN Evaluation module behavior or integration.
module/facilities
GovOPlaN Facilities module behavior or integration.
module/files
GovOPlaN files module behavior or integration.
module/fit-connect
GovOPlaN Fit Connect module behavior or integration.
module/forms
GovOPlaN Forms module behavior or integration.
module/forms-runtime
GovOPlaN Forms Runtime module behavior or integration.
module/grants
GovOPlaN Grants module behavior or integration.
module/helpdesk
GovOPlaN Helpdesk module behavior or integration.
module/identity
GovOPlaN Identity module behavior or integration.
module/identity-trust
GovOPlaN Identity Trust module behavior or integration.
module/idm
GovOPlaN Idm module behavior or integration.
module/inspections
GovOPlaN Inspections module behavior or integration.
module/issue-reporting
GovOPlaN Issue Reporting module behavior or integration.
module/learning
GovOPlaN Learning module behavior or integration.
module/ledger
GovOPlaN Ledger module behavior or integration.
module/mail
GovOPlaN mail module behavior or integration.
module/notifications
GovOPlaN Notifications module behavior or integration.
module/ops
GovOPlaN Ops module behavior or integration.
module/organizations
GovOPlaN Organizations module behavior or integration.
module/payments
GovOPlaN Payments module behavior or integration.
module/permits
GovOPlaN Permits module behavior or integration.
module/policy
GovOPlaN Policy module behavior or integration.
module/poll
GovOPlaN Poll module behavior or integration.
module/portal
GovOPlaN Portal module behavior or integration.
module/postbox
GovOPlaN Postbox module behavior or integration.
module/procurement
GovOPlaN Procurement module behavior or integration.
module/records
GovOPlaN Records module behavior or integration.
module/reporting
GovOPlaN Reporting module behavior or integration.
module/resources
GovOPlaN Resources module behavior or integration.
module/risk-compliance
GovOPlaN Risk Compliance module behavior or integration.
module/scheduling
GovOPlaN Scheduling module behavior or integration.
module/search
GovOPlaN Search module behavior or integration.
module/tasks
GovOPlaN Tasks module behavior or integration.
module/templates
GovOPlaN Templates module behavior or integration.
module/tenancy
GovOPlaN Tenancy module behavior or integration.
module/transparency
GovOPlaN Transparency module behavior or integration.
module/web
GovOPlaN public website, product page, or publication content.
module/workflow
GovOPlaN Workflow module behavior or integration.
module/xoev
GovOPlaN Xoev module behavior or integration.
module/xrechnung
GovOPlaN Xrechnung module behavior or integration.
module/xta-osci
GovOPlaN Xta Osci module behavior or integration.
priority
p0
Immediate stop-the-line priority.
priority
p1
High priority for the next focused work window.
priority
p2
Normal planned priority.
priority
p3
Low priority or opportunistic cleanup.
source/backlog-import
Imported from markdown backlog, roadmap, plan, or TODO files.
source/module-roadmap
Created from GovOPlaN module and integration roadmap planning.
source/security-audit
Created from a structured security or code-quality audit report.
source/todo-scan
Imported from inline TODO/FIXME/HACK markers by the Gitea TODO importer.
status
blocked
Cannot progress without a decision, dependency, credential, or external change.
status
in-progress
Currently being worked.
status
needs-info
Needs clarifying input before implementation can proceed safely.
status
ready
Ready for implementation.
status
triage
Needs review, ownership, priority, or acceptance criteria.
type
bug
A reproducible defect, regression, or incorrect behavior.
type
debt
Cleanup, refactoring, risk reduction, or deferred engineering work.
type
docs
Documentation, process, or developer workflow work.
type
feature
New user-visible behavior or platform capability.
type
task
Implementation, maintenance, migration, or operational work.
type
user-story
End-to-end user journey or real-world process story used to steer product slices.
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: add-ideas/govoplan-core#222
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Repeated reloads fetch complete JSON payloads even when the user-visible data has not changed. This is especially expensive for table/list views and settings pages where one row or one setting changes but the frontend reloads the whole resource.
Proposed Capability
Add a platform-wide conditional GET and delta foundation:
Ownership
Acceptance Criteria
Verification Target
Implemented the first platform foundation pass in core:
Verification passed:
Follow-up verification added:
Verification rerun:
Codex State: progress
Summary
Changed Files
src/govoplan_core/core/change_sequence.pyalembic/versions/3f4a5b6c7d8e_core_change_sequence.pysrc/govoplan_files/backend/change_tracking.pysrc/govoplan_files/backend/router.pywebui/src/types.tsVerification
python -m unittest tests.test_change_sequence tests.test_conditional_requests tests.test_api_smoke.ApiSmokeTests.test_managed_file_runtime_flow tests.test_api_smoke.ApiSmokeTests.test_files_delta_tracks_uploads_folders_and_delete_tombstonespython -m unittest tests.test_database_migrations.DatabaseMigrationTests.test_repairs_create_all_schema_drift_and_upgrades_to_head tests.test_database_migrations.DatabaseMigrationTests.test_repairs_current_schema_stamped_at_file_folders tests.test_module_system.ModuleSystemTests.test_module_migrations_are_registered_only_for_enabled_modulesnpm run buildnpm run test:module-capabilitiesNext / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
webui/src/features/files/FilesPage.tsxwebui/src/features/files/components/ManagedFileChooser.tsxVerification
npm run buildnpm run test:module-capabilitiesSuggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
src/govoplan_core/core/change_sequence.pydocs/MODULE_ARCHITECTURE.mdtests/test_change_sequence.pytests/test_api_smoke.py../govoplan-files/src/govoplan_files/backend/router.py../govoplan-campaign/src/govoplan_campaign/backend/change_tracking.py../govoplan-campaign/src/govoplan_campaign/backend/router.py../govoplan-campaign/src/govoplan_campaign/backend/schemas.py../govoplan-campaign/webui/src/api/campaigns.ts../govoplan-campaign/webui/src/features/campaigns/CampaignListPage.tsx../govoplan-campaign/webui/src/features/campaigns/hooks/useCampaignWorkspaceData.tsVerification
./.venv/bin/python -m unittest tests.test_change_sequence tests.test_api_smoke.ApiSmokeTests.test_files_delta_omits_private_tombstones_from_broad_reader_feed tests.test_api_smoke.ApiSmokeTests.test_files_delta_tracks_uploads_folders_and_delete_tombstones tests.test_api_smoke.ApiSmokeTests.test_campaign_delta_tracks_create_update_and_delete_tombstone tests.test_api_smoke.ApiSmokeTests.test_campaign_workspace_delta_tracks_version_autosave./.venv/bin/python -m py_compile src/govoplan_core/core/change_sequence.py ../govoplan-files/src/govoplan_files/backend/router.py ../govoplan-campaign/src/govoplan_campaign/backend/change_tracking.py ../govoplan-campaign/src/govoplan_campaign/backend/router.py ../govoplan-campaign/src/govoplan_campaign/backend/schemas.pyPATH=/mnt/DATA/git/govoplan-core/webui/node_modules/.bin:/home/zemion/.nvm/versions/node/v22.22.3/bin:/home/zemion/.local/bin:/home/zemion/.codex/tmp/arg0/codex-arg0WEB8kZ:/app/bin:/app/bin:/app/bin:/usr/bin:/usr/lib/sdk/openjdk25/bin:/home/zemion/.var/app/com.vscodium.codium/data/node/bin:/home/zemion/.var/app/com.vscodium.codium/data/cargo/bin:/home/zemion/.var/app/com.vscodium.codium/data/python/bin:/home/zemion/.var/app/com.vscodium.codium/data/codium/extensions/openai.chatgpt-26.5623.101652-linux-x64/bin/linux-x86_64 npm run build (govoplan-core/webui)PATH=/mnt/DATA/git/govoplan-core/webui/node_modules/.bin:/home/zemion/.nvm/versions/node/v22.22.3/bin:/home/zemion/.local/bin:/home/zemion/.codex/tmp/arg0/codex-arg0WEB8kZ:/app/bin:/app/bin:/app/bin:/usr/bin:/usr/lib/sdk/openjdk25/bin:/home/zemion/.var/app/com.vscodium.codium/data/node/bin:/home/zemion/.var/app/com.vscodium.codium/data/cargo/bin:/home/zemion/.var/app/com.vscodium.codium/data/python/bin:/home/zemion/.var/app/com.vscodium.codium/data/codium/extensions/openai.chatgpt-26.5623.101652-linux-x64/bin/linux-x86_64 npm run test:module-capabilities (govoplan-core/webui)PATH=/mnt/DATA/git/govoplan-core/webui/node_modules/.bin:/home/zemion/.nvm/versions/node/v22.22.3/bin:/home/zemion/.local/bin:/home/zemion/.codex/tmp/arg0/codex-arg0WEB8kZ:/app/bin:/app/bin:/app/bin:/usr/bin:/usr/lib/sdk/openjdk25/bin:/home/zemion/.var/app/com.vscodium.codium/data/node/bin:/home/zemion/.var/app/com.vscodium.codium/data/cargo/bin:/home/zemion/.var/app/com.vscodium.codium/data/python/bin:/home/zemion/.var/app/com.vscodium.codium/data/codium/extensions/openai.chatgpt-26.5623.101652-linux-x64/bin/linux-x86_64 npm run test:policy-ui (govoplan-campaign/webui)Next / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
webui/src/utils/delta.tswebui/src/index.tsdocs/MODULE_ARCHITECTURE.mdtests/test_api_smoke.py../govoplan-campaign/src/govoplan_campaign/backend/router.py../govoplan-campaign/src/govoplan_campaign/backend/schemas.py../govoplan-campaign/webui/src/api/campaigns.ts../govoplan-campaign/webui/src/features/campaigns/CampaignListPage.tsx../govoplan-campaign/webui/src/features/campaigns/CampaignReportPage.tsxVerification
./.venv/bin/python -m unittest tests.test_change_sequence tests.test_api_smoke.ApiSmokeTests.test_campaign_jobs_delta_tracks_single_job_update tests.test_api_smoke.ApiSmokeTests.test_campaign_delta_tracks_create_update_and_delete_tombstone tests.test_api_smoke.ApiSmokeTests.test_campaign_workspace_delta_tracks_version_autosave tests.test_api_smoke.ApiSmokeTests.test_files_delta_omits_private_tombstones_from_broad_reader_feed./.venv/bin/python -m py_compile src/govoplan_core/core/change_sequence.py ../govoplan-campaign/src/govoplan_campaign/backend/change_tracking.py ../govoplan-campaign/src/govoplan_campaign/backend/router.py ../govoplan-campaign/src/govoplan_campaign/backend/schemas.py ../govoplan-files/src/govoplan_files/backend/router.pyPATH=/mnt/DATA/git/govoplan-core/webui/node_modules/.bin:/home/zemion/.nvm/versions/node/v22.22.3/bin:/home/zemion/.local/bin:/home/zemion/.codex/tmp/arg0/codex-arg0WEB8kZ:/app/bin:/app/bin:/app/bin:/usr/bin:/usr/lib/sdk/openjdk25/bin:/home/zemion/.var/app/com.vscodium.codium/data/node/bin:/home/zemion/.var/app/com.vscodium.codium/data/cargo/bin:/home/zemion/.var/app/com.vscodium.codium/data/python/bin:/home/zemion/.var/app/com.vscodium.codium/data/codium/extensions/openai.chatgpt-26.5623.101652-linux-x64/bin/linux-x86_64 npm run build (govoplan-core/webui)PATH=/mnt/DATA/git/govoplan-core/webui/node_modules/.bin:/home/zemion/.nvm/versions/node/v22.22.3/bin:/home/zemion/.local/bin:/home/zemion/.codex/tmp/arg0/codex-arg0WEB8kZ:/app/bin:/app/bin:/app/bin:/usr/bin:/usr/lib/sdk/openjdk25/bin:/home/zemion/.var/app/com.vscodium.codium/data/node/bin:/home/zemion/.var/app/com.vscodium.codium/data/cargo/bin:/home/zemion/.var/app/com.vscodium.codium/data/python/bin:/home/zemion/.var/app/com.vscodium.codium/data/codium/extensions/openai.chatgpt-26.5623.101652-linux-x64/bin/linux-x86_64 npm run test:module-capabilities (govoplan-core/webui)PATH=/mnt/DATA/git/govoplan-core/webui/node_modules/.bin:/home/zemion/.nvm/versions/node/v22.22.3/bin:/home/zemion/.local/bin:/home/zemion/.codex/tmp/arg0/codex-arg0WEB8kZ:/app/bin:/app/bin:/app/bin:/usr/bin:/usr/lib/sdk/openjdk25/bin:/home/zemion/.var/app/com.vscodium.codium/data/node/bin:/home/zemion/.var/app/com.vscodium.codium/data/cargo/bin:/home/zemion/.var/app/com.vscodium.codium/data/python/bin:/home/zemion/.var/app/com.vscodium.codium/data/codium/extensions/openai.chatgpt-26.5623.101652-linux-x64/bin/linux-x86_64 npm run test:policy-ui (govoplan-campaign/webui)Next / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
govoplan-core/webui/src/utils/deltaHooks.tsgovoplan-core/webui/src/index.tsgovoplan-campaign/webui/src/features/campaigns/utils/jobDeltas.tsgovoplan-campaign/webui/src/features/campaigns/hooks/useCampaignWorkspaceData.tsgovoplan-campaign/webui/src/features/campaigns/CampaignReportPage.tsxgovoplan-campaign/webui/src/features/campaigns/ReviewSendPage.tsxgovoplan-campaign/webui/src/features/operator/OperatorQueuePage.tsxVerification
govoplan-core/webui: npm run buildgovoplan-campaign/webui: npm run test:policy-uigovoplan-campaign/webui: npm run test:template-previewgovoplan-campaign/webui: npm run test:import-utilsNext / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
govoplan-access/src/govoplan_access/backend/api/v1/routes.pygovoplan-access/src/govoplan_access/backend/api/v1/admin_schemas.pygovoplan-access/webui/src/api/admin.tsgovoplan-access/webui/src/features/admin/utils/deltaRows.tsgovoplan-access/webui/src/features/admin/UsersPanel.tsxgovoplan-access/webui/src/features/admin/GroupsPanel.tsxgovoplan-access/webui/src/features/admin/RolesPanel.tsxgovoplan-access/webui/src/features/admin/SystemRolesPanel.tsxgovoplan-access/webui/src/features/admin/SystemUsersPanel.tsxgovoplan-access/webui/src/features/admin/ApiKeysPanel.tsxgovoplan-core/tests/test_api_smoke.pyVerification
py_compile access routes/schemas and updated smoke test file: passpython -m unittest tests.test_api_smoke.ApiSmokeTests.test_access_admin_users_delta_tracks_create_and_update tests.test_api_smoke.ApiSmokeTests.test_access_admin_api_key_delta_returns_tombstone_when_revoked_hidden: passgovoplan-core/webui npm run build: passNext / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
govoplan-core/src/govoplan_core/core/change_sequence.pygovoplan-core/src/govoplan_core/core/configuration_control.pygovoplan-core/src/govoplan_core/audit/logging.pygovoplan-core/tests/test_api_smoke.pygovoplan-admin/src/govoplan_admin/backend/api/v1/routes.pygovoplan-admin/src/govoplan_admin/backend/api/v1/schemas.pygovoplan-admin/webui/src/api/admin.tsgovoplan-admin/webui/src/features/admin/SystemSettingsPanel.tsxgovoplan-admin/webui/src/features/admin/ConfigurationChangesPanel.tsxgovoplan-tenancy/src/govoplan_tenancy/backend/api/v1/routes.pygovoplan-tenancy/src/govoplan_tenancy/backend/api/v1/schemas.pygovoplan-audit/src/govoplan_audit/backend/api/v1/routes.pygovoplan-audit/src/govoplan_audit/backend/api/v1/schemas.pygovoplan-access/src/govoplan_access/backend/api/v1/routes.pygovoplan-access/src/govoplan_access/backend/api/v1/admin_schemas.pygovoplan-access/webui/src/api/admin.tsgovoplan-access/webui/src/features/admin/AdminAuditPanel.tsxgovoplan-access/webui/src/features/admin/TenantSettingsPanel.tsxgovoplan-access/webui/src/features/admin/RetentionPoliciesPanel.tsxgovoplan-access/webui/src/features/admin/MailProfilesPanel.tsxgovoplan-access/webui/src/features/admin/FileConnectorsPanel.tsxVerification
py_compile changed backend modules and tests: passpython -m unittest tests.test_api_smoke.ApiSmokeTests.test_access_admin_users_delta_tracks_create_and_update tests.test_api_smoke.ApiSmokeTests.test_access_admin_api_key_delta_returns_tombstone_when_revoked_hidden tests.test_api_smoke.ApiSmokeTests.test_settings_deltas_track_sections_and_system_language_dependency tests.test_api_smoke.ApiSmokeTests.test_configuration_changes_delta_tracks_requests tests.test_api_smoke.ApiSmokeTests.test_admin_audit_delta_tracks_new_events: passgovoplan-core/webui npm run build: passgit diff --check on touched files only: pass; full worktree still has unrelated pre-existing whitespace noiseNext / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
Audit deltas now support filtered/sorted first-page views.Core change-sequence now has an explicit retention-floor/pruning contract plus Alembic retention metadata.Docs now list current consumers, section-level settings deltas, retention-floor rules, and open retrofit scope.Verification
unittest delta/change-sequence/access/audit focused suite passed.webui npm run build passed.git diff --check and migration py_compile passed for touched files.Next / Blocked
Suggested status label:
status/in-progressCodex State: progress
Summary
Changed Files
Added /api/v1/mail/settings/delta with mail profile row deltas, scoped policy refreshes, sequence write hooks, and WebUI consumption in the mail settings panel.Added /api/v1/files/connectors/settings/delta with connector profile, credential, connector-space, and policy deltas; credential changes include dependent profiles.Updated module WebUI API clients and settings panels to consume the new deltas; documented the implemented consumers in docs/MODULE_ARCHITECTURE.md.Verification
Focused unittest delta suite passed, including mail settings and file connector settings deltas.Core WebUI npm run build passed.Mail WebUI test:mail-ui passed using the shared core WebUI TypeScript binary.Python py_compile and git diff --check passed for touched files.Next / Blocked
Suggested status label:
status/in-progressImplemented the remaining cursor/keyset dependency for arbitrary-page delta safety.
What changed:
govoplan_core.core.pagination(encode_keyset_cursor,decode_keyset_cursor,keyset_query_fingerprint).cursorandnext_cursorwhile keeping existingpage/offsetcompatibility.Verification:
./.venv/bin/python -m unittest tests.test_pagination./.venv/bin/python -m unittest tests.test_api_smoke.ApiSmokeTests.test_admin_audit_cursor_pagination_is_stable_after_newer_insert./.venv/bin/python -m compileall src/govoplan_core ../govoplan-audit/src/govoplan_audit ../govoplan-access/src/govoplan_accessnpm run buildingovoplan-core/webuiRemaining rollout is endpoint-by-endpoint adoption of the same cursor contract, with files lists as the next recommended target and campaign jobs after that.
Rollout scan completed. Direct implementation added for campaign jobs, the other high-value candidates are now tracked as module-specific issues.
Implemented now:
govoplan-campaign: campaign job list/delta now supports cursor/keyset paging withcursorandnext_cursor; WebUI report/review pages preserve page cursors; smoke coverage added.Deferred by domain-specific dependency:
This closes #222 as the platform/foundation issue. Future endpoint work should use the shared contract from the start.