Reconcile OData documentation with service metadata contract - #6
Open
tgilkison1 wants to merge 11 commits into
Open
Reconcile OData documentation with service metadata contract#6tgilkison1 wants to merge 11 commits into
tgilkison1 wants to merge 11 commits into
Conversation
Closes gap between ODataConfig.cs (38 entity sets) and documentation. Naming fixes (URL-breaking): - TimeZones -> Timezones - SessionAuditLog -> SessionAuditLogs New od:feed definitions: - AnswerAuditLogs, AssessmentOutcomes, AssessmentMetadata (+ type), AssessmentTranslations, Appointments, PrintBatchUploads, Roles, RulesOfConductTranslations feeds.rst index: - Added 12 missing entries (now 38 total) New properties: - Administrator: PeopleSyncID, Blocked - Participant: JobTitle, PeopleSyncID, Blocked - Schedule: IsDeleted, MinMinutesBetweenAttempts - MonitoringType: TranslationToolLangs, TextToSpeech, RequireObserver, RequireConfirmation, RequirePasscode, Category - RulesOfConduct: AllowedResources Navigation property: - Assessment.AssessmentMetadata OData actions: - Participants: Upsert, ScheduleAndLaunch, UpsertParticipantAndSchedule - Participant: ActionableScheduleForObservation - Administrator: GetAccessUrl (+ Upsert params update) - Schedule: CanLiveProctor, GetLiveProctorUrl - Results: SubmitResultsByAdministrator Fixes: - RulesOfConductTranslation composite key (Language 🔑) - Action param typos in monitoring_type.rst Infra: - README.md: Full documentation (92 lines) - AGENTS.md: Agent guidance with durable lessons (95 lines)
Align the Delivery OData documentation with the qm-DeliveryOData service code (ODataConfig.cs and the entity classes): - Add PracticeAttempts feed and PracticeAttempt type page; register it in the types toctree and the feeds index. - Fix 12 malformed entries in the feeds index that used broken :od:feed: role syntax (missing backticks / literal newlines). - Document five previously missing actions with code-accurate inputs: Participants.Upsert, Participant.ScheduleAndLaunch, Participants.UpsertParticipantAndSchedule, Participant.ActionableScheduleForObservation, Administrator.GetAccessUrl. - Mark RulesOfConductTranslation.Language as part of the composite key. - Fix invalid Edm.RulesOfConduct type reference (now RulesOfConduct). Rebuild the committed HTML output under docs/.
Phase 2 of OData documentation audit - Delivery OData service. DOC fixes (A-series): - A1: ResultAuditLog.IsInQueue stray quote typo - A2: Role key=Name (not ID), add Administrators nav property - A3: Rubric.ShowParticipant type Edm.Double (not String) - A4: AttemptMetadata.AttemptId casing (lowercase d) - A5: Timezone.CurrentUTCTime casing - A6: TestCenter.ID add missing 🔑 flag - A7: Qualify ambiguous Upsert xrefs in Administrators feed DOC-ADD (B-series - undocumented properties): - B1: ActionableSchedule.AssessmentID - B2: Appointment.ExternalAppointmentData - B3: AssessmentTranslation.Description - B4: PrintBatchUpload (5 members including PrecessedDateTime typo) - B5-B6: RulesOfConduct/Translation.AllowedResources - B7: Schedule.ExternalProctoringID DOC-ADD (C-series - response types): - UpsertParticipantResponse, UpsertAdministratorResponse - UpsertParticipantAndScheduleResponse, CustomScheduleAndLaunchResponse - PublishResultResponse DOC-ADD (D-series - action return types/params): - Wire return types for Upsert, ScheduleAndLaunch, etc. - D6: ActionableSchedulesForObservation add ScheduleID input Verification addendum (G-series): - G1: ReplayResultsByDateRange params Edm.String (not DateTime) - G2: ActionableSchedules add ShowHidden input - G3: Fix RulesOfConductTranslations nav (remove Edm. prefix, add :collection:) - G5: Remove duplicate sentence in ExceptionSchedules Upgraded reconciler findings (H-series): - H1: Add missing :notnull: flags (21 properties) - H3: Add :collection: to BranchedResults, Question.Rubric - H4: Fix Edm.-prefixed nav targets in scoringtask.rst Adds reconciliation tooling (ai-scripts/) and documentation (ai-docs/) for reproducible audits. Remaining 16 findings are intentional: - E1-E3: Service metadata bugs (docs correct) - F1: PracticeAttempt deployment lag - H2: 10 props where docs mark :notnull: but metadata nullable (docs correct)
Phase 3 of OData documentation audit - Authoring OData service. Type fixes (A-series): - A1-A3: ModifiedDateTime type Edm.DateTimeOffset (not String) in AssessmentRevision, QuestionRevision, Topic Missing properties (B-series): - B1-B9: AssessmentAML full property set (9 props including nav) - B10-B18: QuestionQML full property set (9 props including nav) - B19: AssessmentRevision.AssessmentName - B20-B21: QuestionRevision.TopicId + Topic nav property Removed (C-series): - C1: QuestionRevision.TopicPath (not in metadata; replaced by TopicId/Topic) Nullability flags (D-series): - Added :notnull: to 13 properties across all 5 entity types - Composite keys (AssessmentRevisionId, Language, QuestionRevisionId) - Non-nullable CLR types (CreatedDateTime, ModifiedDateTime, IsDeleted, etc.) Remaining 2 findings are intentional: - AssessmentAML.AssessmentRevisionId: composite key, metadata doesn't explicitly mark Nullable=false (implicit per OData v4 spec) - QuestionQML.QuestionRevisionId: same pattern
- Mark Delivery and Authoring audits as complete - Add audit summary table with findings breakdown - Reference Firestar ticket for service-side bugs
Includes all Delivery and Authoring documentation fixes from the reconciliation audit (Phases 2-3).
- Add shields.io badges with consistent black (#1a1a1a) / gold (#D4AF37) styling - Add emoji icons for visual hierarchy - Restructure sections with clear headers - Add reconciliation tooling quick reference - Include source-of-truth diagram - Add centered feedback section with contact badges Also fix edmx_parser.py to treat key properties as non-nullable per OData spec (CSDL 6.2.1) - resolves false NOTNULL EXTRA on composite keys.
…fects Pre-merge review found factually wrong statements in the reconciled docs that would mislead integrators. Fixed against the service source of truth: - versionadded: replace fabricated 2021.08 placeholders with release-tag- verified versions; drop unconfirmable post-2024.09 stamps rather than guess. - HTTP methods: correct three feeds documented read-only that are writable (AssessmentMetadata full CRUD; Appointments POST+DELETE; RulesOfConductTranslations POST+PATCH), verified against controllers. - example URLs: use registered plural entity-set names (singular forms 404); fix a copy-paste Groups->Roles $links target. - literal-block :: typo that broke the Sphinx build; present-tense ShowHidden note; consumer-facing metadata-gap notes; add AssessmentMetadata.Value :notnull:. Authoring: drop nonexistent TopicPath, fix composite-key filters. Reconciler residual is now the accepted set only (Delivery 17, Authoring 0). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds pr-report.md (single-page audit briefing for the PR author and reviewers: methodology, accepted-residual guide, service tickets E1-E6) and branch-review-remediation.md (the pre-merge review findings and their resolution). Links both from the ai-docs and proposed-fixes indexes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rebuild docs/ from the corrected source (sphinx-build -b html src docs). Supersedes the earlier rebuild that baked in the literal-block build error. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reconcile OData documentation with the service
$metadatacontractThis PR audits and corrects the Delivery OData (v3) and Authoring OData (v4) documentation against each service's
$metadatacontract, adds re-runnable reconciliation tooling, and records the supporting decisions.Summary of Changes
src/deliveryodata/*.rstsrc/authoringodata/*.rstModifiedDateTimetypes; removed nonexistentTopicPath, addedTopicId; fixed composite-key filter docsai-scripts/$metadata-vs-RST reconciler (v3+v4), baseline fetcherai-docs/adrs/ai-docs/rails/od:directives safelyai-docs/proposed-fixes/docs/What Was Fixed (Delivery OData highlights)
78 total findings reconciled against
$metadatabaseline (tenant 406611, captured 2026-07-13):AttemptMetadata.AttemptId(notAttemptID),Timezone.CurrentUTCTime(notCurrentUtcTime),Role.Namekey (notID)ActionableSchedule.AssessmentID,Appointment.ExternalAppointmentData,AssessmentTranslation.Description,RulesOfConduct.AllowedResources,RulesOfConductTranslation.AllowedResources,Schedule.ExternalProctoringID,PrintBatchUpload(entire property set)Rubric.ShowParticipant(Double, not String),ReplayResultsByDateRangeparams (String, not DateTime)Upsert,ScheduleAndLaunch,UpsertParticipantAndSchedule,ReplayResultsByIDListActionableSchedulesForObservation.ScheduleID,ActionableSchedules.ShowHidden:notnull:flags: 21 properties:collection:flags:Attempt.BranchedResults,Question.RubricUpsertaction linksPrintBatchUploadssupports POSTFull item-by-item breakdown:
ai-docs/delivery-odata-affected-areas.mdVerification
Quality gates (all passing):
sphinx-build -b html src docs— clean (0 errors)Methodology:
ai-scripts/reconcile_odata.pyagainst$metadataversionaddedstamps against git tagsExpected Reconciler Residuals (17 findings — intentionally kept)
These are service-side bugs, not doc errors. The docs describe the intended contract:
GetAccessUrl,CanLiveProctorreturn type missing$metadataomits return type (registration bug)AvailableAppointments+List_1OfDateTimeList<DateTime>into fake typePracticeAttempts/PracticeAttemptextra[NOTNULL EXTRA](11 properties)Service Tickets to Raise (Delivery QM / Firestar)
GetAccessUrlemits noReturnType.Returns<string>()chained on wrong variableCanLiveProctoremits noReturnType.Returns<bool>()chained on wrong variableAvailableAppointmentsreturnsList_1OfDateTimeReturnsCollection<DateTime>()PrintBatchUpload.PrecessedDateTimemisspellingRubric.ShowParticipanttyped asdouble[Required]or non-nullable CLR typesHow to Reproduce Verification
Key Files for Review
ai-docs/pr-report.md— full audit report and reviewer guideai-docs/delivery-odata-affected-areas.mdai-docs/proposed-fixes/delivery.mdai-docs/adrs/— why decisions were made