Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- IMPLEMENTATION_PLAN.md:
- Update header to reflect current status (996 tests, transitions-part-2)
- Add completed tasks to previously-completed list (TECHDEBT-16–28,
VCR-* batches A/B/C/D/E, PREPX-1/2/3, ACT-1, OX-1.0, DOCS-1/2,
P90-2, P90-3)
- Add Phase PRIORITY-85 section (complete)
- Update Phase PRIORITY-90: mark P90-2/3 done, refine P90-1/4 descriptions,
add P90-5 (OPP-06 → spec requirement)
- Add new tasks: TECHDEBT-29 (VCR-005 follow-up), TECHDEBT-30 (semantic
field naming), TECHDEBT-31 (trigger_services relocation), TECHDEBT-32
(DataLayer boundary research), TECHDEBT-33 (test_handlers.py refactor),
TECHDEBT-34 (remaining procedural state logic → transitions machines)
- IMPLEMENTATION_NOTES.md: reset to ~70 lines; all struck-through content
removed; durable items extracted to notes/; current open items summarised
- notes/domain-model-separation.md: add four new sections:
- Wire-layer terminology leaking into core event interfaces
- Core should reliably get domain objects from DataLayer
- Datalayer storage records need re-evaluation
- Vocabulary registry entanglement (db_record.py, rehydration.py)
- notes/codebase-structure.md: add two new sections:
- Bulk module-rename lessons learned (VCR-019a)
- Trigger services package: what remains and where it should go
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move vultron/api/v2/backend/trigger_services/ into vultron/adapters/driving/fastapi/ per architectural cleanup plan: - Move HTTP request body models (_models.py) to vultron/adapters/driving/fastapi/trigger_models.py - Move domain_error_translation() and translate_domain_errors() from _helpers.py into vultron/adapters/driving/fastapi/errors.py - Merge thin adapter delegates (case.py, embargo.py, report.py) into new vultron/adapters/driving/fastapi/_trigger_adapter.py - Update all three trigger routers to import from new adapter-layer locations (no shims) - Update test/api/v2/backend/test_trigger_services.py imports - Delete vultron/api/v2/backend/trigger_services/ entirely After this change, vultron/api/v2/ contains only data/actor_io.py (pending VCR-014) and two __init__.py stubs. 996 tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update GET /actors/{actor_id}/profile to return inbox and outbox as
string URL links rather than embedded OrderedCollection objects. This
aligns with ActivityPub federation conventions for actor discovery.
- specs/agentic-readiness.md: Update AR-10-001 to require inbox/outbox
as URL strings (not embedded collection objects); update verification
section accordingly
- routers/actors.py: Remove response_model=as_Actor; build profile dict
from model_dump and override inbox/outbox with string URLs
- test_actors.py: Assert inbox and outbox are str instances, not dicts
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…est files Move all 44 remaining test methods from the monolithic test/api/v2/backend/test_handlers.py into per-module files under test/core/use_cases/, mirroring the source layout: - test_embargo_use_cases.py (TestEmbargoUseCases — 11 tests) - test_note_use_cases.py (TestNoteUseCases — 6 tests) - test_status_use_cases.py (TestStatusUseCases — 7 tests) - test_case_use_cases.py (TestCaseUseCases — 6 tests) - test_report_use_cases.py (TestReportReceiptRM — 3 tests added) Delete test/api/v2/backend/test_handlers.py. 976 tests pass (was 913; +63 reflects newly visible migrated tests). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…_ids, OPP-06 spec
OB-05-002: Implement DataLayer connectivity check in /health/ready
- Inject DataLayer via Depends; wrap dl.read('') in try/except
- Return HTTP 503 when DataLayer raises; 200 when healthy
- Update test_health.py: use datalayer fixture, add 503 test case
AR-01-003: Add unique, stable operation_id to all FastAPI route decorators
- Convention: {resource}_{action} (e.g. actors_list, datalayer_get_offer)
- Covers actors, datalayer, examples, health, trigger_case,
trigger_embargo, trigger_report, v2_router (39 routes total)
P90-5: Capture OPP-06 requirement in specs/behavior-tree-integration.md
- New section BT-12 VFD/PXA State Machine Usage
- BT-12-001: future VFD/PXA transitions MUST use create_vfd_machine() /
create_pxa_machine() as authoritative sequence source (no hand-rolled logic)
- Added BT-12-001 verification entry
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
7 unit tests for the outbox handler processing loop: - handle_outbox_item logs actor_id and item - outbox_handler drains outbox on success (FIFO order, OX-01-002) - empty outbox no-ops - retry/abort logic after >3 consecutive errors - continues after a single recoverable error Tests monkeypatch get_datalayer for isolation; pattern mirrors test_inbox_handler.py. Bug BUG-001 documented in plan/BUGS.md: outbox_handler does not return early when actor is None, causing AttributeError on the next line. 984 passed, 5581 subtests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…outline migration plan
In CreateReportReceivedUseCase and SubmitReportReceivedUseCase, after storing the VulnerabilityReport, create and persist a VultronParticipantStatus record with rm_state=RM.RECEIVED for the receiving actor. This implements ADR-0013 step 1: the explicit START → RECEIVED (RECEIVE trigger) transition in the report phase. - Add _report_phase_status_id() helper to _helpers.py, using UUID v5 for a deterministic, idempotent record ID keyed on (actor, report, rm_state). - Context is set to the report ID (pre-case phase anchor). - attributed_to is set to the actor_id. - Creation is guarded by _idempotent_create; duplicate calls produce exactly one record. - Existing set_status() calls are retained (P90-4 will remove them). - Three new tests cover persistence, Submit variant, and idempotency. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…larify AS2 field mapping strategy
…taLayer
Remove STATUS global dict, ReportStatus, set_status(), get_status_layer(),
status_to_record_dict(), and _current_report_rm_state() from
core/models/status.py. Keep OfferStatusEnum, ObjectStatus, OfferStatus.
Replace all STATUS reads/writes with DataLayer VultronParticipantStatus
records using deterministic IDs via _report_phase_status_id():
- core/use_cases/report.py: removed remaining set_status() calls
(DataLayer path already present from P90-1)
- core/use_cases/triggers/report.py: replaced get_status_layer()/set_status()
with dl.get('ParticipantStatus', ...) and _idempotent_create()
- core/behaviors/report/nodes.py: CheckRMStateValid and
CheckRMStateReceivedOrInvalid now query DataLayer; TransitionRMtoValid
and TransitionRMtoInvalid create VultronParticipantStatus records
Update all 5 affected test files to use DataLayer assertions.
Remove TestReportReceiptRM class (superseded by TestReportReceiptPersistsParticipantStatus).
984 tests pass, 5581 subtests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…CODEOWNERS entry for .github folder
…vent interfaces Add 14 reusable property mixins in vultron/core/models/events/_mixins.py. Each mixin exposes a domain-specific property (e.g., report_id, case_id, embargo_id, offer_id, invite_id, participant_id, note_id, status_id, invitee_id) that aliases the appropriate generic VultronEvent base field. Per-semantic event subclasses in actor.py, case.py, case_participant.py, embargo.py, note.py, report.py, and status.py inherit the relevant mixin(s). Updated all 7 use-case modules to use domain properties instead of generic object_id / target_id / context_id / inner_* field names. 984 tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rity and conciseness
- AGENTS.md: explicitly deprecate vultron/api/v2/ and test/api/; update test layout reference to mirror current source structure - notes/domain-model-separation.md: add 'Extractor as EventFactory' section capturing Activity.to_domain()/EventFactory design option and centralized AS2→core field mapping strategy - specs/code-style.md: add CS-02-002 sub-rule prohibiting local imports inside test functions - plan/IMPLEMENTATION_PLAN.md: add TECHDEBT-35 (expand _mixins.py), TECHDEBT-36 (centralize _make_payload() test helper), TECHDEBT-37 (migrate test/api/ to new layout) - plan/IDEAS.md: strike through mixin expansion idea (→ TECHDEBT-35) - plan/IMPLEMENTATION_NOTES.md: strike through all captured items with references to where they now live Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…analysis and TECHDEBT-34 - Mark P90 COMPLETE: all five tasks (P90-1 through P90-5) done; remove stale 'P90 in progress' line from status summary; update Active phases section - Update Gap Analysis to refresh #45; add ✅ P90/ADR-0013 complete entry and ❌ BUG-001 entry - Update TECHDEBT-34: note OPP-01/02/03 are complete; clarify remaining scope to unguarded direct em_state/rm_state assignments in core - Add TECHDEBT-38: fix outbox_handler missing return after actor is None (BUG-001 from plan/BUGS.md) - Add TECHDEBT-39: consolidate duplicate participant RM state helpers (OPP-05) - Update Phase PRIORITY-90 section heading to ALL COMPLETE ✅ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The actor-is-None guard logged a warning but fell through to 'while actor.outbox.items:', raising AttributeError. Add 'return' immediately after the warning to short-circuit the rest of the function. Adds regression test: test_outbox_handler_returns_early_when_actor_not_found Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
P1 (runtime crash) fixes:
- extractor.py: move VultronEvent/EVENT_CLASS_MAP/VultronTypes imports
to module level; remove forward-reference string annotation
- helpers.py: remove spurious f-prefix from non-interpolating f-string
- robot.py: add missing _parse_args() function
- mcp_server.py: fix 9 use-case call signatures (SvcXxx(dl, req).execute())
P3/P4 (unused imports) fixes:
- Remove unused imports across 14 test files, 12 demo scripts, 5 vocab
example files, and various adapter/use-case modules
- Restore BASE_URL in demo modules with # noqa: F401 (needed for test
monkeypatching via mp.setattr)
- Fix F811 (logging redefinition) in test_embargo_use_cases.py
- Fix F841 (assigned-but-unused vars) in test_cli.py, test_create_tree.py,
test_create_activity.py, and triggers/embargo.py
E402 (imports not at top) fixes:
- test_trigger_services.py: move FUTURE_DATETIME constant after all imports
- test_performance.py: move logger = ... after all imports; remove unused
DataLayer import
E203 (.flake8):
- Add E203 to extend-ignore (Black-style slice whitespace)
All # noqa placement fixed to appear on the opening 'from X import (' line,
not on the closing ')' line (where flake8 ignores them).
Result: flake8 clean, 985 tests pass, Black unchanged.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR continues the protocol “transitions” refactor by consolidating trigger adapters into the FastAPI driving adapter, introducing domain-friendly event property mixins, and moving RM status tracking away from the removed global STATUS dict toward DataLayer-backed ParticipantStatus records—alongside a large set of documentation/workflow and test updates.
Changes:
- Replaces in-memory RM status tracking with deterministic, idempotent DataLayer persistence via
_report_phase_status_id()+VultronParticipantStatus. - Refactors FastAPI trigger plumbing (request models, error translation, adapters) and adds stable
operation_idvalues across routes. - Adds/updates substantial specs/notes/plan documentation plus new SKILL/prompt docs and expanded test coverage.
Reviewed changes
Copilot reviewed 118 out of 122 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| vultron/wire/as2/vocab/examples/status.py | Removes unused imports in vocab examples. |
| vultron/wire/as2/vocab/examples/participant.py | Removes unused imports in vocab examples. |
| vultron/wire/as2/vocab/examples/note.py | Removes unused imports in vocab examples. |
| vultron/wire/as2/vocab/examples/embargo.py | Removes unused imports in vocab examples. |
| vultron/wire/as2/vocab/examples/case.py | Removes unused imports in vocab examples. |
| vultron/wire/as2/vocab/examples/actor.py | Removes unused imports in vocab examples. |
| vultron/wire/as2/vocab/base/objects/activities/base.py | Cleans unused typing import. |
| vultron/wire/as2/extractor.py | Promotes imports + tightens return type annotations for extracted events. |
| vultron/demo/trigger_demo.py | Removes unused imports. |
| vultron/demo/suggest_actor_demo.py | Adds explicit # noqa: F401 comment for monkeypatch-related import. |
| vultron/demo/status_updates_demo.py | Adds explicit # noqa: F401 comment; removes unused imports. |
| vultron/demo/receive_report_demo.py | Adds explicit # noqa: F401 comment. |
| vultron/demo/manage_participants_demo.py | Adds explicit # noqa: F401 comment. |
| vultron/demo/manage_embargo_demo.py | Removes unused imports; adds explicit # noqa: F401 comment. |
| vultron/demo/manage_case_demo.py | Adds explicit # noqa: F401 comment. |
| vultron/demo/invite_actor_demo.py | Removes unused imports; adds explicit # noqa: F401 comment. |
| vultron/demo/initialize_participant_demo.py | Adds explicit # noqa: F401 comment. |
| vultron/demo/initialize_case_demo.py | Adds explicit # noqa: F401 comment; removes unused imports. |
| vultron/demo/establish_embargo_demo.py | Removes unused imports; adds explicit # noqa: F401 comment. |
| vultron/demo/acknowledge_demo.py | Adds explicit # noqa: F401 comment. |
| vultron/core/use_cases/triggers/report.py | Switches trigger RM state writes/checks to DataLayer ParticipantStatus records. |
| vultron/core/use_cases/triggers/embargo.py | Removes unused imports/variables. |
| vultron/core/use_cases/status.py | Uses domain-friendly event properties (status_id, case_id, etc.). |
| vultron/core/use_cases/report.py | Persists RM.RECEIVED participant status idempotently on report receipt paths. |
| vultron/core/use_cases/note.py | Uses domain-friendly event properties (note_id, case_id). |
| vultron/core/use_cases/embargo.py | Uses domain-friendly event properties (embargo_id, invite_id, case_id). |
| vultron/core/use_cases/case_participant.py | Uses domain-friendly event properties (participant_id, case_id). |
| vultron/core/use_cases/case.py | Uses domain-friendly event properties (case_id, report_id). |
| vultron/core/use_cases/actor.py | Uses domain-friendly event properties (suggested_actor_id, offer_id, invite_id, etc.). |
| vultron/core/use_cases/_helpers.py | Adds deterministic UUIDv5 helper _report_phase_status_id() to support idempotency. |
| vultron/core/models/status.py | Removes global STATUS-layer logic; retains OfferStatus enums/models only. |
| vultron/core/models/events/status.py | Adds mixin-based domain property access on status event types. |
| vultron/core/models/events/report.py | Adds mixin-based domain property access on report/offer events. |
| vultron/core/models/events/note.py | Adds mixin-based domain property access on note events. |
| vultron/core/models/events/embargo.py | Adds mixin-based domain property access on embargo/invite events. |
| vultron/core/models/events/case_participant.py | Adds mixin-based domain property access on participant events. |
| vultron/core/models/events/case.py | Adds mixin-based domain property access on case/report-in-case events. |
| vultron/core/models/events/actor.py | Adds mixin-based domain property access on actor-related events. |
| vultron/core/models/events/_mixins.py | New: reusable mixins exposing domain-friendly ID properties over base fields. |
| vultron/core/behaviors/report/nodes.py | Updates BT nodes to read/write RM state via DataLayer ParticipantStatus. |
| vultron/core/behaviors/helpers.py | Minor error message string formatting cleanup. |
| vultron/bt/base/demo/robot.py | Adds argparse parsing in __main__ for demo. |
| vultron/api/v2/backend/trigger_services/embargo.py | Deleted legacy trigger service adapter module. |
| vultron/api/v2/backend/trigger_services/case.py | Deleted legacy trigger service adapter module. |
| vultron/api/v2/backend/trigger_services/_helpers.py | Deleted legacy FastAPI error translation helper module. |
| vultron/api/v2/backend/trigger_services/init.py | Deleted legacy trigger service package init. |
| vultron/adapters/driving/mcp_server.py | Updates trigger use-case call signature to pass request at construction time. |
| vultron/adapters/driving/fastapi/trigger_models.py | New: FastAPI request body models for trigger endpoints. |
| vultron/adapters/driving/fastapi/routers/v2_router.py | Adds stable operation_id for version endpoint. |
| vultron/adapters/driving/fastapi/routers/trigger_report.py | Switches imports to adapter layer; adds operation_id fields. |
| vultron/adapters/driving/fastapi/routers/trigger_embargo.py | Switches imports to adapter layer; adds operation_id fields. |
| vultron/adapters/driving/fastapi/routers/trigger_case.py | Switches imports to adapter layer; adds operation_id fields. |
| vultron/adapters/driving/fastapi/routers/health.py | Implements readiness probe with DataLayer dependency injection. |
| vultron/adapters/driving/fastapi/routers/examples.py | Adds stable operation_id fields to example endpoints. |
| vultron/adapters/driving/fastapi/routers/datalayer.py | Adds stable operation_id fields; removes unused import. |
| vultron/adapters/driving/fastapi/routers/actors.py | Updates profile response to return inbox/outbox as URL strings; adds operation_id fields. |
| vultron/adapters/driving/fastapi/outbox_handler.py | Fixes missing early return when actor is not found. |
| vultron/adapters/driving/fastapi/errors.py | Introduces adapter-local domain→HTTP error translation helpers. |
| vultron/adapters/driving/fastapi/_trigger_adapter.py | New consolidated adapter functions wrapping core trigger use cases. |
| vultron/adapters/driven/delivery_queue.py | Clarifies unused import with inline # noqa: F401 comment. |
| test/wire/as2/vocab/test_vulnerability_case.py | Removes unused imports. |
| test/wire/as2/vocab/test_create_activity.py | Removes unused variable assignment. |
| test/wire/as2/vocab/test_base_utils.py | Removes unused imports. |
| test/wire/as2/test_extractor.py | Removes unused imports. |
| test/test_semantic_activity_patterns.py | Removes unused typing import. |
| test/test_behavior_dispatcher.py | Removes unused import. |
| test/demo/test_receive_report_demo_bug.py | Removes unused imports. |
| test/demo/test_health_check_retry.py | Removes unused imports. |
| test/demo/test_cli.py | Removes unused variables; minor invocation cleanup. |
| test/demo/conftest.py | Adds explicit # noqa: F401 re-export annotation. |
| test/core/use_cases/test_status_use_cases.py | New: tests for status use cases (create/add case & participant status). |
| test/core/use_cases/test_report_use_cases.py | Adds tests asserting receipt persists RM.RECEIVED ParticipantStatus. |
| test/core/use_cases/test_note_use_cases.py | New: tests for note use cases (create/add/remove note). |
| test/core/use_cases/test_case_use_cases.py | New: tests for case update use case behavior. |
| test/core/use_cases/test_actor_use_cases.py | Removes unused import. |
| test/core/behaviors/test_performance.py | Import ordering cleanup. |
| test/core/behaviors/report/test_validate_tree.py | Updates validation-tree tests to use DataLayer-backed status records. |
| test/core/behaviors/report/test_policy.py | Removes unused import. |
| test/core/behaviors/report/test_nodes.py | Updates node tests to use DataLayer-backed status records. |
| test/core/behaviors/report/conftest.py | Updates # noqa placement for side-effect import. |
| test/core/behaviors/case/test_create_tree.py | Removes unused intermediate variables. |
| test/core/behaviors/case/conftest.py | Updates # noqa placement for side-effect import. |
| test/conftest.py | Removes unused import. |
| test/api/v2/routers/test_trigger_report.py | Updates fixtures/assertions for DataLayer-backed RM state. |
| test/api/v2/routers/test_trigger_case.py | Aligns expected FastAPI validation status constant; minor import reorder. |
| test/api/v2/routers/test_health.py | Adds readiness failure-path test via dependency override. |
| test/api/v2/routers/test_actors.py | Updates expectations for profile inbox/outbox URL string behavior. |
| test/api/v2/backend/test_trigger_services.py | Updates trigger-service tests to use new adapter imports + DataLayer-backed RM state. |
| test/api/v2/backend/test_outbox.py | New: unit tests for outbox handler processing and error paths. |
| specs/project-documentation.md | Clarifies plan/priority source-of-truth rules. |
| specs/code-style.md | Adds explicit rule against imports inside test functions. |
| specs/case-management.md | Refines case-state transition validation requirements (CM-04-005/006). |
| specs/behavior-tree-integration.md | Adds BT-12-001 guidance on using authoritative transitions machines for VFD/PXA. |
| specs/agentic-readiness.md | Updates AR-10-001 to require inbox/outbox URL strings. |
| specs/README.md | Updates implementation snapshot section to reflect current architecture status. |
| plan/PRIORITIES.md | Removes older priority text; adds prototype deferral policy pointer. |
| plan/IMPLEMENTATION_HISTORY.md | Adds detailed history entries for multiple TECHDEBT/P90 tasks. |
| plan/BUGS.md | Adds BUG-001 entry and marks it fixed. |
| notes/state-machine-findings.md | Adds transitions+Pydantic integration guidance. |
| notes/domain-model-separation.md | Adds durable notes on wire-layer mutation helpers and coupling concerns. |
| notes/codebase-structure.md | Adds module-rename lessons learned + trigger_services migration plan notes. |
| notes/case-state-model.md | Adds OPP-06 guidance reference. |
| notes/README.md | Updates notes index entries. |
| docs/adr/0013-unify-rm-state-tracking.md | Updates references from implementation notes to durable design notes. |
| AGENTS.md | Updates canonical skill references, paths, and adapter/test layout guidance. |
| .github/skills/run-tests/SKILL.md | New: canonical pytest invocation skill. |
| .github/skills/run-linters/SKILL.md | New: canonical linter suite skill. |
| .github/skills/format-markdown/SKILL.md | New: canonical markdown lint/format skill. |
| .github/skills/format-code/SKILL.md | New: canonical Black formatting skill. |
| .github/skills/format-code-run-tests/SKILL.md | Deleted: replaced by modular skills. |
| .github/prompts/PLAN.md | New: planning prompt for updating implementation plan/notes. |
| .github/prompts/LEARN.md | New: docs-only refinement prompt. |
| .github/prompts/BUILD.md | Clarifies build prompt verification/testing/DRY requirements. |
| .github/prompts/BUGFIX.md | New: test-first bugfix prompt. |
| .github/copilot-instructions.md | Major update: commands, architecture, conventions, checklists. |
| .github/CODEOWNERS | Adds explicit ownership for .github/ subtree. |
| .flake8 | Adds E203 to ignored errors. |
| @@ -76,6 +77,7 @@ | |||
| "Updates the offer status to TENTATIVELY_REJECTED and the report " | |||
| "status to INVALID." | |||
There was a problem hiding this comment.
The invalidate-report endpoint description says it updates the offer status to TENTATIVELY_REJECTED, but the current implementation path appears to persist only ParticipantStatus (RM state) and no longer tracks offer status (the OfferStatus/OfferStatusEnum models remain but are unused). Please either restore offer-status persistence or update the endpoint description to reflect the actual persisted state changes.
| """ | ||
| Transition report to RM.INVALID and offer to TENTATIVELY_REJECTED. | ||
|
|
||
| Updates both report status (RM.INVALID) and offer status (TENTATIVELY_REJECTED) | ||
| in the status layer. Logs state transitions at INFO level. | ||
| Updates report status (RM.INVALID) in the DataLayer. | ||
| Logs state transitions at INFO level. |
There was a problem hiding this comment.
This docstring still says TransitionRMtoInvalid transitions the offer to TENTATIVELY_REJECTED, but the implementation no longer persists any offer-status state (it only writes a ParticipantStatus RM record). Please update the docstring to reflect the actual behavior (or reintroduce offer-status persistence if required).
| try: | ||
| dl.read("") | ||
| return {"status": "ok"} |
There was a problem hiding this comment.
/health/ready probes the DataLayer by calling dl.read(""). An empty ID isn’t guaranteed to be valid for all DataLayer implementations and may either always succeed (returning None) or always fail, making the readiness signal unreliable across adapters. Consider probing via a port-level operation that is explicitly supported (e.g., dl.get(None, <sentinel_id>) if get() is the intended cross-table lookup) or introduce a dedicated ping()/health() method on the port so readiness semantics are consistent.
| description=( | ||
| "Triggers the reject-report behavior for the given actor. " | ||
| "Emits a Reject(Offer(VulnerabilityReport)) activity (RmCloseReportActivity) " | ||
| "and returns it in the response body (TB-04-001). " | ||
| "A non-empty note is required (TB-03-004). " | ||
| "Updates the offer status to REJECTED and the report status to CLOSED." | ||
| ), |
There was a problem hiding this comment.
The reject-report endpoint description says it updates the offer status to REJECTED, but offer status is no longer persisted anywhere (only RM state via ParticipantStatus). Please align the route description with the current domain model/state persistence, or reintroduce offer-status tracking if it’s still required by the trigger semantics.
| "endpoint closes a report that has already progressed through the RM " | ||
| "lifecycle. Returns HTTP 409 if the report is already CLOSED." | ||
| ), |
There was a problem hiding this comment.
The close-report endpoint description still claims it “updates the offer status to REJECTED”, but offer status is no longer persisted anywhere in the codebase (RM state is tracked via ParticipantStatus). Please update this description to reflect actual side effects, or reintroduce offer-status persistence if it’s still a requirement.
There was a problem hiding this comment.
@copilot open a new pull request to apply changes based on this feedback
…aining legacy wrapper
|
@ahouseholder I've opened a new pull request, #332, to work on those changes. Once the pull request is ready, I'll request review from you. |
|
@copilot open a new pull request to apply changes based on the comments in this thread |
|
@ahouseholder I've opened a new pull request, #333, to work on those changes. Once the pull request is ready, I'll request review from you. |
…r descriptions, nodes docstring, health probe ping Co-authored-by: ahouseholder <2594236+ahouseholder@users.noreply.github.com> Agent-Logs-Url: https://github.com/CERTCC/Vultron/sessions/2a977821-d19d-4e43-bfc9-23989471a5cc
Fix PR #331 review feedback: hoist test imports, fix stale docs, improve health probe
This pull request introduces several improvements to the project's developer workflow documentation and automation, focusing on making code formatting, linting, and testing procedures more discoverable, standardized, and agent-friendly. It adds new SKILL documents for code formatting, markdown linting, and running linters, updates project instructions to clarify conventions and commands, and makes minor configuration changes for code ownership and linting.
Developer Workflow Documentation and Automation:
.github/skills/for:format-code)format-markdown)run-linters)Project Instructions and Documentation:
.github/copilot-instructions.md:.github/prompts/BUILD.md):Configuration and Ownership:
.github/CODEOWNERSto explicitly assign ownership of the.githubfolder..flake8to additionally ignore E203.These changes collectively make the project's development and contribution process more robust, consistent, and accessible to both humans and automation.