Changelog
Versioning policy
Piprio does not yet publish numbered release tags. Until it does, this log groups shipped features by calendar month, newest first. Each entry is one feature commit, shown with its short commit hash. Bug fixes, refactors, test-only changes, build changes, and documentation updates are left out, so this records new and changed capabilities rather than every commit.
May 2026
fe5be9dbrender response_field_eq post-conditions + first consumer094f124dwire db_state post-condition assertions + correct the corpuse16a84e7task_return_value post-condition kind for worker tests6a723e6eclose teams.delete routing-rule conflict + artifacts.assign user_id9ff19aa8value_gen runtime-value generators + registration.register18ded1b7close auth/sso/saml_acs — signed SAML payload + redirect rendererf35ba8b9close email_change.confirm — final auth token-chain handlerb12758caclose invitations.accept + invitations.preview catalogs20945477add password_reset_token fixture + confirm_reset catalog7748d1cfcover extract_realtime valid_happy + invalid cases08d4557fcover get_artifact_content via artifact_with_file fixturea2ad8c0acover resolve_alert valid_happy via connector_alert fixture7646b122close B2 at 30/30 — add run_crawl_job worker catalog7c653876support bind=True celery workers + deliver_webhook catalogbe8b289fA1c — re-enable celery side-effect on accept catalogs81324294B2e — 8 LLM + HTTP worker catalogsbb043151B2d — 3 MinIO worker catalogs + str-coerce value_refs in worker tests496eba43B2c — 6 CHAIN/SCHEDULER worker catalogs + recorded_celery_calls in worker tests4dd4eeb8B2b — 4 PURE-DATA worker catalogs (review + recommendations + feedback)7efca243B2a — 5 PURE-DATA worker catalogs (billing + quality + review SLA)203b1583add celery_worker catalog kind + reset_stuck_jobs demo535d8d02assert validate_manual_tag_set dispatch on tag_sets.updateb05867a5cover connectors.trigger_crawl + fix recorder for .delay-positional shapeec124f25assert PDF render dispatch on admin.generate_invoicedba44281cover scheduled_exports.run (POST exports/scheduled/{id}/run)43828b22assert celery dispatch on feedback.import_csv_predictions5ea92374cover create_tag_set (POST artifacts/{id}/tag-sets)c4ca5d44wire celery_task_enqueued side-effect assertions + test_webhook catalog6a2bb85bemit json={} for body-less happy substitutionb7c43eccadd multipart/form-data renderer support + 202-status64d823caadd PATCH /teams/{id}/members/{user_id} catalog + fixtured0b66343add cross_field_cases for model_validator coverage72e70364support zero-input requires_superuser happy tests8ef854e8add requires_superuser catalog flag; close dlq_replay L23c2101d3wipe orphaned invoice PDFs on three-tier reseedeaaf94bcperformed_by ON DELETE SET NULL + email snapshot7cd2b1dewipe seed-managed test-artifacts subdirs before reseed70517aa1extract-realtime success spec via real-file connectora39eb6bflaunch test-mode Celery worker via globalSetup2028ff79mock LLM client when APP_ENV=playwright7e1bbbb2cover flow #6 live-trigger half via bucket fixture00cdc2efseed RoutingRuleSuggestion + cover flow #6 accept path654088f3seed DriftAlert + cover flow #10 ack happy path02c7b37fadd /schemas/new visual baseline + flip its axe gate to default046b6e5evisual-regression infra + baselines (darwin-local, L4 layer)9a60d14faxe-core accessibility harness + dashboard smoke check4f664278migrate 5 legacy specs to test-mode infra + drop 2 obsolete0d8c4f5bseed all 6 roles + per-role storage states + role-access smokebbc395f4playwright test-mode infrastructure on ports 8001/31005869590bPhase 0 E2E test runner rails + smoke pilot26664dacsemantic duplicate detection on artifact detail page03328566out-of-distribution signal on AI proposalsa1154b7f4-signal Smart Rules confidence scoring0126dd72related-artifacts panel via embedding similaritybffaa807density toggle (Phase 1) — localStorage-backed user preference9b2134daper-org pricing-override editorf1652925extend DropdownMenu, add SegmentedControl, migrate Header.tsx882e905fadd IconButton primitive and migrate icon-only call sitesc2210975add SelectableCard primitive + migrate 10 sites602a2bb0add /dev/components showcase page for UI primitives38c450c0add Card / Label / Skeleton / Toast primitives + cn() utility9d402886add expected_updated_at optimistic-locking precondition3c41f555log danger-zone reseeds (Phase 5c-2)e531b331per-IP rate limit on /internal/* writes (Phase 5c-1)a4311e48admins management page + topbar session fix (Phase 5b-2)1bcc26cbadmin management endpoints + create_admin --superuser (Phase 5b-1)31554f0aintroduce internal_admins table (Phase 5a)c170c466Phase 2 — self-built admin control-plane Next.js app681b8767Phase 1 admin control-plane migrationd7ab40a7convert public CTAs to sales-led mailto/contact0d4a2594pass-Lucide — migrate inline SVGs to lucide-react via iconProps()06ceedb4retire body page headers, dedupe with top-bar title91c4d384phase 2d — DataTable rowComponent + row-grouping; sub-batch 3 deferrals migratede761994dpass 3d — empty-states primitive + 10 migrations + icon-stroke drift fix + 2 deferrals87328720pass 3c — chart palette retune +retirement + recentlyAssigned unwind f77b539epass 3b-4c —primitive + 4 callsite migrations + drift cleanup 87e8091fpass 3b-4a Phase 2b sub-batch 3 — settings+dashboard+quality+developer family (10 of 12 tables) +retired da8bd76bpass 3b-4a Phase 2b sub-batch 2 — review+exports+connectors family (10 tables)5943df54pass 3b-4a Phase 2b sub-batch 1 — admin family (3 tables)b4020698pass 3b-4a Phase 2a —primitive + 5 representative migrations 174f3ed5pass 3b-3 — file-preview internal refactor + image renderer + state coverage4fbf4081pass 3b-2 —primitive + 10-callsite migration + UX-bug fix d6e81fcapass 3b-1b —sub-export + 7 wrapper migrations db3b3c17MetricTile chrome canon reversal — top-edge accent (Pattern A)bef2f171pass 3b-1a —primitive + 25-callsite canonical migration 8f04ea2cpass 3a-5 — Checkbox/RadioGroup/StepIndicator primitives + form-control color canonf28aaaa7tone prop on Input + Textarea — closes !-important override pattern65ea9daepass 3a-4-2 — bulk inline input + textarea + select migration519f126dpass 3a-4-1 — Input/Textarea/Select/Toggle primitives + inputCls migration9a467feepass 3a-3 — Pill / RemovablePill / ChipButton primitives + 46 callsite migration6ec7b321pass 3a-2-5 — closes Pass 3a-2 with success-solid + final cluster migration933bd6c9pass 3a-2-4 — connectors + schemas + quality + onboarding Button migrationa2dabb39pass 3a-2-3 — review + artifacts Button migrationd55dad4bpass 3a-2-2 — settings cluster Button migration76c325b2pass 3a-2-1 — Button primitive + critical-path migration18bc3798pass 3a-1 — Modal primitive + 25 callsite migration5fd3453epass 2c — review-flow modals, pills, alias sweepf7947127pass 2b-4 — review + schemas + quality + onboarding clusters74de56dcpass 2b-3 — connectors + artifacts clustersc5cc8b2dpass 2b-2b — settings remaining tabs (security, teams, routing, integrations)60932f5cpass 2b-2a — settings high-traffic tabs + exports listd0ce27bepass 2b-1 — shared utils + page titles + dashboardd22ad8a0pass 2a — shell + auth + form input fixdf37db32pass 1 — tokens, fonts, Tailwind wiring
April 2026
78bde8afinvoice histories with paid / open / overdue / cancelled states66062ffcthree test orgs spanning Starter / Professional / Enterprise tierse3689137remove Plan management section from Billing taba5aae3f4per-org Enterprise pricing overrides on Organization model2264fd44customer and admin invoice endpoints5aa697d7admin billing page with invoice management actions099faf16redesigned Billing tab with invoices list and billing detailsf0999b0dSettings AI Provider page for Enterprise BYO LLM (PART E/8)3b4c2367invoice generation Celery task with audit emissionc129b499PDF invoice rendering via WeasyPrint and Jinja2d3175449test-connection endpoint for org LLM config (PART C/8)59f8f5dbVAT calculation with German B2B reverse-charge01104594per-org LLM config table with Enterprise gate and audit emission (PART B/8)97a0df29German-compliant invoice numbering with cancellation invoicesbdac8ecdadd Invoice model and billing-address fields on Organization2ae7d44eadd per-org LLM provider selector for BYO LLM (PART A/8)ff3b1689optimistic locking on routing rule updates and reorder72b8d780optimistic locking on schema field updatesa217f792add optimistic-locking precondition dependencya7679e64admin trigger endpoint for embedding backfill14348d52populate artifact embedding via OpenAI on ingest2608a94eskipped-artifacts tile for org-level visibilityc718064aprominent skipped-artifacts count in crawl summaryacd2a485surface file-size and file-type limits on connector setup formf5a2cafaadd BillingPeriod ORM model433b76d8per-item deep-link from Action Feed assign CTA52215f46emit audit event on delete_orgeda75086extend Org Unassigned tab visibility to data stewards5b12cd06render team-assignment events in action feed, remove yellow banner41d7c21bresolve team-assignment events when artifact is assigned to individual7ee43915emit Action Feed event when artifact assigned to team without reviewerd622779dUI for deactivation with warning, toggle, and history badge16595386list filtering and is_active in detail responsea4589f9eservice-level deactivation with dependency guardedf938aeallow editing smart rule suggestions before approval722cc358allow overriding suggestion values on acceptb50401b5clarify scheduled-exports empty state for non-admin rolesd3df0755split awaiting-review stats team-vs-individual5c54017breviewer activity card with per-member breakdown859ac012per-member stats endpoint returns queue and acceptance rate3d7b36e9add TeamLeadDashboard for team-lead role combinationsaa5e829emigrate demo-org senior_reviewer users to match test-org split406780c0warn when senior reviewer has no team assignment11cabcc2disable demote/remove on irreplaceable team leadd72cefeeadd demote-to-member action on team detail7e0c36a9apply role map to remaining endpointsd5dbd452apply role map to quality endpointsf09fbd33apply role map to tag set and artifact endpoints5cebd287apply data_steward authority to connector operational endpoints310ed68apair data_steward with 'Data Steward' UI label and align route gates525f6127apply data_steward/senior_reviewer to remaining mapped endpoints209f4610grant senior_reviewer routing rule CRUD25697651grant data_steward schema and connector CRUDa4166bafmigrate schema_designer memberships to data_steward12e9dc3dadd data_steward and senior_reviewer enum valuesd81866acseed test users and memberships on reset443662c9gate /exports/new at layout level for non-authoring rolesdeca072areview queue list UX — schema column, ai-proposed signal, age rename, empty badge3f757719real files for demo artifacts with content-aligned tagsb3c3c3addemo seed data + /quality/latest live fallbacke3badbb2sortable columns (Phase 3) — remaining tables + deferred column backfill + shared cursor helperb2357bdcsortable columns (Phase 2) — Review Queue, Export Jobs, Memberseeb3ba32sortable columns (Phase 1) — Review unassigned, Artifacts, Ingestion Jobse8abe799split action feed from recent activity8662caeefull test data load button on Developer page37e3426aimplement Reset DB on Developer page — one-click full reseed01d33aaddev tools — reset notifications endpoint and Developer page UIb2e87fd8action feed — event-driven notification cards on dashboard5a24604fglobal command palette (⌘K) for navigation and actions8001e490public marketing homepage with hero, feature sections, and CTA6102e25dadd live review queue count badge to sidebar nav0da4464bi18n — wire schema field editor modals (AddFieldModal, EditFieldModal)082a5212i18n — wire missing translation keys for new UI components89492cdaOpenAPI spec export and TypeScript client generation63990617default field values — schema editor, tag set pre-fill, AI conflict flagf1b05269schema selector in Artifacts filter sidebar9cb052f9tag field value filter in Artifacts page sidebareae6a6c7filter artifacts by tag field value for drift alert flowa02a5ce6Developer API documentation page272051efdrift alert View Artifacts filter and context banner0b47d145change brand color from amber to indigoc1491234consolidate drift monitoring into single full-width carddb0da2a3remove Active Alerts panel from dashboard8cdfda80API keys UI in Settings → Integrations4a6b916dIRA condensed layout, disagreement report download, remove IRA section from dashboarda79194b8dashboard card qualitative calibration status, clickable cards with deep links42def369inject field correction examples into AI tagging prompt for continuous improvementa085343aoverride-adjusted confidence scores with field-level calibration tracking65684eddSTL 3D preview via Three.js, DXF 2D preview via SVG63b9f42cIRA sampling control on Quality page, apply to unassigned queue23369be9IRA automatic sampling - configurable rate, dual assignment, sampling flag on tag sets96ed7b6fXLSX preview in review page via SheetJS04402efdPDF preview in review page via iframe blob URLa6abed38add test artifacts for all file types (log, xml, txt, pdf, xlsx) and CAD files (step, stl, dxf)9e572dd3artifact preview visual polish - file viewer frame, JSON syntax highlighting, CSV table styling80961f7cartifact content preview in review page - CSV table, JSON, log rendering011018f9quality page improvements - drift monitoring status, IRA empty state, rename calibration tab, action itemsffdae65eseed_tag_data.py - realistic tagged artifact data for quality metric testing9d13f148review detail auto-advance after accept/reject, humanize enum display values52b57be3team deletion when empty, block if routing rules reference teamcefa2e0arename schema_designer to Data Steward in UI, explicit team lead assignment in Teams settings50a58c8dteams page shows unassigned members section43513756members page - humanize role labels, populate teams column, add role explainerdba498f7quality page redesign - three-section analytics hub for drift, IRR, and confidence calibrationb4c5a73dreplace confidence badge with AI tag coverage %, add no-proposals notice on review detail9dba9897connector schema binding flow - auto-scan warning, optional binding on create, helper text, remove placeholder03efde1dschema_designer crawl permissions, add reviewer3/4/5 and designer seed accounts8a75255asmart review queue empty states - four scenarios based on setup and assignment status63796d57build accept-invite page for email invitation flowca69beebpending invitations list and revoke in settings/members and admin panela3ca701ewire up email sending via Mailhog for local dev, password reset and invite emailseea14fa8admin billing controls - plan management, trial extension, usage summary in admin panele8fc23daadd auto-scan toggle to onboarding connector step, defaulted on1b8796caplatform admin panel - org/user management, superuser role, admin UI4bc99937complete Piprio platform - Phase 1-4 + security audite00049caadd auto-scan toggle to AddConnectorModal, update edit modal labelsd28da471add large scan notification banners698b0eb7add scan progress bar and status badges to ConnectorCardb28f2032add i18n keys for AI scan progress UId3c41ad1add getScanProgress API function and auto_scan_after_crawl to CreateConnectorRequest14ef152aadd select-all-across-pages banner6914831aadd bulk assign action bar with person/team dropdownsb3853e0dadd filter chips to unassigned tab49effdc8add BulkAssignModal confirmation component14e66a2fadd i18n keys for mass assignment UI00b88bdbadd bulk-assign API functions to frontend