Repository navigation
docs: quotes and projects pages match the code - #92
Merged
Merged
Conversation
…nits)
Add the PUT /api/v1/quotes/{id}/file entry (HandleAttachFile) and the
drafts route cross reference, both missing from the page. Add the
stock_uom, stock_quantity and tally QuoteLine fields. Correct the
lifecycle intro (reopened is an event, not a status) and the uom
description (regex pattern from the units catalogue, not a 15-code
enum).
Signed-off-by: colton <colton@futurebuild.ai>
…drift-quotes-projects Signed-off-by: colton <colton@futurebuild.ai>
…ody, list and convert rows margin_total_cents is what the client sent on create (default 0); the service copies it through, a PUT refuses it, and nothing sums line margins. Add the create and update body, the line request, the list envelope (QuotePage of QuoteSummary), the convert response with its 409 refusals, and the PUT file row with 413, 428, the filename query parameter, the ETag move, the file_attached audit row, no outbox, and quotes:write. State that draft routes are gated by quotes:propose and quotes:commit. State ProjectItem total_cents is null on a delivery. Add the project create and update body, the headers and codes, ProjectPage, and the dashboard project key. Cite ADR 0006 sections 3.2 and 3.3 for the sale unit rule, drop the unsupported customer currency note, state freight_cents is cleared for a pickup, and write exposure_cents in integer cents. Carry the changes from PR 92 review r1 by Sonnet 5.5. Signed-off-by: colton <colton@futurebuild.ai>
…d idempotency rules the code applies Review r2 of PR 92 found five sentences the first fix round added that the code contradicts. The file route takes no query parameter (noQuery refuses any) and reads its revision only from If-Match (precondition(r, nil)); the quote body's lines carry no minimum count; a malformed If-Match is a bad_request, not validation_failed; and Idempotency-Key is an opt in replay header, not a required one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
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.
Summary
Documentation drift fix for
docs/modules/quotes.mdagainst the code onorigin/refactor/v1at commit14e12faa48b25bdee76275107695ef2720d24635.docs/modules/projects.mdhad no drift; it is unchanged in this PR.Changes (each with its evidence)
docs/modules/quotes.mdcore/internal/quote/model.goL23-27 declaresQuoteStateDraft|Sent|Accepted|Rejected|Expired;core/api/fragments/quote.yamlL693-696 quotes the wire enum as[draft, sent, accepted, rejected, expired].reopenedis an event name (core/internal/quote/service.goL73EventReopened = "quote.reopened"), not a status.QuoteLine.uomdescriptionuppercase enumPCS, EA, LF, ..." to "uppercase pattern, regex^[A-Z]{1,6}$, a code from the units catalogue (ADR 0006 section 2.1: 23 seeded codes; dealers add their own). On a product line the value must be one of the product's own sale units (ADR 0006 section 3.4)."core/api/fragments/quote.yamlL934-939 declaresQuoteUomaspattern: '^[A-Z]{1,6}$', not an enum.core/migrations/099_units_catalogue_and_sets.sqlL71-93 inserts 23 seeded codes includingDOZ,C,M,CF,CY,CWT,TONthat the page omitted. ADR 0006 section 2.1 describes the open-ended catalogue.PUT /api/v1/quotes/{id}/filerouteapplication/octet-streambody, 5 MiB bound; only while the quote is a draft, else 409 with thequote_not_draftblocker."core/api/ROUTES.txtL382PUT /api/v1/quotes/{id}/file internal/quote h.HandleAttachFile;core/api/fragments/quote.yamlL598-656;core/internal/quote/handler.goL57, L395./api/v1/drafts/quotes[...*]paths live ininternal/quoteper the route census but belong to the drafts module (docs/modules/drafts.md).core/api/ROUTES.txtL198-204 lists seven routes underinternal/quote.docs/modules/drafts.mdL147-153 documents them.QuoteLine.stock_uom,stock_quantity,tallyrowscore/api/fragments/quote.yamlL867 declares them required; L879-897 defines them with references to ADR 0006 sections 3.4 and 4.core/internal/quote/model.goL157-163 declaresStockUOM,StockQuantity,Tallyon the Go model.Counts
docs/modules/quotes.md: TRUE 38, FALSE 2, UNVERIFIABLE 1, MISSING 8 routes (1 quote + 7 drafts) + 3 fields (QuoteLinestock_uom,stock_quantity,tally).docs/modules/projects.md: TRUE 22, FALSE 0, UNVERIFIABLE 0, MISSING 0 routes + 0 fields. Unchanged.Suspected defects (for the lead)
None of the drift items are code or fragment defects; each is a page-only claim that contradicts what the fragment, Go model, repository or migration already says. The "reopened" lifecycle claim and the "uppercase enum" claim are page-only mis-statements; the route and field omissions are page-only gaps. No fragment or Go code change is implied.
Checks
python3 .github/scripts/reuse_gate.pypasses (reuse 6.2.0 already installed).bash scripts/check-shape.shOK.git diff origin/refactor/v1..HEAD | grep -cP '^\+.*[\x{2013}\x{2014}]'prints0.git diff origin/refactor/v1..HEAD | grep -c '^+.* -- 'prints0.git log --format='%ae %ce' origin/refactor/v1..HEAD | sort -u->colton@futurebuild.ai colton@futurebuild.ai.git log --format=%B origin/refactor/v1..HEAD | grep '^Signed-off-by' | sort -u->Signed-off-by: colton <colton@futurebuild.ai>.git log -p origin/refactor/v1..HEAD | command grep -nE -e '...'(live credentials check) prints0.🤖 Generated with Claude Code