You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Coordinate PY 1.20.5 and the companion XL, API-Core, WranglesJS, and Lambda-Recipes changes here. PY 1.20.5 is published. Its release notes contain customer-facing changes only. Companion drafts: XL 2.15.0 and API-Core 1.21.2, both unpublished and targeting main.
Maintain this issue body as the current scope and checklist. Add dated comments for decisions, test results, and deployment evidence; reflect consequential decisions back into the checklist. Check an item only when its stated outcome is verified. Local tests, CI, deployment, and live acceptance are separate evidence.
Agreed scope and decisions
Decision
Disposition
Retain the merged AI configuration foundation
Keep PY #1200. Defer the broader JSON Schema/compiler/caller redesign #1206 and packaged catalog #1203.
Target gpt-6-luna, including replacement of GPT-5.6-Luna defaults. Track narrow cleanup in #1225. Do not rewrite saved customer definitions or embedding/index contracts.
Notes use the shared recipe runtime
XL → Core /notes → Lambda/PY Responses, using the fixed Notes Writer recipe and one dedicated server-side NOTES_OPENAI_API_KEY. Require the caller's extract-ai entitlement. The earlier plan to upgrade the legacy Extract-AI service is superseded.
Leave legacy Web cleanup for later
WranglesWeb is inactive. Retain the older JS public extract.ai client for now; track removal in JS #124 and Web migration in Web #125. Do not archive the extraction service without a separate remaining-caller audit.
Eric agreed on October 11 to leave XL as is. Keep merged wrangleworks/WranglesXL#1288, wrangleworks/WranglesXL#1289, and wrangleworks/WranglesXL#1290; no table rollback is required. Keep PY #1222 and XL #1291 outside this release, and omit Excel table development from customer-facing release notes.
Defer Core catalog integration
Core #178 rolled back wrangleworks/API-Core#162 and wrangleworks/API-Core#165. Ordinary model/Notes calls must work without wrangles_catalog or models.catalog_id. Restore later with a reviewed schema and caller rollout.
Keep metadata delivery separate
The responses-metadata work is checkpointed locally across Core/Lambda/JS/XL. Publication is paused while release planning is reconciled. Do not describe it as shipped.
Add classic search-result part-code evidence
PY #1229 merged on October 11 at cea9085a. Each scored result gains reduced part_code_matches and a pre-reduction part_code_match_count; scores, filtering, ordering, and recipe output mapping remain unchanged. The documentation follow-up PY #1230 is merged at 8097d8dd.
Defer generate.ai
Eric confirmed on October 11 that generation can be ignored for this release. Its reasoning-consistency gaps are not release blockers.
Customer-visible PY candidate
Structured Typesafe answers and row/candidate templates; AI Mode search; tolerant convert.parse; explicit key/semantic lookup operations; saved Extract-AI schema/instruction authoring; Luna defaults and flat/nested reasoning; selected-data reads and columns/sheet output; Gemini retrieval prompts/thinking/deadlines; custom-function binding, matrix error propagation, and split.dictionary fallback fixes; Python 3.14 support and test-selection checks. Also include #1229's part-code match evidence and #1228's missing not_columns fix. The release notes describe these under the same five sections as 1.20.3.
Release checklist
Completed source and development prerequisites
Publish PY 1.20.5. Eric published the release; PY Deploy Prod and its downstream Lambda Deploy Prod completed successfully on October 11. This is workflow evidence; a live production smoke test remains separate.
Resolve XL table scope. Eric agreed on October 11 to leave the already-merged XL table helpers in place. No table rollback is required; keep PY Add named Excel table read and write connector #1222 and XL #1291 deferred and omit table development from customer-facing release notes. The ordinary columns/sheet live acceptance check remains open.
Merge PY #1229 at cea9085a and PY #1228 at 77968950. Part-code evidence and missing not_columns handling are on main; final-candidate CI/deployment and the small documentation follow-up remain separate.
Move release planning into this issue, rewrite the draft using the customer-facing 1.20.3 sections, and create the catalog/table restoration issues. Install the reusable Codex release-notes-guidance skill for future drafts.
Remove Core catalog dependencies with wrangleworks/API-Core#178.
Merge Core #179 and persist Service User credential references in the dev task configuration.
Deploy PY main to the dev recipe Lambda. Observed package/image is dev-1.20.5rc1; user confirmed a successful Notes call showing Luna/none. This is one successful path, not complete XL acceptance.
Remaining release work
Search-scoring documentation follow-up:PY #1230 merged at 8097d8dd before the PY release.
Defer the extraction example notebook until after release. Eric requested this explicitly on October 11; track the notebook-only checkpoint ed69a569 in PY #1231. It is not a PY 1.20.5 release gate.
Finish Luna live acceptance. Run final inline/saved/standalone extraction and all Notes checks on the frozen candidate. Include omitted reasoning, flat none, nested {effort: none}, and an explicit override. Metadata remains separate.
Defer generate.ai. Explicitly excluded from release readiness by Eric on October 11; no generation fix is required for PY 1.20.5.
Complete or explicitly defer Responses attribution delivery. Review the local Core/Lambda/JS/XL metadata checkpoints, merge and deploy only after that decision, then verify original caller and source name in real OpenAI logs.
Match package and tag. PY v1.20.5 was published from bd5f88fb. The tagged workflow passed version validation, package/container checks, and publication to CodeArtifact and PyPI.
Freeze and deploy the coordinated dev candidate. The latest observed PY Deploy Dev run succeeded on October 10 from 1d5e05a2, before Fix missing not_columns entries in write filters #1228/Add detailed part-code match evidence to search result scoring #1229; verified from GitHub on October 11. Promote the final main candidate and verify the recipe Lambda actually uses it before final acceptance. Record exact main commits, PY and JS package versions, schema source, Lambda digest, Core digest/task revision, and XL digest. Refresh CI evidence for any later fixes.
Complete manual acceptance below on that candidate and record outcomes, including any known limitations.
Verify production Notes configuration before the XL rollout. Confirm the production Gateway/Core /notes route, runner route, Service User/client configuration, secret references, fixed recipe and dedicated key without exposing secret values. Also verify XL's production WRANGLES_NOTES_API_URL=https://api.wrangle.works/notes; missing or invalid runtime configuration prevents provider initialization. Development success is not production provisioning evidence.
Draft XL 2.15.0 and API-Core 1.21.2.XL draft covers the net v2.14.3...0c149e4b changes; Core draft covers v1.21.1...7b62e633. Both use the agreed customer-facing sections, omit empty sections, and omit table development, reverted catalog work, and unpublished metadata. Tag, main target, exact body, and unpublished status were re-read after creation.
Reconcile Lambda release records. Its earlier 1.20.5 draft used an older comparison baseline; refresh against the completed production deployment and compare from 1.20.4.1. This is separate from the completed XL/Core draft preparation.
Record promotion and rollback artifacts. PY publication dispatches the production recipe-Lambda workflow. XL's tag workflow resolves the current latest image; use and verify an immutable source matching the agreed release scope, including the retained XL helpers. Image promotion and ECS production rollout are distinct.
Final companion release review and approval. PY publication was performed by Eric. Recheck XL/Core scope, draft text, selected images, production configuration, and rollout order before their publication/deployment. The requested XL/Core draft edits do not authorize publishing or deploying them.
Manual acceptance checklist
Run with small synthetic data first. Record expected/actual results, date, environment, and artifact versions in comments.
Classic product-search scoring:Add detailed part-code match evidence to search result scoring #1229 is merged. On the final deployed candidate, confirm case-insensitive exact matches, stripped-code equality, MPN-first reduction, cross-source Code deduplication, and pre-reduction counts with the PREA recipe. Confirm the existing one/two-column output mapping and score/filter behavior; record the exact package/source commit.
Extraction reasoning and models (PY and XL recipe): run omitted reasoning, flat none, nested {effort: none}, then an explicit low override; confirm Luna and effective effort in provider logs. Check both inline schemas and a saved model; saved settings must retain their documented precedence.
Standalone XL Extract-AI: exercise one-column and multi-column selections; columns, JSON, and delimited outputs; blanks/nulls; schema/instructions; save → reopen → run. Confirm the recipe route and no legacy fallback.
Spreadsheet recipe integration (desktop and web Excel): five rows with batch size two (2/2/1), filtered selection, an unchanged input column, a column that changes only in a later batch, dynamic columns, mixed columns/sheet writes, missing/null values and row counts, and no internal-memory columns. Repeat using Production versus an explicitly loaded historical Editor version.
All Notes actions: recipe notes, wrangle notes, and both version-comparison entry points (NotesDialog and TagsDialog); preview/edit/save/reopen and an ordinary authorized user. Confirm safe error handling and absence of client-side provider keys. Verify attribution only after the metadata changes are deployed.
New PY operations: a representative ai.choose/ai.score/ai.true_false/ai.answers case including row templates and for_each; AI Mode search followed by extraction; tolerant parse input; correct and wrong lookup model variants.
Regression examples: Gemini retrieval using a full-row prompt field, explicit thinking and a per-URL timeout; split.dictionary.default with invalid/null input; a defaulted custom-function argument; a matrix child error surfaced to the caller.
Runtime limits and errors: a representative extraction batch plus one controlled invalid-model/provider failure. Confirm useful errors and acceptable latency. Do not treat the still-open bounded-concurrency redesign #1209 as completed.
Assessment evidence
Source checks below were refreshed October 11 where noted. Runtime/deployment observations remain the October 10 snapshot unless explicitly updated.
Repository
Assessed main
Evidence / limitation
PY
cea9085a (October 11)
Compared with published v1.20.4.1: 21 main-only commits, 3 release-only commits, 111 net changed files. #1226 remains included; #1228/#1229 are newly merged. Main CI completed successfully; verified October 11. The older dev deployment is not evidence that these new merges are deployed.
XL
0c149e4b
Dev workflow passed; Notes and spreadsheet fixes included. Existing table helpers are retained by the October 11 decision; pending feature-completion PRs remain deferred.
JS
b0886e2
XL selects published 1.42.0. Older public extraction method deliberately retained for deferred Web cleanup.
Lambda-Recipes
66f29a9
Dev deployment passed; AWS reports Active/Successful, image dev-1.20.5rc1, digest sha256:a3b8c4d3dd3036f4cdb4932e1770c6cfe994f749e24bbd06762a06c3a375f6ac.
The focused local model-config rerun was interrupted at Eric's pause request; it is not a new completed-test result. Earlier attempted execution failed because the agent's temporary parent directory was missing, not because of product behavior. The generation differences above were reproduced with synthetic input and mocked provider calls.
Core dev was returned to production SSO/database during the Notes repair; do not assume isolated customer data merely because the route says dev. Keep live tests limited to the agreed test data.
Restoration must use current main and focused PRs; the follow-up issues do not authorize restoring deferred code during this release.
Continue to hold PY #1203/#1206, #1199, #1185, #1179/#1181, #1180, #1169, and broad model refactor #1018 outside this release. Preserve the earlier separate empty-Functions override follow-up under #943. Keep Core row/revision authoring wrangleworks/API-Core#174, catalog follow-ups wrangleworks/API-Core#171 / wrangleworks/API-Core#173, Git shadow export wrangleworks/API-Core#132, async recipes wrangleworks/API-Core#108, and incomplete dev-routing work (wrangleworks/API-Core#164, wrangleworks/WranglesJS#119, wrangleworks/WranglesXL#1253) separate. Reassess statuses when those workstreams resume rather than treating this list as their current completion state.
Decision log
October 11, production Notes configuration audit: Read-only AWS checks confirmed production Core is still API-Core:22 / image 1.21.1, with none of the six required NOTES_* / ENVIRONMENT settings and no KEYCLOAK_USER_ID or KEYCLOAK_USER_PASSWORD injection. The working dev task is api-core-dev:24; its Notes Service User subject is ec9e1004-82fb-4b33-97b9-00236d839867. Production XL is WranglesXL:15 / image 2.14.3, with no WRANGLES_NOTES_API_URL. The public api.wrangle.works domain maps to API Gateway HTTP API clbqu0wyx6, $default stage, which has neither POST /notes nor OPTIONS /notes and no matching catch-all. Existing Core integration is h9kznh1; existing Core JWT authorizer is a5lex8. Provision these route/configuration prerequisites with the Core/XL production rollout; image publication alone does not add them. No infrastructure changes or secret-value reads were performed.
October 11, companion drafts: Eric published PY 1.20.5 and requested unpublished XL 2.15.0 and Core 1.21.2 drafts. Created and re-read both drafts against current main and their latest published baselines. JS 1.42.0 is already published and its tagged publish workflow passed; XL's dependency and lockfile select it. No additional JS release was created.
October 11, notebook deferral: Eric requested a separate issue to update the extraction recipe notebook after release. Created PY Update extract.ai recipe notebook after PY 1.20.5 release #1231 and removed notebook publication from release/Luna acceptance gates. Current PY main cea9085a CI is successful; the 1.20.5 package-version alignment, final-candidate live acceptance, and production configuration/artifact verification remain open.
October 11, accepted table scope: Leave XL as is. Retain the merged table helpers; keep PY Add named Excel table read and write connector #1222 and XL #1291 deferred. Omit table development from customer-facing release notes. No table rollback is required.
October 11, table-scope question: Eric asked whether already-merged XL table code can remain if unused. Refreshed XL main is still 0c149e4b; RunRecipe.tsx invokes the helpers, but no table reads means the snapshot helper returns before Excel.run, and no excel.table.write response means the writer returns before Excel.run. An offline probe verified eight non-table recipe shapes without any Excel global; output routing requires the exact excel.table.write marker. All 52 tests passed across recipeTables.test.ts, runRecipeMetadata.test.tsx, and recipeColumnsWrite.test.ts; the tested files are identical to current main. These are offline checks, not live Excel evidence. Recommendation: leave the merged helpers dormant, keep PY Add named Excel table read and write connector #1222 and XL #1291 deferred, do not advertise table support, and smoke-test ordinary columns/sheet behavior in Excel before release. Eric subsequently agreed to leave XL as is and omit table development from release notes. This replaces the earlier requirement to remove the merged XL helpers.
October 10: Use Core/Lambda/PY for Notes with one dedicated key; defer Web/legacy JS cleanup; roll back Core catalog dependencies.
October 10: Keep customer-facing changes in the draft release. Move planning, exclusions, TODOs, decisions, and evidence into this issue. Track restoration explicitly.
October 10: Include the additive classic search-result matching diagnostics from PY #1229 in the intended PY 1.20.5 scope. Preserve the original branch, exclude unrelated configuration history, and require merge/CI/review before treating the feature as included in the frozen package or customer-facing notes.
Original release-planning text moved from the draft (historical October 9 baseline; superseded by the checklist above)
WranglesPY 1.20.5 brings structured AI answers, AI Mode search, tolerant value parsing, explicit lookup operations, improved saved-model authoring, and coordinated spreadsheet recipe improvements.
Draft preparation status: not ready to publish. This draft records the assessed candidate and release gates as of October 9, 2026 (America/Chicago). No release tag or deployment has been created. Current main is 4ddeceb9ce30a0fca25c2b9aa03371a87103ce3a; refresh this assessment after the release fixes merge.
Intended scope
Exclude all new excel.table development.
Defer the comprehensive third-party JSON Schema/compiler/caller configuration design #1206 and packaged AI catalog draft #1203, including dependent XL catalog editors.
Carry the published universal extraction reasoning none fix onto current main before release. Track the remaining GPT-4-to-Luna cleanup separately in #1225.
New additions in the current candidate
Structured ai.choose, ai.score, ai.true_false, and ai.answers operations through Typesafe, with per-row question templates and for_each expansion. #1202, #1205
search.ai_mode returns Markdown search answers and supports downstream structured extraction; follow-up cleanup preserves useful Google product references. #1188, #1197
convert.parse parses JSON-like cell values, including supported Python/YAML-style structures and quoted values. #1187
Explicit lookup.key and lookup.semantic entry points give each lookup variant its own documented contract. #1198
grid.selected_data / excel.selected_data read the calling selection, and excel.columns separates columns output from excel.sheet. These changes require the coordinated JS/XL/Lambda integration below; they do not include excel.table. #1221
Improvements and fixes
Saved Extract-AI authoring supports the expanded schema fields and General Instructions compatibility. #1184
The earlier AI configuration foundation centralizes provider/model choices and caller defaults, selects gpt-6-luna for extraction, and preserves explicit settings and version-1 configuration support. Universal reasoning behavior still needs the release fix described below.
URL retrieval prompts can reference columns from the full input row. Gemini retrieval now handles temperature and empty responses more clearly and exposes thinking controls and per-URL deadlines; the current configured retrieval default is Gemini 3.5 Flash. #1208, #1212, #1216
Custom functions bind positional inputs correctly with defaulted parameters, and matrix execution propagates failures instead of swallowing them. #1166, #1165
split.dictionary applies explicit defaults to invalid input cells and null-valued keys while preserving valid non-null values and isolating mutable defaults. #1224
Python 3.14 compatibility and CI coverage were added. Local test-selection drift is now checked in CI, and live search assertions treat requested result counts as limits. #1191, #1159, #1214
Compatibility to communicate
The current candidate removes the public wrangles.openai.chatGPT wrapper; callers must use wrangles.extract.ai. Internal legacy Chat Completions transport remains supported.
Missing/empty expected selected-data operands in composed reads now fail clearly. Existing input syntax and generic dataframe behavior remain supported within the documented compatibility contract.
Recipes supplying split.dictionary.default intentionally get fallback behavior for invalid/null values.
Do not claim new universal-reasoning behavior until the main-branch repair is merged. Explicit saved/caller/replacement-config settings must retain precedence, and provider incompatibility must remain visible.
Repository alignment
Counts below are from verified remote refs; file counts use the direct release-tag-to-main diff, including removal of release-only hotfix content.
Repository
Published baseline
Assessed main
Change boundary
WranglesPY
v1.20.4.1
4ddeceb9
18 main-only commits, 3 release-only commits, 106 net changed files
WranglesXL
v2.14.3
991e3999
24 commits, 19 files; includes excluded table work
API-Core
v1.21.1
198a79e6
42 commits, 51 files
WranglesJS
v1.41.0
01a7a7dc
Main equals the published tag; spreadsheet helpers are already published
Lambda-Recipes
v1.20.4.1
88774496
3 commits, 3 net changed files
Release gates
Restore the published reasoning fix on main. The release tag contains ae3f594a, f6058464, and 28a92de0, which main lacks. Current main still gates reasoning by capabilities/name and can silently omit it for an unlisted model. Port the behavior and saved-definition regression coverage under #1217; do not merge the old release branch blindly. Review implicit Sol/generation low defaults separately from explicit overrides.
Complete the tactical model-default cleanup.#1225 identifies the JS gpt-4.1-mini default used by three XL note generators. They call the separate legacy extract-ai Lambda, so updating the recipe Lambda alone is insufficient. Validate that route with Luna, publish the JS change, and update XL's lockfile.
Remove already-merged table work from the XL release candidate. PY #1222 and XL #1291 are open and can remain excluded. XL #1288, #1289, and #1290 already merged. Prepare a focused exclusion/revert PR to main, preserving spreadsheet PR #1279 and UI improvements #1272–#1276. The pre-table checkpoint is 56e93aa3; merely leaving the open table PRs unmerged does not satisfy the exclusion.
Finish spreadsheet integration. PY Replace ignored input read with selected_data connector, and add Excel columns write mode #1221, JS #121, and XL #1279 are merged; JS 1.41.0 is published and pinned by XL. Lambda #64 fixes invalid JSON NaN/null responses and is merged. A separate local Lambda commit bd888236 on codex/keep-memory-out-output filters internal memory out of spreadsheet output; it has no open PR and is not on main. Review it with regression coverage before deciding the final Lambda candidate.
Verify API-Core deployment prerequisites. Database/HTTP lifecycle #160 and atomic model creation/failure recovery #168 are merged. All 12 review threads on Column Name Error on Chat Extract Wrangle #160 are resolved; current main passes unit and PostgreSQL/Gunicorn checks. Catalog binding changes Improve stack trace on errors #162/Missing Aliases #165 also merged. Confirm production catalog tables/columns and pool settings before rollout; the inspected diff does not contain a production database migration.
Match version and tag. Main still declares 1.20.4 in setup.py. Bump to 1.20.5, inspect built metadata, and rerun the release gates. The tagged workflow explicitly rejects a mismatch.
Deploy and test one coordinated development candidate. Freeze exact main commits, PY package, JS package, schema, and image digests. Verify selected-data 2/2/1 batching, filtered selection, unchanged/late columns, mixed sheet/columns output, F01/F02 null/row-count cases, internal memory, saved/inline extraction, and all note generators. Run desktop/web Excel checks where behavior depends on Office.
Pin production artifacts and record rollback. Publish PY only after the gates pass; its workflow dispatches Lambda-Recipes production deployment. XL/Core production workflows promote images and require a separate ECS rollout. XL's tag-triggered promotion uses the current latest image, not a build of the tag: use a verified immutable SHA/digest and confirm it excludes table work.
Current evidence and limits
PY main CI passes across its configured Windows/Linux Python 3.11/3.13/3.14 tests, pip installs, schema, and container checks. The separate Codespaces prebuild failed during manifest/template generation; that is not the product CI result.
Read-only AWS metadata: production recipe Lambda is image 1.20.4.1; development is dev-1.20.4rc15, updated before the latest PY/Lambda merges. Production XL is 2.14.3; Core is 1.21.1. Functions report Active/Successful state, and ECS services report completed rollouts with expected running counts; this assessment did not run live Excel or provider smoke tests.
The most recent inspected Lambda dev workflow uses source 6f772a9b, preceding No Error: wrangle in read section of recipe #64. Redeploy the reviewed Lambda source with the new PY package; a new package alone does not pick up an unmerged/local Lambda fix.
Local checkouts remain on their existing workstream branches. They were clean at initial inspection; a later check showed an unrelated Lambda-Recipes README edit, which was left untouched. This assessment used freshly fetched origin/main and exact tags, without switching branches or changing product code.
Other incomplete work held out
Keep PY catalog/compiler #1203/#1206, runtime manifest #1199, CLI #1185, attachments #1179/#1181, mutable recipe variables #1180, NOOA #1169, and the older broad model refactor #1018 out of this release. The bounded-concurrency redesign #1209 remains open; smoke-test existing batch/deadline behavior rather than treating it as completed.
Keep API-Core row/revision authoring #174, catalog follow-ups #171/#173, Git shadow export #132, and async recipes #108 separate. Shared dev-routing work (API-Core #164, JS #119, XL #1253) is also incomplete; select and verify test endpoints explicitly. None of these open activities is assumed complete because another repository merged.
The existing Lambda v1.20.5 draft also needs its notes reconciled from v1.20.4.1; it currently compares from v1.20.2 and repeats already-released changes.
October 10, 2026 — Part-code diagnostics preparation
PY #1229 is pushed and open as a Draft, targeting main for PY 1.20.5. Delivery owner: ebhills. Head: 3ad0680319cba09c5e16e77e3473a6c4b962afd2; base: 1d5e05a2c77d0c1fa2c9aa3fd7d49640a429108d.
Recovered only the eight matching commits from the old code-match-details-pra branch; unrelated configuration history was excluded. The new branch has six scoped changed files, zero commits behind main, and no merge conflicts (local merge-tree and GitHub mergeable: true). The original branch and unrelated Akeneo work are preserved.
Final review corrected multiword overlaps such as M10 within M100 and sentence-punctuation evidence selection. Output remains additive: reduced MPN-first part_code_matches and pre-reduction part_code_match_count, nested in each scored result.
Verified locally on the final head:
Focused scoring tests: 33 passed.
Full credential-free Windows / Python 3.13.1 suite via scripts/test-local.ps1: 3,019 passed, 6 skipped, 139 deselected.
Local test-config drift check and recipe schema generation/Draft7 validation passed.
Ten synthetic cases compared with main: legacy scores, filtering, ordering, and metadata unchanged after excluding the new fields.
Whitespace and changed-file scope checks passed.
GitHub Actions CI is in progress. No live provider/service acceptance, merge, package publication, deployment, or release has been performed. The release checklist retains merge and candidate-package acceptance as unchecked gates; customer-facing release notes remain unchanged.
API-Core 1.21.2 is published and its production deployment completed successfully.
Browser preflight passed, and an unauthenticated Notes request was correctly rejected.
Authenticated tests of recipe summaries, recipe-version comparisons, and wrangle summaries each returned one nonempty generated note using small synthetic inputs.
These are production API/provider results. Live Excel preview, editing, saving, and reopening still need manual acceptance.
XL 2.15.0 remains a draft. Its production Notes setting and rollout are the remaining companion-release steps.
This comment records public release status and functional test results only.
Purpose
Coordinate PY 1.20.5 and the companion XL, API-Core, WranglesJS, and Lambda-Recipes changes here. PY 1.20.5 is published. Its release notes contain customer-facing changes only. Companion drafts: XL 2.15.0 and API-Core 1.21.2, both unpublished and targeting main.
Maintain this issue body as the current scope and checklist. Add dated comments for decisions, test results, and deployment evidence; reflect consequential decisions back into the checklist. Check an item only when its stated outcome is verified. Local tests, CI, deployment, and live acceptance are separate evidence.
Agreed scope and decisions
reasoning: noneand nestedreasoning: {effort: none}remain equivalent. Explicit caller/saved/configuration choices retain precedence; unsupported provider settings remain visible.gpt-6-luna, including replacement of GPT-5.6-Luna defaults. Track narrow cleanup in #1225. Do not rewrite saved customer definitions or embedding/index contracts./notes→ Lambda/PY Responses, using the fixed Notes Writer recipe and one dedicated server-sideNOTES_OPENAI_API_KEY. Require the caller'sextract-aientitlement. The earlier plan to upgrade the legacy Extract-AI service is superseded.extract.aiclient for now; track removal in JS #124 and Web migration in Web #125. Do not archive the extraction service without a separate remaining-caller audit.wrangles_catalogormodels.catalog_id. Restore later with a reviewed schema and caller rollout.responses-metadatawork is checkpointed locally across Core/Lambda/JS/XL. Publication is paused while release planning is reconciled. Do not describe it as shipped.cea9085a. Each scored result gains reducedpart_code_matchesand a pre-reductionpart_code_match_count; scores, filtering, ordering, and recipe output mapping remain unchanged. The documentation follow-up PY #1230 is merged at8097d8dd.generate.aiCustomer-visible PY candidate
Structured Typesafe answers and row/candidate templates; AI Mode search; tolerant
convert.parse; explicit key/semantic lookup operations; saved Extract-AI schema/instruction authoring; Luna defaults and flat/nested reasoning; selected-data reads and columns/sheet output; Gemini retrieval prompts/thinking/deadlines; custom-function binding, matrix error propagation, andsplit.dictionaryfallback fixes; Python 3.14 support and test-selection checks. Also include #1229's part-code match evidence and #1228's missingnot_columnsfix. The release notes describe these under the same five sections as 1.20.3.Release checklist
Completed source and development prerequisites
Publish PY 1.20.5. Eric published the release; PY Deploy Prod and its downstream Lambda Deploy Prod completed successfully on October 11. This is workflow evidence; a live production smoke test remains separate.
Resolve XL table scope. Eric agreed on October 11 to leave the already-merged XL table helpers in place. No table rollback is required; keep PY Add named Excel table read and write connector #1222 and XL #1291 deferred and omit table development from customer-facing release notes. The ordinary columns/sheet live acceptance check remains open.
Merge PY #1229 at
cea9085aand PY #1228 at77968950. Part-code evidence and missingnot_columnshandling are on main; final-candidate CI/deployment and the small documentation follow-up remain separate.Move release planning into this issue, rewrite the draft using the customer-facing 1.20.3 sections, and create the catalog/table restoration issues. Install the reusable Codex
release-notes-guidanceskill for future drafts.Retain Centralize AI model configuration and integrate WranglesPY callers #1200 and restore extraction reasoning defaults/flat YAML on main through Preserve extraction reasoning defaults and support flat YAML syntax #1226.
Merge spreadsheet response fixes: Lambda #64, Lambda #65, and XL #1292. Internal memory is filtered; XL owns unchanged-column suppression.
Wire Notes through Core #176, JS #123, and XL #1293, using published JS 1.42.0.
Remove Core catalog dependencies with wrangleworks/API-Core#178.
Merge Core #179 and persist Service User credential references in the dev task configuration.
Deploy PY main to the dev recipe Lambda. Observed package/image is
dev-1.20.5rc1; user confirmed a successful Notes call showing Luna/none. This is one successful path, not complete XL acceptance.Remaining release work
8097d8ddbefore the PY release.ed69a569in PY #1231. It is not a PY 1.20.5 release gate.none, nested{effort: none}, and an explicit override. Metadata remains separate.generate.ai. Explicitly excluded from release readiness by Eric on October 11; no generation fix is required for PY 1.20.5.v1.20.5was published frombd5f88fb. The tagged workflow passed version validation, package/container checks, and publication to CodeArtifact and PyPI.1d5e05a2, before Fix missingnot_columnsentries in write filters #1228/Add detailed part-code match evidence to search result scoring #1229; verified from GitHub on October 11. Promote the final main candidate and verify the recipe Lambda actually uses it before final acceptance. Record exact main commits, PY and JS package versions, schema source, Lambda digest, Core digest/task revision, and XL digest. Refresh CI evidence for any later fixes./notesroute, runner route, Service User/client configuration, secret references, fixed recipe and dedicated key without exposing secret values. Also verify XL's productionWRANGLES_NOTES_API_URL=https://api.wrangle.works/notes; missing or invalid runtime configuration prevents provider initialization. Development success is not production provisioning evidence.v2.14.3...0c149e4bchanges; Core draft coversv1.21.1...7b62e633. Both use the agreed customer-facing sections, omit empty sections, and omit table development, reverted catalog work, and unpublished metadata. Tag, main target, exact body, and unpublished status were re-read after creation.Manual acceptance checklist
Run with small synthetic data first. Record expected/actual results, date, environment, and artifact versions in comments.
none, nested{effort: none}, then an explicitlowoverride; confirm Luna and effective effort in provider logs. Check both inline schemas and a saved model; saved settings must retain their documented precedence.ai.choose/ai.score/ai.true_false/ai.answerscase including row templates andfor_each; AI Mode search followed by extraction; tolerant parse input; correct and wrong lookup model variants.split.dictionary.defaultwith invalid/null input; a defaulted custom-function argument; a matrix child error surfaced to the caller.Assessment evidence
Source checks below were refreshed October 11 where noted. Runtime/deployment observations remain the October 10 snapshot unless explicitly updated.
cea9085a(October 11)v1.20.4.1: 21 main-only commits, 3 release-only commits, 111 net changed files. #1226 remains included; #1228/#1229 are newly merged. Main CI completed successfully; verified October 11. The older dev deployment is not evidence that these new merges are deployed.0c149e4bb0886e266f29a9dev-1.20.5rc1, digestsha256:a3b8c4d3dd3036f4cdb4932e1770c6cfe994f749e24bbd06762a06c3a375f6ac.7b62e63api-core-dev:24, rollout completed, 1/1 tasks.The focused local model-config rerun was interrupted at Eric's pause request; it is not a new completed-test result. Earlier attempted execution failed because the agent's temporary parent directory was missing, not because of product behavior. The generation differences above were reproduced with synthetic input and mocked provider calls.
Core dev was returned to production SSO/database during the Notes repair; do not assume isolated customer data merely because the route says dev. Keep live tests limited to the agreed test data.
Deferred work and restoration tracking
PY #1231 — Update extract.ai recipe notebook after PY 1.20.5 release: recover/review the documentation-only checkpoint after release. It is not a release blocker.
Core #180 — Restore deferred catalog integration after PY 1.20.5: original wrangleworks/API-Core#162 / wrangleworks/API-Core#165 implementation, rollback wrangleworks/API-Core#178, schema and caller prerequisites, and regression/live acceptance.
XL #1295 — Resume excel.table development after the PY 1.20.5 release: retain merged helpers and resume the deferred feature completion after this release; no rollback/recovery PR is required. Coordinate with PY #1220, PY Add named Excel table read and write connector #1222, and wrangleworks/WranglesXL#1291.
Restoration must use current main and focused PRs; the follow-up issues do not authorize restoring deferred code during this release.
Continue to hold PY #1203/#1206, #1199, #1185, #1179/#1181, #1180, #1169, and broad model refactor #1018 outside this release. Preserve the earlier separate empty-Functions override follow-up under #943. Keep Core row/revision authoring wrangleworks/API-Core#174, catalog follow-ups wrangleworks/API-Core#171 / wrangleworks/API-Core#173, Git shadow export wrangleworks/API-Core#132, async recipes wrangleworks/API-Core#108, and incomplete dev-routing work (wrangleworks/API-Core#164, wrangleworks/WranglesJS#119, wrangleworks/WranglesXL#1253) separate. Reassess statuses when those workstreams resume rather than treating this list as their current completion state.
Decision log
October 11, production Notes configuration audit: Read-only AWS checks confirmed production Core is still
API-Core:22/ image1.21.1, with none of the six requiredNOTES_*/ENVIRONMENTsettings and noKEYCLOAK_USER_IDorKEYCLOAK_USER_PASSWORDinjection. The working dev task isapi-core-dev:24; its Notes Service User subject isec9e1004-82fb-4b33-97b9-00236d839867. Production XL isWranglesXL:15/ image2.14.3, with noWRANGLES_NOTES_API_URL. The publicapi.wrangle.worksdomain maps to API Gateway HTTP APIclbqu0wyx6,$defaultstage, which has neitherPOST /notesnorOPTIONS /notesand no matching catch-all. Existing Core integration ish9kznh1; existing Core JWT authorizer isa5lex8. Provision these route/configuration prerequisites with the Core/XL production rollout; image publication alone does not add them. No infrastructure changes or secret-value reads were performed.October 11, companion drafts: Eric published PY 1.20.5 and requested unpublished XL 2.15.0 and Core 1.21.2 drafts. Created and re-read both drafts against current main and their latest published baselines. JS 1.42.0 is already published and its tagged publish workflow passed; XL's dependency and lockfile select it. No additional JS release was created.
October 11, notebook deferral: Eric requested a separate issue to update the extraction recipe notebook after release. Created PY Update extract.ai recipe notebook after PY 1.20.5 release #1231 and removed notebook publication from release/Luna acceptance gates. Current PY main
cea9085aCI is successful; the 1.20.5 package-version alignment, final-candidate live acceptance, and production configuration/artifact verification remain open.October 11, accepted table scope: Leave XL as is. Retain the merged table helpers; keep PY Add named Excel table read and write connector #1222 and XL #1291 deferred. Omit table development from customer-facing release notes. No table rollback is required.
October 11, table-scope question: Eric asked whether already-merged XL table code can remain if unused. Refreshed XL main is still
0c149e4b;RunRecipe.tsxinvokes the helpers, but no table reads means the snapshot helper returns beforeExcel.run, and noexcel.table.writeresponse means the writer returns beforeExcel.run. An offline probe verified eight non-table recipe shapes without any Excel global; output routing requires the exactexcel.table.writemarker. All 52 tests passed acrossrecipeTables.test.ts,runRecipeMetadata.test.tsx, andrecipeColumnsWrite.test.ts; the tested files are identical to current main. These are offline checks, not live Excel evidence. Recommendation: leave the merged helpers dormant, keep PY Add named Excel table read and write connector #1222 and XL #1291 deferred, do not advertise table support, and smoke-test ordinary columns/sheet behavior in Excel before release. Eric subsequently agreed to leave XL as is and omit table development from release notes. This replaces the earlier requirement to remove the merged XL helpers.October 11: Add detailed part-code match evidence to search result scoring #1229 is merged; one small documentation follow-up remains in progress. Ignore
generate.aifor this release. Replace remaining GPT-4 and GPT-5.6-Luna defaults with gpt-6-luna without the API configuration redesign #1225 now tracks final runtime acceptance; notebook cleanup was subsequently deferred to Update extract.ai recipe notebook after PY 1.20.5 release #1231 after release.October 9: Keep Centralize AI model configuration and integrate WranglesPY callers #1200, defer the larger AI configuration redesign, exclude new Excel tables, preserve simple reasoning YAML, and target Luna for active first-party defaults.
October 10: Use Core/Lambda/PY for Notes with one dedicated key; defer Web/legacy JS cleanup; roll back Core catalog dependencies.
October 10: Keep customer-facing changes in the draft release. Move planning, exclusions, TODOs, decisions, and evidence into this issue. Track restoration explicitly.
October 10: Include the additive classic search-result matching diagnostics from PY #1229 in the intended PY 1.20.5 scope. Preserve the original branch, exclude unrelated configuration history, and require merge/CI/review before treating the feature as included in the frozen package or customer-facing notes.
Original release-planning text moved from the draft (historical October 9 baseline; superseded by the checklist above)
WranglesPY 1.20.5 brings structured AI answers, AI Mode search, tolerant value parsing, explicit lookup operations, improved saved-model authoring, and coordinated spreadsheet recipe improvements.
Intended scope
excel.tabledevelopment.nonefix onto current main before release. Track the remaining GPT-4-to-Luna cleanup separately in #1225.New additions in the current candidate
ai.choose,ai.score,ai.true_false, andai.answersoperations through Typesafe, with per-row question templates andfor_eachexpansion. #1202, #1205search.ai_modereturns Markdown search answers and supports downstream structured extraction; follow-up cleanup preserves useful Google product references. #1188, #1197convert.parseparses JSON-like cell values, including supported Python/YAML-style structures and quoted values. #1187lookup.keyandlookup.semanticentry points give each lookup variant its own documented contract. #1198grid.selected_data/excel.selected_dataread the calling selection, andexcel.columnsseparates columns output fromexcel.sheet. These changes require the coordinated JS/XL/Lambda integration below; they do not includeexcel.table. #1221Improvements and fixes
gpt-6-lunafor extraction, and preserves explicit settings and version-1 configuration support. Universal reasoning behavior still needs the release fix described below.split.dictionaryapplies explicit defaults to invalid input cells and null-valued keys while preserving valid non-null values and isolating mutable defaults. #1224Compatibility to communicate
wrangles.openai.chatGPTwrapper; callers must usewrangles.extract.ai. Internal legacy Chat Completions transport remains supported.inputsyntax and genericdataframebehavior remain supported within the documented compatibility contract.split.dictionary.defaultintentionally get fallback behavior for invalid/null values.Repository alignment
Counts below are from verified remote refs; file counts use the direct release-tag-to-main diff, including removal of release-only hotfix content.
v1.20.4.14ddeceb9v2.14.3991e3999v1.21.1198a79e6v1.41.001a7a7dcv1.20.4.188774496Release gates
ae3f594a,f6058464, and28a92de0, which main lacks. Current main still gates reasoning by capabilities/name and can silently omit it for an unlisted model. Port the behavior and saved-definition regression coverage under #1217; do not merge the old release branch blindly. Review implicit Sol/generationlowdefaults separately from explicit overrides.gpt-4.1-minidefault used by three XL note generators. They call the separate legacyextract-aiLambda, so updating the recipe Lambda alone is insufficient. Validate that route with Luna, publish the JS change, and update XL's lockfile.56e93aa3; merely leaving the open table PRs unmerged does not satisfy the exclusion.inputread withselected_dataconnector, and add Excelcolumnswrite mode #1221, JS #121, and XL #1279 are merged; JS 1.41.0 is published and pinned by XL. Lambda #64 fixes invalid JSON NaN/null responses and is merged. A separate local Lambda commitbd888236oncodex/keep-memory-out-outputfilters internal memory out of spreadsheet output; it has no open PR and is not on main. Review it with regression coverage before deciding the final Lambda candidate.1.20.4insetup.py. Bump to1.20.5, inspect built metadata, and rerun the release gates. The tagged workflow explicitly rejects a mismatch.latestimage, not a build of the tag: use a verified immutable SHA/digest and confirm it excludes table work.Current evidence and limits
1.20.4.1; development isdev-1.20.4rc15, updated before the latest PY/Lambda merges. Production XL is2.14.3; Core is1.21.1. Functions report Active/Successful state, and ECS services report completed rollouts with expected running counts; this assessment did not run live Excel or provider smoke tests.6f772a9b, preceding No Error: wrangle in read section of recipe #64. Redeploy the reviewed Lambda source with the new PY package; a new package alone does not pick up an unmerged/local Lambda fix.origin/mainand exact tags, without switching branches or changing product code.Other incomplete work held out
Keep PY catalog/compiler #1203/#1206, runtime manifest #1199, CLI #1185, attachments #1179/#1181, mutable recipe variables #1180, NOOA #1169, and the older broad model refactor #1018 out of this release. The bounded-concurrency redesign #1209 remains open; smoke-test existing batch/deadline behavior rather than treating it as completed.
Keep API-Core row/revision authoring #174, catalog follow-ups #171/#173, Git shadow export #132, and async recipes #108 separate. Shared dev-routing work (API-Core #164, JS #119, XL #1253) is also incomplete; select and verify test endpoints explicitly. None of these open activities is assumed complete because another repository merged.
The existing Lambda
v1.20.5draft also needs its notes reconciled fromv1.20.4.1; it currently compares fromv1.20.2and repeats already-released changes.Full Changelog: v1.20.4.1...v1.20.5