[6/6] Migrate announcement authoring to the OData contract - #346
Conversation
Dawn Jeong (daeunJe0ng)
left a comment
There was a problem hiding this comment.
[copilot-review] Verdict: Approve with nits.
Clean, well-tested boundary migration to the WeveNova EssBulletins OData contract. All PascalCase to lower-camel adaptation is isolated in client.py, the MCP/widget contract is untouched, GUID validation/canonicalization is added at the boundary, and the receipt + keyed-reload model correctly treats a post-commit reload failure as a non-retryable CommittedRefreshFailed (the create path is unkeyed, so replay would duplicate). No blocking issues.
Two open questions confirm backend-contract assumptions (inline), plus one nit. Strong test coverage: reload-failure parametrized across save and transition, delete-tombstone skips reload, invalid-receipt matrix, empty-GUID rejection, PascalCase error normalization. Tests bind to the public validate_* API.
Verification: reviewed the full diff of all 6 files plus the head server.py committed-refresh handling and except ordering. Did not run pytest (stacked branch on a non-default base, not checked out locally); relied on the diff and the author's stated 663 passed / Ruff-clean.
Add the announcements skill, prompt, setup materialization, and Maker Profile entry point. Keep discovery on the announcements provider, require deployed-agent context, and document recovery and credential limits. Preserve the reviewed 0.4.25 package and existing upstream setup behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: eddd3818-bb74-42d3-bcf3-7e0670a57f27
Map Important and Informational explicitly, continue review-only creation after unresolved audience lookup, and distinguish repairable copies from backend-valid saved actions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 15e9d51c-c328-48e6-9948-8819f9e57f90
Publish the announcement-enabled VSIX as 0.4.26 and add cross-platform checks that keep the packaged extension aligned with its source and manifest. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Adapt the authoring client to the WeveNova EssBulletins OData contract while preserving the existing MCP and widget-facing lower-camel contract. Reload canonical saved resources, keep delete tombstones non-readable, and prevent committed writes from being retried after refresh failures. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
95d672b to
ccac21d
Compare
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
A critical keyed-reload identity mismatch remains unresolved.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (1)
What changed in this PR
Migrates Org Announcements authoring to the EssBulletins OData contract while preserving the existing MCP/widget interface.
Changes:
- Added OData mappings, GUID validation, canonical reloads, and tombstone handling.
- Updated server, draft, client, and protocol tests.
- A critical keyed-reload identity check remains unresolved.
| File | Description |
|---|---|
tests/mcp/agentconfig_org_announcements/test_mcp_app_protocol.py |
Updates protocol fixtures and behavior tests. |
tests/mcp/agentconfig_org_announcements/test_drafts.py |
Updates draft identity fixtures. |
tests/mcp/agentconfig_org_announcements/test_authoring_client.py |
Tests OData requests, receipts, validation, and reloads. |
solutions/ess-maker-skills/src/mcp/agentconfig_org_announcements/server.py |
Handles canonical refresh failures and tombstone deletes. |
solutions/ess-maker-skills/src/mcp/agentconfig_org_announcements/drafts.py |
Reads canonical bulletin IDs. |
solutions/ess-maker-skills/src/mcp/agentconfig_org_announcements/client.py |
Implements OData routes, mappings, validation, and reload behavior. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Preserve OData canonical reload semantics and validate keyed response identity. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Existing telemetry tests use non-GUID IDs rejected by the new validation boundary.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (1)
Resolved since last review (1)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
|
@microsoft-github-policy-service agree company="Microsoft" |
@microsoft-github-policy-service agree company="Microsoft" |
|
All 671 tests pass. Here's my review of #346. Blocking / high1. Enum values were not migrated with the property names — status classification is case-sensitive lowercase.
2. Pre-migration, identity lived at 3. Same fail-the-whole-list strictness on
Medium4. Read mapping is now a whitelist — new/unknown backend bulletin fields are silently dropped. Combined with "the widget always sends the whole authored state", a field the backend adds is lost on read and then wiped on the next save. Previously bulletin content was passed through verbatim. Worth an explicit passthrough for unmapped keys, or a note that the contract is intentionally closed. 5. Read-after-write lag is reported as an unretryable committed failure. Every write now does 6. 7. Non-GUID legacy ids are now permanently unloadable. Minor / stale
|
Align repo and solution routing, refresh feature dependencies for completed workspaces, and strengthen cross-entry-point and server cache regression coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Validate provider enums at the OData boundary, retry only committed keyed GET 404s, preserve closed DTO projections, and add provider-derived contract coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Distinguish renewable cached MSAL sign-ins from explicit environment tokens, token files, and malformed identity credentials before advising a retry. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 19335911-b012-4b7f-b179-e4caeae7ea69
|
[copilot-review] Resolved by the newer commits
Still open at current head (I concur with the prior reviewers; not re-listing each)
One item I did not see raised
Process
Not verified
|
Dawn Jeong (daeunJe0ng)
left a comment
There was a problem hiding this comment.
Looks good to merge for this urgent OData slice. Non-blocking follow-ups are captured in my earlier [copilot-review] comment above.
d6906b7
into
users/rebova/org-announcements-prerelease


Summary
EssBulletinsOData routes{ Id, Errors }save receipts to the existing lower-camel MCP/widget contractStack
This is the sixth and final follow-up in the Org Announcements prerelease stack. It is based directly on the head branch of #273, so only the OData migration appears in this PR.
Testing
745 passed— integrated Org Announcements, setup-router, import-isolation, MCP config, and VSIX suites279 passed, 1 skipped— shared AgentConfiguration core and auth suites; the skip is the expected Windows POSIX permission-bit case44 passed— Maker Profile extension testsgit diff --checkpassed