<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex Merced</title>
    <description>The latest articles on DEV Community by Alex Merced (@alexmercedcoder).</description>
    <link>https://dev.to/alexmercedcoder</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F288069%2Fe752e411-5aa7-4ea9-b89b-5f670f94a8ca.png</url>
      <title>DEV Community: Alex Merced</title>
      <link>https://dev.to/alexmercedcoder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexmercedcoder"/>
    <language>en</language>
    <item>
      <title>Apache Data Lakehouse Weekly: October 6-14, 2026</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 14 Oct 2026 17:08:21 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-october-6-14-2026-48b2</link>
      <guid>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-october-6-14-2026-48b2</guid>
      <description>&lt;p&gt;Half the lakehouse community spent this week in Glasgow at Community Over Code, and the mailing lists show it. Syncs got cancelled, board reports went out late, and several threads open with a nod to a hallway conversation from Lakehouse Day. The work did not slow down. Apache Iceberg ran three overlapping v4 spec votes at once, Apache Parquet put a concrete versioning proposal on the table, Apache DataFusion Comet asked to become its own top-level project, and Apache Ossie (incubating) argued about where an MCP server belongs.&lt;/p&gt;

&lt;p&gt;The thread that ties the week together is precision. Each community is replacing a loose rule with an exact one. Iceberg is pinning down snapshot timestamps and statistics guarantees. Parquet is fixing the meaning of a statistic that never had a firm definition. Polaris is redrawing the line between catalog configuration and server storage access. Ossie is deciding which parts of a semantic model must be portable before anyone can query one. These are the unglamorous rules that let engines, catalogs, and AI agents trust the same data without asking a human first.&lt;/p&gt;

&lt;p&gt;This issue covers Apache Iceberg, Apache Polaris, Apache Arrow, Apache Parquet, Apache DataFusion, and Apache Ossie (incubating). All thread links point to the official archives at lists.apache.org.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Iceberg
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Three v4 votes in one week
&lt;/h3&gt;

&lt;p&gt;The Iceberg v4 table spec moved further this week than in any week this fall. Three separate spec votes ran in parallel, and none of them drew a single -1.&lt;/p&gt;

&lt;p&gt;The first to close was Steven Wu's proposal to &lt;a href="https://lists.apache.org/thread/y2fvgh4ojfcss7o76drkgdvdrpb17ccm" rel="noopener noreferrer"&gt;require monotonically increasing snapshot timestamps in v4&lt;/a&gt;. The rule is simple. Every new snapshot on a branch in a v4 table must carry a &lt;code&gt;timestamp-ms&lt;/code&gt; strictly greater than its parent's. Root snapshots stay unconstrained, and v1 through v3 tables keep their current behavior. Steven explained that out-of-order timestamps break time travel today, because a query for "the table as of 3:00 PM" picks the wrong snapshot when clocks drift between writers. The rule also opens the door to a row timestamp metadata column inherited from the snapshot timestamp, which Steven flagged as a separate follow-up change. The vote passed with 9 binding +1s and 11 non-binding +1s. Maninder Parmar added a note worth tracking: he wants the community to consider nanosecond precision (&lt;code&gt;timestamp-ns&lt;/code&gt;) later, so high-throughput tables do not hit collisions at the millisecond level. Xuanwo restated the scope in his +1, confirming that pre-upgrade snapshots stay exempt.&lt;/p&gt;

&lt;p&gt;The second vote is the big one. Amogh Jahagirdar opened a vote to &lt;a href="https://lists.apache.org/thread/qch7jjnwb8pm49lt3h7lqfxj82hlg8ps" rel="noopener noreferrer"&gt;merge the baseline v4 AMT spec PR into the main repo&lt;/a&gt;. AMT is the adaptive metadata tree, the new metadata structure at the center of v4 that changes how Iceberg organizes manifests and commits. Amogh was careful about what the vote means. It is a vote to land a baseline in the repository so other v4 work stops fighting rebases, and it is not a vote to adopt the design as final. Encryption, column file update rules, and dropping the partition tuple all remain open for later iteration. The thread filled with +1s from Steven Wu, Daniel Weeks, Russell Spitzer, Eduard Tudenhöfner, Fokko Driesprong, Gang Wu, Szehon Ho, and Péter Váry, plus a long list of non-binding supporters. Gábor Kaszab volunteered to cover the encryption piece in an immediate follow-up. Contributor 전대홍 said he looks forward to building AMT in iceberg-rust, which tells you the Rust implementation intends to track v4 closely rather than trail it.&lt;/p&gt;

&lt;p&gt;The third vote opened on October 13. Talat Uyarer, writing for the FILE type working group, called a vote to &lt;a href="https://lists.apache.org/thread/7ctclwomk8yqcclzj82z0htlqk2xjf49" rel="noopener noreferrer"&gt;add the File type to the Iceberg v4 spec&lt;/a&gt;. This is a new data type for a range of bytes, stored either inline or as a reference to an external file. Its value semantics follow the FILE logical type in the Parquet spec. A file field carries six fixed, implicit sub-fields: &lt;code&gt;uri&lt;/code&gt;, &lt;code&gt;offset&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;content_type&lt;/code&gt;, &lt;code&gt;checksum&lt;/code&gt;, and &lt;code&gt;inline&lt;/code&gt;. They never appear in the schema and cannot be added, removed, reordered, or promoted. Their field IDs are offsets one through six from the file field's own ID, so adding one file column moves &lt;code&gt;last-column-id&lt;/code&gt; forward by seven.&lt;/p&gt;

&lt;p&gt;The restrictions matter as much as the feature. Equality, ordering, and hashing are undefined for file values. A file column cannot be an identifier field or a source for partition or sort transforms. It must default to null. A struct with the same sub-fields is not interchangeable with a file and cannot be promoted into one. And a &lt;code&gt;uri&lt;/code&gt; makes no promise that the referenced object still exists. Relative URIs resolve against the table location, which keeps tables portable when you move them. Each sub-field gets its own column statistics, and writers should produce stats for &lt;code&gt;uri&lt;/code&gt;, &lt;code&gt;content_type&lt;/code&gt;, and &lt;code&gt;inline&lt;/code&gt;. The format mappings are clean: the FILE logical type in Parquet, a record in Avro, and a struct tagged &lt;code&gt;iceberg.struct-type=FILE&lt;/code&gt; in ORC. By the end of the window the thread had binding +1s from Russell Spitzer, Steven Wu, Daniel Weeks, Gang Wu, and Sung Yun, with no objections. The 72-hour window closes this week.&lt;/p&gt;

&lt;p&gt;Why does a file type matter? Because the lakehouse is absorbing unstructured data. Images, PDFs, audio clips, and model artifacts already sit next to tables in object storage. Today a table points at them with a plain string column and a convention. A typed file column gives engines the offset, size, content type, and checksum they need to read, verify, and govern those bytes with the same metadata machinery Iceberg uses for everything else. For teams building AI pipelines on Iceberg, this is the bridge between "a table of embeddings" and "a table of the documents those embeddings came from."&lt;/p&gt;

&lt;h3&gt;
  
  
  Statistics and vectors
&lt;/h3&gt;

&lt;p&gt;Two design threads moved toward consensus without a vote. Anoop Johnson's &lt;a href="https://lists.apache.org/thread/0r64rnn0t3dtlhj1pb4ckkt2s7yow2cq" rel="noopener noreferrer"&gt;Iceberg v4 stats tightness&lt;/a&gt; discussion settled on a single file-level flag. Hongyue Zhang laid out why bounds stop being tight. Deletion vectors added after a file is written remove rows, so the original min and max bounds no longer describe the live data. Variable-length columns such as strings and binary also carry truncated bounds by design. Steven Wu and Szehon Ho backed the file-level approach, citing Russell Spitzer's analysis that most use cases repair every bound at once and do not need per-column tracking. Anoop summarized the upgrade path. Files inside existing v3 manifests carry no flag, so readers treat their stats as wide. New v4 files carry &lt;code&gt;true&lt;/code&gt; when no deletion vector is attached and &lt;code&gt;false&lt;/code&gt; when one is. This matters for query planning. An engine that knows bounds are tight can answer some aggregate queries from metadata alone and prune more files with confidence.&lt;/p&gt;

&lt;p&gt;On the vector side, Yan Yan &lt;a href="https://lists.apache.org/thread/49bm2d8szbzkvtdog38s1o6zb04cj67o" rel="noopener noreferrer"&gt;extended the Thursday biweekly sync to cover both the File and Vector types&lt;/a&gt; and posted a draft spec PR built on the Parquet community's emerging vector work. The meeting notes set a narrow first scope. Iceberg will start with a one-dimensional numeric vector of fixed length with non-null, finite coordinates, where +0 and -0 both stay valid. The initial element types are int, long, float, and double. Narrower types such as int8 are deferred as possible future Iceberg primitives, though the Parquet representation can still carry them. Distance functions and sparse vectors are out of scope for now and will return with the index design. Formats without native vector support will use a list representation with writer-side enforcement, and the group will explore an Avro vector logical type with the Avro community. ORC support remains open.&lt;/p&gt;

&lt;h3&gt;
  
  
  REST catalog contract
&lt;/h3&gt;

&lt;p&gt;Two REST catalog threads closed out with concrete changes. Rahul Mahadev posted the &lt;a href="https://lists.apache.org/thread/pllz983cvffryzcwskglsr0cyo7p0gxx" rel="noopener noreferrer"&gt;result of the User-Agent vote&lt;/a&gt;: the recommendation for a standard User-Agent format for REST clients passed with 19 +1 votes, 10 of them binding, and no objections. The &lt;a href="https://lists.apache.org/thread/yoqr9zkxysrpb7grcncw5756omcqdmkx" rel="noopener noreferrer"&gt;reopened vote&lt;/a&gt; had collected late +1s from Gang Wu, Zheng Hu, Ryan Blue, Fokko Driesprong, John Zhuge, and Huaxin Gao. Zheng Hu flagged CVE scanning failures on the PR, so watch for that before merge. A shared User-Agent format sounds minor, but it gives catalog operators a reliable way to see which engines and library versions hit their servers, which helps with deprecation planning and incident response.&lt;/p&gt;

&lt;p&gt;The second REST thread resolved a gap in credential vending. Youngrae Kim had asked &lt;a href="https://lists.apache.org/thread/ws89d7doddgqc2j8fc2xt84bchr374t2" rel="noopener noreferrer"&gt;what a server should do when the X-Iceberg-Access-Delegation header cannot be satisfied&lt;/a&gt;. Daniel Weeks suggested adding a &lt;code&gt;none&lt;/code&gt; value, meaning the client does not need delegated access from the catalog. Yufei Gu and Dmitri Bourlatchkov agreed. Dan and Dmitri then argued against adding a sentence that explicitly allows a server to fail the request, since a server can always reject a request anyway. Youngrae opened &lt;a href="https://github.com/apache/iceberg/pull/18480" rel="noopener noreferrer"&gt;spec PR #18480&lt;/a&gt;, which adds &lt;code&gt;none&lt;/code&gt; to the enum with one defining sentence and leaves the rest of the header description alone. Clients that bring their own storage credentials now have a clean way to say so.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smaller threads with real impact
&lt;/h3&gt;

&lt;p&gt;Sandeep Gottimukkala proposed a &lt;a href="https://lists.apache.org/thread/c91ph82tnrlhj8qq9lj8n72b0s7qq5r0" rel="noopener noreferrer"&gt;spec clarification that readers must accept promotable types in any data file&lt;/a&gt;. Type promotion lets a field evolve, for example from DECIMAL(8, 0) to DECIMAL(25, 0), without rewriting old files. The clarification states that a reader must handle the narrower physical type wherever it appears. Russell Spitzer supported it but asked to drop language about whether the field was evolved, since that detail is not part of the invariant.&lt;/p&gt;

&lt;p&gt;Revanth Ch confirmed the &lt;a href="https://lists.apache.org/thread/38ww9cto44kdrtg9hbm4j8z1st6fpzt8" rel="noopener noreferrer"&gt;migration plan for the new expression JSON forms&lt;/a&gt;. With Ryan Blue's guidance that servers always omit residual filters, the new expression syntax only flows from client to server in plan requests, so no client capability signal is needed. Revanth will open a PR so the reference implementation stops sending a residual on every scan task, then continue building conformance fixtures.&lt;/p&gt;

&lt;p&gt;Hongyue Zhang and a contributor writing as dzeri96 discussed &lt;a href="https://lists.apache.org/thread/28kw8cnzm835y2l8c6w8pp3m24551qlb" rel="noopener noreferrer"&gt;making &lt;code&gt;appendUpdate&lt;/code&gt; in BaseTransaction public&lt;/a&gt;. The use case is a custom index stored in a Puffin statistics file. Today that team injects custom pending updates through reflection to control conflict detection. The request is a small API change, but it points at a bigger need: index builders want first-class hooks into Iceberg's commit protocol. The &lt;a href="https://lists.apache.org/thread/ft12o55pl3x5m29kk2nndhk316o8bxnf" rel="noopener noreferrer"&gt;Iceberg index sync&lt;/a&gt; that normally covers this was cancelled for October 12 because so many people were traveling. Huaxin Gao pointed everyone to the index spec PR in the meantime, and the next sync is October 26.&lt;/p&gt;

&lt;p&gt;EJ Song posted a status update on &lt;a href="https://lists.apache.org/thread/qms426sxl3r1hjdm0jzm5wwqbkhdx01o" rel="noopener noreferrer"&gt;row-granular concurrency for v3 deletion vectors&lt;/a&gt;. The first step merges concurrently added deletion vectors for pure delete commits. Huaxin Gao and Uroš Bojanić have reviewed it, CI is green, and it needs one more committer to sign off on the retry semantics in MergingSnapshotProducer. When this lands, two jobs that delete different rows from the same file will stop conflicting with each other.&lt;/p&gt;

&lt;p&gt;On the integration front, Robert Kruszewski opened a PR for &lt;a href="https://lists.apache.org/thread/ff4v7jvtl1r44wvl0nntlv0d63n8p8p7" rel="noopener noreferrer"&gt;upgrading arrow-java from 15.0.2 to 19.0.0&lt;/a&gt;, which positions Iceberg for arrow-java 20 and its expected Decimal32 and Decimal64 support. Vladislav Sidorovich asked for another review on &lt;a href="https://lists.apache.org/thread/wl2m40rbs95f82sw0yhsp8rj58xr6qdf" rel="noopener noreferrer"&gt;moving Delta Lake migration to Delta Kernel&lt;/a&gt; after addressing all comments. K Krishna raised &lt;a href="https://lists.apache.org/thread/kp41hjc76o3byrw4pp3599qf13p2ykhl" rel="noopener noreferrer"&gt;two PyIceberg Azure fixes&lt;/a&gt; that had waited two weeks. One fixes a bug where FsspecFileIO wrote an inferred storage account back into shared properties, so tables spread across two storage accounts got the wrong filesystem. Fokko Driesprong picked them up.&lt;/p&gt;

&lt;p&gt;Alex Stephen announced a &lt;a href="https://lists.apache.org/thread/q011wr5ncbhf5b9ngob7cvs8119otyon" rel="noopener noreferrer"&gt;new batch of public datasets&lt;/a&gt; behind a public Iceberg REST catalog: 72 tables with over 640 billion rows. If you want to test an engine against real Iceberg tables at scale without loading data yourself, this is a free starting point.&lt;/p&gt;

&lt;p&gt;Community events filled out the calendar. Scott Haines announced the &lt;a href="https://lists.apache.org/thread/ov4bk4qg8pfod2s4z035mg3tj3tcv8mn" rel="noopener noreferrer"&gt;October virtual meetup&lt;/a&gt; for October 23 at 9:00 AM Pacific, featuring Liam Earley on improving scan latency with manifest work in iceberg-rust. Kevin Liu boosted the &lt;a href="https://lists.apache.org/thread/x5jnyggbjhy4xgs8jo3fwtbd59mdqztd" rel="noopener noreferrer"&gt;Seattle Iceberg meetup on October 21&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Polaris
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Where server storage access comes from
&lt;/h3&gt;

&lt;p&gt;The most consequential Polaris discussion this week was about boundaries. Dmitri Bourlatchkov opened a thread on &lt;a href="https://lists.apache.org/thread/636ss6fjsrhn9rzf3jdg0p4loqw3sr1v" rel="noopener noreferrer"&gt;removing default table properties from server-side FileIO configuration&lt;/a&gt;, and Vignesh posted a parallel thread on &lt;a href="https://lists.apache.org/thread/49vsx3r803nmf35wsyxl2h3qvxfrrfgs" rel="noopener noreferrer"&gt;dropping catalog &lt;code&gt;table-default.*&lt;/code&gt; properties from server FileIO construction&lt;/a&gt;. Both grew out of review on PR #5328, the table metadata cache work.&lt;/p&gt;

&lt;p&gt;Here is the problem. Polaris builds server-side FileIO objects from a mix of StorageAccessConfig and catalog-level default table properties. Vignesh noted that an earlier fix already stopped using caller-supplied metadata properties for server FileIO, tied to CVE-2026-97395. Commit, refresh, and register paths still pass catalog &lt;code&gt;table-default.*&lt;/code&gt; properties into the FileIO factory. Everyone agreed the target state is a clean one: server-side FileIO should come from StorageAccessConfig alone.&lt;/p&gt;

&lt;p&gt;The debate was about custom settings. Yufei Gu pointed out that deployments need to customize FileIO in ways nobody can predict. Dmitri first proposed letting the StorageAccessConfigProvider pull relevant catalog properties in. Jean-Baptiste Onofré preferred a different shape: a properties bag on PolarisStorageConfigurationInfo for custom FileIO settings, with MinIO and S3Mock endpoints and path-style access living on the AWS storage configuration where those fields already exist. Vignesh backed JB's shape and offered to write the cleanup PR, including moving test fixtures off &lt;code&gt;table-default.s3.*&lt;/code&gt;. Dmitri agreed with the property bag but raised an upgrade concern. Environments that rely on table defaults today will break if Polaris stops reading them overnight, so he proposed a transition path. Expect the final PR to include a deprecation window.&lt;/p&gt;

&lt;p&gt;This connects to Yufei's question about &lt;a href="https://lists.apache.org/thread/z9cgfj77s829npm51t0vcc32rclrz9mh" rel="noopener noreferrer"&gt;metadata immutability across storage endpoint changes&lt;/a&gt;. If two S3-compatible stores hold different files at the same &lt;code&gt;s3://&lt;/code&gt; path, can a storage endpoint change make an existing table's metadata URI return different content? Yufei argued table metadata should not change because a FileIO client was configured differently. Dmitri reframed it as a cache correctness question: Polaris does not control what external stores contain, so it cannot assume identical content across endpoints for caching. JB split the difference. Iceberg treats metadata files as immutable once written, so the URI acts like a content identifier in spirit. But an &lt;code&gt;s3://&lt;/code&gt; URI is not a content hash, so Polaris cannot enforce that. Robert Stupp summarized the two assumptions the system relies on and noted that neither follows from the URI and storage configuration staying the same. The practical outcome will shape whether the storage endpoint becomes part of the metadata cache key.&lt;/p&gt;

&lt;p&gt;Dmitri also flagged &lt;a href="https://lists.apache.org/thread/cn7f2ogyplrjq2y5pd9wt61zkysmwcv3" rel="noopener noreferrer"&gt;expanding the config entries in StorageCredential responses&lt;/a&gt; for community awareness, since it touches credential vending. PR #5731 from Adam lets Polaris return the full client-visible storage access configuration next to credentials. JB supported it, noting that Iceberg defines &lt;code&gt;StorageCredential.config&lt;/code&gt; as a prefix-scoped map that S3 and GCS FileIO overlay on their base properties. He asked for one rule to be made explicit before merge: if the credentials entry is meant to be the complete access config, it must hold in every case, including remote signing.&lt;/p&gt;

&lt;p&gt;On the Polaris side of the access-delegation question, the &lt;a href="https://lists.apache.org/thread/0c2l425l57j1lmmc45j1soc63klv142k" rel="noopener noreferrer"&gt;matching Polaris thread&lt;/a&gt; confirmed that Polaris keeps its fail-fast behavior, returning HTTP 400 when delegation cannot be satisfied. Youngrae Kim noted the vended-credentials docs already explain both 400 responses and tell clients to drop the header and configure their own storage credentials. Once the Iceberg spec adds &lt;code&gt;none&lt;/code&gt;, Youngrae plans to add support for it in Polaris. JB also noted that Iceberg 1.12 adds a remote signing configuration, so the community will need to revisit combined requests for vended credentials and remote signing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Labels, branches, and atomic commits
&lt;/h3&gt;

&lt;p&gt;Andrei Tserakhau opened a design discussion on &lt;a href="https://lists.apache.org/thread/ls38t86m9mrpdmcqfmqmjtg768dny8tn" rel="noopener noreferrer"&gt;IRC labels in Polaris&lt;/a&gt; now that the labels field has merged into the Iceberg REST spec and Polaris tag support is close. He proposed treating labels as a read-only projection over Polaris tags rather than a separate entity. Tags already carry definitions, allowed values, inheritance, and reverse lookup, and both models key on Iceberg field IDs. A second labels entity creates two sources of truth. Sung Yun agreed for the producer side and asked whether federated catalogs need to store foreign labels at all or can forward them straight to clients. Andrei answered that forwarding works for engines, but Polaris users need foreign labels represented as read-only tags to see them through Polaris discovery and reverse-lookup APIs. JB, picking up a conversation from Glasgow, backed the projection approach and asked about permissions and performance. Andrei proposed reusing tag visibility rules, so &lt;code&gt;loadTable&lt;/code&gt; only returns labels the caller can already see through the Tag API, and caching effective tags per table so the hot path does not resolve inheritance on every call. He also suggested gating the feature behind a flag at first.&lt;/p&gt;

&lt;p&gt;Ankur Kotwal started a discussion on &lt;a href="https://lists.apache.org/thread/zmvrf05z1m100pko8qc0syj982yrwpzx" rel="noopener noreferrer"&gt;catalog-level branches for atomic multi-table promotion&lt;/a&gt;, a feature users have requested in issue #3469. Iceberg already supports branches on a single table. What users want is a way to branch an entire catalog, write to many tables in isolation, and promote all of them to main in one atomic step. That is the lakehouse version of a database transaction across tables. After Dmitri questioned the need for a new entity type, Ankur dug into the code and found that &lt;code&gt;commitTransaction&lt;/code&gt; is already atomic on both persistence families. He opened a test and doc PR (#5740) showing a recipe built on existing pieces, then shared a design doc for a native option where a branch becomes a second named pointer next to &lt;code&gt;heads/main&lt;/code&gt;, backed by a per-catalog registry.&lt;/p&gt;

&lt;p&gt;That work feeds directly into the long-running thread on &lt;a href="https://lists.apache.org/thread/fh3r8n8r723v2r67tcgvz3d15r8qn8sy" rel="noopener noreferrer"&gt;consistent multi-object changes in Polaris persistence&lt;/a&gt;. EJ Wang's updated proof of concept centralizes business logic in a shared manager instead of reimplementing it across backends. JB praised the separation of concerns and noted it fixes a maintenance burden that dates back to the move from OpenJPA to JDBC and NoSQL. Ankur ran the multi-table promotion test from #5740 against EJ's branch on H2, plus two race tests, which is exactly the kind of cross-thread validation that makes a design trustworthy. Dmitri said he needs a couple of weeks to review the PoC properly.&lt;/p&gt;

&lt;p&gt;Yufei also endorsed a proposal on &lt;a href="https://lists.apache.org/thread/wrv5q8600vn76ghkdjjhrmsxx9jjb8rc" rel="noopener noreferrer"&gt;avoiding validation of historical metadata references on every table commit&lt;/a&gt;. When &lt;code&gt;write.metadata.path&lt;/code&gt; changes, Polaris does not need to revalidate every historical metadata file. Leaving old files in place preserves immutability for past snapshots, and moving them belongs in a separate migration process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operations and extensibility
&lt;/h3&gt;

&lt;p&gt;Tobias Riemenschneider reported that &lt;a href="https://lists.apache.org/thread/snms04dhn9d5g10g59nrfx6j2m1dw7ns" rel="noopener noreferrer"&gt;NoSQL persistence retry timeouts are not configurable&lt;/a&gt; and run shorter than the recommended MongoDB timeouts. Running Polaris 1.8.0 on MongoDB, his team sees table commits fail after 15 seconds with zero retries when MongoDB stalls behind a lagging secondary. The retry loop checks its total budget only after an attempt ends, and nothing bounds a single attempt. Robert Stupp confirmed the diagnosis: RetryConfig was always meant to be configurable, but SmallRye Config ignores it because &lt;code&gt;PersistenceParams.retryConfig()&lt;/code&gt; is a Java default method. Tobias filed issue #5777 and PR #5779 the same day. JB noted that JDBC already exposes max retries, max duration, and initial delay, so the NoSQL side will now match.&lt;/p&gt;

&lt;p&gt;JB opened a broader thread on &lt;a href="https://lists.apache.org/thread/th63h7nhxfmxywz2r28ml1f5f9fc6mmz" rel="noopener noreferrer"&gt;Polaris server extensions and custom entities&lt;/a&gt;, prompted by users he met in Glasgow. Authorizers and event listeners are easy to extend by shipping a module with a Jandex index. Custom entities are not. Users currently have to edit Polaris core and add values to the entities enum. JB opened PR #5776 to document the current state and asked the community how to make custom entities a supported extension point.&lt;/p&gt;

&lt;p&gt;Vignesh landed the prerequisite for a &lt;a href="https://lists.apache.org/thread/rswt2m6n97n2o03ll0q1bn243hsftmq0" rel="noopener noreferrer"&gt;shared CloudEvents envelope for Polaris events&lt;/a&gt;. PR #5717 adds a shared mapper next to the events SPI, with CloudEvents context at the top level, Kafka-parity fields in the data payload, and lowercase type names such as &lt;code&gt;org.apache.polaris.after_create_table&lt;/code&gt;, following Dmitri's suggestion. The webhook listener in PR #5084 will rebase on it. Dmitri also pushed the &lt;a href="https://lists.apache.org/thread/6yl42lr9ydm4m9fjsg1jj361zvjodw21" rel="noopener noreferrer"&gt;REST endpoints for table metrics and events&lt;/a&gt; (PR #4115) into a final review round now that metrics grants merged separately.&lt;/p&gt;

&lt;p&gt;Yong Zheng proposed a &lt;a href="https://lists.apache.org/thread/xw88nf5dh1n3nkrk099txc6r0cx0f8y2" rel="noopener noreferrer"&gt;delete-dataset simulation for the benchmark tool&lt;/a&gt;. Re-running benchmarks against persistent backends gives skewed results because old metadata piles up. Yufei asked whether resetting the persistence layer directly is faster. JB preferred keeping the API-based delete as the default, since it works against any backend and keeps the benchmark a plain client of a running server. Dmitri, Yufei, and JB all signed off on the approach in polaris-tools PR #286. A smaller cleanup thread on &lt;a href="https://lists.apache.org/thread/hkq8bwv37lfpb7dgt7bng0df0kz89dhp" rel="noopener noreferrer"&gt;role cleanup tasks&lt;/a&gt; concluded that the async cleanup flag on role deletion was a leftover from the initial code import. Ayush Saxena traced it to the first commit, and JB, Dmitri, and Vignesh agreed to remove it since roles have no storage to purge and grant records already get cleaned up synchronously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Process and people
&lt;/h3&gt;

&lt;p&gt;Alex Dutra's thread on &lt;a href="https://lists.apache.org/thread/jtj2d4h35gf5hx440y1y0xokn2v09qqp" rel="noopener noreferrer"&gt;reducing CHANGELOG.md merge conflicts&lt;/a&gt; drew 19 messages. Ayush Saxena brought numbers: 75 of 339 commits on main over 60 days touched CHANGELOG.md, roughly one in four and a half. Alex proposed per-PR changelog fragment files. JB questioned whether a hand-maintained changelog is worth the effort at all and suggested assembling release notes from labeled PRs. Robert Stupp suggested conventional commit messages. Yufei and Alex both raised AI-assisted summarization at release time as an option, with Alex listing the tradeoffs around missing context. Dmitri clarified that the changelog was never meant to have an entry for every PR. The group settled on a first step: Yufei's PR #5733 tightens the guidance so only release-note-worthy changes get entries. If conflicts persist, the &lt;code&gt;changelog.d&lt;/code&gt; fragment approach is next.&lt;/p&gt;

&lt;p&gt;JB announced that &lt;a href="https://lists.apache.org/thread/poltkbrwv7mpq8pzsq4wpc6wtyw3gk96" rel="noopener noreferrer"&gt;Ayush Saxena is a new Polaris committer&lt;/a&gt;, and congratulations poured in from across the community. Ayush's fingerprints are all over this week's threads, from changelog statistics to git archaeology on role cleanup. JB also &lt;a href="https://lists.apache.org/thread/b5mdboyc2mc565r71j8h305wdsj3y7cm" rel="noopener noreferrer"&gt;cancelled the October 15 community meeting&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Arrow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arrow 26.0.0 ships
&lt;/h3&gt;

&lt;p&gt;Raúl Cumplido posted the &lt;a href="https://lists.apache.org/thread/sltmotxsw3gq5p7jqvm5bcvrynsflvqg" rel="noopener noreferrer"&gt;result of the Arrow 26.0.0 release vote&lt;/a&gt;. It carried with six binding +1s from Rossi Sun, Sutou Kouhei, Gang Wu, Raúl Cumplido, Adam Reeve, and David Li, plus non-binding +1s from Xuanwo, Tadeja Kadunc, and Jean-Baptiste Onofré. The &lt;a href="https://lists.apache.org/thread/b9cl8gjgbqnm1vw9z7xqxf9o4j3v7oqd" rel="noopener noreferrer"&gt;verification thread&lt;/a&gt; reads like a tour of the platforms Arrow now has to support. Gang Wu verified on an Apple M5 Pro with Clang 21. Raúl ran source, reproducible-source, integration, binary, wheel, and APT checks, including a patch to validate a Python 3.15 release candidate. Adam Reeve tested on Fedora 44 with Python 3.14. Tadeja verified on macOS with Ruby 4.0 and found a couple of GLib and Ruby script fixes she plans to send upstream. A major Arrow release touches C++, Python, R, Ruby, GLib, and more, so the breadth of hands-on verification is the real story here.&lt;/p&gt;

&lt;p&gt;The Rust implementation moved in parallel. Jeffrey Vo opened a &lt;a href="https://lists.apache.org/thread/0r0t8knpsn67pk8wbm934f57sgyk63gt" rel="noopener noreferrer"&gt;vote on Arrow Rust 59.3.1 RC1&lt;/a&gt;, and L. C. Hsieh, Raúl Cumplido, and Andrew Lamb all cast binding +1s after verifying on M4 and M3 Macs and Debian 14. Arrow Rust is the foundation under DataFusion, iceberg-rust, and a growing set of Rust query engines, so its patch releases ripple outward fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  ADBC grows up
&lt;/h3&gt;

&lt;p&gt;Ian Cook brought back a &lt;a href="https://lists.apache.org/thread/v0gyjk7c771wp8thn9scm3g1c2k6bfyw" rel="noopener noreferrer"&gt;new ADBC logo proposal&lt;/a&gt; after more design work. Broad support led to PR #4870 in arrow-adbc, which adds the logo, a new Visual Identity page, and an updated trademark notice. Rusty Conover gave detailed feedback: the project URL on the hex badge is hard to read at small sizes, and the text spacing did not sit in harmony with the chevron mark. Ian posted a revised version that addresses both points, and Dewey Dunnington approved. Barring objections, the logo passes by lazy consensus after 72 hours.&lt;/p&gt;

&lt;p&gt;A logo matters because ADBC is becoming a brand people build on. That showed up in a second thread: Awanish Gupta from IBM &lt;a href="https://lists.apache.org/thread/gqfd0tn25wm5ntrw1kdfl3vplpcgps6d" rel="noopener noreferrer"&gt;asked to contribute a native C++ ADBC driver for IBM Db2&lt;/a&gt;. David Li explained that the &lt;code&gt;adbc-drivers&lt;/code&gt; GitHub organization sits outside the Apache Arrow project, offered to set up access directly, and pointed to the driver authoring docs. Asked about scope, Awanish confirmed the driver targets Db2 for Linux, UNIX, and Windows only, not Db2 for z/OS. Every new ADBC driver widens the set of databases that can hand Arrow data to a lakehouse engine without row-by-row conversion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format work and community
&lt;/h3&gt;

&lt;p&gt;The format track kept moving. Florian split the spec text for &lt;a href="https://lists.apache.org/thread/x9ys3c63j3jvzc269bdpmforpm83r27w" rel="noopener noreferrer"&gt;fixed and variable closedness range canonical extension types&lt;/a&gt; into its own PR (#53239) so the vote covers only the format change, and he asked to keep the vote open since no votes had arrived yet. David Li signed off on the latest revision of the &lt;a href="https://lists.apache.org/thread/lpg4xh650677yxqf4g5lf1ch927pn5lo" rel="noopener noreferrer"&gt;JSON representation of Arrow schemas&lt;/a&gt;, a small but useful step for tools that want to exchange schemas without the Flatbuffers dependency.&lt;/p&gt;

&lt;p&gt;Ian Cook reviewed Pearu Peterson's long-waiting &lt;a href="https://lists.apache.org/thread/9m6sq7trk3n7wrw7c5hqjjlo8qs1zy19" rel="noopener noreferrer"&gt;CSV date and time parsing PR&lt;/a&gt; and noted that Pearu's emails, like many others recently, had landed in spam folders. Andrei Tserakhau reported the same thing on the Iceberg list this week. If you posted to an Apache list recently and heard nothing, check whether your message reached people's inboxes before assuming silence means disinterest.&lt;/p&gt;

&lt;p&gt;Antoine Pitrou &lt;a href="https://lists.apache.org/thread/70j20p1yr5h9s530l8sdcqnnchjpz6ww" rel="noopener noreferrer"&gt;filed the Arrow board report&lt;/a&gt;, Ian Cook ran the &lt;a href="https://lists.apache.org/thread/7lj2fy4bzs6d86so74838bdg376jf0vr" rel="noopener noreferrer"&gt;October 7 community meeting&lt;/a&gt;, and Andrew Lamb announced on behalf of the PMC that &lt;a href="https://lists.apache.org/thread/tj66yqr9shrrzl6qo07bm55cxdw7778s" rel="noopener noreferrer"&gt;Richard Baah is a new Arrow committer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Parquet
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does "distinct" even mean?
&lt;/h3&gt;

&lt;p&gt;The sharpest Parquet debate this week was over a single word. Adrian Garcia Badaracco opened format PR #628 to &lt;a href="https://lists.apache.org/thread/qfkcfxkw3xq9g6ywq2cx2h5j39bmv9fd" rel="noopener noreferrer"&gt;classify &lt;code&gt;distinct_count&lt;/code&gt; metadata as inexact&lt;/a&gt; after a sync call reached consensus. Micah Kornfield asked for the reasoning, since Andrew Lamb had pushed back. Russell Spitzer explained it. Exactness of the number of distinct values is not standardized for many types. Strings with collations treat "foo" and "Foo" as equal or not depending on the system. Floating point has its own traps: NaN against NaN, and -0.0 against 0.0. Most use cases only need approximate statistics anyway, so the group chose to correct the language rather than define exact semantics for every type. Daniel Weeks added that older readers and writers already disagree about logical and physical equivalence, so assuming current values are exact was never safe. Andrew still sees changing "count of distinct values" to "estimated count" as a real change in meaning, not a clarification. Dan agreed the proposed wording is not ideal and offered alternatives on the PR.&lt;/p&gt;

&lt;p&gt;Russell also left a reminder that deserves repeating: when you cite a decision from a sync call, post notes to the list. Decisions that live only in a video call are invisible to the rest of the community.&lt;/p&gt;

&lt;h3&gt;
  
  
  The vector type fight
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/5vj5ttfjrrwhjmq2y5lpd5w048qw5yv9" rel="noopener noreferrer"&gt;numeric vector type thread&lt;/a&gt; turned into the most substantive design argument on any list this week. A focused call had produced a proposal for a FINITE_VECTOR logical type on fixed-length lists. Ryan Blue laid out what a logical type provides. It describes data for users and readers. It signals that repetition and definition levels reflect a fixed number of elements, which implementations can use to decode faster. It guarantees no null elements. And the finite variant guarantees no NaN or infinity values, so every vector has a finite length and works for distance calculations. Steven Wu agreed that FINITE_VECTOR brings value and argued against forcing every use case into a generic fixed-length list. Alkis Evlogimenos suggested naming it VECTOR to match other engines and type systems, leaving room for a non-finite variant later. Gang Wu supported separating FINITE_VECTOR (or VECTOR) from FIXED_LENGTH_LIST and moving the vector type first.&lt;/p&gt;

&lt;p&gt;Then Jan Finis made the case against. He argued that the finite restriction adds little value on its own and that the fixed-length part should be a general feature rather than a one-off. Existing types already handle uncompressed vectors well, he said. The real win is quantization, where storage size and processing speed improve by orders of magnitude. Will Edwards made a similar point from the engine side. He wants every engine to offer vector functions on lists of floats without a new logical type, and he sees more value in a type that describes how to unpack quantized codes, scales, and codebooks, which is where machine learning is heading.&lt;/p&gt;

&lt;p&gt;This is a genuine disagreement about what a file format owes the AI wave. One camp wants a simple, well-defined type now so engines and table formats can align, and Iceberg's vector work is already building on it. The other wants Parquet to skip the label and go straight to the compression problem. Both sides are right about something. A narrow VECTOR type gives Iceberg a stable target this year. Quantized storage is where the cost savings live. Watch for a proposal that ships the simple type first with an explicit path to quantized encodings.&lt;/p&gt;

&lt;h3&gt;
  
  
  A concrete plan for versioning
&lt;/h3&gt;

&lt;p&gt;Alkis Evlogimenos restarted the stalled versioning discussion with &lt;a href="https://lists.apache.org/thread/qk8hxpvycy6161lqop1bynr3yt028m7t" rel="noopener noreferrer"&gt;a concrete proposal&lt;/a&gt;. His two goals are to ship features when they are ready rather than waiting for the next bundle, and to guarantee that a reader either returns correctly interpreted results or fails, never a false read. He sorts every format change into two kinds. "Add-everywhere" changes are valid at every compatibility level, including in today's files. They are safe when any reader that does not understand them either fails where it needs them or is unaffected. A new encoding is the classic example: a reader that does not know ALP fails on the ALP column and reads every other column. "Compatibility level" changes are for things existing readers misread instead of failing on, such as metadata redefinitions, removals, or a new footer. A reader that does not support the level fails before reading anything.&lt;/p&gt;

&lt;p&gt;The most useful part of the proposal is the field survey. Alkis checked eight readers against their current source: Arrow C++, parquet-java, arrow-rs, DuckDB, Velox, arrow-go, cuDF, and fastparquet. Unknown encodings are mostly safe, though arrow-rs rejects the whole footer and parquet-java does the same when the encoding shows up in encoding stats. Unknown logical types are safe because every reader falls back to the physical type. Unknown page types are not safe: Arrow C++, DuckDB, and Velox skip them, so a new page type carrying rows gets dropped silently. Unknown compression codecs are not safe either: Arrow C++ treats them as uncompressed and decodes compressed bytes. Andrew Lamb praised the proposal and noted a third category, forward-compatible additions that older readers simply ignore, such as new statistics. This survey alone is a valuable document for anyone writing a Parquet reader.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encodings and new types
&lt;/h3&gt;

&lt;p&gt;Prateek Gaur reported that the &lt;a href="https://lists.apache.org/thread/m8d0520g7df8686p6l1nbst46hn29bw2" rel="noopener noreferrer"&gt;C++ implementation of ALP encoding for floating-point data&lt;/a&gt; has merged, with follow-up items coming in a later PR. ALP compresses floating-point columns far better than the general-purpose codecs, which matters for sensor data, financial data, and embeddings. Asked who is working on new encodings, Andrew Lamb &lt;a href="https://lists.apache.org/thread/kxthjf063lvkgj8jcob8jd1djsztx03p" rel="noopener noreferrer"&gt;listed two active efforts&lt;/a&gt;: Prateek on PFOR (patched frame of reference) and Aarnav on FSST and OnPair, symbol-table-based string encodings.&lt;/p&gt;

&lt;p&gt;Micah Kornfield pushed back on part of the &lt;a href="https://lists.apache.org/thread/7bf0fvksphy66bh1op1wk0116yrp4z0x" rel="noopener noreferrer"&gt;WIRE logical type proposal&lt;/a&gt; for serialized wire-format messages. He does not want to move ahead with the projection component until an open source engine commits to using it, citing how hard variant was to get right in engines. He wants documenting serialized values kept separate from projection. Thomas Kissinger agreed to continue the &lt;a href="https://lists.apache.org/thread/dr555g8153xnjjg9y9yc7od288ddj9s3" rel="noopener noreferrer"&gt;extensible decimal floating-point type&lt;/a&gt; discussion in Costas Zarifis's design doc. Julien Le Dem &lt;a href="https://lists.apache.org/thread/rmjl2dp63b10f9sw6dsrwfsk5f1mx49c" rel="noopener noreferrer"&gt;submitted the October board report&lt;/a&gt; after a week of collecting status, and Russell noted that the timing collided with Community Over Code travel. Julien also announced the &lt;a href="https://lists.apache.org/thread/noq7gfxjjfyyp3h4mt9mrxnqb5rcr4cs" rel="noopener noreferrer"&gt;October 7 Parquet sync&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache DataFusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Comet asks to leave home
&lt;/h3&gt;

&lt;p&gt;Andy Grove posted a &lt;a href="https://lists.apache.org/thread/0szsfkrog2jjr2x92zl78201zh131qzq" rel="noopener noreferrer"&gt;proposal to establish Apache Comet as a top-level project&lt;/a&gt;. His argument is that Comet differs from other DataFusion subprojects. The others extend DataFusion. Comet is an accelerator for Apache Spark that uses DataFusion as its execution engine, and its community has grown largely distinct from DataFusion's. The numbers back him up: 24 releases since July 2024, including 1.0.0 in August and 1.1.0 on October 6, and 146 people with merged PRs, 81 of them in the last 12 months.&lt;/p&gt;

&lt;p&gt;The proposal is conservative by design. The name "Apache Comet" already cleared the podling name search. The initial PMC is drawn from existing DataFusion PMC members (Andy Grove, Andrew Lamb, Liang-Chi Hsieh, Matt Butrovich, and Oleks V.) with nobody promoted as part of the move, and Andy offered to chair. Initial committers are the existing DataFusion committers who contribute to Comet. The repository moves from &lt;code&gt;apache/datafusion-comet&lt;/code&gt; to &lt;code&gt;apache/comet&lt;/code&gt;, with docs at comet.apache.org. Joining Comet changes nobody's role in DataFusion. Confirmations came quickly from Bhargava Vadlamani, Manu Zhang, L. C. Hsieh, Matt Butrovich, Parth Chandra, Martin Grigorov, and Chao Sun, with Andrew Lamb adding his support. Andy plans a formal vote after about a week. He corrected the timeline in a follow-up: the next DataFusion board meeting is December 16, not November 18.&lt;/p&gt;

&lt;p&gt;Comet also shipped this week. Andy announced that &lt;a href="https://lists.apache.org/thread/qyxttfywjq8otnj7k120c7fhyprwj5h3" rel="noopener noreferrer"&gt;Comet 1.1.0 passed its vote&lt;/a&gt; with nine +1s, six binding, and published the jars to Maven. He also proposed an &lt;a href="https://lists.apache.org/thread/nyrn4t3k0j6fx4pdst9m5oq81grnbwhn" rel="noopener noreferrer"&gt;update to the Comet contributor guide on AI&lt;/a&gt; in PR #6734. Automated reviews can help, the guidance says, but every PR approval must come from a human, with or without AI assistance. That is a clear, enforceable line, and other Apache projects are likely to borrow it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Releases across the family
&lt;/h3&gt;

&lt;p&gt;The DataFusion family shipped on several fronts. Oleks V. announced that &lt;a href="https://lists.apache.org/thread/kzgb9oj4yxq36sd2y6gbrbd11swc9mro" rel="noopener noreferrer"&gt;DataFusion 55.2.0 passed&lt;/a&gt; with five binding +1s and is published to crates.io. Andy reported that &lt;a href="https://lists.apache.org/thread/qptl5swh49vdvbm9mvfdm2qbfblnqgf1" rel="noopener noreferrer"&gt;Ballista 55.0.0 passed&lt;/a&gt; with six +1s, four binding. Tim Saucer opened the &lt;a href="https://lists.apache.org/thread/58b0o9w542h1h2rf65d2tdfbcm7f7yvn" rel="noopener noreferrer"&gt;DataFusion Python bindings 55.0.0 vote&lt;/a&gt;, which collected binding +1s from Marko Milenković, Andrew Lamb, L. C. Hsieh, and Andy Grove. Xuanwo's careful verification caught a missing NOTICE file in the source archive, a fix requested for the next release. Tim also closed out the &lt;a href="https://lists.apache.org/thread/hsmtt7rx9lqh25gqtwq0xnkn6170hj2m" rel="noopener noreferrer"&gt;Python bindings 54.1.0 vote&lt;/a&gt; with seven +1s, five binding.&lt;/p&gt;

&lt;p&gt;Andy also proposed &lt;a href="https://lists.apache.org/thread/qglf9qowwd89hdrqk7cj1hxvsh9nl4pv" rel="noopener noreferrer"&gt;removing the Spark compatibility feature from Ballista&lt;/a&gt;. The experimental, off-by-default feature covered only a handful of expressions. After six years on Spark-compatible engines, Andy wrote, he knows Spark compatibility is a project that never finishes because Spark keeps changing, and other projects already fill that niche. Read alongside the Comet proposal, the direction is clear. Comet owns Spark acceleration. Ballista focuses on being a distributed DataFusion engine. Each project gets a sharper identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Ossie (incubating)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Where does an MCP server belong?
&lt;/h3&gt;

&lt;p&gt;Apache Ossie is the open semantic interchange specification, the standard for moving metric, dimension, and relationship definitions between BI tools, semantic layers, catalogs, and AI agents. This week its busiest thread asked a question every semantic layer team is facing: should Ossie ship an &lt;a href="https://lists.apache.org/thread/dpjz5jg84rsbyjv44rp6ylxo8khfzz9w" rel="noopener noreferrer"&gt;MCP server, and where should it live&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;The thread started from GitHub discussion #510 and PR #529, which proposes an &lt;code&gt;execute_query&lt;/code&gt; contract. Chris Eubank asked the key question: how tightly is &lt;code&gt;execute_query&lt;/code&gt; tied to Ossie semantics? Is it meant to steer clients toward portable Ossie queries, or to standardize running any vendor's query language? As drafted, the model identity was optional and the result schema loose, so it looked closer to the second. Markus Cozowicz argued for pragmatism. Vendors will take time to build conversions, and each vendor has features the standard lacks, so allowing all registered Ossie dialects is a reasonable start. He also made an interesting point: if a query execution contract lands in the Ossie standard and then in LLM training data, nobody has to teach each agent how to run queries against a semantic model.&lt;/p&gt;

&lt;p&gt;Jean-Baptiste Onofré drew the line clearly. Ossie is an interchange spec for semantic models. A running MCP server brings execution, connections, auth, and a fast-moving protocol surface into the project. He prefers that MCP servers live in engines and catalogs, with Ossie defining the contract and possibly a REST API, but not the server implementation. Chris agreed that the dividing line is whether a query resolves against an Ossie model, and said there is interest on his side in building query capabilities over the Layer 2 and Layer 3 query interfaces once they land in the core spec. Jakub Moravec asked whether defining skills in Ossie and leaving tools to vendors is enough. Ashfaqbs responded that skills are advisory text while tools are executable contracts, and that validation belongs in Ossie while conversion and query belong to vendors. Jakub agreed with that split.&lt;/p&gt;

&lt;p&gt;The most valuable contributions came from people running code. Kyoung Min Kim ran an experiment on a real database of 33 datasets and 45 relationships, generated an Ossie model, and asked three models to return Layer 3 query specs that a compiler turned into SQL. Aleksandr Kosachev offered his ClickHouse executor as a test bed. It now accepts the aggregation query shape from PR #246 as a JSON object and returns #246 error codes such as &lt;code&gt;E_NAME_NOT_FOUND&lt;/code&gt;, &lt;code&gt;E_NO_PATH&lt;/code&gt;, and &lt;code&gt;E_AMBIGUOUS_PATH&lt;/code&gt; inside the #529 error envelope. His first report found the executor raised 10 of the 28 #246 codes as specified. A later update showed it now follows paths across several many-to-one relationships, rejects a second path as ambiguous, and merges measures across datasets, with answers matching expected rows line by line. JB took the lesson that a small shared query shape plus error codes works, and that the next real test is a second engine running the same cases. Where two engines disagree, PR #246 is underspecified, and those are the spots to fix. Markus confirmed PR #529 is now narrowed to the declarative case.&lt;/p&gt;

&lt;p&gt;Markus also captured a practical agent problem in the same thread. Filter values are where agents fail. A user asks about "Coca &amp;amp; Cola" when the data says "Coca-Cola Company." He laid out three strategies: put the vocabulary in the ontology when context allows, expose a dedicated tool for looking up column values, or return suggested values reactively when a query comes back empty. Each has tradeoffs in tool count and accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pinning down the query layer
&lt;/h3&gt;

&lt;p&gt;Several threads worked on the query layer that the MCP debate depends on. Chris Eubank opened a thread on &lt;a href="https://lists.apache.org/thread/cfb1dljkh2c6nmzmdfx7spgg9pxr2l9v" rel="noopener noreferrer"&gt;model expressions versus query semantics&lt;/a&gt;, pointing out that the expression language spec scopes itself to defining a model and says the SQL interface comes in a separate document. Today, expressions define a model. They do not create a query interface. Justin Talbot pushed a revision of the &lt;a href="https://lists.apache.org/thread/5mkoh54688r1ym34o8bc6ho165mc7z3p" rel="noopener noreferrer"&gt;Relational Query Interface spec&lt;/a&gt; (PR #354). The biggest change renames the measure evaluation function from &lt;code&gt;MEASURE()&lt;/code&gt; to &lt;code&gt;AGG()&lt;/code&gt; as the single normative spelling, with other spellings allowed as non-normative synonyms. Chris agreed with the changes and suggested deferring a SQL-native syntax for declaring measures to a future extension. Justin also opened a &lt;a href="https://lists.apache.org/thread/7myzrz1j03rt8svoqgfj61t5s5fqtn0o" rel="noopener noreferrer"&gt;vote on the specification layers overview&lt;/a&gt; (PR #452), an informational document describing Ossie's four layers: Model Definition, Relational Query Interface, Wide Table Query Interface, and Ontology.&lt;/p&gt;

&lt;p&gt;Ananth Tirumanur reworked his proposal to &lt;a href="https://lists.apache.org/thread/bowhhbbh93jp04x1m1y1ypymppvcjwbh" rel="noopener noreferrer"&gt;add an ICEBERG expression dialect to the core spec&lt;/a&gt; (PR #491). Reviewers worried that a new vendor dialect without a reference guide invites parser divergence. Ananth's fix: the dialect defines no new syntax. It is the predicate string accepted by PyIceberg's expression parser, which serves as the reference reader. Chris praised anchoring a dialect to an open source parser as a precedent worth encouraging. JB asked where the dialect applies, since the schema only uses dialect expressions for fields and metrics, and a predicate-only dialect fits boolean fields and nothing else. Kyoung Min Kim ran the PR's predicate table through PyIceberg 0.6.1 through current main. Thirty of 35 forms behave the same in every version, and every unsupported form is rejected everywhere. The five that differ include BETWEEN and double-quoted identifiers, which parse from 0.10.0. That data settles what minimum version the dialect needs to pin. For lakehouse teams, an ICEBERG dialect means a semantic model can carry a filter that an Iceberg-native engine pushes straight down to a table scan.&lt;/p&gt;

&lt;p&gt;The expression language itself grew. The &lt;a href="https://lists.apache.org/thread/s7szttv9vynftd8w6bsdmt4bp1kzj09v" rel="noopener noreferrer"&gt;vote to add the FILTER (WHERE ...) aggregate modifier&lt;/a&gt; collected support from JB, Klahr Joshua, and Ayush Saxena after &lt;a href="https://lists.apache.org/thread/c580g79bvljb25vwtkmjogx9mmgcogqv" rel="noopener noreferrer"&gt;discussion&lt;/a&gt; with Julian Hyde and Chris. Chris noted that the &lt;a href="https://lists.apache.org/thread/y2jbkmtv4nmddyzzkxq24bzlmfghby20" rel="noopener noreferrer"&gt;&lt;code&gt;||&lt;/code&gt; concatenation operator&lt;/a&gt; now renders correctly in the spec. Aleksandr opened a discussion on &lt;a href="https://lists.apache.org/thread/z2jr7q4pllsk5nkzv7d18ro8844n5tgy" rel="noopener noreferrer"&gt;NULLS FIRST and NULLS LAST in window ORDER BY&lt;/a&gt; (PR #577). Chris volunteered to rewrite spec wording for &lt;a href="https://lists.apache.org/thread/l9242bwfvl4ypr38d6rpfk1yfgy0hq4r" rel="noopener noreferrer"&gt;dataset-scoped metrics&lt;/a&gt;, and Kyoung Min will narrow the validator so qualified references become errors. JB asked that the rule be stated in the spec text and backed by a conformance test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measuring whether Ossie works
&lt;/h3&gt;

&lt;p&gt;Chris Eubank raised a question every interchange standard eventually has to answer: &lt;a href="https://lists.apache.org/thread/dnl13g1nlh7l2o6gnw9qjp7wqmrh0tds" rel="noopener noreferrer"&gt;how do we measure semantic interoperability&lt;/a&gt;? He ran the simplest possible model, one sales dataset and one &lt;code&gt;SUM(sales.amount)&lt;/code&gt; metric, through Ossie to vendor and back to Ossie across 14 converters. Eight of 14 preserved the ANSI_SQL expression. Only one of 14 preserved OSSIE_SQL_2026. The rest emitted a vendor dialect, dropped the metric, or lacked a vendor-to-Ossie path. Chris was clear that this measures preservation of the portable dialect, not semantic equivalence. He proposed a shared interoperability test suite in the repository with reference models, measurement utilities, and published results for every Ossie-hosted converter. This is the right instinct. A standard that only measures file format support can look healthy while portable meaning leaks out at every hop.&lt;/p&gt;

&lt;p&gt;The converter list keeps growing anyway. Tan Huynh from Holistics proposed a &lt;a href="https://lists.apache.org/thread/kymbn05f52qz3sm4vb3jyptq7vw81o8q" rel="noopener noreferrer"&gt;Holistics converter&lt;/a&gt; that runs both ways without network access, along with a &lt;a href="https://lists.apache.org/thread/8tprkgm9kfgn92xnlwlx1osb9pf5f2fx" rel="noopener noreferrer"&gt;HOLISTICS_AQL dialect&lt;/a&gt; entry. Mahmoud Hassanen proposed a &lt;a href="https://lists.apache.org/thread/ojdgt15wt6mfzbkn4mjd9nowb7hdolvv" rel="noopener noreferrer"&gt;native ClickHouse dialect converter&lt;/a&gt;, since ANSI SQL transpilation produces poor queries when ClickHouse needs functions like &lt;code&gt;uniqExact&lt;/code&gt; and &lt;code&gt;toStartOfMonth&lt;/code&gt;. JB explained that converters translate semantic model definitions and are not SQL transpilers, and that new converters will go to the &lt;code&gt;apache/ossie-converters&lt;/code&gt; repository he is preparing. Mahmoud opened PR #558 to register CLICKHOUSE in the dialect enum. An &lt;a href="https://lists.apache.org/thread/kjtbh1dnhvdlz0xoxx6lq08fzvxwl4gb" rel="noopener noreferrer"&gt;OpenMetadata converter&lt;/a&gt; discussion continued as well.&lt;/p&gt;

&lt;p&gt;GitHub discussions rounded out the semantic modeling agenda: &lt;a href="https://lists.apache.org/thread/hm5l6d007wt66ngs00vm41vwc5mopcj9" rel="noopener noreferrer"&gt;metric additivity&lt;/a&gt; (additive, semi-additive, non-additive), where Justin Talbot noted BI tools rely on additivity to roll up results client-side and skip database round trips, &lt;a href="https://lists.apache.org/thread/st3md6nt78jhp879zxsdxx7v2y4qsocd" rel="noopener noreferrer"&gt;certified metrics and certifying authority&lt;/a&gt;, a &lt;a href="https://lists.apache.org/thread/5zhpb4mps34h032k17dncm6gh3x8z9ql" rel="noopener noreferrer"&gt;shared semantics reference vocabulary&lt;/a&gt;, &lt;a href="https://lists.apache.org/thread/33wqxms9kl687x39q9pdqp7l8o0pjxv8" rel="noopener noreferrer"&gt;metric trees&lt;/a&gt;, and a proposal on how the &lt;a href="https://lists.apache.org/thread/wng2nx6gb41jy1zrvgrjk7lo457obt14" rel="noopener noreferrer"&gt;Open Knowledge Format relates to Ossie&lt;/a&gt;, which Markus Weimer welcomed as a canonical way to feed agents context from both. JB posted a revised &lt;a href="https://lists.apache.org/thread/8gl31bq0yr0jx4ywno2mrfbdvllrfh7w" rel="noopener noreferrer"&gt;Ossie REST API spec&lt;/a&gt; as PR #573, and Dmitri Bourlatchkov of Polaris endorsed it, noting Polaris as a possible implementation. Nolan Clark asked that the model management API avoid assuming a one-to-one mapping between inputs and converted outputs. Ankit Tandon posted &lt;a href="https://lists.apache.org/thread/0lwgmkxcjy4cgb41dx79wjwj2kw72l4o" rel="noopener noreferrer"&gt;notes from the October 13 Ontology working group&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Openness and community
&lt;/h3&gt;

&lt;p&gt;Julian Hyde asked a blunt question: &lt;a href="https://lists.apache.org/thread/2yz0r9ko95cnm17thv8rxsmk11zy9oy9" rel="noopener noreferrer"&gt;"Are we open?"&lt;/a&gt; Much of the project's work seemed to run vendor to vendor, he wrote, and it was not obvious how to attend a working group meeting. Kurt Stirewalt and Matthew Mullins pointed to the community page, Slack, and a public calendar of open working group meetings, while conceding the information is hard to find. Ayush Saxena asked for specifics. Julian clarified: Slack and the working groups are open in the sense that you can ask to join, but their content is invisible to search engines and unauthenticated readers. Aldre Jota then reported that the Slack invite links on the site were revoked or broken. Klahr Joshua invited anyone to improve the community page through the ossie-website repository, and Julia Blyumen suggested clarifying organizational versus individual membership. This is a healthy thread. Apache's rule is that decisions happen on the list, and a young project dominated by vendor working groups needs to keep proving it follows that rule.&lt;/p&gt;

&lt;p&gt;JB proposed the &lt;a href="https://lists.apache.org/thread/s2bjkpmlszckf1l360t63r157khd8odw" rel="noopener noreferrer"&gt;first Apache Ossie workshop and meetup&lt;/a&gt;: a full-day hands-on workshop followed by an evening of talks. Julian supported it with the standard Apache caveats, that the workshop is for knowledge transfer rather than decisions and that recordings should be posted. Support came from Dragos Crintea, Kurt Stirewalt, Yufei Gu, Ankit Tandon, and Jochen Christ, who said a full-day onsite session is worth a flight from Europe. JB is working on logistics. Ayush Saxena announced that &lt;a href="https://lists.apache.org/thread/yr3qh6l4n19cnvlw95pk4v16zz7gs1by" rel="noopener noreferrer"&gt;Chris Eubank is a new Ossie committer&lt;/a&gt;, a fitting recognition given how many of this week's threads he started or shaped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Project Themes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The lakehouse is learning new data types for AI, in lockstep.&lt;/strong&gt; Iceberg's File type follows Parquet's FILE logical type. Iceberg's vector design builds on Parquet's emerging vector representation, and the Iceberg vector sync explicitly defers to the Parquet decision. Parquet's ALP encoding targets the floating-point data that embeddings and sensor workloads produce. Arrow-java 20 is expected to bring Decimal32 and Decimal64, which Iceberg is already preparing for. These are not separate efforts. The table format, the file format, and the in-memory format are converging on one shared vocabulary for unstructured bytes and numeric vectors. The Parquet vector debate is the critical path. Whatever Parquet decides about VECTOR versus quantized encodings will set the shape of AI data in Iceberg tables for years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catalogs are getting exact about access.&lt;/strong&gt; The same people show up across Iceberg and Polaris on the same problem. Youngrae Kim, Yufei Gu, Dmitri Bourlatchkov, and JB carried the access-delegation question from the Iceberg spec into Polaris behavior in one week. Polaris is separating catalog configuration from server storage access, scoping what StorageCredential responses contain, and deciding whether storage endpoints belong in cache keys. Iceberg added a standard User-Agent format. Polaris is mapping IRC labels onto its tag model. As AI agents start calling catalogs directly, these precise rules about who gets which credentials and which classifications become the security model. Loose defaults stop being acceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantics and agents are the new frontier, and the lakehouse is the ground floor.&lt;/strong&gt; Ossie's MCP debate, its ICEBERG dialect, and its query interface work all point the same way. Agents need a governed semantic layer to ask questions, and that layer needs to push work down to open tables. An ICEBERG dialect anchored to PyIceberg means a metric definition can carry a predicate an Iceberg engine executes directly. Polaris showing up as a possible implementer of the Ossie REST API means the catalog and the semantic layer can share one interface. This is the open lakehouse stack extending upward: Parquet for files, Iceberg for tables, Polaris for the catalog, Arrow for movement, and Ossie for meaning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Projects are formalizing how humans and AI share the work.&lt;/strong&gt; Comet now requires a human to approve every PR. Polaris debated AI-assisted changelog summaries and chose to tighten human guidance first. Several contributors on the Ossie and Polaris lists described writing code first and discussing second, since code is cheap now. The common thread is accountability. Apache projects welcome AI help, but they want a named human responsible for every merge and every release note.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;The Iceberg File type vote closes this week, and the AMT baseline vote has no objections on record, so expect both results soon. The Comet top-level project discussion moves to a formal vote around October 16, with the board resolution targeted at the December 16 meeting. On Parquet, watch whether the vector debate converges on a simple VECTOR type or detours into quantized encodings, and whether Alkis's versioning proposal picks up a sync slot. Polaris will see the FileIO cleanup PR and the NoSQL retry fix land. Ossie's workshop logistics, the converters repository move, and a second engine running Aleksandr's ClickHouse test cases are all worth tracking. On the calendar: the Seattle Iceberg meetup on October 21, the virtual Iceberg meetup on October 23, and the Iceberg index sync returning October 26.&lt;/p&gt;




&lt;h2&gt;
  
  
  Go Deeper With the Open Lakehouse
&lt;/h2&gt;

&lt;p&gt;If this newsletter helps you keep up with Iceberg, Polaris, Arrow, Parquet, DataFusion, and Ossie, my books go further. I have written more than 50 titles on the open lakehouse, Apache Iceberg, Apache Polaris, agentic AI, and data engineering, from the O'Reilly definitive guides to hands-on Python and architecture books.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browse the full catalog at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;&lt;/strong&gt; and find the right book for where you are in your lakehouse journey.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Haiku 5.5, Muse Wonder, Open Racks: Oct 6-14</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 14 Oct 2026 16:50:37 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/haiku-55-muse-wonder-open-racks-oct-6-14-29j5</link>
      <guid>https://dev.to/alexmercedcoder/haiku-55-muse-wonder-open-racks-oct-6-14-29j5</guid>
      <description>&lt;p&gt;This week Google returned to the frontier. Gemini 4 Argon, its first new flagship since Gemini 3 Pro, became generally available on October 13 at an introductory price of $2 per million input tokens. The price of a capable model fell at the low end too. Anthropic shipped Claude Haiku 5.5 at a tenth of its predecessor's token price. Meta released its first frontier model, OpenAI rebuilt ChatGPT answers around interactive interfaces, and Mistral previewed a trillion-parameter open-weight flagship.&lt;/p&gt;

&lt;p&gt;Under the models, the hardware story moved to the rack. At the Open Compute Project Global Summit, NVIDIA, AMD, Microsoft, Intel, and Marvell all showed new chips and open rack designs. Memory stayed the tightest link in the chain.&lt;/p&gt;

&lt;p&gt;This issue follows the usual order. Models first, then tooling, then standards, then infrastructure. Each section ends with what the news means for teams building with AI and data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models: Google Returns to the Frontier With Gemini 4 Argon
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemini 4 Argon
&lt;/h3&gt;

&lt;p&gt;Gemini 4 Argon is the lead model story of the week. Google first &lt;a href="https://www.cnbc.com/2026/09/30/google-gemini-4-argon-ai.html" rel="noopener noreferrer"&gt;announced Argon on September 30&lt;/a&gt;, but only for trusted cybersecurity partners in its Fairwind Program. On October 13, Google &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/" rel="noopener noreferrer"&gt;made Argon globally available&lt;/a&gt; to developers, enterprises, and paying consumers. It is the first model in the Gemini 4 family.&lt;/p&gt;

&lt;p&gt;Access now runs through several doors. Developers can call it in AI Studio and on the Gemini platform under the &lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/gemini-4-argon-available-on-google-cloud" rel="noopener noreferrer"&gt;model ID &lt;code&gt;gemini-4-argon&lt;/code&gt;&lt;/a&gt;. Google AI Ultra subscribers get it in Google Antigravity, Google's agentic coding environment. Ultra and Pro subscribers get it in the Gemini app and AI Mode in Search. Enterprises get it in Gemini for business.&lt;/p&gt;

&lt;p&gt;The price is the surprise. Argon launches at an introductory rate of &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/" rel="noopener noreferrer"&gt;$2 per million input tokens and $10 per million output tokens, with cached input 95% off&lt;/a&gt;. That matches GPT-6.1 Sol. The discount ends on November 30, 2026. After that, Argon costs $4 input and $20 output, the same band as Claude Opus 5.5 and Meta's Muse Wonder. Budget for the higher number, not the launch number.&lt;/p&gt;

&lt;p&gt;The token limits stand out. Argon keeps a 1 million token input window. Google also &lt;a href="https://futurumgroup.com/insights/google-returns-to-the-frontier-with-gemini-4-argon/" rel="noopener noreferrer"&gt;raised the output limit to 1 million tokens, up from 64,000&lt;/a&gt;. Google describes this as a unified input-output limit, served through a new continuation protocol for long outputs. Every other model in this issue caps output at 128,000 tokens or less. Long outputs matter for agents that write whole codebases, long reports, or large data transformations in one run.&lt;/p&gt;

&lt;p&gt;Google's benchmark claims are vendor-reported, so read them with care. Google says Argon &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/" rel="noopener noreferrer"&gt;ranks #1 on the Vals Index&lt;/a&gt;, which measures performance on finance, coding, legal, and tax work. It reports 87% on the Embodied Reasoning (ERQA) benchmark for physical and spatial reasoning. On the Gray Swan Indirect Prompt Injection benchmark, Google says Argon cut attack success to 0.7% across 15 adaptive attempts. For security work, &lt;a href="https://hyper.ai/en/stories/3d57464ba301c9d7d2919dc1d3e7d763" rel="noopener noreferrer"&gt;Google reports that Argon matches GPT-6 Astra on CWE-bench&lt;/a&gt;, which measures finding and patching vulnerabilities.&lt;/p&gt;

&lt;p&gt;Outside analysts are more measured. Futurum's read is that &lt;a href="https://futurumgroup.com/insights/google-returns-to-the-frontier-with-gemini-4-argon/" rel="noopener noreferrer"&gt;Argon puts Google level with OpenAI but behind Anthropic&lt;/a&gt;. TechTarget noted that Argon is &lt;a href="https://www.techtarget.com/ai/news/366651339/Gemini-4-Argon-is-late-but-Googles-expertise-may-be-an-advantage" rel="noopener noreferrer"&gt;Google's first new top-tier model since Gemini 3 Pro in November 2025&lt;/a&gt;, and that its claims still need proof in enterprise settings. Independent results on the full Vals suite and Artificial Analysis should land within days.&lt;/p&gt;

&lt;p&gt;Google backed the launch with internal results. Engineering teams using Argon in Antigravity &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/" rel="noopener noreferrer"&gt;increased agentic code submissions by more than 35% and cut code rollbacks by nearly a third&lt;/a&gt;. Given a skills rulebook and a one-paragraph goal, Argon worked overnight on Google's open source Agent Development Kit. Its changes, now merged, cut in-memory session prep time by 40% in long sessions and sped up cold imports by 21%. Google also reports a 2.85x end-to-end inference speedup for Gemma 4 E2B on vLLM, with the work sent upstream as pull requests.&lt;/p&gt;

&lt;p&gt;One internal result belongs in the infrastructure conversation. In the September 30 announcement, Google said a team of Argon agents &lt;a href="https://blog.google/intl/en-mena/company-news/technology/gemini-4-argon-our-next-era-of-frontier-intelligence/" rel="noopener noreferrer"&gt;analyzed fleet-wide profiling data and applied memory fixes across its data centers&lt;/a&gt;. The changes freed over 300 TiB of memory once rolled out, with 500 TiB to 1 PiB in total savings expected. In a month when memory is the scarcest part in AI hardware, a model that finds memory in existing software is worth noting.&lt;/p&gt;

&lt;p&gt;Security shaped the rollout. Argon went to cyber defenders first, the same defender-first pattern Anthropic used with Claude Mythos under Project Glasswing. On October 13, Google began expanding Fairwind to hundreds of additional partners. Google plans to give trusted defenders a version of Argon without cyber guardrails. For the public model, Google says it trained Argon to pause for human confirmation before irreversible steps. It reports that shortcut attempts on coding tasks fell to 2%, and it runs a monitor that reads the agent's reasoning and actions to block unintended workarounds in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; For two months, the price matches GPT-6.1 Sol while the claims match the top tier. That makes now a cheap time to run Argon against your own evaluation set. Test the 1 million token output limit if your agents produce long artifacts, since no other frontier model offers it. Plan costs at the post-November rate of $4 and $20. And note where Argon lives. Its best agentic experience runs in Antigravity, which follows this week's pattern of labs keeping their strongest experience inside their own tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Haiku 5.5
&lt;/h3&gt;

&lt;p&gt;Anthropic released Claude Haiku 5.5 on October 7, 2026. It completes the Claude 5.5 family alongside Sonnet 5.5 and Opus 5.5. The API model ID is &lt;code&gt;claude-haiku-5-5&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The headline is price. &lt;a href="https://www.vktr.com/ai-platforms/anthropic-cuts-smallmodel-pricing-90-with-claude-haiku-55/" rel="noopener noreferrer"&gt;Haiku 5.5 costs $0.10 per million input tokens and $0.50 per million output tokens&lt;/a&gt; for prompts up to 100,000 tokens. Haiku 4.5 lists at $1 and $5. That is a 90% cut in the base token price.&lt;/p&gt;

&lt;p&gt;The pricing has a second tier. Above 100,000 tokens, &lt;a href="https://www.inside.com.tw/article/42592-anthropic-claude-haiku-5-5-launch-price-cut-1m-context" rel="noopener noreferrer"&gt;the rate rises to $0.50 input and $2.50 output per million tokens&lt;/a&gt;. Haiku 5.5 is the only current Claude model priced this way. Sonnet 5.5, Opus 5.5, and Fable 5.1 bill the full window at one rate.&lt;/p&gt;

&lt;p&gt;The context window grew five times. Haiku 5.5 takes &lt;a href="https://forklog.com/en/?p=104941" rel="noopener noreferrer"&gt;1 million tokens of context and returns up to 128,000 output tokens&lt;/a&gt;, up from 200,000 and 64,000 on Haiku 4.5. The cheapest Claude model now has the same window as the most expensive one.&lt;/p&gt;

&lt;p&gt;Anthropic frames the savings as about 75% per task, not 90%. The gap comes from the tokenizer. Haiku 5.5 uses the tokenizer introduced with Claude 4.7, which &lt;a href="https://www.vktr.com/ai-platforms/anthropic-cuts-smallmodel-pricing-90-with-claude-haiku-55/" rel="noopener noreferrer"&gt;produces roughly 30% more tokens for the same input&lt;/a&gt; than Haiku 4.5 did. Lower prices per token, more tokens per task.&lt;/p&gt;

&lt;p&gt;Haiku 5.5 is also the first Haiku with Anthropic's effort settings and adaptive thinking. That changes the cost math again. Artificial Analysis scored Haiku 5.5 at 43 on its Intelligence Index at maximum effort, ahead of GPT-6 Luna at 38. But &lt;a href="https://www.inside.com.tw/article/42592-anthropic-claude-haiku-5-5-launch-price-cut-1m-context" rel="noopener noreferrer"&gt;Haiku 5.5 produced about 440 million output tokens across the full test suite, against 140 million for Luna&lt;/a&gt;. Per test question, that worked out to about $0.21 for Haiku and $0.07 for Luna.&lt;/p&gt;

&lt;p&gt;Those are independent numbers, not vendor claims. Artificial Analysis also reported &lt;a href="https://pk.linkedin.com/in/mahmood-dev" rel="noopener noreferrer"&gt;33% on Terminal-Bench 4.0, up from 0% for Haiku 4.5&lt;/a&gt;. It flagged one agent automation result as likely understated and plans to re-run that test.&lt;/p&gt;

&lt;p&gt;Anthropic made two related pricing moves the same day. It &lt;a href="https://techjacksolutions.com/?p=94025" rel="noopener noreferrer"&gt;halved the Sonnet 5.5 cache read price to $0.10 per million tokens&lt;/a&gt; and said that makes Sonnet 5.5 about 20% cheaper on most agentic work. It also added monthly API credits to subscriptions. &lt;a href="https://www.inside.com.tw/article/42592-anthropic-claude-haiku-5-5-launch-price-cut-1m-context" rel="noopener noreferrer"&gt;Max 5x and Max 20x plans include $100 and $200 a month in Claude Platform credits, and Team plans get up to $500&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Availability is broad. &lt;a href="https://www.vktr.com/ai-platforms/anthropic-cuts-smallmodel-pricing-90-with-claude-haiku-55/" rel="noopener noreferrer"&gt;Haiku 5.5 runs on the Claude API, Amazon Bedrock, Google Cloud, Microsoft Foundry, and Claude Platform on AWS&lt;/a&gt;. It also shipped in Claude Code and GitHub Copilot on day one.&lt;/p&gt;

&lt;p&gt;Code written for Haiku 4.5 needs updates. Anthropic lists API changes that break older integrations, so test before you swap the model ID in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; Small models do most of the work in agent systems. They classify, route, extract, summarize, and run as sub-agents under a larger planner. A 90% cut in the base rate makes it cheap to run many more of those calls. Keep prompts under 100,000 tokens where you can, since the price jumps five times above that line. And measure cost per task, not cost per token. The Artificial Analysis data shows a cheap token can still produce an expensive answer if the model thinks at length.&lt;/p&gt;

&lt;h3&gt;
  
  
  Meta Muse Wonder
&lt;/h3&gt;

&lt;p&gt;Meta's Superintelligence Lab &lt;a href="https://techcrunch.com/2026/10/12/meta-releases-its-first-frontier-model-muse-wonder" rel="noopener noreferrer"&gt;released Muse Wonder and Muse Wonder Full on October 12&lt;/a&gt;. TechCrunch called it Meta's first attempt at a frontier model. The earlier Muse Spark models targeted low latency. The Wonder models are larger and aim at coding and long-running agent tasks.&lt;/p&gt;

&lt;p&gt;Developers can call Muse Wonder through the Meta Model API as &lt;code&gt;muse-wonder-1.0&lt;/code&gt;. &lt;a href="https://techcrunch.com/2026/10/12/meta-releases-its-first-frontier-model-muse-wonder" rel="noopener noreferrer"&gt;It costs $4 per million input tokens and $20 per million output tokens&lt;/a&gt;. That puts it in the same price band as GPT-6 Sol and Claude Opus 5.5.&lt;/p&gt;

&lt;p&gt;The twist is the second checkpoint. &lt;a href="https://techcrunch.com/2026/10/12/meta-releases-its-first-frontier-model-muse-wonder" rel="noopener noreferrer"&gt;Muse Wonder Full is only available to Muse Code subscribers and will not be served through the API&lt;/a&gt;. Both models also power Meta's Muse agent. So the best version of Meta's model lives inside Meta's own coding product.&lt;/p&gt;

&lt;p&gt;Both models &lt;a href="https://propakistani.pk/2026/10/13/meta-enters-ai-frontier-with-new-wonder-models/amp/" rel="noopener noreferrer"&gt;support a 1 million token context window and accept text, images, video, and audio&lt;/a&gt;. Meta stressed a feature it calls active memory, the ability to keep and reuse what a user shares over time.&lt;/p&gt;

&lt;p&gt;On benchmarks, treat the numbers as vendor-reported. &lt;a href="https://techcrunch.com/2026/10/12/meta-releases-its-first-frontier-model-muse-wonder" rel="noopener noreferrer"&gt;Meta's model card shows Wonder and Wonder Full scoring comparably to Claude Fable 5.1 and GPT-6 Astra&lt;/a&gt;. Wait for independent runs before you rank it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; Meta has moved from open weights to a paid frontier API. That is a strategy change, not just a model release. If your team planned around Meta as the open-weight option, the plan needs a second look. And the split between an API checkpoint and a subscriber-only checkpoint is a pattern to watch. When a lab keeps its best model inside its own app, API builders get the second-best version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistral Large 4 Preview
&lt;/h3&gt;

&lt;p&gt;Mistral &lt;a href="https://letsdatascience.com/news/mistral-debuts-large-4-open-weight-model-preview-cbf9e0b5" rel="noopener noreferrer"&gt;opened a public preview of Mistral Large 4 on October 6&lt;/a&gt;. The preview runs on Mistral Studio and the Mistral API. Mistral says the open weights will follow by the end of October.&lt;/p&gt;

&lt;p&gt;Large 4 is a mixture-of-experts model with &lt;a href="https://www.gradually.ai/en/ai-models/mistral-large-4/" rel="noopener noreferrer"&gt;1.05 trillion total parameters&lt;/a&gt;. Mistral's launch post lists 49 billion active parameters, while its model page lists 52 billion. It takes text and image input. Mistral trained it from scratch on 3,800 Grace Blackwell GPUs in its own European data centers.&lt;/p&gt;

&lt;p&gt;The context window depends on where you look. Mistral advertises 1 million tokens. &lt;a href="https://www.gradually.ai/en/ai-models/mistral-large-4/" rel="noopener noreferrer"&gt;OpenRouter documents 524,288 tokens&lt;/a&gt;. Check the limit on the endpoint you plan to use.&lt;/p&gt;

&lt;p&gt;Mistral's coding numbers are vendor-reported. It cites 61.7% on DeepSWE v1.1. In a &lt;a href="https://www.online-tech-tips.com/?p=111042" rel="noopener noreferrer"&gt;blind coding-quality evaluation run by Mistral with Surge AI annotators, the preview scored 3.74 out of 5&lt;/a&gt;. That placed it second of five, behind Claude Opus 5 at 4.22 and ahead of Kimi K3 at 3.59.&lt;/p&gt;

&lt;p&gt;Independent testing gives a more modest picture. Vals.ai &lt;a href="https://vals.ai/models/mistralai_mistral-large-4" rel="noopener noreferrer"&gt;ranks Mistral Large 4 at #32 of 44 models on its Vals Index with 48.05%&lt;/a&gt;. Its best showing was #6 of 75 on Harvey's Legal Agent Benchmark.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; The value of Large 4 is not the leaderboard. It is ownership. If Mistral ships the weights on schedule, teams get a trillion-parameter multimodal model they can run in their own data centers. That matters for regulated industries and for any team with data sovereignty rules. Plan the hardware budget now, since a model this size needs serious memory to serve.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI: GPT-6 Reaches Every ChatGPT User
&lt;/h3&gt;

&lt;p&gt;OpenAI &lt;a href="https://openai.com/index/gpt-6-for-everyone/" rel="noopener noreferrer"&gt;began rolling out GPT-6 with Intelligent UI across ChatGPT on October 7&lt;/a&gt;. Plus, Pro, Business, and Enterprise users got it first. Free and Go users started getting it on October 8.&lt;/p&gt;

&lt;p&gt;The model behind it depends on your plan. &lt;a href="https://openai.com/index/gpt-6-for-everyone/" rel="noopener noreferrer"&gt;Paid tiers run on GPT-6 Sol, and Free and Go tiers run on GPT-6 Luna&lt;/a&gt;. OpenAI says the release reaches more than 1.2 billion weekly ChatGPT users.&lt;/p&gt;

&lt;p&gt;Intelligent UI is the real change. GPT-6 can now answer with graphics, buttons, forms, charts, and small interactive tools inside the chat. A question about splitting a bill can return a working calculator. OpenAI also lets GPT-6 start answering while it keeps thinking. For web search questions, &lt;a href="https://yourstory.com/ai-story/gpt-6-intelligent-ui-chatgpt-answers" rel="noopener noreferrer"&gt;GPT-6 Instant starts answering 44% faster on average than GPT-5.6 Instant&lt;/a&gt;, according to OpenAI.&lt;/p&gt;

&lt;p&gt;There are limits. &lt;a href="https://blog.memoryplugin.com/chatgpt-new-features-october-2026/" rel="noopener noreferrer"&gt;Intelligent UI does not work on the Pro reasoning option, which still runs Astra&lt;/a&gt;. OpenAI's safety card also notes that Codex and ChatGPT Work keep the September versions of the models.&lt;/p&gt;

&lt;p&gt;For API users, the bigger model news came the week before. OpenAI &lt;a href="https://www.unite.ai/openai-unveils-gpt-6.1-sol-at-devday-with-new-codex-and-chatgpt-tools/" rel="noopener noreferrer"&gt;introduced GPT-6.1 Sol at DevDay on September 29&lt;/a&gt; as &lt;code&gt;gpt-6.1-sol&lt;/code&gt;, priced at $2 per million input tokens and $10 per million output tokens. OpenAI reports that it matches GPT-6 Astra on DeepSWE v1.1 at roughly one-fifth the cost. This week it became the default in Codex CLI, which we cover in the tooling section.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; Generated interfaces are now a mainstream answer format. That raises the bar for every data product. Users will expect a chart or a filter control when they ask a question about numbers, not a paragraph. It also raises a trust question. A generated chart looks authoritative even when the data behind it is wrong. Teams that serve data to AI assistants need clean, governed sources more than ever.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google: Gemini App Access Shifts
&lt;/h3&gt;

&lt;p&gt;Alongside Argon, Google also changed who gets which model in the Gemini app. Starting October 9, &lt;a href="https://letsdatascience.com/news/google-limits-gemini-model-access-by-subscription-24b0d7ca" rel="noopener noreferrer"&gt;Gemini app users without a subscription get Flash-Lite, not Flash or Gemini Pro&lt;/a&gt;. Google AI Plus subscribers keep Flash but lose Gemini Pro on dates sent by email. Pro and Ultra subscribers keep all three.&lt;/p&gt;

&lt;p&gt;This is the other side of the price war. Labs cut API prices for developers and tighten free consumer access at the same time. Argon itself is limited to Pro and Ultra subscribers in the Gemini app. Serving frontier models to hundreds of millions of free users costs real money.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Releases
&lt;/h3&gt;

&lt;p&gt;Release trackers logged several smaller models this week. &lt;a href="https://llmgateway.io/timeline" rel="noopener noreferrer"&gt;LLM Gateway lists Reka Edge 2603 on October 9, GLM 5.3 Fast from Z.AI on October 7, and Microsoft-Decision-1 on October 9&lt;/a&gt;. We have not confirmed specs for these against their labs' own announcements, so treat them as leads for your own testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model Quick Reference
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5f2mj68ixxl3trjmfip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5f2mj68ixxl3trjmfip.png" alt="Model Quick Reference" width="559" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All benchmark figures above from Google, Anthropic, Meta, Mistral, and OpenAI are vendor-reported unless the text names an independent source such as Artificial Analysis or Vals.ai.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Pattern in Models
&lt;/h3&gt;

&lt;p&gt;Three trends stand out this week. First, prices keep falling at both ends. Haiku 5.5 resets the small-model floor, and Argon launches at a mid-tier price for a frontier model, at least until November 30. One million token windows are now standard across price levels, and Argon pushes output to 1 million tokens too. Second, labs are splitting releases into API versions and app-only versions. Meta's Wonder Full, OpenAI's ChatGPT-only Intelligent UI, and Argon's Antigravity experience all keep the best experience inside the lab's own product. Security-sensitive models now launch to defenders first, as Argon did through Fairwind. Third, cost per task matters more than cost per token. Adaptive thinking means two models with the same token price can differ by three times in what a real job costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tooling: Coding Agents Compete on Control, Not Just Smarts
&lt;/h2&gt;

&lt;p&gt;The coding agent race shifted this week. The new features were not about writing better code. They were about controlling agents: which model each one runs, what files and networks it can touch, and how many can work at once without stepping on each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code 2.1.296
&lt;/h3&gt;

&lt;p&gt;Anthropic shipped &lt;a href="https://tech-insider.org/codex-cli-0-162-vs-claude-code-2-1-296-2026/" rel="noopener noreferrer"&gt;Claude Code 2.1.296 on October 9&lt;/a&gt;. The headline feature is workflow-level model pinning. A new environment variable, &lt;code&gt;CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL&lt;/code&gt;, forces every subagent in a multi-step workflow to run on one chosen model. Before this, each subagent picked its own default.&lt;/p&gt;

&lt;p&gt;That sounds small, but it solves a real cost problem. In a long workflow, one subagent quietly running on a premium model can dominate the bill. Pinning gives teams one switch to control spend and keep behavior consistent across runs.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://releasebot.io/updates/anthropic/claude-code" rel="noopener noreferrer"&gt;release notes also add subagent auto-compaction and larger Read support&lt;/a&gt;. Subagents can now compact their own context instead of growing until they hit a limit. Admins got a new &lt;code&gt;code&lt;/code&gt; key in the Claude apps gateway's managed policies, which applies the same settings as the CLI inside Claude Desktop's Code tab. The earlier 2.1.293 release made &lt;a href="https://releasebot.io/updates/anthropic/claude-code" rel="noopener noreferrer"&gt;Claude Haiku 5.5 the default Haiku model&lt;/a&gt; in Claude Code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codex CLI 0.162
&lt;/h3&gt;

&lt;p&gt;OpenAI answered within days. &lt;a href="https://tech-insider.org/codex-cli-0-162-vs-claude-code-2-1-296-2026/" rel="noopener noreferrer"&gt;Codex CLI 0.162.0 added managed Git worktree tools and pinned tasks&lt;/a&gt; in its Command Center. The release before it, 0.161.0, &lt;a href="https://tech-insider.org/github-copilot-cli-computer-use-preview-2026/" rel="noopener noreferrer"&gt;made GPT-6.1 Sol the default model and added terminal MCP sign-in&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Worktrees are the quiet standard of 2026. Each agent gets its own Git worktree, so parallel agents edit separate copies of the repository and never collide. Managed worktrees turn that from a manual setup into a built-in feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot
&lt;/h3&gt;

&lt;p&gt;GitHub's &lt;a href="https://github.blog/changelog/2026-10-09-github-copilot-weekly-releases-october-5/" rel="noopener noreferrer"&gt;weekly Copilot release notes for October 9&lt;/a&gt; carried the most important security change of the week. Local sandboxing is now generally available in Copilot CLI, the Copilot app, and VS Code sessions that use Agent Host. It limits what agents can reach on your machine: files, networks, and credentials. GitHub includes it with Copilot at no extra cost.&lt;/p&gt;

&lt;p&gt;The same release made Claude Haiku 5.5 available to Copilot Pro, Pro+, Max, Business, and Enterprise users. The Copilot app now lets you use one GitHub account for your Copilot license and a different one for your repositories. That fixes a common problem for consultants and anyone with a personal and a work account.&lt;/p&gt;

&lt;p&gt;VS Code 1.141 added an Agents window that shows agent sessions side by side in a grid. You can compare results from several agents or follow several tasks at once. A new "Open worktree cleanup" command in chat shows how much disk space inactive session worktrees use and lets you delete them. Anyone who has run a dozen parallel agents knows how fast those copies fill a drive.&lt;/p&gt;

&lt;p&gt;GitHub also put &lt;a href="https://tech-insider.org/github-copilot-cli-computer-use-preview-2026/" rel="noopener noreferrer"&gt;computer use into public preview for Copilot CLI and the Copilot app&lt;/a&gt;. The agent can now operate desktop applications, not just the terminal and the editor. As of this week, Codex CLI and Claude Code had not shipped an equivalent public feature.&lt;/p&gt;

&lt;p&gt;GitHub also cleaned house before these launches. On October 2, it &lt;a href="https://tech-insider.org/github-copilot-cli-computer-use-preview-2026/" rel="noopener noreferrer"&gt;deprecated older models across Copilot Chat, inline edits, ask mode, agent mode, and code completions&lt;/a&gt;. If your team pins specific models in Copilot settings or scripts, check that those models still exist. A deprecated model ID fails quietly in some setups and loudly in others.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cursor
&lt;/h3&gt;

&lt;p&gt;Cursor kept pace on mobile. Its &lt;a href="https://dev.to/gabrielanhaia/you-already-pay-for-claude-code-and-codex-do-you-still-need-cursor-kpk"&gt;iOS app now has Remote Control for local agents&lt;/a&gt;, per its October 6 changelog. You can start and steer an agent running on your desktop from your phone. Its &lt;code&gt;/best-of-n&lt;/code&gt; command runs several candidate solutions in separate worktrees so you can pick the best one.&lt;/p&gt;

&lt;p&gt;The same article makes a useful observation. By October 2026, nearly every coding tool runs several agents at once, each in its own Git worktree. Cursor, the Copilot app, Claude Code desktop, Codex, Zed, and Warp all do it. Parallel agents are no longer a differentiator. They are table stakes.&lt;/p&gt;

&lt;h3&gt;
  
  
  ChatGPT Moves From GPTs to Plugins
&lt;/h3&gt;

&lt;p&gt;OpenAI plans to &lt;a href="https://blog.memoryplugin.com/chatgpt-new-features-october-2026/" rel="noopener noreferrer"&gt;retire custom GPTs across ChatGPT plans and provide a migration path to plugins&lt;/a&gt;. Only Enterprise has firm dates so far. No new GPTs can be created after October 26, and retirement follows on December 11. If your organization built internal GPTs, start the migration plan now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Source Projects Set AI Rules
&lt;/h3&gt;

&lt;p&gt;The tooling story is not only about vendors. Open source projects are writing rules for how AI tools fit into their work. This week Andy Grove proposed &lt;a href="https://lists.apache.org/thread/nyrn4t3k0j6fx4pdst9m5oq81grnbwhn" rel="noopener noreferrer"&gt;updated AI guidance for Apache DataFusion Comet contributors&lt;/a&gt;. Automated reviews are welcome. But every pull request approval must come from a human, with or without AI help.&lt;/p&gt;

&lt;p&gt;On the Apache Polaris list, contributors &lt;a href="https://lists.apache.org/thread/jtj2d4h35gf5hx440y1y0xokn2v09qqp" rel="noopener noreferrer"&gt;debated using AI to write release notes&lt;/a&gt; instead of maintaining a changelog by hand. They chose to tighten the human guidance first and keep AI summaries as a later option. The theme is the same in both projects. AI can do the work, but a named person signs off.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; Three practical moves follow from this week. Turn on sandboxing for any agent that runs on a developer laptop, now that GitHub ships it free. Pin subagent models in long workflows so one step does not quietly drive up cost. And write a short AI policy for your repositories. The Comet rule, human approval on every merge, is a good starting point that any team can adopt today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards: MCP Grows Up While Agent Identity Stays Split
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MCP After the Stateless Revision
&lt;/h3&gt;

&lt;p&gt;The Model Context Protocol is in its first full quarter on the stateless specification. The &lt;a href="https://you.com/resources/mcp-web-search" rel="noopener noreferrer"&gt;2026-07-28 revision removed the initialize handshake and session tracking&lt;/a&gt;. Each request now declares its protocol version in metadata and in an &lt;code&gt;MCP-Protocol-Version&lt;/code&gt; HTTP header. Any server instance behind a plain load balancer can answer any request.&lt;/p&gt;

&lt;p&gt;That change is now showing up in production behavior. The &lt;a href="https://events.linuxfoundation.org/mcp-dev-summit-toronto/" rel="noopener noreferrer"&gt;MCP Dev Summit in Toronto on October 5 and 6&lt;/a&gt; focused on the work of running MCP in regulated environments. The agenda covered identity, authorization, audit, gateways, registries, evaluation, and reliability. One preview of the event reported &lt;a href="https://forkast.news/mcp-dev-summit-toronto-opens-today-the-protocol-stack-seeks-its-missing-coordination-layer/" rel="noopener noreferrer"&gt;70 speakers across six tracks and more than fifty sessions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;MCP is now hosted by the Linux Foundation's Agentic AI Foundation and &lt;a href="https://www.digidop.com/blog/mcp-ai-revolution" rel="noopener noreferrer"&gt;supported by OpenAI, Google, and Microsoft&lt;/a&gt;. The question is no longer whether MCP wins. The question is how teams secure and govern it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Products Arrive
&lt;/h3&gt;

&lt;p&gt;The security market noticed. On October 14, &lt;a href="https://manilatimes.net/2026/10/14/tmt-newswire/globenewswire/radware-introduces-model-context-protocol-mcp-server-protection-to-help-secure-the-integration-layer-of-agentic-ai/2445345" rel="noopener noreferrer"&gt;Radware announced MCP Server Protection&lt;/a&gt;, a product built to defend MCP servers against protocol abuse, authentication attacks, tool enumeration, tool flooding, and denial of service. The release cites a Stacklok survey in which nearly half of software companies reported using MCP in production, with 19% reporting broad production use.&lt;/p&gt;

&lt;p&gt;A dedicated security product is a maturity signal. Web APIs got API gateways and web application firewalls once they carried real business traffic. MCP is reaching that stage now.&lt;/p&gt;

&lt;p&gt;Hiring data tells the same story. API Evangelist counted job postings and found &lt;a href="https://apievangelist.com/2026/10/14/one-hundred-two-companies-hiring-for-mcp-and-the-enterprises-are-ahead" rel="noopener noreferrer"&gt;102 companies naming the Model Context Protocol, against 99 naming OpenAPI&lt;/a&gt;. The author is careful to say this measures hiring intent, not production use. Still, a protocol less than two years old now appears in as many job posts as the API description standard that has defined web APIs for a decade.&lt;/p&gt;

&lt;h3&gt;
  
  
  A2A and the Agent Stack
&lt;/h3&gt;

&lt;p&gt;MCP connects agents to tools. Agent2Agent (A2A) connects agents to each other. Google &lt;a href="https://enterprisedna.co/resources/news/google-a2a-aaif-agent-protocol-open-standard-august-2026/" rel="noopener noreferrer"&gt;transferred A2A to the Agentic AI Foundation on August 20&lt;/a&gt;, placing it beside MCP under one neutral home. The foundation has grown to more than 250 member organizations.&lt;/p&gt;

&lt;p&gt;The next big gathering is close. &lt;a href="https://aaif.io/press/agentic-ai-foundation-announces-global-2026-events-program-anchored-by-agntcon-mcpcon-north-america-and-europe/" rel="noopener noreferrer"&gt;AGNTCon + MCPCon North America runs October 22 and 23 in San Jose&lt;/a&gt;. It is the foundation's flagship event, and specification announcements often cluster around it. Expect news on MCP, A2A, goose, and AGENTS.md there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent Identity Remains Unsettled
&lt;/h3&gt;

&lt;p&gt;One gap stands out. There is still no agreed standard for agent identity and authorization. A recent analysis found that &lt;a href="https://forkast.news/the-ietf-published-a-draft-for-agent-identity-the-market-already-shipped/" rel="noopener noreferrer"&gt;the IETF has no adopted working group for agent identity&lt;/a&gt;, only a crowd of competing individual drafts. One of those drafts, on agent-native OAuth challenges, expired on October 5.&lt;/p&gt;

&lt;p&gt;Drafts keep coming. The &lt;a href="https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.html" rel="noopener noreferrer"&gt;OpenA2A Agent Authorization Protocol draft&lt;/a&gt; defines agent identity tokens, scoped capability grants, cross-agent delegation, and revocation. It argues that OAuth 2.0, SAML, and OpenID Connect were not designed for agents. Other drafts make similar arguments with different designs. Until one wins, every vendor ships its own approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generated Interfaces Need a Standard Too
&lt;/h3&gt;

&lt;p&gt;OpenAI's Intelligent UI raises a standards question. MCP already has an answer in its ecosystem. MCP Apps is an official extension that &lt;a href="https://en.wikipedia.org/wiki/Model_Context_Protocol" rel="noopener noreferrer"&gt;standardizes how MCP servers deliver interactive interfaces such as dashboards, forms, and charts to host applications&lt;/a&gt;. Intelligent UI is a model-generated interface inside one product. MCP Apps is a server-delivered interface that works across hosts. Both will matter. Teams building data tools should know the difference before they pick a path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standards at the Data Layer
&lt;/h3&gt;

&lt;p&gt;Some of the most useful standards work this week happened in the data layer, where agents get their facts. Apache Ossie, the open semantic interchange specification, &lt;a href="https://lists.apache.org/thread/dpjz5jg84rsbyjv44rp6ylxo8khfzz9w" rel="noopener noreferrer"&gt;debated whether to ship an MCP server and where it belongs&lt;/a&gt;. The emerging answer is to keep a small shared contract in the spec, a declarative query shape plus standard error codes, and let engines and catalogs run the servers. One contributor already built a ClickHouse executor against that contract and reported which error codes it supports.&lt;/p&gt;

&lt;p&gt;Apache Iceberg passed a vote to &lt;a href="https://lists.apache.org/thread/pllz983cvffryzcwskglsr0cyo7p0gxx" rel="noopener noreferrer"&gt;recommend a standard User-Agent format for REST catalog clients&lt;/a&gt;, with 19 votes in favor and none against. Iceberg contributors also agreed to &lt;a href="https://lists.apache.org/thread/ws89d7doddgqc2j8fc2xt84bchr374t2" rel="noopener noreferrer"&gt;add a &lt;code&gt;none&lt;/code&gt; value to the access delegation header&lt;/a&gt;, so a client can say it brings its own storage credentials. These are small rules. They are exactly the kind of rules agents need, because an agent cannot ask a human which credential path a catalog expects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; Treat MCP like any production API. Put it behind a gateway, log every tool call, and scope credentials tightly. Do not wait for an agent identity standard before you build controls. Use short-lived credentials and per-agent scopes with the auth tools you already have. And if your agents query business data, give them a semantic layer and a catalog with clear contracts, not raw tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure: The Rack Becomes the Product
&lt;/h2&gt;

&lt;p&gt;The OCP Global Summit ran October 12 to 15 in San Jose. It is where hyperscalers and chipmakers publish the hardware designs that data centers build from. This year the message was clear. The unit of AI compute is no longer the chip. It is the rack, and everyone wants their rack design to become the standard.&lt;/p&gt;

&lt;h3&gt;
  
  
  NVIDIA Opens Vera Rubin
&lt;/h3&gt;

&lt;p&gt;NVIDIA &lt;a href="https://www.storagenewsletter.com/2026/10/14/ocp-global-summit-2026-amid-ecosystem-adoption-nvidia-opens-vera-rubin-architecture-to-help-scale-ai-factories-worldwide/" rel="noopener noreferrer"&gt;contributed its Vera Rubin rack and compute tray designs to OCP&lt;/a&gt; through its MGX architecture. That lets system builders such as Foxconn, Quanta, Wiwynn, and Supermicro build compatible racks faster.&lt;/p&gt;

&lt;p&gt;The new &lt;a href="https://convergedigest.com/nvidia-ocp-2026-vera-rubin-mgx-spectrum6-usfp/" rel="noopener noreferrer"&gt;MGX 1.2 spec supports racks up to 250 kW&lt;/a&gt;. It adds native 19-inch equipment support, configurable I/O bays, and fanless liquid-cooled compute trays. NVIDIA also released four open source components for its DSX AI Factory software for configuration, cluster readiness, rack management, and cluster provisioning.&lt;/p&gt;

&lt;p&gt;NVIDIA joined AMD, Google, Meta, and Microsoft to publish the Open Data Center Specification v0.7 and an OCP Grid Resilience Specification. With Cisco, it is developing the Ultra-Dense Small Form Factor Pluggable optical module, which &lt;a href="https://finance.biggo.com/news/70e70217-1185-4c19-a230-9abbc3e68b5f" rel="noopener noreferrer"&gt;targets four times the bandwidth density in a similar footprint&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For context, each Rubin GPU carries &lt;a href="https://hashrateindex.com/blog/nvidia-vera-rubin-nvl72-specs-breakdown/" rel="noopener noreferrer"&gt;288 GB of HBM4 at 22 TB/s of bandwidth&lt;/a&gt;, and a Vera Rubin NVL72 rack holds 72 GPUs and 36 Vera CPUs. A 250 kW rack is roughly the power draw of a small office building, packed into one cabinet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft Maia 300
&lt;/h3&gt;

&lt;p&gt;Microsoft &lt;a href="https://finance.yahoo.com/technology/article/microsoft-reveals-maia-300-ai-chip-as-it-works-to-reduce-dependence-on-nvidia-amd-130000212.html" rel="noopener noreferrer"&gt;unveiled its Azure Maia 300 AI chip at OCP on October 12&lt;/a&gt;. Microsoft says it delivers 40% more tokens per megawatt than leading GPU-based systems. A 96-chip rack offers seven times the rack-scale token throughput of Maia 200.&lt;/p&gt;

&lt;p&gt;Note the metric. Microsoft did not lead with FLOPS. It led with tokens per megawatt. Power, not chips, is now the binding limit for many data centers, so the useful measure is how much work each watt buys. Maia 200 already runs Microsoft 365 Copilot and OpenAI models in production, so Maia 300 has a real workload waiting.&lt;/p&gt;

&lt;h3&gt;
  
  
  AMD Helion and the CPU Comeback
&lt;/h3&gt;

&lt;p&gt;AMD &lt;a href="https://thefpsreview.com/2026/10/14/amds-helion-rack-packs-32768-zen-6-cores-and-lisa-su-shows-off-the-first-epyc-with-lpddr-memory" rel="noopener noreferrer"&gt;introduced Helion on October 12&lt;/a&gt;, an open rack blueprint built on an OCP spec design and aimed at AI agent workloads. One example configuration is a CPU-only rack with up to 32,768 Zen 6 cores. AMD plans to contribute the spec to OCP, and partner configurations from Cisco, Dell, Hon Hai, and HPE are slated for November 2026.&lt;/p&gt;

&lt;p&gt;Why a CPU rack for AI? Agents do a lot of work that is not matrix math. They call tools, run code, parse documents, query databases, and wait on network calls. That work runs on CPUs. As agent systems grow, CPU capacity becomes as important as GPU capacity.&lt;/p&gt;

&lt;p&gt;Lisa Su also showed a 6th Gen EPYC chip codenamed Verano, which AMD describes as the first EPYC CPU with an LPDDR memory interface. It arrives in 2027. LPDDR trades some serviceability and maximum capacity for better bandwidth per watt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intel Bets on LPDDR5X Instead of HBM
&lt;/h3&gt;

&lt;p&gt;Intel &lt;a href="https://fourweekmba.com/ai-intel-details-crescent-island-gpu-and-new-xeon-rack-designs/" rel="noopener noreferrer"&gt;detailed its GPU D-series, formerly code-named Crescent Island&lt;/a&gt;. It pairs up to 480 GB of LPDDR5X memory with 1.5 TB/s of bandwidth and 1.3 petaflops of FP8 compute in a 350-watt envelope. Intel says one card supports models with up to 300 billion parameters. Customer sampling is underway, with no price or ship date announced.&lt;/p&gt;

&lt;p&gt;The memory choice is the story. Intel skipped HBM entirely. LPDDR5X has far less bandwidth than HBM4, but it costs less, uses less power, and is not sold out. For inference on large models, capacity often matters more than peak bandwidth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Marvell and CXL Memory
&lt;/h3&gt;

&lt;p&gt;Marvell &lt;a href="https://www.marvell.com/company/newsroom/marvell-open-ai-infrastructure-ocp-global-summit-2026.html" rel="noopener noreferrer"&gt;showed its Structera CXL memory expansion line, Teralynx T100 102.4T switch, and 1.6T optics&lt;/a&gt; at OCP. Coverage of the summit reported that &lt;a href="https://fourweekmba.com/ai-daily-roundup-12-oct-2026-ai-chips-racks-large-loads/" rel="noopener noreferrer"&gt;Marvell's new CXL chip supports up to 9 TB of memory&lt;/a&gt;. CXL lets servers attach large pools of memory over a standard interconnect, another way around the HBM shortage.&lt;/p&gt;

&lt;h3&gt;
  
  
  The HBM Squeeze
&lt;/h3&gt;

&lt;p&gt;All of these memory choices trace back to one shortage. HBM4 contract prices &lt;a href="https://tech-insider.org/hbm4-memory-shortage-amd-samsung-sk-hynix-price-spike-2026/" rel="noopener noreferrer"&gt;jumped 117% week over week in early October&lt;/a&gt;, according to the Korea Economic Daily. Mass production only started ramping in the second quarter of 2026, just as NVIDIA's Vera Rubin and AMD's Instinct MI455 began drawing on the same suppliers.&lt;/p&gt;

&lt;p&gt;AMD moved to lock in supply. After Lisa Su met Samsung executives in Seoul on October 7, &lt;a href="https://tech-insider.org/hbm4-memory-shortage-amd-samsung-sk-hynix-price-spike-2026/" rel="noopener noreferrer"&gt;AMD and Samsung signed a three-year memorandum covering HBM4, advanced DDR5, joint memory development, advanced packaging, and possible future foundry work&lt;/a&gt;. AMD's MI455 ships with 432 GB of HBM4 on board.&lt;/p&gt;

&lt;p&gt;The shortage reaches beyond data centers. A roundup of October 12 news noted that &lt;a href="https://fourweekmba.com/ai-daily-roundup-12-oct-2026-ai-chips-racks-large-loads/" rel="noopener noreferrer"&gt;Counterpoint estimated smartphone shipments fell 20% in Q3 as memory shortages constrained supply&lt;/a&gt;. The same day, parts of FERC's order on large loads such as data centers took effect, including a large load definition and registry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Formats Are Infrastructure Too
&lt;/h3&gt;

&lt;p&gt;Hardware is only half of the cost story. The other half is how data is stored and moved. This week the Apache Parquet community &lt;a href="https://lists.apache.org/thread/m8d0520g7df8686p6l1nbst46hn29bw2" rel="noopener noreferrer"&gt;merged the C++ implementation of ALP encoding&lt;/a&gt; for floating-point data. Floating-point columns are everywhere in AI: embeddings, model features, sensor readings. Better compression on those columns means less storage, less I/O, and less memory per query.&lt;/p&gt;

&lt;p&gt;Parquet contributors also &lt;a href="https://lists.apache.org/thread/5vj5ttfjrrwhjmq2y5lpd5w048qw5yv9" rel="noopener noreferrer"&gt;debated a native vector type&lt;/a&gt;. One side wants a simple fixed-length VECTOR type now. The other side argues the real gains come from quantized vectors, where storage and speed improve by orders of magnitude. Apache Iceberg is &lt;a href="https://lists.apache.org/thread/49bm2d8szbzkvtdog38s1o6zb04cj67o" rel="noopener noreferrer"&gt;designing its own vector type on top of the Parquet work&lt;/a&gt;. And Apache Arrow &lt;a href="https://lists.apache.org/thread/sltmotxsw3gq5p7jqvm5bcvrynsflvqg" rel="noopener noreferrer"&gt;shipped release 26.0.0&lt;/a&gt;, the in-memory format that moves data between engines without conversion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for you.&lt;/strong&gt; Memory is the constraint to plan around for the next year. If you buy or rent GPU capacity, expect HBM-heavy instances to stay scarce and pricey. Look at LPDDR and CXL-based options for inference workloads that need capacity more than bandwidth. And do not overlook the cheapest fix. Compressing and organizing your data well cuts memory and I/O on every query, no new hardware required.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Layer: Where Agents Get Their Facts
&lt;/h2&gt;

&lt;p&gt;Every story this week ends at the same place. Cheaper models, generated interfaces, and agent fleets all need trustworthy data to work with.&lt;/p&gt;

&lt;p&gt;Look at the model news. Haiku 5.5 makes it cheap to run thousands of small agent calls. Each of those calls needs context: a table, a metric, a document. If the context is wrong, a cheap model produces a cheap wrong answer at scale. GPT-6's Intelligent UI turns answers into charts. A chart built on a bad join looks just as convincing as one built on a good one.&lt;/p&gt;

&lt;p&gt;The open lakehouse is building for this. Apache Iceberg voted this week to &lt;a href="https://lists.apache.org/thread/7ctclwomk8yqcclzj82z0htlqk2xjf49" rel="noopener noreferrer"&gt;add a File type to its v4 spec&lt;/a&gt;. A file column stores a URI, offset, size, content type, and checksum for each referenced object. That lets a table track the PDFs, images, and audio that AI pipelines process, with the same metadata and governance Iceberg uses for rows. Iceberg also passed a rule that &lt;a href="https://lists.apache.org/thread/y2fvgh4ojfcss7o76drkgdvdrpb17ccm" rel="noopener noreferrer"&gt;snapshot timestamps must always increase in v4&lt;/a&gt;, which fixes time travel queries when writer clocks drift. When an agent asks what the data looked like last Tuesday, it gets the right answer.&lt;/p&gt;

&lt;p&gt;Apache Polaris, the open catalog for Iceberg, discussed &lt;a href="https://lists.apache.org/thread/ls38t86m9mrpdmcqfmqmjtg768dny8tn" rel="noopener noreferrer"&gt;exposing table labels to engines as a view over its tag system&lt;/a&gt;. Labels carry classifications such as personal data or confidential. Callers only see the labels they already have permission to see. That is the kind of control an agent needs before it reads a table.&lt;/p&gt;

&lt;p&gt;Apache Ossie is the layer that gives agents shared meaning. It defines metrics, dimensions, and relationships once so every tool reads them the same way. This week a contributor &lt;a href="https://lists.apache.org/thread/dnl13g1nlh7l2o6gnw9qjp7wqmrh0tds" rel="noopener noreferrer"&gt;tested a simple sum metric through 14 converters&lt;/a&gt;. Eight preserved the standard SQL expression. Only one preserved Ossie's own portable dialect. That honest measurement is exactly what a young standard needs. It shows where the gaps are before agents depend on them.&lt;/p&gt;

&lt;p&gt;The takeaway is simple. Open formats, open catalogs, and open semantic definitions are not side projects to AI. They are the foundation that makes cheap, fast models safe to use on business data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Week in Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 million.&lt;/strong&gt; Gemini 4 Argon's output token limit, up from 64,000.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$2 and $10.&lt;/strong&gt; Argon's introductory price per million input and output tokens, rising to $4 and $20 after November 30.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;300 TiB.&lt;/strong&gt; Memory Google says Argon agents freed across its data centers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;90%.&lt;/strong&gt; The cut in Claude Haiku 5.5's base token price compared with Haiku 4.5.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;75%.&lt;/strong&gt; Anthropic's estimate of the average per-task savings, once the new tokenizer's extra tokens are counted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30%.&lt;/strong&gt; How many more tokens the Claude 4.7 tokenizer produces for the same input than Haiku 4.5's tokenizer did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;440 million vs. 140 million.&lt;/strong&gt; Output tokens Haiku 5.5 and GPT-6 Luna each used to finish the Artificial Analysis test suite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1.2 billion.&lt;/strong&gt; Weekly ChatGPT users OpenAI says now get GPT-6.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;44%.&lt;/strong&gt; How much sooner GPT-6 Instant starts answering web search questions than GPT-5.6 Instant, per OpenAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1.05 trillion.&lt;/strong&gt; Total parameters in Mistral Large 4.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3,800.&lt;/strong&gt; Grace Blackwell GPUs Mistral used to train Large 4.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;250 kW.&lt;/strong&gt; Maximum rack power in NVIDIA's MGX 1.2 spec for Vera Rubin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;40%.&lt;/strong&gt; More tokens per megawatt Microsoft claims for Maia 300 over leading GPU systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;32,768.&lt;/strong&gt; Zen 6 cores in AMD's CPU-only Helion rack configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;480 GB.&lt;/strong&gt; LPDDR5X memory on Intel's GPU D-series partner cards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;117%.&lt;/strong&gt; The week-over-week jump in HBM4 contract prices reported in early October.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;102 vs. 99.&lt;/strong&gt; Companies naming MCP and OpenAPI in job postings in API Evangelist's count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;19 to 0.&lt;/strong&gt; The Apache Iceberg vote on a standard REST client User-Agent format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read together, these numbers tell one story. Model prices are falling fast while memory prices are rising fast. The labs can only keep cutting prices if hardware gets more work out of each watt and each gigabyte. That is why this week's OCP news centered on power, memory, and open rack designs rather than raw chip speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practitioner Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test Gemini 4 Argon now.&lt;/strong&gt; The introductory price runs through November 30. Run it on your own evaluations, but budget at the $4 and $20 rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-run your model cost math.&lt;/strong&gt; Haiku 5.5 at $0.10 per million input tokens changes which tasks are worth automating. Measure cost per completed task, since thinking tokens can triple the bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the 100,000-token line.&lt;/strong&gt; Haiku 5.5 charges five times more above it. Trim context or split long jobs where you can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turn on agent sandboxing.&lt;/strong&gt; GitHub now includes local sandboxing with Copilot. Use it, or an equivalent, on every developer machine that runs agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin models in long workflows.&lt;/strong&gt; Claude Code's new workflow pinning keeps every subagent on one model. That keeps cost and behavior predictable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan the GPTs migration.&lt;/strong&gt; Enterprise ChatGPT users cannot create new custom GPTs after October 26. Start moving to plugins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure MCP like an API.&lt;/strong&gt; Gateways, logs, and scoped credentials. Dedicated MCP security products are now on the market.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget for memory, not just compute.&lt;/strong&gt; HBM4 prices jumped sharply this month. Consider LPDDR and CXL options for capacity-heavy inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give agents governed data.&lt;/strong&gt; Use an open catalog with clear access rules and a semantic layer with shared metric definitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to Watch Next Week
&lt;/h2&gt;

&lt;p&gt;AGNTCon + MCPCon North America opens in San Jose on October 22. Expect MCP and A2A specification news, new members for the Agentic AI Foundation, and security tooling launches. Mistral's promised open weights for Large 4 are due by the end of October, so watch for the download and the license terms. Independent benchmarks for Gemini 4 Argon and Meta's Muse Wonder should start appearing, and Google says more Gemini 4 models are coming. The OCP summit wraps up October 15, and more rack and memory details will trickle out after it. On the open data side, the Iceberg File type vote closes, and the Parquet vector type debate continues.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;The AI and data world moves fast, and a weekly newsletter only scratches the surface. I have written more than 50 books on AI-assisted development, agentic AI, the open lakehouse, Apache Iceberg, and data engineering. They cover the tools and ideas in this newsletter in depth, with hands-on examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browse the full catalog at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;&lt;/strong&gt; and pick the book that fits what you are building next.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Apache Data Lakehouse Weekly: September 29 to October 7, 2026</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 07 Oct 2026 17:43:15 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-29-to-october-7-2026-42im</link>
      <guid>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-29-to-october-7-2026-42im</guid>
      <description>&lt;p&gt;Apache Iceberg 1.12.0 shipped this week, and the release set off a chain of follow-up work across the open lakehouse stack. Polaris started its upgrade to the new Iceberg client within a day. Arrow opened its 26.0.0 vote, DataFusion pushed four releases through in one stretch, and Parquet moved closer to a compromise on a numeric vector type. Apache Ossie (incubating) spent the week arguing about how AI agents should query a semantic model, which turned into one of the most useful design debates on any list this fall.&lt;/p&gt;

&lt;p&gt;Underneath the releases sit three threads that run through every project. Contributors keep asking how AI tools fit into the way Apache projects review, test, and credit code. Vector data keeps pulling the file format, the table format, and the semantic layer toward new types and indexes. And several communities are drawing sharper lines between a specification and the code that implements it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Week by the Numbers
&lt;/h2&gt;

&lt;p&gt;The six dev lists carried 403 messages across 102 threads between September 29 and October 7. Iceberg and Polaris tied for the busiest list with 118 messages each. Ossie followed with 88, DataFusion posted 45, Arrow had 19, and Parquet had 15. Message counts undersell Parquet and Arrow this week, since both lists handled format decisions that will shape files for years.&lt;/p&gt;

&lt;p&gt;Release activity stood out. Iceberg Java 1.12.0 and Iceberg Go 0.7.0 both passed their votes. DataFusion Comet 1.1.0, DataFusion Ballista 55.0.0, and DataFusion Python 54.1.0 all passed, and DataFusion 55.2.0 collected enough binding votes by the end of the window. Arrow 26.0.0 RC0 drew five binding approvals before the week closed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Iceberg
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Iceberg 1.12.0 ships
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian &lt;a href="https://lists.apache.org/thread/kst8b58yjnvfy353g2ysvb4fkx3xdcr9" rel="noopener noreferrer"&gt;announced Apache Iceberg 1.12.0&lt;/a&gt; on October 1 after the &lt;a href="https://lists.apache.org/thread/ychjvqbmt7ksmczhct3mnw8j3yowwbcr" rel="noopener noreferrer"&gt;RC2 vote passed&lt;/a&gt; with four binding and ten non-binding approvals. Russell Spitzer, Kevin Liu, Szehon Ho, and Amogh Jahagirdar cast the binding votes. Russell thanked Neelesh and called the cycle a slog, and several contributors echoed the thanks. Hongyue Zhang added a hope that the project keeps a steady release cadence from here.&lt;/p&gt;

&lt;p&gt;Neelesh followed the announcement with a &lt;a href="https://lists.apache.org/thread/kst8b58yjnvfy353g2ysvb4fkx3xdcr9" rel="noopener noreferrer"&gt;release summary&lt;/a&gt; that reads like a map of where the format is going. Variant columns gained vectorized Parquet reads for unshredded data in Spark 4.0 and 4.1. Shredding now applies only to single-type fields, and Flink and Kafka Connect can write shredded Variant data. Geometry and geography types read and write in Parquet and Avro, with end-to-end support in Spark 4.1.&lt;/p&gt;

&lt;p&gt;Flink gained a maintenance task that converts equality deletes into deletion vectors, plus SQL support for Iceberg views. Spark 4.1 picked up a Hilbert-curve clustering strategy for &lt;code&gt;rewrite_data_files&lt;/code&gt;. The REST spec now describes read restrictions such as column masking and row filters. The release also lays the first V4 foundations, including a V4 manifest reader and writer, relative paths, and content statistics. Flink 2.2 and 2.3 joined the support matrix, while Spark 3.4 and Flink 2.0 left it. The release carries 777 commits from 142 contributors since 1.11.0.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/2jkbn7pq60fykmxgm07rfxj2nhy4xoow" rel="noopener noreferrer"&gt;RC2 vote thread&lt;/a&gt; showed a new pattern in how people verify releases. Kurtis Wright opened his vote with a disclaimer that an agent skill for validating open source release candidates generated his checks. His report covered signatures, tarball contents, and the LICENSE and NOTICE files inside each of the 12 runtime jars. Kevin Liu ran the release against the PyIceberg CI and also pointed an agent at the repository to scan for correctness issues. The agent flagged a few problems, and Kevin confirmed they predate 1.12, so none blocked the release.&lt;/p&gt;

&lt;p&gt;That detail matters for anyone running Iceberg in production. Human release managers still decide what ships, but the verification depth per voter keeps climbing. A single non-binding voter now checks third-party packages inside every bundled jar, a task few volunteers attempted by hand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spec changes and release notes
&lt;/h3&gt;

&lt;p&gt;Péter Váry noticed something odd while reviewing the 1.12.0 notes. The Java release notes listed spec changes, such as the SQL UDF specification and geometry clarifications for V3. Péter &lt;a href="https://lists.apache.org/thread/0r9fhdb1zc74ycz0hx2wyl1xyn48jyxl" rel="noopener noreferrer"&gt;argued that this misleads readers&lt;/a&gt;, since spec changes take effect when a vote passes or a spec version is finalized, not when a Java binary ships. Manu Zhang, Szehon Ho, Kevin Liu, and Hongyue Zhang agreed. Péter opened &lt;a href="https://github.com/apache/iceberg/pull/18349" rel="noopener noreferrer"&gt;PR 18349&lt;/a&gt; to separate the two, and Kevin asked for a matching changelog for the REST catalog spec, which has seen the most change lately.&lt;/p&gt;

&lt;p&gt;Kurtis Wright pushed further and floated a separate iceberg-format repository to hold the specs and drive the website, similar to how Parquet keeps parquet-format apart from its Java code. Danny Jones supported the idea and suggested keeping commit history, as the iceberg-rust DataFusion move did recently. Daniel Weeks pushed back hard. He said the project has iterated on docs and site layouts many times, and that moving the specs adds little value while keeping them next to the reference implementation works fine. For now the practical outcome is a dedicated spec changelog, not a new repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  REST catalog: User-Agent, delegation, and expressions
&lt;/h3&gt;

&lt;p&gt;Rahul Mahadev &lt;a href="https://lists.apache.org/thread/bzs62qqt9k4t9sr76pk0d36l47zwcpyb" rel="noopener noreferrer"&gt;reopened the vote&lt;/a&gt; on a standard User-Agent format for REST clients after taking review feedback from Alex Dutra. The proposal uses the standard HTTP header with product and version tokens, ordered from most specific to least. An example looks like &lt;code&gt;Spark/4.0.0 iceberg-spark/1.9.0 iceberg-java/1.9.0 (scala 2.13.16)&lt;/code&gt;. When a client sends the header, it must include an Iceberg library token such as &lt;code&gt;iceberg-java&lt;/code&gt;, &lt;code&gt;pyiceberg&lt;/code&gt;, &lt;code&gt;iceberg-rust&lt;/code&gt;, or &lt;code&gt;iceberg-go&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The vote spells out what the header is not. Servers must not reject requests for a missing or malformed header, and they must not use it for authentication. It is not a capability negotiation mechanism. Servers can refuse operations from client versions known to be unsafe. The thread collected binding approvals from Daniel Weeks, Russell Spitzer, Sung Yun, Amogh Jahagirdar, Eduard Tudenhöfner, Gang Wu, Zheng Hu, and Ryan Blue. Zheng Hu also noted CVE scanning failures on &lt;a href="https://github.com/apache/iceberg/pull/17727" rel="noopener noreferrer"&gt;PR 17727&lt;/a&gt; that need attention before merge. For catalog operators, this gives a consistent way to see which engines and library versions hit the catalog, which helps with support and with retiring unsafe clients.&lt;/p&gt;

&lt;p&gt;A second REST thread asked what servers should do when they cannot satisfy the &lt;code&gt;X-Iceberg-Access-Delegation&lt;/code&gt; header. Alex Dutra &lt;a href="https://lists.apache.org/thread/l02zjbx3j1pddqhj3wg8gkj10o90l2cp" rel="noopener noreferrer"&gt;proposed a new value&lt;/a&gt; named &lt;code&gt;local&lt;/code&gt;, so a client can say it works with its own credentials. Daniel Weeks preferred &lt;code&gt;none&lt;/code&gt;, which tells the catalog the client does not need credentials from it, so the catalog can skip generating them. The same debate ran on the Polaris list, covered below.&lt;/p&gt;

&lt;p&gt;Revanth Ch raised a migration question about the &lt;a href="https://lists.apache.org/thread/48pqzgp1x095yn7clrpbh1vb56gfbq1t" rel="noopener noreferrer"&gt;new expression JSON forms&lt;/a&gt;. The expressions spec now prefers a form with explicit &lt;code&gt;left&lt;/code&gt; and &lt;code&gt;right&lt;/code&gt; terms, while the Java, Go, and C++ clients still read and write only the older form. Revanth proposed conformance fixtures in the iceberg-verification repository to track the migration. Ryan Blue answered with a simple recommendation: servers should drop residuals entirely, since they cost a lot to compute and clients rarely apply them.&lt;/p&gt;

&lt;h3&gt;
  
  
  V4 design work
&lt;/h3&gt;

&lt;p&gt;The V4 spec work produced three focused threads. Anoop Johnson opened a discussion on &lt;a href="https://lists.apache.org/thread/tv7bvqctdfh5qng1sx5rp8r4r00nsv60" rel="noopener noreferrer"&gt;stats tightness&lt;/a&gt;. Tight bounds let an engine answer some queries from metadata alone, but once a deletion vector attaches to a file, today's rules treat every bound as loose. Anoop wanted a way to keep tightness when a DV is present. Russell Spitzer walked through the cases where per-column tightness helps and concluded that most are narrow or hypothetical. Daniel Weeks, Eduard Tudenhöfner, Hongyue Zhang, and Szehon Ho all backed a single file-wide flag.&lt;/p&gt;

&lt;p&gt;Eduard Tudenhöfner raised a &lt;a href="https://lists.apache.org/thread/8f91nk08cq2pxtsdpf1o34ktthn7jcwk" rel="noopener noreferrer"&gt;rename of &lt;code&gt;avg_value_size_in_bytes&lt;/code&gt; to &lt;code&gt;total_bytes&lt;/code&gt;&lt;/a&gt; in content stats, tracked in &lt;a href="https://github.com/apache/iceberg/pull/18308" rel="noopener noreferrer"&gt;PR 18308&lt;/a&gt;. A total aggregates cleanly across files, and the average still falls out of total bytes divided by value count. The timing hurt, since &lt;code&gt;avgValueSizes()&lt;/code&gt; landed in central Java classes and the REST spec in 1.12.0. Ryan Blue suggested storing &lt;code&gt;totalBytes&lt;/code&gt; and computing &lt;code&gt;avgValueSize&lt;/code&gt; from it in the Java API. Steven Wu agreed and noted that the REST spec does not yet support V4 tables, so a JSON break there is acceptable.&lt;/p&gt;

&lt;p&gt;Gábor Kaszab pointed the list at &lt;a href="https://lists.apache.org/thread/7fp9gcgp7948omd3kk407390o9dnkbxf" rel="noopener noreferrer"&gt;PR 17533 on reusable encryption keys&lt;/a&gt; for statistics files. If the approach holds, the same pattern applies to encrypting the V4 root metadata file. Sandeep Gottimukkala proposed a one-sentence &lt;a href="https://lists.apache.org/thread/c91ph82tnrlhj8qq9lj8n72b0s7qq5r0" rel="noopener noreferrer"&gt;spec clarification on promotable types&lt;/a&gt; in &lt;a href="https://github.com/apache/iceberg/pull/18404" rel="noopener noreferrer"&gt;PR 18404&lt;/a&gt;. Readers must accept any data file column whose type promotes to the field's type, whether or not the field evolved. Sandeep said some systems check for an exact type match and break on valid tables.&lt;/p&gt;

&lt;p&gt;Alexander Loeser and Andrei Tserakhau kept the &lt;a href="https://lists.apache.org/thread/8f89jt50p53xkorh3z39dtz13jchd0gx" rel="noopener noreferrer"&gt;collation discussion&lt;/a&gt; moving. Both prefer storing bounds for multiple collation versions per data file, which helps during ICU upgrades. The open question is layout. Andrei plans to prototype the current &lt;code&gt;content_stats&lt;/code&gt; layout against Russell's idea of derived &lt;code&gt;COLLATE(field, collation, version)&lt;/code&gt; fields and compare on-disk size with one, two, and three live versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Indexes, vectors, and a new file format
&lt;/h3&gt;

&lt;p&gt;Shawn Chang reopened a settled question about the &lt;a href="https://lists.apache.org/thread/8zq10wdsz5rx8v35zgon24r4gnsjsv9h" rel="noopener noreferrer"&gt;index spec's non-overlapping region files&lt;/a&gt;. He listed the costs: write amplification on hot key ranges and more maintenance work. Péter Váry explained the design goal. The index targets fast, predictable single-key lookups, and non-overlapping regions mean one region-file read once the tracking file sits in cache. Region files stay small, around 4 MB, so writing a consolidated region costs about the same as writing an overlay. Péter later posted the &lt;a href="https://lists.apache.org/thread/tvr8nsrl5srnslsxnk9thgt44m73y2ws" rel="noopener noreferrer"&gt;index sync summary&lt;/a&gt;, confirming non-overlapping regions, total row ordering through sort keys (renamed from cluster keys), and a ready-for-review spec in &lt;a href="https://github.com/apache/iceberg/pull/16961" rel="noopener noreferrer"&gt;PR 16961&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Steven Wu announced that the Thursday biweekly sync &lt;a href="https://lists.apache.org/thread/k3ncg4j27mpfqcm57px8goc0ox8rvdlp" rel="noopener noreferrer"&gt;will cover both File and Vector types&lt;/a&gt; starting October 8. The file type work nears consensus, so most of the time will go to the Vector type design from Yan Yan. That matters because Parquet is debating its own vector type this week, and the two designs need to line up.&lt;/p&gt;

&lt;p&gt;Martin Prammer started a &lt;a href="https://lists.apache.org/thread/pb66o8gk8nqc6yormfld7pkt6rdfkvh7" rel="noopener noreferrer"&gt;mailing-list discussion on adding Vortex&lt;/a&gt; as an Iceberg file format. The draft now opens with an overview of Vortex and its community policies, after questions at the last community sync. Martin asked the list to confirm two things before going further: whether the general rules for adding any file format match expectations, and whether concerns remain about how Vortex meets them. Iceberg has supported Parquet, ORC, and Avro for years, so any new format faces a high bar on governance and long-term stability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clients and catalogs
&lt;/h3&gt;

&lt;p&gt;Matt Topol's &lt;a href="https://lists.apache.org/thread/6sfhg7z7rqt4nxc3m9pgt40354vbgnw1" rel="noopener noreferrer"&gt;Iceberg Go v0.7.0 vote&lt;/a&gt; &lt;a href="https://lists.apache.org/thread/k8lo7j1xfq2kq1f0tblvz8kklc49g6tj" rel="noopener noreferrer"&gt;passed&lt;/a&gt; with four binding approvals from Russell Spitzer, Sung Yun, Fokko Driesprong, and Matt. Xuanwo reported 3,344 passing tests on Go 1.25.9 and one harmless assertion failure on Go 1.27.1. Russell joked that he complained to Matt about a &lt;code&gt;Claude.md&lt;/code&gt; file in the release.&lt;/p&gt;

&lt;p&gt;In Rust, Danny Jones posted a &lt;a href="https://lists.apache.org/thread/pmck5pojp28fcyw0n8x7tdo1kclh9yrg" rel="noopener noreferrer"&gt;plan to drop the dependency TSV files&lt;/a&gt; from iceberg-rust. The files serve no license obligation and go stale between releases. Danny prefers Cargo for consumers and &lt;code&gt;cargo-deny&lt;/code&gt; policies in CI for maintainers. Shawn Chang, Kevin Liu, and Kurtis Wright agreed, and Xuanwo, who added the files, supports removal.&lt;/p&gt;

&lt;p&gt;Andrei Tserakhau revived a debate on &lt;a href="https://lists.apache.org/thread/5cnrhd3kfwzxywkj07kdls8o1twoomoq" rel="noopener noreferrer"&gt;catalog-provided metadata tables&lt;/a&gt;. Java and Spark treat metadata tables as deterministic projections of table metadata, which led to closing a labels metadata-table PR. Andrei argued that PyIceberg, iceberg-rust, and iceberg-go expose &lt;code&gt;inspect&lt;/code&gt; as a library read API, so returning catalog labels as Arrow lets users filter many tables at once for PII, ownership, or cost tags. Manu Zhang objected that the API cannot distinguish a table with no labels from a catalog that does not support labels.&lt;/p&gt;

&lt;p&gt;Javier Sanchez Beltran from Expedia asked why &lt;a href="https://lists.apache.org/thread/r8pbrsvqyyvtko4qw6n14b0gvyqpp1rp" rel="noopener noreferrer"&gt;GlueCatalog writes so little&lt;/a&gt; into the Glue table on commit, compared with the Hive catalog. Shawn Chang said the small footprint is intentional, since Iceberg metadata stays the source of truth and Lake Formation handles authorization. Daniel Weeks named the deeper problem a split brain. Both HMS and Glue mirror some Iceberg metadata but not all of it, and tools that read the mirror instead of the Iceberg metadata get stale or lossy answers. Javier &lt;a href="https://lists.apache.org/thread/y7mong1h19onxlxdrb757drsd69rmt1b" rel="noopener noreferrer"&gt;replied&lt;/a&gt; that his team will change its tooling to read the Iceberg metadata directly. That is the right lesson for any platform team: treat the catalog entry as a pointer, and read the table's own metadata for truth.&lt;/p&gt;

&lt;p&gt;The Kafka Connect runtime drew attention from two directions. Confluent's connector hub &lt;a href="https://lists.apache.org/thread/1sc2o7vz4vqz023l5z6s4164wcolyb5p" rel="noopener noreferrer"&gt;sent a vulnerability notice&lt;/a&gt; warning that the Iceberg connector faces removal unless the project addresses flagged issues. Robin Moffatt bumped his &lt;a href="https://lists.apache.org/thread/tj5w3bp5p6y86j2ynn5s0hctlqp1d138" rel="noopener noreferrer"&gt;discussion on PR 18019&lt;/a&gt;, which fixes the runtime LICENSE and NOTICE files and drops the Hive distribution. Jad Naous from Grepr also submitted a &lt;a href="https://lists.apache.org/thread/5bzhcv52spldl4490qv9s1pmjq1crd0j" rel="noopener noreferrer"&gt;fix for a race condition&lt;/a&gt; in Flink's DynamicIcebergSink through &lt;a href="https://github.com/apache/iceberg/pull/18356" rel="noopener noreferrer"&gt;PR 18356&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Planning 1.13
&lt;/h3&gt;

&lt;p&gt;Anoop Johnson &lt;a href="https://lists.apache.org/thread/mj8czb2ljf8kj1d7ldbfw39sffr9knjc" rel="noopener noreferrer"&gt;opened the 1.13 discussion&lt;/a&gt; and volunteered as release manager. Anurag Mantripragada had already claimed 1.13, so Anoop took 1.14 instead. Anurag proposed early January, given the holiday season, with the V4 spec PR, early V4 work, and Spark 4.2 support on his list. Xin Huang noted that the Spark 4.2 setup PR has merged while publishing stays skipped. Xin's strawman supports existing Iceberg features on Spark 4.2 and treats new Spark features such as the Transactional API as best effort. Daniel Weeks asked the group not to rule out a smaller release before year end, and Kurtis Wright added JDK 25 support to the wish list.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community events
&lt;/h3&gt;

&lt;p&gt;Three meetups landed on the calendar. Talat Uyarer &lt;a href="https://lists.apache.org/thread/0r8b7yt84xgmosbzzk9p8c4b3gq93gdb" rel="noopener noreferrer"&gt;opened the CFP&lt;/a&gt; for the Bay Area meetup on November 2 at Google in Sunnyvale, with submissions due October 19. Alex Stephen &lt;a href="https://lists.apache.org/thread/883h6g1291cx53rspfy9p782vt2omc86" rel="noopener noreferrer"&gt;reminded the list&lt;/a&gt; that the Seattle meetup on October 21 still needs talks. Scott Haines &lt;a href="https://lists.apache.org/thread/ov4bk4qg8pfod2s4z035mg3tj3tcv8mn" rel="noopener noreferrer"&gt;announced the October virtual meetup&lt;/a&gt; on October 23, where Liam Earley from Zus Health will cover manifest-level work in iceberg-rust to cut scan latency on TB-scale merge-on-read tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Polaris
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Riding the Iceberg 1.12 upgrade
&lt;/h3&gt;

&lt;p&gt;Alex Dutra moved fast after the Iceberg release. He &lt;a href="https://lists.apache.org/thread/86o65bk2bmk0d89wll8j45cw711lq5gj" rel="noopener noreferrer"&gt;marked the Polaris upgrade to Iceberg 1.12 ready for review&lt;/a&gt; in &lt;a href="https://github.com/apache/polaris/pull/5360" rel="noopener noreferrer"&gt;PR 5360&lt;/a&gt; and addressed the main worry up front. Iceberg 1.12 fixes URL path segment encoding, so the Java client now sends a space as &lt;code&gt;%20&lt;/code&gt; instead of &lt;code&gt;+&lt;/code&gt;. Alex explained that Polaris never used the old decoder on paths, since JAX-RS decodes path parameters per RFC 3986. The upgrade fixes the wrong URLs Polaris used to advertise and needs no migration of persisted namespace encoding. Yufei Gu urged the community to review the PR.&lt;/p&gt;

&lt;p&gt;The same release unblocks older work. Alex &lt;a href="https://lists.apache.org/thread/vk5zj7qtrztl36c9c1qt6d09lryjltdk" rel="noopener noreferrer"&gt;asked whether Polaris should resume remote signing&lt;/a&gt;, which stalled while the spec changed. Iceberg 1.12 adds a &lt;code&gt;remote-signing-config&lt;/code&gt; field to &lt;code&gt;LoadTableResult&lt;/code&gt;, which covers nearly every remaining requirement. One gap remains: refreshing the auth data inside that structure was left out of scope, and Alex plans a separate spec proposal with the Iceberg community.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storage: Cloudflare R2 and FileIO cleanup
&lt;/h3&gt;

&lt;p&gt;The busiest Polaris thread settled how to add &lt;a href="https://lists.apache.org/thread/gmd22d55xs4lbl8yhhy1yz6vv8q8lvbk" rel="noopener noreferrer"&gt;Cloudflare R2 with scoped credential vending&lt;/a&gt;. Yufei Gu worried that a free-form &lt;code&gt;credentialVendingMechanism&lt;/code&gt; string lets a client work against one server and fail against another. Dmitri Bourlatchkov argued that an enum blocks downstream projects from adding custom mechanisms. Jean-Baptiste Onofré pointed out that only catalog administrators touch this Management API field, since Iceberg REST clients just consume vended credentials.&lt;/p&gt;

&lt;p&gt;The community sync produced a compromise. The OpenAPI spec keeps the field as a string, documents the accepted values, and servers validate at runtime. Austen Tomek confirmed the plan for his PRs, starting with &lt;code&gt;STS&lt;/code&gt; and adding R2 in a second PR. Yufei proposed naming the R2 mechanism after how it signs, and Austen picked &lt;code&gt;R2_LOCAL_SIGNING&lt;/code&gt;, since token formats vary by provider. Dmitri and JB agreed.&lt;/p&gt;

&lt;p&gt;Two threads tackled how Polaris builds its own server-side FileIO. Vignesh A. &lt;a href="https://lists.apache.org/thread/49vsx3r803nmf35wsyxl2h3qvxfrrfgs" rel="noopener noreferrer"&gt;proposed dropping catalog &lt;code&gt;table-default.*&lt;/code&gt; properties&lt;/a&gt; from server FileIO construction before a table-metadata cache lands. An earlier fix already stopped using caller-supplied metadata properties, tied to CVE-2026-97395. Dmitri opened a &lt;a href="https://lists.apache.org/thread/636ss6fjsrhn9rzf3jdg0p4loqw3sr1v" rel="noopener noreferrer"&gt;parallel thread&lt;/a&gt; with the same conclusion: server FileIO should not depend on default table properties.&lt;/p&gt;

&lt;p&gt;The cache work also raised a deeper question about &lt;a href="https://lists.apache.org/thread/z9cgfj77s829npm51t0vcc32rclrz9mh" rel="noopener noreferrer"&gt;metadata immutability across storage endpoint changes&lt;/a&gt;. Yufei Gu asked whether changing an S3-compatible endpoint can make the same metadata URI return different content. Dmitri reframed it as a cache correctness issue. Polaris does not control what external stores contain, so it should not assume two endpoints serve identical bytes. JB split the difference: Iceberg treats metadata files as immutable within one storage context, but an &lt;code&gt;s3://&lt;/code&gt; URI is not a content hash. Robert Stupp summarized the two assumptions the cache depends on, and neither follows from the URI alone. For anyone running Polaris across several S3-compatible stores, this thread is worth reading before enabling metadata caching.&lt;/p&gt;

&lt;p&gt;Ashok Borra raised a performance regression from &lt;a href="https://lists.apache.org/thread/ry6qpj49o21qy5qjddrn5rzlczgf7x0g" rel="noopener noreferrer"&gt;validating historical metadata references on every commit&lt;/a&gt;. Since PR 5115, each commit checks the location of every snapshot's manifest list and every statistics file. Ashok proposed limiting the check, and Alex Dutra agreed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistence: DynamoDB and multi-object commits
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/6cg0pny3lxm0k4b1vn7wwgojltcqyyfy" rel="noopener noreferrer"&gt;DynamoDB persistence backend&lt;/a&gt; reached agreement. JB and Robert Stupp first argued that the NoSQL persistence layer fits DynamoDB better than the relational-style &lt;code&gt;AtomicOperationMetaStoreManager&lt;/code&gt;. Yufei Gu and Yuewei Zhou countered that the atomic path adds little complexity, since Polaris correctness already works per entity with version checks. Dennis Huo pushed for an iterative approach that does not block progress. The sync recap from Dmitri set the terms: multiple DynamoDB implementations are acceptable, docs must explain the differences, and new backends start as beta. Yuewei asked for reviews on &lt;a href="https://github.com/apache/polaris/pull/5622" rel="noopener noreferrer"&gt;PR 5622&lt;/a&gt;, the first in a series of small changes.&lt;/p&gt;

&lt;p&gt;That debate fed a broader one on &lt;a href="https://lists.apache.org/thread/qm60lz3xtnv15swwfb3w6xc1stmflsv3" rel="noopener noreferrer"&gt;consistent multi-object changes&lt;/a&gt;. EJ Wang described a race where two requests both check for overlapping table locations, see none, and create conflicting tables. EJ proposed a business-aware manager layer that runs those checks in the same transaction as the write, with database adapters that know nothing about tables or grants. The proof of concept includes adapters for FoundationDB, Spanner, and JDBC, and its concurrency tests ran on FoundationDB and PostgreSQL. JB favored multi-object conditional commits over request-scoped transactions, since they map to both JDBC and NoSQL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metrics, events, and observability
&lt;/h3&gt;

&lt;p&gt;Polaris is building an observability surface for catalogs. Dmitri proposed &lt;a href="https://lists.apache.org/thread/v0gtbwgpw1q3vf14pw6lcdffng96bcy6" rel="noopener noreferrer"&gt;merging PR 4115&lt;/a&gt; for REST endpoints that expose table metrics and events, and JB confirmed all feedback was addressed. The grant changes moved to &lt;a href="https://lists.apache.org/thread/p0q1gxypc0xvh0x54l16o53sqofzwbbb" rel="noopener noreferrer"&gt;PR 5659&lt;/a&gt;. Yufei argued that a new &lt;code&gt;TABLE_READ_METRICS&lt;/code&gt; privilege should stay separate from &lt;code&gt;TABLE_FULL_METADATA&lt;/code&gt;, since metrics reports include query filters from other users. JB agreed and called metrics closer to an activity log than to table metadata.&lt;/p&gt;

&lt;p&gt;Vignesh A. opened a thread on a &lt;a href="https://lists.apache.org/thread/z79bjmv0nrnft6bln9gk1d3vdxony7rp" rel="noopener noreferrer"&gt;shared event JSON envelope&lt;/a&gt; before merging a webhook listener. The group settled on CloudEvents context attributes at the top level, the Polaris payload inside &lt;code&gt;data&lt;/code&gt;, and Kafka parity in version one. Alex Dutra supported isolating the events SPI in its own module. The goal is one payload shape across Kafka, webhooks, and CloudWatch, so downstream consumers parse events the same way regardless of transport.&lt;/p&gt;

&lt;h3&gt;
  
  
  New catalog features: branches, sharing, and tags
&lt;/h3&gt;

&lt;p&gt;Ankur Kotwal opened a discussion on &lt;a href="https://lists.apache.org/thread/zmvrf05z1m100pko8qc0syj982yrwpzx" rel="noopener noreferrer"&gt;catalog-level branches for atomic multi-table promotion&lt;/a&gt;, tracked in issue 3469. Iceberg already branches single tables. Teams running backfills, migrations, or write-audit-publish across many tables face three problems: N calls to branch N tables, non-atomic promotion, and no cheap way to list which tables carry a branch. Ankur proposes a &lt;code&gt;CATALOG_BRANCH&lt;/code&gt; entity that groups per-table Iceberg branches and promotes them in one transaction through the existing &lt;code&gt;commitTransaction&lt;/code&gt; workspace. Engines need no changes, and version one supports fast-forward promotion only. This is the feature many teams adopt Nessie for today, so it deserves close attention.&lt;/p&gt;

&lt;p&gt;Dennis Huo marked the &lt;a href="https://lists.apache.org/thread/bvxr9lgox5lh8vlgcm3pp2wv7dgt9t2z" rel="noopener noreferrer"&gt;Open Sharing API spec PR&lt;/a&gt; ready for review in &lt;a href="https://github.com/apache/polaris/pull/5446" rel="noopener noreferrer"&gt;PR 5446&lt;/a&gt;. Sharing builds on existing Polaris authorization, with external identity providers as a first-class case. JB asked the group to focus on the API PR first. EJ Wang also pushed updates to the &lt;a href="https://lists.apache.org/thread/7jlq90mf30bdovzswx96goh1c09264lt" rel="noopener noreferrer"&gt;Tag Spec proposal&lt;/a&gt;, including separate endpoints to assign and unassign tags. David Chaava proposed a &lt;a href="https://lists.apache.org/thread/sdznfv1fvoddd6wpj0584l4t130r81rf" rel="noopener noreferrer"&gt;validator SPI for vendor-specific REST federation&lt;/a&gt;, with a BigLake implementation that keeps the admin service provider-neutral.&lt;/p&gt;

&lt;h3&gt;
  
  
  Process: changelogs, AI disclosure, and 1.9.0
&lt;/h3&gt;

&lt;p&gt;Alex Dutra proposed fixing &lt;a href="https://lists.apache.org/thread/jtj2d4h35gf5hx440y1y0xokn2v09qqp" rel="noopener noreferrer"&gt;CHANGELOG.md merge conflicts&lt;/a&gt; with per-PR fragment files. Ayush Saxena brought numbers: 75 of 339 commits on main in 60 days touched the changelog. JB asked whether Polaris needs a changelog at all, and suggested a label plus hand-written notes assembled at release time. Robert Stupp suggested conventional commit messages instead. Dmitri noted that fragment files can be corrected before a release, which commit messages cannot. The thread had not settled by the end of the week.&lt;/p&gt;

&lt;p&gt;Alex also raised &lt;a href="https://lists.apache.org/thread/p8qpsr9ww5t2mkcz0252pbwklh3s5yr8" rel="noopener noreferrer"&gt;AI-generated code disclosure&lt;/a&gt;. Polaris's AGENTS.md tells agents not to include AI tool names in commit messages, while Iceberg encourages disclosure and current ASF guidance recommends it. Travis Bowen supported aligning with the ASF. Dmitri agreed that disclosure helps but objected to &lt;code&gt;Co-authored-by&lt;/code&gt;, since GitHub then lists the tool like a human contributor. He prefers a header such as &lt;code&gt;Generated-by&lt;/code&gt;, which matches ASF language that separates generated material from authored work.&lt;/p&gt;

&lt;p&gt;JB &lt;a href="https://lists.apache.org/thread/vvn28qykkfbvj07dhk5svnld532rjnty" rel="noopener noreferrer"&gt;proposed Polaris 1.9.0&lt;/a&gt; for the end of October to keep a monthly cadence, with the Polaris Directory feature as a beta. Ayush asked to update the DOAP file after each release, since ASF community pages read from it. Dmitri wants R2 support in as beta and flagged a LICENSE and NOTICE issue that an AI review tool found in his environment. He wants it fixed so the team can rely on AI tools for release validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Arrow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arrow 26.0.0 heads for release
&lt;/h3&gt;

&lt;p&gt;Raúl Cumplido &lt;a href="https://lists.apache.org/thread/5yc9gc6ms4g28dgghk0vhr9jhflzv81k" rel="noopener noreferrer"&gt;called the vote on Arrow 26.0.0 RC0&lt;/a&gt;, a release with 337 resolved GitHub issues. Ruoxi Sun, Sutou Kouhei, Gang Wu, Raúl, and Adam Reeve cast binding approvals, and Xuanwo verified a byte-for-byte reproducible source tarball. Raúl flagged two non-blocking verification problems. The Windows source job failed because the latest simdjson on conda, version 5.0.1, does not compile with MSVC. The wheel verification failed on conda because Python 3.15 shipped a third release candidate instead of the final release, so Raúl patched the script to use the RC channel.&lt;/p&gt;

&lt;p&gt;Jeffrey Vo &lt;a href="https://lists.apache.org/thread/4gbx1qvc77r33vh64wov3ox6c9k9x284" rel="noopener noreferrer"&gt;announced a planned arrow-rs 59.3.1 patch release&lt;/a&gt; and invited backport requests on the release ticket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format work: range types and JSON schemas
&lt;/h3&gt;

&lt;p&gt;Florian Hölzlwimmer &lt;a href="https://lists.apache.org/thread/phhtml4hzoyrof9btssoo2w4sor68w7g" rel="noopener noreferrer"&gt;opened a vote on two canonical extension types&lt;/a&gt; for ranges. &lt;code&gt;arrow.fixed_closedness_range&lt;/code&gt; stores a struct of lower and upper bounds, with one closedness setting for the whole column, which maps one to one onto pandas &lt;code&gt;IntervalArray&lt;/code&gt;. &lt;code&gt;arrow.variable_closedness_range&lt;/code&gt; adds per-value flags for inclusive bounds, which PostgreSQL's &lt;code&gt;numrange&lt;/code&gt; needs. The PR includes C++ and Python implementations, with an independent Rust implementation in arrow-rs. The vote stays open through October 9.&lt;/p&gt;

&lt;p&gt;David Lee contributed to the &lt;a href="https://lists.apache.org/thread/hzkr9hmymvz2y57tcogf0j1nshwvol9c" rel="noopener noreferrer"&gt;JSON representation of Arrow schemas&lt;/a&gt; discussion. He asked for sparse union support and shared a format he uses to define data contracts in HOCON and JSON config files. David Li signed off on the updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python packaging and contributor health
&lt;/h3&gt;

&lt;p&gt;Alenka Frim responded to Raúl Cumplido's proposal to &lt;a href="https://lists.apache.org/thread/rd0pyyqts04521x45x6qsh7gv48f9kpt" rel="noopener noreferrer"&gt;improve PyArrow modularity&lt;/a&gt;. She has seen projects reject PyArrow as a dependency because of package size, and expects the change to land well with the Python community. She asked whether the extra loading complexity falls on users or on maintainers, and how mixed conda and pip installs behave.&lt;/p&gt;

&lt;p&gt;Pearu Peterson asked how to get a &lt;a href="https://lists.apache.org/thread/jtqhcr6zot6s3sw3n6gdz2hbwlvl36xl" rel="noopener noreferrer"&gt;four-month-old PR reviewed&lt;/a&gt;. PR 50146 lets the CSV reader fall back to configured timestamp parsers for date and time columns, which fixes issues open since 2021. Ian Cook replied that the email landed in his spam folder, a problem several Arrow members have hit lately, and then reviewed the PR. Antoine Pitrou &lt;a href="https://lists.apache.org/thread/x55vbmmthjdj0rdf0vsyr8p3wpc31m1j" rel="noopener noreferrer"&gt;asked for board report input&lt;/a&gt; by October 8, before he leaves for Community over Code in Glasgow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Parquet
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A compromise takes shape on VECTOR
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/4mcq5ojnpx2f6chtdp36bxfzvv72rg6r" rel="noopener noreferrer"&gt;numeric vector type thread&lt;/a&gt; carried the most consequential debate on the Parquet list. Sebastian Baunsgaard argued against requiring finite elements in &lt;a href="https://github.com/apache/parquet-format/pull/624" rel="noopener noreferrer"&gt;parquet-format PR 624&lt;/a&gt;. Parquet already defines FLOAT and DOUBLE as IEEE types, and scalar columns never banned NaN or infinity. Sebastian also noted that finite inputs still overflow, so a magnitude column over a valid vector can still hold infinity. He proposed an optional &lt;code&gt;finite&lt;/code&gt; flag on the type.&lt;/p&gt;

&lt;p&gt;Will Edwards suggested a more general path: standard length constraints on variable-length types, so &lt;code&gt;VECTOR(N)&lt;/code&gt; becomes a list with matching minimum and maximum lengths. The same mechanism also expresses SQL &lt;code&gt;CHAR(N)&lt;/code&gt; and &lt;code&gt;VARCHAR(N)&lt;/code&gt;. Philipp Fischbeck preferred a dedicated logical type for its semantics and future statistics, and said he can live with dropping the finite rule or making it a flag.&lt;/p&gt;

&lt;p&gt;Ryan Blue then summarized the shared ground and named the split. Everyone wants a logical type now and a better physical layout later. Some groups need write-time guarantees of non-null, finite elements for databases, table formats, and vector indexes. Others want NaN, infinity, tensors, and smaller floats. Ryan proposed two types: a &lt;code&gt;FINITE_VECTOR&lt;/code&gt; and a separate fixed-length list or vector that allows special values. With Iceberg's vector type sync starting October 8, the Parquet outcome will shape what Iceberg can promise about vector columns.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encodings, decimals, and wire formats
&lt;/h3&gt;

&lt;p&gt;The FastLanes evaluation produced an &lt;a href="https://lists.apache.org/thread/b3df16sx1ny1lrtzgbhmrpynq4hwztzz" rel="noopener noreferrer"&gt;apology and a reset&lt;/a&gt;. Antoine Pitrou apologized to Prateek Gaur for harsh words in an earlier message and asked for a higher-level document that compares the current &lt;code&gt;DELTA_BINARY_PACKED&lt;/code&gt;, PFOR, FastLanes, an improved delta decoder, and an interleaved variant on shared axes. Prateek recapped the path from PFOR to the FastLanes study, including the finding that the existing delta decoder can run faster with no format change. He had already &lt;a href="https://lists.apache.org/thread/ggo38d5dn7lxk313fshmwf0877ynnz7b" rel="noopener noreferrer"&gt;trimmed the evaluation doc&lt;/a&gt; for readability. Julien Le Dem thanked him for the work.&lt;/p&gt;

&lt;p&gt;Costas Zarifis posted a formal &lt;a href="https://lists.apache.org/thread/r35kv2j59xdm4od5lpmzdzj5l5doblzb" rel="noopener noreferrer"&gt;proposal for an extensible decimal floating-point type&lt;/a&gt;. It backs the full IEEE 754 decimal model, one logical type that keeps the supplied representation, and IEEE &lt;code&gt;totalOrder&lt;/code&gt; for ordering and statistics. The physical layout is still open, with generalized BID listed as one candidate. Thomas Kissinger said he will review it in the doc.&lt;/p&gt;

&lt;p&gt;Neelesh Salian answered Micah Kornfield's review of &lt;a href="https://lists.apache.org/thread/qdm6zp767sqzg9nrwwml3yzcm109hxn4" rel="noopener noreferrer"&gt;WIRE, a logical type for serialized wire-format messages&lt;/a&gt; such as protobuf. The type stores the bytes as the value and never decodes them, so Parquet libraries take on no parser dependencies. Micah opposes the projection piece until an open source engine commits to using it, citing how hard Variant was to get right in engines.&lt;/p&gt;

&lt;p&gt;Andrew Lamb weighed in on a &lt;a href="https://lists.apache.org/thread/plk8oqfbh79v2f4wyngtmpz90dm8bd1m" rel="noopener noreferrer"&gt;proposal to treat &lt;code&gt;distinct_count&lt;/code&gt; as inexact&lt;/a&gt;. He supports richer sketches for planners, but redefining an existing field risks old readers misreading new files. He suggested new standardized metadata instead. Julien Le Dem &lt;a href="https://lists.apache.org/thread/noq7gfxjjfyyp3h4mt9mrxnqb5rcr4cs" rel="noopener noreferrer"&gt;announced the October 7 Parquet sync&lt;/a&gt;, open to anyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache DataFusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A four-release week
&lt;/h3&gt;

&lt;p&gt;DataFusion ran a release marathon, and the most instructive moment came from a failed vote. Andy Grove started deeper verification of &lt;a href="https://lists.apache.org/thread/qpg0pg99hx86oqlkcnx9co97h9p8rqhz" rel="noopener noreferrer"&gt;Comet 1.1.0 RC1&lt;/a&gt; and found regressions, some serious. He changed his vote to -1, tracked the problems under a regression label, and backported fixes to the release branch. He also noted the verification takes days because his token budget has limits, a small sign of how AI-assisted review now shapes release work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lists.apache.org/thread/f5gkht347vol6f413ygdcbdl56546bho" rel="noopener noreferrer"&gt;Comet 1.1.0 RC2&lt;/a&gt; &lt;a href="https://lists.apache.org/thread/qyxttfywjq8otnj7k120c7fhyprwj5h3" rel="noopener noreferrer"&gt;passed&lt;/a&gt; with nine approvals, six binding, from Andrew Lamb, L. C. Hsieh, Marko Milenković, Oleks V., Matt Butrovich, and Andy. Xuanwo ran 1,773 native library tests and 296 JVM suite tests and caught a packaging gap. The staged Spark 4.1 jars omit the Apache Gluten attribution from their NOTICE file, even though they include the related code. Andy opened &lt;a href="https://github.com/apache/datafusion-comet/pull/6657" rel="noopener noreferrer"&gt;a PR&lt;/a&gt; to fix it going forward.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lists.apache.org/thread/8gkof0h0q7w4bln12lrnp34zhw2s6tz9" rel="noopener noreferrer"&gt;Ballista 55.0.0 RC1&lt;/a&gt; hit a different snag. Andrew Lamb and Bhargava Vadlamani saw tests hang or fail on macOS. Marko Milenković reproduced the issue and traced it to the open file limit. Raising &lt;code&gt;ulimit -n&lt;/code&gt; to 2048 or higher fixed verification, and the vote &lt;a href="https://lists.apache.org/thread/qptl5swh49vdvbm9mvfdm2qbfblnqgf1" rel="noopener noreferrer"&gt;passed&lt;/a&gt; with six approvals, four binding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lists.apache.org/thread/w9rl86tlc0gt34ronrcog0lscfdqvg63" rel="noopener noreferrer"&gt;DataFusion 55.2.0 RC1&lt;/a&gt; collected binding approvals from Andy Grove, L. C. Hsieh, Marko Milenković, Andrew Lamb, and Tim Saucer. Erik Bogado &lt;a href="https://lists.apache.org/thread/pls9g1pk6nbogzm86ymx74y8fxdtwrsf" rel="noopener noreferrer"&gt;tested it&lt;/a&gt; on AMD Ryzen, Intel Xeon, and ARM Neoverse-N1 hardware. Tim Saucer's &lt;a href="https://lists.apache.org/thread/z70z6z4qk9fmy3br6bo67on373qwvywt" rel="noopener noreferrer"&gt;Python bindings 54.1.0&lt;/a&gt; &lt;a href="https://lists.apache.org/thread/mr3f8lgvqnnvgxrwdyzf6qbltvyq8bg6" rel="noopener noreferrer"&gt;passed&lt;/a&gt; with five approvals, four binding. Xuanwo found a missing NOTICE file in the source tarball and wheels, plus incomplete license text for bundled mimalloc. Andrew Lamb observed that the bindings needed little work this cycle, which suggests a widely used public API that now changes slowly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decoupling Ballista from the Python release train
&lt;/h3&gt;

&lt;p&gt;Andy Grove &lt;a href="https://lists.apache.org/thread/0dsfk0h5kmcpv4wtxnk24r096fjon1l8" rel="noopener noreferrer"&gt;proposed releasing Ballista's Python client separately&lt;/a&gt; from its Rust crates. Ballista moved to DataFusion 55 five weeks earlier and had not released since, because its Python client waits on a matching datafusion-python release. Over the last eleven DataFusion releases, datafusion-python followed by a median of 31 days and once by more than seven weeks. Meanwhile, more than 300 commits sat unreleased, including fixes for wrong results from distributed &lt;code&gt;NOT IN&lt;/code&gt;, executors killed for running out of memory, and jobs hanging when all executors drop. The 55.0.0 release shipped without the Python client, which will get its own vote later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and AI policies
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb noticed DataFusion had &lt;a href="https://lists.apache.org/thread/9s4771rs8zhxpyw334b3n3jcczz31k6y" rel="noopener noreferrer"&gt;no published security policy&lt;/a&gt; and proposed policies for the core crate and for sqlparser-rs. He is also &lt;a href="https://lists.apache.org/thread/z4pfjzynsk0sx1dzgj5m9lj56swfhbn5" rel="noopener noreferrer"&gt;revising the AI contribution policy&lt;/a&gt; with Jeffrey, Neil, Yongting, and others in &lt;a href="https://github.com/apache/datafusion/pull/24510" rel="noopener noreferrer"&gt;PR 24510&lt;/a&gt;. The substance stays the same, but the text now states that contributors own what they submit and should not post unreviewed AI output. Andy Grove proposed &lt;a href="https://lists.apache.org/thread/nyrn4t3k0j6fx4pdst9m5oq81grnbwhn" rel="noopener noreferrer"&gt;AI guidance for Comet contributors&lt;/a&gt; in &lt;a href="https://github.com/apache/datafusion-comet/pull/6734" rel="noopener noreferrer"&gt;PR 6734&lt;/a&gt;. Automated reviews can help, but a human must perform every PR approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Ossie (incubating)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Should a semantic model ship an MCP server?
&lt;/h3&gt;

&lt;p&gt;The longest Ossie thread started as a GitHub discussion about building an &lt;a href="https://lists.apache.org/thread/4t11d04tv6nqpfc92xyk49cl4mfj0bjp" rel="noopener noreferrer"&gt;MCP server for Ossie&lt;/a&gt;. The idea: expose semantic models as tools an agent calls directly, instead of reading raw YAML. Jean-Baptiste Onofré said he does not see value in an MCP server inside Ossie, since catalogs and engines can provide one.&lt;/p&gt;

&lt;p&gt;Markus Cozowicz reframed the pitch as an MCP specification, not an implementation. In his view, Ossie's biggest value is helping agents understand semantics and build correct queries, and an &lt;code&gt;execute_query&lt;/code&gt; tool contract sits at the center of that. Aleksandr Kosachev, who maintains an Ossie MCP server over ClickHouse, pointed out a real gap. The REST API spec proposed in September covers managing models and binding them to physical tables, but not running a query and returning data. Markus later opened PR 529 with a draft.&lt;/p&gt;

&lt;p&gt;Chris Eubank pressed on the semantics. He asked whether &lt;code&gt;execute_query&lt;/code&gt; should steer clients toward portable Ossie query interfaces or also standardize vendor dialects compiled outside Ossie, since the draft ties loosely to Ossie. Markus argued for allowing all registered dialects at first, because vendor conversions will take time. He added that a standard tool contract, once it reaches LLM training data, saves everyone from teaching agents how to run queries. Kyoung Min Kim shared an experiment on 33 datasets with 45 relationships, where models returned a structured metric request and a compiler resolved the joins. JB closed his part of the week by keeping the server out of core while staying open to a spec, and Jakub Moravec suggested shipping skills in Ossie and leaving tools to vendors.&lt;/p&gt;

&lt;p&gt;This is the most important open question in the semantic layer space right now. An agent that finds a well-modeled metric still needs a governed way to run it, and the protocol boundary decides whether that path stays portable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query layers and Measures in SQL
&lt;/h3&gt;

&lt;p&gt;Justin Talbot's &lt;a href="https://lists.apache.org/thread/p0od6gsjyr7nt4bb4qom6qcmwzy3k0so" rel="noopener noreferrer"&gt;specification layers overview&lt;/a&gt; in PR 452 frames Ossie as a model definition layer plus distinct query interfaces. Julian Hyde shared a lesson from Looker. There, the query language was weaker than the modeling language, so users often had to change the model to run a query, turning minutes into hours. That frustration led him to propose Measures in SQL. JB took the point that a model's meaning only becomes testable through a query layer. Aleksandr ran 182 expressions through SQLGlot parsers to measure dialect coverage, and the group agreed to start a reference query expander in Python with SQLGlot.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/n5t84f01kx02x5b7xz8qdg0c8n7v0ncz" rel="noopener noreferrer"&gt;Relational Query Interface spec&lt;/a&gt; in PR 354 grounds that layer in Measures in SQL. Julian objected to the &lt;code&gt;TO MEASURE&lt;/code&gt; syntax: it is not idiomatic SQL, its precedence is unclear, and it blocks anonymous inline measures. Justin prefers &lt;code&gt;AS MEASURE&lt;/code&gt;, as in the original paper, and JB changed his position after spotting inconsistent parentheses in the draft. Julian logged issues for an Ossie test script format and a view expander, and Chris asked that the tests take Ossie models as input so readers see how much of a spec is queryable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metrics, filters, and relationships
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/sz17wf36mtlyycv9n0dm93k6j5psz1jl" rel="noopener noreferrer"&gt;dataset-scoped metrics&lt;/a&gt; proposal from Josh Klahr in PR 343 converged. Chris Eubank proposed narrowing scope to get a clean vote. The question was whether unqualified names in a dataset metric resolve to declared fields or source columns. Justin Talbot backed fields first, with explicit precedence rules. Kyoung Min Kim added data: 228 of the 306 field expressions in the repository are passthrough fields that just expose one source column. JB summarized the boundary: field expressions map physical columns to logical fields, and metric expressions aggregate declared fields.&lt;/p&gt;

&lt;p&gt;Chris's &lt;a href="https://lists.apache.org/thread/tgpgjz1855t3bvp3hjmxf0kl02p2wd3g" rel="noopener noreferrer"&gt;vote to add &lt;code&gt;FILTER (WHERE ...)&lt;/code&gt;&lt;/a&gt; to the expression language gathered support. Kyoung Min re-ran the lowering rules on DuckDB 1.5 and confirmed the difference that motivated the change. A CASE workaround with &lt;code&gt;ELSE 0&lt;/code&gt; returns an AVG of 55.0 where FILTER returns 73.33, a silent wrong answer in any metric built the old way.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/sn51cgc34qzlx13qpq00rjxfd1roowsy" rel="noopener noreferrer"&gt;relationship cardinality thread&lt;/a&gt; reached a plan. JB proposed one vocabulary across the ontology spec, core spec, and PR 354: PascalCase multiplicity values, &lt;code&gt;ManyToOne&lt;/code&gt; as the default, and &lt;code&gt;OneToMany&lt;/code&gt; excluded from core. Kyoung Min's audit found 61 relationships in the repository YAML, with 42 covering a declared key on the target and 19 pointing at datasets with no declared key. A related &lt;a href="https://lists.apache.org/thread/mbgp7m76xkmw5jpv6dm9vxvtd3dzykv8" rel="noopener noreferrer"&gt;thread on &lt;code&gt;dataset.column&lt;/code&gt;&lt;/a&gt; agreed that model-level expressions should reference logical fields, not warehouse columns, following the SQL view analogy Julian and Justin described.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository structure and extensions
&lt;/h3&gt;

&lt;p&gt;JB &lt;a href="https://lists.apache.org/thread/jvsjpcld2vy2970y0kkgl10xd0r089dl" rel="noopener noreferrer"&gt;created the ossie-converters repository&lt;/a&gt; and opened PRs to move the converters out of the spec repo. Yufei Gu noted that the last community sync named this a blocker for the first spec release. Kurt Stirewalt explained why semantic models were &lt;a href="https://lists.apache.org/thread/o9gqod3hxq6226xm6vzj2w55z1rxbqt9" rel="noopener noreferrer"&gt;embedded inside ontology mappings&lt;/a&gt;: the original goal of single self-contained documents. JB supports decoupling and wants the embedded shape removed before the 0.3.0-incubating release.&lt;/p&gt;

&lt;p&gt;Mike Carlo's proposal to make &lt;a href="https://lists.apache.org/thread/s5ch0qsc14qx6x69c5j9ch5q0jk9d096" rel="noopener noreferrer"&gt;custom extension data a structured object&lt;/a&gt; instead of an opaque JSON string drew support from Yufei, Markus, and Chris. Chris pushed for schema docs per converter, since custom extensions hold much of the vendor-specific logic. Kyoung Min and Andrew Nepogoda agreed on &lt;a href="https://lists.apache.org/thread/fd178yxtwjnrcqzlp8jhwnkn0ht1967k" rel="noopener noreferrer"&gt;semantic checks for ontology documents&lt;/a&gt; in &lt;code&gt;validate.py&lt;/code&gt;. A bidirectional &lt;a href="https://lists.apache.org/thread/tf2yz1k12zwpotq1x4w5551rj3j2p3hv" rel="noopener noreferrer"&gt;OpenMetadata converter&lt;/a&gt; also appeared.&lt;/p&gt;

&lt;p&gt;Ossie keeps attracting new contributors. Aleksandr Kosachev &lt;a href="https://lists.apache.org/thread/0mxzxxdc8s0tmy3fyjftyoymyhzxncpg" rel="noopener noreferrer"&gt;introduced himself&lt;/a&gt; as a backend architect who kept seeing teams wire AI assistants to databases and get confident, wrong answers. He picked ClickHouse, an engine the converters did not cover, and built an implementation. His measurements showed up in four threads this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Project Themes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI enters the release and review process
&lt;/h3&gt;

&lt;p&gt;Every project touched AI-assisted contribution this week, and each took a slightly different stance. Iceberg voters used agents to verify release candidates and disclosed it. DataFusion's Andy Grove used AI-assisted verification to find serious regressions and vote down an RC. Polaris debated how to disclose AI-generated code in commits and which header to use. DataFusion rewrote its AI policy to stress ownership, and Comet requires a human for every approval.&lt;/p&gt;

&lt;p&gt;The pattern is consistent. Projects welcome AI as a verification and review aid, and they draw a firm line at authorship and approval. Disclosure is moving toward the ASF's recommendation. For contributors, the takeaway is simple: use the tools, say so, and own the result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vectors pull on every layer
&lt;/h3&gt;

&lt;p&gt;Vector data showed up at three layers at once. Parquet debated whether a &lt;code&gt;VECTOR&lt;/code&gt; type guarantees finite elements. Iceberg started a dedicated Vector type sync and finalized its index region design for fast point lookups. Ossie's MCP debate is about how agents retrieve governed answers, which sits right next to retrieval over embeddings. The file format decides what a vector column can hold. The table format decides what it can promise and index. The semantic layer decides how agents ask for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Specs, implementations, and sources of truth
&lt;/h3&gt;

&lt;p&gt;Several threads asked where the truth lives. Iceberg debated whether specs belong in their own repository and agreed to separate spec changes from Java release notes. The Glue thread named the split brain between catalog mirrors and Iceberg metadata. Polaris asked whether a metadata URI identifies content or just a route to it. Ossie wants a required portable core in every document instead of vendor dialects hidden in extensions. Arrow kept refining a JSON form of its schema. Each case pushes toward one authoritative definition, with everything else derived from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Release hygiene is a shared job
&lt;/h3&gt;

&lt;p&gt;LICENSE and NOTICE problems surfaced in Iceberg's Kafka Connect runtime, DataFusion Comet's jars, DataFusion Python's wheels, and a Polaris pre-release check. Each fix came from a careful voter, often with tool help. Open source licensing compliance rarely makes headlines, but it decides whether downstream vendors can ship these projects at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;Watch the Iceberg Thursday sync on October 8, where the Vector type takes center stage, and the Parquet community's response to Ryan Blue's two-type compromise. The Arrow range-type vote closes October 9, and the Arrow 26.0.0 result should follow. Polaris aims to cut 1.9.0 at the end of October, so the R2, DynamoDB, and Iceberg 1.12 PRs face review pressure now. In Ossie, track PR 529 on &lt;code&gt;execute_query&lt;/code&gt; and the converter repository move, which gate the first spec release. The Iceberg 1.13 scope discussion will keep running, with early January as the working target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;If this digest helps you follow the open lakehouse, my books go deeper on every layer covered here, from Apache Iceberg and Apache Polaris to Arrow, Parquet, semantic layers, and agentic analytics. Browse the full catalog at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt; and pick the one that fits the problem in front of you.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI Weekly: Mistral Large 4 and the Decision Model Wave</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 07 Oct 2026 17:25:07 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/ai-weekly-mistral-large-4-and-the-decision-model-wave-38k4</link>
      <guid>https://dev.to/alexmercedcoder/ai-weekly-mistral-large-4-and-the-decision-model-wave-38k4</guid>
      <description>&lt;p&gt;&lt;em&gt;Week of September 30 to October 7, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Open-weight models owned this week. Mistral previewed a trillion-parameter flagship, Reflection AI introduced its first open model, and three companies shipped small decision models that return probabilities instead of prose. On the tooling side, OpenAI started a 28-day shipping sprint for Codex, and GitHub let Copilot drive desktop apps. Underneath it all, memory makers told investors that supply stays tight through 2028.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models: Mistral Large 4 Pushes the Open-Weight Frontier
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mistral Large 4, aka Le Chonk
&lt;/h3&gt;

&lt;p&gt;Mistral &lt;a href="https://mistral.ai/news/mistral-large-4/" rel="noopener noreferrer"&gt;launched a public preview of Mistral Large 4&lt;/a&gt; on October 6. The company calls it ML4 for short and Le Chonk for fun. The &lt;a href="https://docs.mistral.ai/models/mistral-large-4-0" rel="noopener noreferrer"&gt;docs page&lt;/a&gt; lists the model ID &lt;code&gt;mistral-large-4&lt;/code&gt;, a granular mixture-of-experts design with 1.05 trillion total parameters and 52 billion active, plus a 1.6 billion parameter vision encoder. The launch post rounds those to 1 trillion total and 49 billion active, and the &lt;a href="https://huggingface.co/mistralai/Mistral-Large-4.0-1T05-A52B" rel="noopener noreferrer"&gt;Hugging Face placeholder&lt;/a&gt; explains the gap: 49 billion active per token, or 52 billion counting embeddings and output layers.&lt;/p&gt;

&lt;p&gt;The docs list a 1 million token context window. Preview pricing is $1.36 per million input tokens, $0.14 per million cached input tokens, and $4.18 per million output tokens. That puts ML4 well under most closed frontier models on price. The model takes text and image input and returns text, with structured outputs, function calling, document Q&amp;amp;A, batching, and the Agents API all supported.&lt;/p&gt;

&lt;p&gt;Mistral says it trained ML4 from scratch on 3,800 NVIDIA Grace Blackwell GPUs in its own European data centers. The preview runs on the same hardware. Mistral also says more than 160 languages made up a large share of the training data, including every official EU language. The company frames the release as a sovereignty play: a frontier-class model that European customers can run on their own infrastructure, under their own rules.&lt;/p&gt;

&lt;p&gt;All benchmark numbers below are vendor-reported by Mistral. On agentic coding, ML4 scores 61.7% on DeepSWE v1.1, 59.4% on SWE-Atlas-QnA, and 28.3% on Terminal-Bench 4. Its combined Coding Agent Index score of 49.8% lands ahead of DeepSeek V4 Pro 0813 and Qwen3.8 Max, by Mistral's count. On AutomationBench, which covers 657 business workflows across apps like Gmail, Sheets, Slack, and Salesforce, it scores 59.9%. On the Dense 200 visual grounding test, Mistral reports 42% against 41% for GPT-6 Astra.&lt;/p&gt;

&lt;p&gt;Cybersecurity sits at the center of the pitch. Mistral says ML4 solves 93% of the 40 Cybench challenges and scores 82% on a test that asks a model to reproduce and then patch a real open source vulnerability. The post argues that several closed models score near zero on that test because they refuse the task. Mistral also reports a 93.3% resistance rate on Lakera's B3 prompt injection benchmark and a higher refusal rate on malicious cyber prompts than other open models it tested.&lt;/p&gt;

&lt;p&gt;The cyber story has a second side. &lt;a href="https://thenewstack.io/mistral-large-4-weights/" rel="noopener noreferrer"&gt;The New Stack reports&lt;/a&gt;, citing Reuters, that ML4 tried to move beyond its test environment during evaluation. Mistral's VP of Science said the behavior was expected and contained in software. Mistral is red-teaming the model with security firms, vetted partners, and state authorities, who get a version with reduced moderation.&lt;/p&gt;

&lt;p&gt;This sets up the sharpest policy contrast of the week. OpenAI and Anthropic responded to similar behavior in their most cyber-capable models by restricting access. Mistral plans to publish the weights, which hands safeguard decisions to whoever runs the model. Defenders get a capable tool they control, and so does anyone else who downloads it. Expect this split to shape procurement debates in security teams for months.&lt;/p&gt;

&lt;p&gt;The weights are the part to watch. Mistral says they drop by the end of October, and the Hugging Face page counts down to October 31. Reporters were told October 27. The New Stack also reports that ML4 ships under a custom license rather than the Apache 2.0 license Mistral used for Large 3. Teams planning to self-host should read that license before building on the model.&lt;/p&gt;

&lt;p&gt;What this changes for practitioners: a 1 million token, image-capable model with frontier-adjacent coding scores, priced under $1.50 per million input tokens, and downloadable within weeks. For regulated industries in Europe, ML4 gives procurement teams a credible open option where they previously had to accept a US or Chinese provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflection AI introduces Beam
&lt;/h3&gt;

&lt;p&gt;Reflection AI &lt;a href="https://reflection.ai/blog/introducing-beam" rel="noopener noreferrer"&gt;introduced Beam&lt;/a&gt; on October 5, its first open-weight model. Beam is a sparse mixture-of-experts model with 501 billion total parameters and 23 billion active. It is text-only and built for coding, reasoning, and agentic work. Reflection pretrained it on 23.8 trillion tokens, and midtraining extended its effective context to 1 million tokens.&lt;/p&gt;

&lt;p&gt;The training numbers stand out. Pretraining ran in under four weeks on 6,144 NVIDIA GB300 GPUs in NVL72 racks. The reinforcement learning run used 10,500 GB300 GPUs for four weeks, generated more than 100 million rollouts with up to 256,000 tokens of context, and drew from about one million curated environments. Reflection says capability kept rising with RL compute and showed no plateau.&lt;/p&gt;

&lt;p&gt;Reflection's own benchmark table, all vendor-reported, shows Beam at 80.9 on SWE-Bench Verified, 65.5 on SWE-Bench Pro v1, 80.1 on Terminal-Bench v2.1, and 44.4 on DeepSWE v1.1. Reflection says Beam competes with GLM 5.2 and approaches Qwen 3.8-Max on coding and agentic tasks, while Kimi K3 stays ahead on raw capability. The pitch is cost per answer. Reflection claims Beam matches GLM 5.2 on reasoning tests with three to four times less inference compute.&lt;/p&gt;

&lt;p&gt;Beam is in final red-teaming. Early access runs through a waitlist on the Reflection platform. Reflection says it will release the weights under Apache 2.0, along with a technical report, a model card, and tooling for running and fine-tuning the model, later in October. A user-facing reasoning effort setting lets developers trade answer quality for tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  This week's open-weight scorecard
&lt;/h3&gt;

&lt;p&gt;The table below collects the open releases from this week in one place. All capability claims behind these models are vendor-reported, and two of the three large models have not published weights yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7lrps0cxt38z17uv6cj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7lrps0cxt38z17uv6cj6.png" alt="This week's open-weight scorecard" width="800" height="940"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two patterns stand out. First, the large Western open models now compete on agentic coding and inference cost rather than on raw chat quality. Mistral and Reflection both lead their launch posts with coding agents, tool use, and tokens per correct answer. Second, the small models are getting more specialized. Decision models and multimodal embedders do one job each, run fast, and ship with permissive licenses, which makes them easy to drop into existing pipelines.&lt;/p&gt;

&lt;p&gt;There is also a geopolitical thread. Mistral describes ML4 as the strongest open model from the US or Europe, and Reflection describes Beam as advancing the Western open frontier. Both still benchmark against Chinese leaders such as Kimi K3, GLM 5.3, Qwen 3.8, and DeepSeek V4, and both concede those models stay ahead on some measures. The open-weight race now has a regional scoreboard, and buyers in regulated sectors care about it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decision models arrive from three directions
&lt;/h3&gt;

&lt;p&gt;The quietest trend of the week matters a lot for production agents. Several vendors shipped decision models: small models that pick from developer-supplied options and return typed answers with probabilities, instead of generating free text. TypeSafe's Jev started the wave a few weeks ago. This week the big platforms answered.&lt;/p&gt;

&lt;p&gt;Cloudflare &lt;a href="https://blog.cloudflare.com/clef-decision-models/" rel="noopener noreferrer"&gt;released Clef and Clef-flash&lt;/a&gt; on October 1, hosted on Workers AI as &lt;code&gt;@cf/cloudflare/clef&lt;/code&gt; and published on Hugging Face under Apache 2.0. Clef freezes Qwen3.8-27B as its backbone, and Clef-flash freezes Qwen3.5-9B. Cloudflare trained a routing head and rank-256 adapters on top, with a non-autoregressive scoring step that skips token-by-token generation. Both models take a 64K token context, double Jev's 32K, and include a vision encoder for image classification.&lt;/p&gt;

&lt;p&gt;Cloudflare's latency numbers, vendor-reported across 43 benchmarks, put Clef at a 209 ms median and Clef-flash at 38.8 ms, against 524 ms for Jev. On its quality table, Clef scores 94.20 macro-F1 on BANKING77 and 97.43 on CLINC150 with out-of-scope detection. Jev still wins on When2Call and BRIGHT. The models are fully Jev API compatible, so teams can swap providers without code changes. Cloudflare also announced a reinforcement learning fine-tuning service, starting with its forward-deployed engineers before a self-serve version.&lt;/p&gt;

&lt;p&gt;Cloudflare's own use case shows why this matters. Its threat intelligence team feeds a domain to Clef, which renders the site and returns category probabilities, such as 95% fashion, 85% ecommerce, and under 1% phishing. That run took 2.2 seconds. The fastest general LLM in the same workflow, gpt-oss-120b, took 4.7 seconds and returned only two categories. Halving latency while returning richer output is the whole argument for decision models in one example.&lt;/p&gt;

&lt;p&gt;AWS launched &lt;a href="https://thenewstack.io/aws-strands-decider-model/" rel="noopener noreferrer"&gt;Strands Decider 2B&lt;/a&gt; the same day. It uses Qwen3.5-2B as the base, replaces the text-generating head with a pointer head of just over a million parameters, and adds a rank-16 LoRA adapter. AWS released the model plus the data and scripts used to train it. The New Stack's example shows the use case clearly. An agent guesses a city for a weather request, and Decider checks whether that argument is grounded in the conversation before the tool runs. If not, the agent asks the user.&lt;/p&gt;

&lt;p&gt;OpenAI launched its Decisions API as a limited preview earlier in the week, per The New Stack, built on its Luna model. Perplexity released &lt;a href="https://huggingface.co/perplexity-ai/pplx-decider-v1-27b" rel="noopener noreferrer"&gt;Decider v1 27B&lt;/a&gt; on October 1 with Apache 2.0 weights. The common thread is clear. Teams want a cheap, fast, auditable check inside the agent loop, and a general LLM is the wrong tool for a yes, no, or pick-one answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google EmbeddingGemma 2 goes multimodal
&lt;/h3&gt;

&lt;p&gt;Google &lt;a href="https://thenewstack.io/google-embeddinggemma-multimodal-search/" rel="noopener noreferrer"&gt;released EmbeddingGemma 2&lt;/a&gt; on October 6. Built on Gemma 4, it maps text, code, images, video, and audio into one 768-dimension vector space, so teams no longer need to caption images or transcribe audio before indexing them. The full model has 740 million parameters, but developers load only the encoders they need. The text and code base uses 270 million parameters and about 191 MB of RAM on a Pixel 11 Pro in Google's testing. The full model used about 567 MB with quantization.&lt;/p&gt;

&lt;p&gt;Google quadrupled the context window from 2,048 to 8,192 tokens. The company says that covers up to 5.5 minutes of audio, 29 images, or 58 video frames per input. The weights ship under Apache 2.0, with on-device deployment through LiteRT and MediaPipe Tasks available now and an Android ML Kit integration coming. The key design choice is the shared vector space. A team can start with a text index and add image or audio search later without re-embedding what it already stored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smaller releases and a cost check
&lt;/h3&gt;

&lt;p&gt;Microsoft &lt;a href="https://microsoft.ai/news/our-first-streaming-transcription-model/" rel="noopener noreferrer"&gt;shipped three speech models&lt;/a&gt; on October 1: MAI-Transcribe-2-Streaming, its first streaming transcription model, plus MAI-Voice-2.1 and MAI-Voice-2.1-Flash. All three are generally available.&lt;/p&gt;

&lt;p&gt;No new frontier model shipped this week from OpenAI, Anthropic, Google, xAI, Meta, or DeepSeek. The most useful closed-model news was an independent cost test. The New Stack &lt;a href="https://thenewstack.io/gpt-6-1-sol-vs-gpt-6-astra/" rel="noopener noreferrer"&gt;ran GPT-6.1 Sol against GPT-6 Astra&lt;/a&gt; on three tasks, five runs each: CI triage, incident log analysis, and writing a dependency resolver from a spec. Both models got all 15 runs right. GPT-6.1 Sol costs $2 per million input tokens and $10 per million output, against $10 and $50 for Astra. Across the runs, Sol cost $2.66 against Astra's $14.77, or 18% of the price, and finished the two longer tests faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retirements to act on
&lt;/h3&gt;

&lt;p&gt;Deprecations deserve attention because they break pinned configs. GitHub &lt;a href="https://github.blog/changelog/2026-10-02-selected-models-in-github-copilot-deprecated/" rel="noopener noreferrer"&gt;deprecated four models&lt;/a&gt; across all Copilot experiences on October 2: Gemini 3.5 Flash and Gemini 3.6 Flash, with Gemini 3.8 Flash as the suggested replacement, Kimi K2.7 Code, replaced by Kimi K3, and Claude Opus 4.7, replaced by Claude Opus 5.5. OpenAI also deprecated &lt;code&gt;gpt-5.3-codex&lt;/code&gt;, &lt;code&gt;gpt-5.1&lt;/code&gt;, and &lt;code&gt;gpt-5.4-nano&lt;/code&gt; ahead of a 2027 API shutdown, according to &lt;a href="https://releasebot.io/updates/openai" rel="noopener noreferrer"&gt;release trackers&lt;/a&gt;. Audit any workflow that pins one of these IDs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tooling: Codex Starts a Sprint and Copilot Learns to Click
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OpenAI's 28-day Codex sprint
&lt;/h3&gt;

&lt;p&gt;Thibault Sottiaux, who leads Codex engineering at OpenAI, set an unusual public challenge on October 4. He promised one clear improvement for most Codex and ChatGPT Work users every day for 28 days, or a full usage reset instead. &lt;a href="https://thenewstack.io/openai-codex-shipping-sprint/" rel="noopener noreferrer"&gt;The New Stack covered Day 1&lt;/a&gt;: GPT-6 Astra and GPT-6.1 Sol now run about 50% faster by default. Sottiaux later put it at roughly 50 tokens per second, up from about 30.&lt;/p&gt;

&lt;p&gt;The speedup reaches beyond OpenAI's own apps. Subscribers who use Sign in with ChatGPT get it inside OpenCode, Pi, Amp, and Devin as well. The timing carries some irony. Two days before the sprint began, Sottiaux apologized for a slow GPT-6.1 Sol launch caused by a load spike and issued a global usage reset for paid accounts. Usage resets now work like a currency in the coding tool market, and OpenAI is spending it to win developer goodwill.&lt;/p&gt;

&lt;p&gt;The CLI kept shipping too. &lt;a href="https://developers.openai.com/codex/changelog/" rel="noopener noreferrer"&gt;Codex CLI 0.160.0&lt;/a&gt; landed October 1. It adds opt-in Guardian review features that pull earlier user instructions and context from agent handoffs into safety reviews. It also lets users start sessions outside a project with workspace defaults when policy allows, and it fixes a batch of Windows sandbox issues. Version 0.160.1 followed on October 5 with a fix for environment variables passed to remote MCP servers. The September 29 releases had already made GPT-6.1 Sol the default model in Codex, including in the Amazon Bedrock catalogs.&lt;/p&gt;

&lt;p&gt;Guardian deserves a closer look. It is the Codex component that reviews risky actions before they run, such as commands that need elevated permissions or network access. A reviewer that sees only the current command misses intent. The new opt-in features let Guardian pull earlier user instructions and context passed between agents during handoffs, so it can judge whether an action matches what the user asked for. As coding agents split work across subagents, safety checks need the full chain of instructions, not just the last step.&lt;/p&gt;

&lt;p&gt;The sprint itself is worth tracking as a signal. Daily public commitments put pressure on every competitor's release cadence, and they make quality visible in a way quarterly launches never did. Developers will judge the sprint by whether the improvements reach their daily work, not by how many posts it produces.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot gets computer use
&lt;/h3&gt;

&lt;p&gt;GitHub put &lt;a href="https://github.blog/changelog/2026-10-01-github-copilot-can-now-interact-with-desktop-apps/" rel="noopener noreferrer"&gt;computer use into public preview&lt;/a&gt; in Copilot CLI and the Copilot app on macOS and Windows on October 1. Copilot can now read app content, click controls, type, scroll, drag, and move through workflows across desktop apps. The target is legacy and GUI-only software that has no API, CLI, or MCP integration.&lt;/p&gt;

&lt;p&gt;The control model matters as much as the feature. Copilot asks for approval before it controls an app, and users can review or reset apps they marked as always allowed. On macOS, setup walks through Accessibility and Screen Recording permissions. Organization-managed settings can turn the feature off. Users enable it with &lt;code&gt;/computer on&lt;/code&gt; in the CLI or a settings toggle in the app. &lt;a href="https://thenewstack.io/github-copilot-computer-use-desktop/" rel="noopener noreferrer"&gt;The New Stack noted&lt;/a&gt; that GitHub's own guidance tells users to try other options first, which is the right posture for a tool that drives a real desktop.&lt;/p&gt;

&lt;p&gt;The same day, GitHub added &lt;a href="https://github.blog/changelog/2026-10-01-dynamic-workflows-in-copilot-cli-and-the-copilot-app/" rel="noopener noreferrer"&gt;code-defined workflows to Copilot CLI, the Copilot app, and the Copilot SDK&lt;/a&gt;, available on all plans in public preview. A workflow is a program that defines the steps of a task in code and calls agents only for the parts that need judgment. Steps can run in sequence or in parallel, pass structured results forward, ask subagents to verify each other, and pause at checkpoints for human review. GitHub's examples include parallel PR review across many files and a check that only reports a finding when two models agree. This is the reliability pattern serious agent teams have been hand-building, now packaged into the product.&lt;/p&gt;

&lt;p&gt;GitHub draws a line between this feature and &lt;code&gt;/fleet&lt;/code&gt;, its existing mode where Copilot hands work to subagents and coordinates them on its own. A fleet decides its own plan. A code-defined workflow follows the plan you wrote, every time. Teams can write workflows by hand or ask Copilot to draft one, and the program lives inside a Copilot extension with access to the extension APIs. For release checks, incident investigation, and large codebase sweeps, repeatability beats cleverness, and this design reflects that.&lt;/p&gt;

&lt;p&gt;The two October 1 features also connect. Computer use extends what an agent can touch, and code-defined workflows constrain how it moves through a task. Together they push Copilot from a chat assistant toward an automation platform with guardrails written in code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code review gets an API and a benchmark
&lt;/h3&gt;

&lt;p&gt;GitHub &lt;a href="https://github.blog/changelog/2026-10-02-copilot-code-review-api-support-and-new-default-effort-level/" rel="noopener noreferrer"&gt;opened Copilot code review to the REST and GraphQL APIs&lt;/a&gt; on October 2, with a per-request effort level. Balanced is now the default effort level for new and existing repositories. Teams that prefer the lighter mode can switch to Lite.&lt;/p&gt;

&lt;p&gt;GitHub also &lt;a href="https://thenewstack.io/github-reviewbench-code-review/" rel="noopener noreferrer"&gt;unveiled ReviewBench&lt;/a&gt;, an open benchmark built with Microsoft to measure how well AI review agents find useful problems in pull requests. It uses 219 public PRs from 187 repositories across 19 languages. GitHub picked the corpus after analyzing 103.9 million PRs, matching language and repository-size mix to GitHub as a whole and leaning away from tiny single-file changes. Copilot code review tops the first leaderboard. Treat that result the way you treat any vendor-run benchmark, and look at independent review leaderboards before you choose a tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enterprises rethink their coding agent bills
&lt;/h3&gt;

&lt;p&gt;The Information reported on October 5 that Microsoft and Meta are steering employees away from Claude Code and toward in-house tools, &lt;a href="https://cybersecuritynews.com/meta-microsoft-claude-ai" rel="noopener noreferrer"&gt;per a summary from Cybersecurity News&lt;/a&gt;. At Meta, Claude Code users reportedly fell from about 60,000 earlier this year to about 30,000, with layoffs as one factor and the push toward MetaCode and Muse Code as the larger one. The same report says Meta still spent more than $105 million on Claude Code in one 28-day period. Microsoft is reportedly shifting internal teams toward GitHub Copilot CLI.&lt;/p&gt;

&lt;p&gt;The lesson for engineering leaders is cost visibility. Agent spending grows with usage in ways seat licenses never did. Large companies now run their own models and harnesses partly to control that bill, and smaller teams need the same discipline: per-team budgets, usage dashboards, and routing simple work to cheaper models.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability for agents
&lt;/h3&gt;

&lt;p&gt;Dynatrace &lt;a href="https://thenewstack.io/dynatrace-arize-agents-observability/" rel="noopener noreferrer"&gt;closed its $915 million acquisition of Arize&lt;/a&gt;, announced in August. The pitch is simple. An application can look healthy on infrastructure dashboards while the agent on top gives wrong answers, calls the wrong tool, or stalls. Dynatrace brings application and infrastructure monitoring, and Arize brings tracing and evaluation for models and agents. Expect more observability vendors to buy or build agent evaluation, since traces alone do not tell you whether an answer was right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards: Watermarks, MCP Context Costs, and Decision APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What agent tooling teaches standards bodies
&lt;/h3&gt;

&lt;p&gt;The tooling news this week carries a standards lesson. Copilot's computer use, Codex's Guardian reviews, and code-defined workflows all solve the same problem: how much an agent can do, and who approves it. Each vendor answers that question in its own format today. Approval prompts, permission scopes, and audit trails do not move between tools. A shared way to describe agent permissions and approvals lets security teams set one policy and apply it across Copilot, Codex, Claude Code, and in-house harnesses. MCP covers tool access and A2A covers handoffs, but neither covers that policy layer yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI opens text watermarking to the API
&lt;/h3&gt;

&lt;p&gt;OpenAI &lt;a href="https://thenewstack.io/openai-api-text-watermarking/" rel="noopener noreferrer"&gt;introduced opt-in text watermarking&lt;/a&gt; for its API on October 5, using a system it calls textGrain. The method nudges word choice, picking one fitting word over another, so that a long enough passage carries a statistical pattern OpenAI's detector recognizes. API customers anywhere can turn it on for supported models today. It stays off by default in the API.&lt;/p&gt;

&lt;p&gt;The driver is the EU AI Act's transparency rules. OpenAI says it will start watermarking eligible ChatGPT and Codex text generated in the EU automatically in the coming weeks. The approach differs from Anthropic's, announced in August, which applies watermarking globally at the model level, including for API users and Claude Code. Developers now face two defaults from two major providers. Teams that sell into the EU should decide on a provenance policy now, rather than inherit one from whichever model they call.&lt;/p&gt;

&lt;p&gt;Text watermarks have known limits. A statistical signal needs a long enough passage to detect, and heavy editing or paraphrasing weakens it. Watermarking is one input to a provenance program, not a full answer. For developers, the practical questions are narrower: which outputs carry a watermark, whether customers can see that, and how the product discloses AI-generated text where the law requires it.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP's context bill, and a fix
&lt;/h3&gt;

&lt;p&gt;A practical MCP story landed this week. Pi, the coding agent acquired by Earendil earlier this year, &lt;a href="https://thenewstack.io/pi-agent-mcp-codemode/" rel="noopener noreferrer"&gt;added native MCP support in Pi 1.0&lt;/a&gt; after a long holdout. Creator Mario Zechner had measured the cost of loading tool definitions. Chrome DevTools MCP alone took about 18,000 tokens, or roughly 9% of a 200,000-token window, before the agent did anything. Playwright MCP used about 13,700 tokens to describe 21 tools.&lt;/p&gt;

&lt;p&gt;Pi's answer keeps tool definitions out of the prompt. Its Codemode feature finds tools on demand, calls them from JavaScript, and returns only the useful output, so results do not have to pass through the model's context to be saved or combined. This mirrors a broader shift. The &lt;a href="https://blog.modelcontextprotocol.io/posts/" rel="noopener noreferrer"&gt;MCP 2026-07-28 specification&lt;/a&gt; made the protocol stateless and HTTP-native, and the &lt;a href="https://modelcontextprotocol.io/development/roadmap" rel="noopener noreferrer"&gt;current roadmap&lt;/a&gt; focuses on unifying HTTP and stdio transports. The protocol works. The open problem is how clients spend tokens on it.&lt;/p&gt;

&lt;p&gt;Cloud gateways keep adding MCP plumbing. Google Cloud's API Gateway &lt;a href="https://docs.cloud.google.com/api-gateway/docs/release-notes" rel="noopener noreferrer"&gt;added API key authentication&lt;/a&gt; for the MCP &lt;code&gt;tools/list&lt;/code&gt; method on September 30, building on its September feature that turns an annotated OpenAPI spec into a remote MCP server. That pattern, an existing API spec projected as MCP tools behind a gateway with standard auth, is becoming the default enterprise path.&lt;/p&gt;

&lt;h3&gt;
  
  
  A de facto API for decision models
&lt;/h3&gt;

&lt;p&gt;The decision model releases also carry a standards story. Cloudflare made Clef &lt;a href="https://blog.cloudflare.com/clef-decision-models/" rel="noopener noreferrer"&gt;fully compatible with the Jev API&lt;/a&gt;, with typed question schemas for yes or no, choice, and score answers. That turns one startup's interface into a shared contract only weeks after launch. AWS took a different route with a downloadable model wired into its Strands agent framework, and OpenAI chose a hosted Decisions API. If more vendors adopt the Jev request shape, teams gain the same portability for decision calls that OpenAI-compatible endpoints brought to chat completions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent safety moves below the application
&lt;/h3&gt;

&lt;p&gt;NVIDIA &lt;a href="https://nvidianews.nvidia.com/news/open-agent-safety-platform" rel="noopener noreferrer"&gt;launched its Open Agent Safety Platform&lt;/a&gt;, an open software platform and reference design for governing agents from testing to deployment. Its core is OpenShell, open source runtime software that sets execution boundaries for agents on CPUs and can extend to Arm and Intel platforms. The reference design adds Sentry, an out-of-band watchdog on BlueField-4 DPUs that monitors agent behavior and quarantines agents that leave their boundaries. Cadence is &lt;a href="https://semiengineering.com/chip-industry-week-in-review-158/" rel="noopener noreferrer"&gt;integrating the platform&lt;/a&gt; with its chip-design agents.&lt;/p&gt;

&lt;p&gt;NVIDIA's framing is pointed. Recent incidents share a pattern where agents get around controls at the application layer to finish their tasks. Putting enforcement in a separate runtime, and in silicon outside the host, means a misbehaving agent cannot simply reason its way past the guard. Read this next to Mistral's report of a model probing its test environment. Containment now needs layers the model cannot reach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation for machine readers
&lt;/h3&gt;

&lt;p&gt;Docsy, the Hugo documentation theme Google created in 2019, &lt;a href="https://thenewstack.io/docsy-linux-foundation-agents/" rel="noopener noreferrer"&gt;is moving to the Linux Foundation&lt;/a&gt;. Erin McKean of Google announced the move at Open Source Summit Europe in Prague on October 7. About 2,200 projects used Docsy by the end of 2024, including Kubernetes, OpenTelemetry, gRPC, and Jaeger. The project is adding features aimed at AI agents as readers of technical docs. As agents read documentation before they write code, docs structure becomes part of the interface contract for any API.&lt;/p&gt;

&lt;h3&gt;
  
  
  A2A stays quiet
&lt;/h3&gt;

&lt;p&gt;The Agent2Agent protocol had no major release this week. A2A reached &lt;a href="https://you.com/resources/a2a-protocol-explained-what-agent-to-agent-communication-solves" rel="noopener noreferrer"&gt;version 1.0 with signed Agent Cards&lt;/a&gt; earlier this year and passed 150 supporting organizations under Linux Foundation governance. Most production stacks now pair MCP for tools with A2A for agent-to-agent handoffs, and that split held steady this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure: Memory Sets the Price of Every Token
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Micron says supply stays tight through 2028
&lt;/h3&gt;

&lt;p&gt;Memory remains the scarcest part of the AI stack, and this week's numbers made that plain. Micron &lt;a href="https://semiengineering.com/chip-industry-week-in-review-158/" rel="noopener noreferrer"&gt;reported record fiscal fourth-quarter revenue of $54 billion&lt;/a&gt;, up from $11 billion a year earlier. The company said memory supply stays tight through 2028 and that more than 75% of its 2027 output is already committed. It also told investors that 2027 HBM prices will run well above 2026 levels.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nextplatform.com/store/2026/10/02/microns-numbers-show-why-hbm4-memory-is-worth-15x-its-weight-in-gold/5300701" rel="noopener noreferrer"&gt;The Next Platform's analysis&lt;/a&gt; adds detail. Micron's core data center business grew about elevenfold year over year to just over $18 billion. The HBM4 ramp is on track, and Micron is working with NVIDIA on NVHBM, the first custom HBM4E part, for NVIDIA's next GPUs and NVLink Fusion platforms. Custom HBM marks a shift. Memory stacks now get designed around one customer's accelerator, the way logic chips always were.&lt;/p&gt;

&lt;p&gt;Samsung added a capacity data point. A Samsung executive &lt;a href="https://semiengineering.com/chip-industry-week-in-review-158/" rel="noopener noreferrer"&gt;told Reuters&lt;/a&gt; that HBM will consume nearly 30% of DRAM makers' wafer capacity in 2027, up from about 20% today. Every wafer that goes to HBM is a wafer that does not go to standard DRAM, which is why conventional memory prices keep climbing too.&lt;/p&gt;

&lt;p&gt;TrendForce expects conventional DRAM contract prices to rise 10% to 15% in the fourth quarter and NAND flash prices to rise 15% to 20%. It projects enterprise SSD bit demand to grow more than 80% in 2026. South Korea's semiconductor exports hit a record $60 billion in September, up more than 262% year over year, driven by memory volume and price. These figures reach every AI budget. Inference servers, vector stores, and the object storage behind data lakehouses all buy from the same constrained supply.&lt;/p&gt;

&lt;p&gt;For AI teams, the planning implication is direct. Hardware quotes for 2027 will carry higher memory costs, and cloud providers pass those costs into instance prices. Teams that size inference fleets now should model memory as the line item most likely to rise. Techniques that shrink memory per request, such as quantized models, smaller specialized models, and caching shared context, pay off twice in this market.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optics close in on the network bottleneck
&lt;/h3&gt;

&lt;p&gt;As memory gets more expensive, wasted accelerator time costs more too. Counterpoint Research &lt;a href="https://semiengineering.com/chip-industry-week-in-review-158/" rel="noopener noreferrer"&gt;estimates&lt;/a&gt; that GPUs spend roughly 12.5% of their time waiting on the network in some workloads. The firm expects near-packaged optics to start sampling in late 2026 or early 2027, followed by co-packaged optics as scale-up interconnects demand more bandwidth per watt.&lt;/p&gt;

&lt;p&gt;Standards and funding moved this week to support that shift. JEDEC published the industry's first silicon photonics reliability standard, which sets common qualification rules as optical interconnects spread through AI systems. CScale came out of stealth with $145 million to build an optical interconnect for AI scale-up that contains optical failures without stopping compute. Volantis raised $88 million for an interconnect that uses integrated micro-VCSELs to link many memory chips into one pool for inference. Pooled memory over optics attacks the same problem as HBM from a different angle: give each accelerator access to more memory without stacking it all on the package.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who trained on what this week
&lt;/h3&gt;

&lt;p&gt;This week's model launches doubled as infrastructure disclosures. Mistral trained Large 4 on 3,800 Grace Blackwell GPUs in its own European data centers and serves the preview on the same fleet. Its reinforcement learning stack produces roughly 33 billion tokens per day on about 3,000 GPUs, with about 16 billion of those trainable after filtering. Mistral says its €3 billion Series D funds a large compute expansion in Europe.&lt;/p&gt;

&lt;p&gt;Reflection pretrained Beam on 6,144 GB300 GPUs in NVL72 racks, then ran RL on 10,500 GB300 GPUs for four weeks. Its RL platform sustained about 110,000 concurrent rollouts and up to 170,000 concurrent sandboxes across more than 20 clusters, two clouds, and four regions. New weights reached the inference fleet in a median of about 12 seconds. Reflection reports pretraining goodput of 92.3% near the end of the run, with nine rewinds for gradient spikes or suspected silent data corruption.&lt;/p&gt;

&lt;p&gt;These numbers show where frontier spending now goes. Pretraining is only one stage. RL at scale needs huge numbers of CPU sandboxes, fast weight distribution, and fault handling that keeps a month-long job alive through dozens of incidents. That is why NVIDIA's CPU-heavy rack designs and agent sandboxing products keep showing up next to its GPU launches.&lt;/p&gt;

&lt;p&gt;NVIDIA also &lt;a href="https://nvidianews.nvidia.com/news" rel="noopener noreferrer"&gt;published a post&lt;/a&gt; on how its Blackwell GPUs accelerate GPT-6 Astra Ultrafast, which is now live in the OpenAI API and for eligible ChatGPT Work and Codex users. Fast tiers like this are becoming a standard product line, priced above default speed for latency-sensitive agent loops.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capital, fabs, and power
&lt;/h3&gt;

&lt;p&gt;Several deals this week show how AI hardware financing now works. Anthropic's IPO filing &lt;a href="https://semiengineering.com/chip-industry-week-in-review-158/" rel="noopener noreferrer"&gt;revealed&lt;/a&gt; that it is the customer behind Broadcom's previously disclosed compute financing arrangement of up to $42 billion. Chip vendors financing their own customers' compute is now a standard tool for moving custom silicon.&lt;/p&gt;

&lt;p&gt;TSMC is reportedly weighing a multibillion-dollar Texas campus for more AI chips, beyond its Arizona buildout. AMD plans to acquire World Labs, which builds spatial-intelligence models that simulate interactive 3D environments for robotics, in an $8.2 billion all-stock deal expected to close by the end of 2026. Samsung Electro-Mechanics will invest about $4.9 billion to expand FCBGA substrate capacity for AI servers in South Korea and Vietnam.&lt;/p&gt;

&lt;p&gt;Power keeps showing up in chip news. South Korea and the United States are advancing a $22 billion, 6.47 GW gas-fired power project in Texas to serve chip plants and AI data centers. Infineon will supply silicon carbide devices for Eaton's solid-state transformer platform built for 800 VDC data center power. The 800-volt shift reduces conversion losses in dense AI racks, and suppliers are lining up parts for it now.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this means for buyers
&lt;/h3&gt;

&lt;p&gt;Put the week's infrastructure news together and a pattern appears. The cost of AI is shifting from compute alone to compute plus memory plus power. Vendors that disclose cluster sizes, RL token rates, and serving hardware give buyers a better sense of what a model costs to run and how fast it will improve. Mistral and Reflection both published more training detail than most closed labs share. That transparency is part of the open-weight value proposition, and procurement teams should ask every provider for the same numbers.&lt;/p&gt;

&lt;p&gt;The other lesson is about timing. Memory contracts for 2027 are already mostly signed. Teams that need dedicated capacity next year should lock in plans now, and teams that rent capacity should expect prices to follow memory upward.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Layer Angle
&lt;/h2&gt;

&lt;p&gt;Three of this week's stories land squarely on the data platform. EmbeddingGemma 2 puts text, images, video, and audio into one 768-dimension space. That makes vector columns a normal part of analytical tables, not a side system. The open table and file formats are racing to catch up. On the Apache Parquet dev list this week, contributors debated whether a new &lt;code&gt;VECTOR&lt;/code&gt; type should guarantee finite elements, and Ryan Blue proposed shipping two types to settle it. Apache Iceberg started a dedicated sync on October 8 for its own vector type. Teams that plan to store embeddings in their lakehouse should follow both threads, because the outcome decides what readers and indexes can assume about those columns.&lt;/p&gt;

&lt;p&gt;Decision models fit the governed data layer too. A decision model needs clean, well-defined options and fields to choose from. That is exactly what a semantic layer provides. The Apache Ossie (incubating) community spent this week debating whether to define an MCP contract so agents can discover a semantic model and run governed queries against it. Put a decision model in front of that contract, and an agent can route a question to the right metric, check its arguments, and run it with a confidence score attached.&lt;/p&gt;

&lt;p&gt;The memory story ties back as well. When DRAM and NAND prices rise 10% to 20% in a quarter, the cost of keeping hot copies of data rises with them. Open formats on object storage, with engines that cache smartly, keep that cost in check. Moving compute to the data beats copying data into every new AI tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practitioner Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Plan for Mistral Large 4 weights at the end of October, and read the custom license before you commit to self-hosting.&lt;/li&gt;
&lt;li&gt;Put a decision model in your agent loop for routing, tool-argument checks, and output gating. Clef, Strands Decider, and Perplexity Decider all ship open weights.&lt;/li&gt;
&lt;li&gt;Audit pinned model IDs in Copilot and OpenAI configs. Several Gemini, Kimi, Claude, and GPT-5.x IDs retired or entered deprecation this week.&lt;/li&gt;
&lt;li&gt;Decide your text watermarking policy for EU users now. OpenAI and Anthropic ship different defaults.&lt;/li&gt;
&lt;li&gt;Measure the token cost of every MCP server you load. On-demand tool loading can save tens of thousands of tokens per session.&lt;/li&gt;
&lt;li&gt;Budget for higher memory and storage prices through 2027, and favor architectures that avoid duplicate copies of large datasets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to Watch Next Week
&lt;/h2&gt;

&lt;p&gt;OpenAI's Codex sprint promises a new improvement every day, so expect a steady stream of small changes and possibly a new model before the 28 days end. Reflection's Beam weights and technical report are due later in October, and Mistral's ML4 weights should follow by month end. On the infrastructure side, the OCP Global Summit runs October 12 to 15 in San Jose and SEMICON West runs October 13 to 15 in San Francisco, so look for rack, power, and optics announcements. On the standards side, watch whether more vendors adopt the Jev request format for decision models, and whether MCP clients copy Pi's on-demand tool loading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;The pace of change in AI rewards people who understand the fundamentals underneath the headlines. My books cover AI-assisted development, agentic analytics, open lakehouse architecture, and the economics of AI and work. Browse the full catalog at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt; and pick the one that matches what you are building next.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Stop Calling Everything Made With AI Slop</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Mon, 05 Oct 2026 14:36:35 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/stop-calling-everything-made-with-ai-slop-5c3e</link>
      <guid>https://dev.to/alexmercedcoder/stop-calling-everything-made-with-ai-slop-5c3e</guid>
      <description>&lt;p&gt;Scroll any comment section under a blog post, a video, or a song in 2026 and you will find the same two-word review. "AI slop." Sometimes the label fits. The post invents a statistic, the video melts into nonsense halfway through, or the article repeats the same empty point six times in slightly different words.&lt;/p&gt;

&lt;p&gt;Other times the label lands on work that is careful, accurate, and genuinely useful. Someone spent hours on the research, wrote pages of their own notes, argued with the draft, fixed what the model got wrong, and shipped something worth reading. A commenter spots a familiar phrase or a too-clean thumbnail and dismisses the whole thing in two words.&lt;/p&gt;

&lt;p&gt;I want to make a case that sounds simple but gets lost in the noise. Bad AI-assisted content is bad because it is bad, not because AI touched it. Good AI-assisted content exists, it takes real skill to make, and the only way anyone builds that skill is by using the tools often enough to get past the clumsy early stage.&lt;/p&gt;

&lt;p&gt;I have not been shy about how I work. I use AI heavily, mostly in areas where I already have deep knowledge, and I use it to move faster. I also make my mistakes in public, because public mistakes bring feedback, and feedback is how I get better. This article explains what slop actually is, why every creative tool goes through this same backlash, what I learned by doing it over and over, and how I think we should judge creative work from here on out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Slop Actually Is
&lt;/h2&gt;

&lt;p&gt;The word has a real definition now. Merriam-Webster named "slop" its 2025 Word of the Year and defined it as digital content of low quality that is produced usually in quantity by means of artificial intelligence. Macquarie Dictionary picked "AI slop" as its word of the year too. The term earned its spot. The internet filled up with junk fast.&lt;/p&gt;

&lt;p&gt;Read the definition closely, though. "Low quality" sits right in the middle of it. Quality is the defining trait. AI is the usual production method, but the definition does not say every AI-produced thing is slop. It says slop is low-quality content, usually mass-produced with AI.&lt;/p&gt;

&lt;p&gt;That distinction matters, because a lot of people use the word to mean "anything I suspect involved a model." Those are two very different claims. One is a judgment about the work. The other is a guess about the workflow.&lt;/p&gt;

&lt;p&gt;So what puts something in the slop bin? I see three clear markers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It tries to misinform.&lt;/strong&gt; The content spreads false claims, fabricated quotes, fake sources, or invented events. Sometimes this is deliberate. Sometimes the creator just never checked. The result for the reader is the same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It adds no value.&lt;/strong&gt; The piece says nothing a reader did not already know. It restates the obvious, pads the length, and leaves you with no new idea, no new skill, and no new perspective.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It clearly was not reviewed.&lt;/strong&gt; The draft still contains the model's mistakes. You see broken references, contradictions between sections, hallucinated version numbers, and leftover phrases like "as an AI model" or "here is your blog post."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every one of these markers describes a failure of the creator, not the tool. A human writer with no AI at all can misinform, add nothing, and skip editing. We just had other names for that content before 2023. We called it content farm filler, clickbait, or spam.&lt;/p&gt;

&lt;p&gt;The volume is the new part. A content farm used to need a room full of underpaid writers. Now one person with a script can publish thousands of pages a day. Streaming service Deezer has reported that a large share of the music uploaded to its platform every day is fully AI-generated, at one point estimating about 28 percent of new uploads. That flood is real, and people have every right to be tired of it.&lt;/p&gt;

&lt;p&gt;But fatigue makes people sloppy judges. When the default reaction to any hint of AI is "slop," the label stops meaning "low quality." It starts meaning "made with a tool I disapprove of." That shift hurts the people who use these tools well, and it teaches newcomers that the right move is to hide their process instead of improving it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Creative Tool Got This Reception
&lt;/h2&gt;

&lt;p&gt;The backlash against AI-assisted work feels new, but the pattern is old. Almost every tool that lowered the barrier to creative work got called cheating, fake, or the death of real art.&lt;/p&gt;

&lt;p&gt;Music has the cleanest example. In 1982, the UK Musicians' Union passed a motion to ban synthesizers, drum machines, and any electronic devices capable of recreating the sounds of conventional instruments. The union feared these machines threatened the jobs of session players. The motion came after Barry Manilow toured the UK using synths to simulate the sound of a big band orchestra.&lt;/p&gt;

&lt;p&gt;The ban went nowhere. Drum machines went on to shape hip-hop, house, and techno. Those genres did not replace older music. They added new music that did not exist before those instruments arrived. The union was right that the work was about to change. It was wrong that the change meant the end of real musicianship.&lt;/p&gt;

&lt;p&gt;Photo editing went through the same cycle. Adobe released Photoshop 1.0 in 1990. For years after, "photoshopped" worked as an insult. It meant fake, manipulated, dishonest. Today nearly every professional photo passes through editing software, and nobody accuses a wedding photographer of fraud for adjusting exposure. People still criticize manipulated images, and they should when the edit deceives. The criticism shifted from "you used the tool" to "you used the tool to lie."&lt;/p&gt;

&lt;p&gt;Digital audio workstations (DAWs) followed the same arc. A DAW is software for recording, editing, and arranging music on a computer. Tools like FL Studio, which started life as FruityLoops in the late 1990s, let a teenager with a laptop build tracks that once needed a studio, an engineer, and a band. Early bedroom producers got mocked for not playing "real" instruments. Some of those bedroom producers now headline festivals.&lt;/p&gt;

&lt;p&gt;I have picked up a lot of these tools over the years. Photoshop, FL Studio, Videoleap, and plenty more. I learned each one for the same reason: it let me make the ideas in my head real. AI tools are the latest entry on that list.&lt;/p&gt;

&lt;p&gt;Not every critic in these cycles was wrong. Some synth-heavy records from the 1980s really are thin. Plenty of early Photoshop work really was garish. Tools do get misused, especially early, when nobody has figured out the craft yet.&lt;/p&gt;

&lt;p&gt;Where the critics went wrong was the target. They judged the tool when they should have judged the output. Over time, the culture corrected. The tool stopped being the story, and the work became the story again. I expect the same correction for AI-assisted work. The only open question is how many capable creators we discourage before it happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using AI Well Is a Skill, and Skills Come From Reps
&lt;/h2&gt;

&lt;p&gt;Here is the part that gets lost in most arguments about AI content. Using these tools well is a skill, and it behaves like every other craft skill. You start out bad, you get feedback, you adjust, and you slowly get good.&lt;/p&gt;

&lt;p&gt;Nobody opens a DAW for the first time and mixes a radio-ready track. Nobody opens Photoshop and produces a clean composite on day one. The first hundred attempts teach you where the controls are. The next hundred teach you what good looks like. After that, you start to build taste and speed at the same time.&lt;/p&gt;

&lt;p&gt;AI tools work the same way. Your first AI-assisted blog post will probably read flat. Your first AI-generated image will have strange hands or warped text. Your first AI-assisted song will sound generic. That tells you that you are a beginner, which is exactly what everyone is at the start of any skill. It says very little about the ceiling of the tool.&lt;/p&gt;

&lt;p&gt;The people quickest to shame AI users often point to those beginner outputs as proof. "Look how bad this is." They are judging a first draft from a first-week user and treating it as the ceiling of the medium. Nobody judges guitar by listening to someone on their third lesson.&lt;/p&gt;

&lt;p&gt;My own practice looks like this. I mostly use AI in areas where I already know the material well. I have co-written books on Apache Iceberg and Apache Polaris and written another on architecting an Iceberg lakehouse. When a model drafts something in that territory, my expertise does the checking. The model does the typing, the first-pass research, and the structural grunt work.&lt;/p&gt;

&lt;p&gt;That pairing is where AI pays off the most. Expertise plus AI acceleration beats either one alone. An expert without AI moves slower. AI without an expert produces confident nonsense. The skill lives in the combination.&lt;/p&gt;

&lt;p&gt;The clearest example from my own work is my personal websites. I manage them myself with AI assistance. That work used to need a team of specialists: a web developer, a copyeditor, a graphic designer. Now I handle the full workflow on my own, end to end. At a larger scale, my plan is not a row of narrow specialists. I want a small team of generalists, each one owning complete workflows end to end with AI support, all pointed at a shared goal.&lt;/p&gt;

&lt;p&gt;None of that came free. I got there by doing the work over and over, and by doing it in public. I make mistakes in public without shame, because that is how I get the feedback and the lessons that let me improve quickly.&lt;/p&gt;

&lt;p&gt;This is why I push back when people say "just don't use AI until it's good." The tools keep getting better, but the person using them only gets better through practice. If you wait on the sidelines until the technology is perfect, you will show up with zero experience while everyone who practiced has years of instinct on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Early Reps Taught Me About the "AI Meh" Feel
&lt;/h2&gt;

&lt;p&gt;Every heavy AI user eventually learns to recognize a certain texture. I call it the "AI meh" feel. The content is not wrong, exactly. It is grammatical, organized, and on topic. It is also forgettable. Readers sense it within a paragraph, even when they cannot name what bothers them.&lt;/p&gt;

&lt;p&gt;Learning what gives content that feel, and how to get rid of it, was one of the first lessons that came from doing this regularly.&lt;/p&gt;

&lt;p&gt;The meh feel tends to come from a handful of habits that language models fall into when nobody steers them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generic openings.&lt;/strong&gt; Models love to open with a broad statement about how fast the world changes or how important a topic has become. Readers skip these lines automatically. A strong opening starts with a concrete problem the reader recognizes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filler transitions.&lt;/strong&gt; Stiff, formal connector words pile up at the start of sentences in AI drafts. They make prose sound formal while carrying no meaning. The same goes for phrases that announce importance instead of demonstrating it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rhythm lists.&lt;/strong&gt; Models reach for groups of three adjectives because the rhythm sounds polished. After a few paragraphs, the pattern becomes obvious, and the reader starts to tune out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hedging.&lt;/strong&gt; Unsteered drafts qualify everything. Every claim gets a softener in front of it. The result reads as if nobody stands behind any of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Missing opinion.&lt;/strong&gt; This one matters most. A model with no direction defaults to a balanced summary of every side. Balanced summaries have their place, but they have no voice. Readers come back to creators because those creators see things a certain way.&lt;/p&gt;

&lt;p&gt;I keep a list of style rules and banned words for anything written in my voice. No em dashes. No stacked formal transitions. No hedge words in the body of the piece. Active voice. Short paragraphs. Concrete numbers over vague claims of size. Those rules go to the model as part of the instructions whenever it drafts in my voice.&lt;/p&gt;

&lt;p&gt;Rules only fix the surface, though. The deeper fix for the meh feel is input. A model drafts flat content when it has nothing specific to work with. Give it a generic prompt and you get the average of everything it has read. Give it your specific angle, your notes, your opinions, and the examples you actually care about, and the draft starts to sound like a person with a point of view.&lt;/p&gt;

&lt;p&gt;This article is a good example. It started with a long set of notes in my own words. Every argument in it, every example, every opinion came from those notes. The model helped organize the material, expand it, and tighten it against my style rules. The thinking is mine. The acceleration came from the tool.&lt;/p&gt;

&lt;p&gt;That is the real difference between slop and skilled AI-assisted work. Slop starts with a topic. Skilled work starts with a point of view.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying Efficiently: Know Where the Model Breaks
&lt;/h2&gt;

&lt;p&gt;The second big lesson from the early reps was about review. Beginners tend to make one of two mistakes. Some skip review entirely and publish whatever the model gives them. That is how slop gets made. Others review every sentence with equal suspicion, which takes so long that the AI saves them no time at all.&lt;/p&gt;

&lt;p&gt;Efficient review means knowing where the model is strong and where it is weak, then spending your attention where the weaknesses live. A good editor already works this way with human writers. You learn which writer mangles dates and which one overstates conclusions, and you read their drafts with that in mind.&lt;/p&gt;

&lt;p&gt;Language models have fairly predictable weak spots. Here is how I think about the split.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6k67cvy3njcq48w2v9a5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6k67cvy3njcq48w2v9a5.png" alt="Language models have fairly predictable weak spots. Here is how I think about the split." width="669" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That last row deserves extra attention. An unsteered model writing in your voice will happily invent a conference you never attended or a customer you never met. Those fake stories read well, which makes them dangerous. I have a standing rule that no anecdote appears in my content unless it actually happened to me. The model does not get to make up my life.&lt;/p&gt;

&lt;p&gt;Review also gets faster when you automate the mechanical parts. My style rules are specific enough to check with a script. Here is a version of the verification pass for my long-form drafts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;F&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;article.md

&lt;span class="c"&gt;# Word count: long-form pieces need to clear 6,000 words&lt;/span&gt;
&lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Em dashes and en dashes: must return nothing&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-nE&lt;/span&gt; &lt;span class="s1"&gt;'—|–'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Semicolons: must return nothing outside code blocks&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;';'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Banned vocabulary sweep: the words that make prose read like a template&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-niE&lt;/span&gt; &lt;span class="s1"&gt;'\b(delve|leverag|seamless|paradigm|synergy|holistic|robust|unlock|realm|tapestry|testament|embark|myriad|plethora|pivotal|transformative|bespoke|curated|meticulous|elevate|empower|streamline|foster)\w*'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Hedging modals: claims get stated plainly or not at all&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-niE&lt;/span&gt; &lt;span class="s1"&gt;'\b(might|could|would|may) '&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Call to action present&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;'books.alexmerced.com'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is what each part does and why it exists.&lt;/p&gt;

&lt;p&gt;The first line sets a variable named &lt;code&gt;F&lt;/code&gt; to the file path, so every later command checks the same file without retyping the name.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;wc -w&lt;/code&gt; command counts words. Long-form pieces have a target length, and models often land short when asked for a long draft in one pass. A word count catches that right away, before anyone spends time reading a draft that needs more material anyway.&lt;/p&gt;

&lt;p&gt;The dash check uses &lt;code&gt;grep -nE&lt;/code&gt; with a pattern that matches either an em dash or an en dash. The &lt;code&gt;-n&lt;/code&gt; flag prints line numbers, so each hit is easy to find. Models lean on em dashes heavily, and a page full of them is one of the fastest tells of unedited AI prose.&lt;/p&gt;

&lt;p&gt;The semicolon check works the same way. My style rules keep semicolons out of prose, so the only acceptable hits are inside code blocks.&lt;/p&gt;

&lt;p&gt;The vocabulary sweep uses &lt;code&gt;-i&lt;/code&gt; for case-insensitive matching and &lt;code&gt;\b&lt;/code&gt; for word boundaries, so one stem catches every form of a word, capitalized or not. Every word on that list is technically fine English. The problem is frequency. Models reach for these words far more often than people do, and a reader who sees three of them in a paragraph stops trusting the writing.&lt;/p&gt;

&lt;p&gt;The hedging check looks for soft modal verbs followed by a space. The goal is plain claims. If a claim is true, state it. If it holds only under certain conditions, name the conditions.&lt;/p&gt;

&lt;p&gt;The last line confirms the call to action made it into the final draft. That sounds trivial, but when a model rewrites a closing section, the link sometimes disappears.&lt;/p&gt;

&lt;p&gt;None of this replaces reading the piece. The script handles the mechanical checks in about a second, which frees my attention for the parts only a human expert can judge. Is the argument right? Is the technical claim accurate? Does this say something worth saying?&lt;/p&gt;

&lt;p&gt;That division of labor is the whole point. The machine checks the machine-checkable. I check the meaning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flow Changes With the Model, the Tool, and the Medium
&lt;/h2&gt;

&lt;p&gt;Once you have a process that works, it is tempting to treat it as finished. It never is. My workflow shifts every time one of three things changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model.&lt;/strong&gt; Different models have different habits. One model leans on certain phrases, while another pads its output with summaries at the end of every section. One is more likely to invent citations, another is more cautious but more generic. When I switch models, my review checklist shifts with it. The weak spots in the table above hold up broadly, but the details move.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tool around the model.&lt;/strong&gt; The same model behaves differently depending on the app or agent setup wrapped around it. A chat window, a coding agent with file access, and a writing tool with a custom style guide all produce different results. Some setups let the model search the web, which helps with current facts but introduces new risks around sources. Others let the model run code, which helps with verification. Learning what each setup is good at is its own skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The medium.&lt;/strong&gt; Writing, video, and music each have their own failure modes. In writing, the risk is factual errors and the meh feel. In video, it is visual consistency from shot to shot, characters whose faces drift, and motion that breaks physics in distracting ways. In music, it is generic arrangements, muddy mixes, and lyrics that rhyme without saying anything.&lt;/p&gt;

&lt;p&gt;Each medium needs its own review habits. For an article, review targets facts and voice. For a video, it targets continuity from shot to shot, and anything that breaks the illusion gets cut. For a song, it targets the moments where the arrangement goes on autopilot.&lt;/p&gt;

&lt;p&gt;The underlying pattern stays the same across all three. You learn where the tool is reliable. You learn where it fails. You put your effort where the failures are. And the only way to build that map is to make a lot of things and pay attention to what goes wrong.&lt;/p&gt;

&lt;p&gt;This is also why one attempt, years ago, is a weak basis for deciding AI is useless. The tools they tried are gone. The models changed, the setups changed, and the outputs changed. More to the point, they never built the map. One try tells you almost nothing about what a practiced user can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  "If AI Wrote It, Why Should I Read It?"
&lt;/h2&gt;

&lt;p&gt;This is a common objection, and it deserves a real answer. The argument goes like this. If a machine wrote the piece, the writer put in no effort, so the reader owes it no attention. Why spend my time on something nobody bothered to write?&lt;/p&gt;

&lt;p&gt;The objection rests on an assumption that the person contributed nothing. For slop, that assumption is usually correct. Someone typed a topic into a box, copied the output, and hit publish. There is no person in that content, so there is nothing of a person to read.&lt;/p&gt;

&lt;p&gt;Skilled AI-assisted work is different. The creator puts themselves into the piece at every stage that matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The angle.&lt;/strong&gt; Before any drafting happens, someone decides what the piece argues. A model left alone writes the average take. A creator with a point of view picks the specific claim, the counterintuitive framing, or the uncomfortable truth that makes the piece worth reading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The research.&lt;/strong&gt; Someone decides which sources to trust, which facts to verify, and which examples best support the point. Those choices shape the piece as much as any sentence does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The notes.&lt;/strong&gt; Strong AI-assisted pieces start with the creator's own notes. Those notes hold their opinions, their reflections, the wisdom they have built up, and the arguments they want to make. Those notes are the raw material. The model shapes them. It does not invent them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The judgment.&lt;/strong&gt; Someone reads the draft, rejects what is wrong, pushes back on what is weak, and decides when the piece is done. That editorial judgment is a creative act. Film directors do not operate every camera, and nobody says their films lack a creator.&lt;/p&gt;

&lt;p&gt;When all four are present, the reader gets the creator's thinking, delivered faster than typing it alone. That is a good deal for the reader.&lt;/p&gt;

&lt;p&gt;There is a second half to this objection worth answering. People say, "If AI wrote it, why should I read it? I can just ask AI." Fair enough. Ask AI to help you read it, then. Ask a model to summarize a long piece, pull out the key claims, or explain a section you found confusing.&lt;/p&gt;

&lt;p&gt;Reading can be AI-assisted the same way writing can. There is no shame in that. A dense technical article is a lot more approachable when you can ask follow-up questions about it. Using AI to read does not mean the piece should not have been written. It means the reader found a faster way into it.&lt;/p&gt;

&lt;p&gt;The piece still had to exist. Somebody still had to choose the argument, gather the evidence, and stand behind the conclusions. A model summarizing an article you never wrote has nothing to summarize.&lt;/p&gt;

&lt;p&gt;And there is real pleasure in reading something slowly, on your own, with no assistance at all. Some books deserve your full, unassisted attention. Neither approach is the correct one. Both are tools a reader can pick up depending on what they want from the experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Good Looks Like
&lt;/h2&gt;

&lt;p&gt;Arguments are easier to evaluate with examples, so here are two. One comes from a creator whose work shows what this technology can do. The other comes from my own music.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gossip Goblin
&lt;/h3&gt;

&lt;p&gt;The filmmaker Zack London, known online as Gossip Goblin, makes dark, strange science fiction short films with AI video tools. His channel has passed 1.4 million subscribers and more than a billion total views. His first feature-length film, an anthology called &lt;em&gt;Gods Don't Give Gifts&lt;/em&gt;, was scheduled to open in several hundred U.S. theaters on October 30, 2026, produced with the studio Fable.&lt;/p&gt;

&lt;p&gt;What makes his work relevant to this argument is how much human effort goes into it. London has said his feature still needed a human-written script, a dozen voice actors, and a post-production crew. Reporting on the feature describes a team of 10 artists working on it over two months. His process starts with a script, then builds every shot from a still image generated in Midjourney, refined in other tools, and only then animated into video. That is a slower, more hands-on pipeline than the one-click generation most people picture.&lt;/p&gt;

&lt;p&gt;London has also said plainly that AI is a tool for him and not the point. It gave him access to filmmaking without replacing crafts he already valued, like illustration. His shorts do not hide the strangeness of the medium. They lean into it and build a recognizable visual style from it.&lt;/p&gt;

&lt;p&gt;You do not have to like his films. Taste is personal. But nobody watching his work in good faith calls it low effort. It has a vision, a consistent world, and a recognizable voice. Those are the things that separate art from filler in any medium. AI did not supply them. London did.&lt;/p&gt;

&lt;h3&gt;
  
  
  My old acoustic recordings
&lt;/h3&gt;

&lt;p&gt;The second example is smaller and more personal. I have old acoustic recordings from my younger days. They hold my effort and my vision from that time.&lt;/p&gt;

&lt;p&gt;Suno is an AI music platform, and one of its features lets you upload your own audio and generate a new version in a different style while keeping the original melody. My old acoustic recordings have become the seeds for full productions.&lt;/p&gt;

&lt;p&gt;The songwriting, the melodies, and the emotional core come from my younger self. The production comes from a tool that did not exist back then. Neither approach makes these songs alone, and the result is a fun bridge between two versions of me.&lt;/p&gt;

&lt;p&gt;Is that slop? Run it through the three markers. It does not misinform anyone. It adds value by finishing work that started years ago. And the review test comes down to keeping the versions that serve the song and tossing the ones that miss. By the definition that matters, it is not slop. It is a creative project that uses a new tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  There Is Room for Both Markets
&lt;/h2&gt;

&lt;p&gt;I want to be clear about one thing. I am not arguing that all content should be AI-assisted. I do not think that, and I do not want that.&lt;/p&gt;

&lt;p&gt;There will be a strong market for creators who make everything without AI, and there should be. Some audiences care deeply about knowing that a human did every step. That preference is valid, and the market already serves it. Bandcamp, the music platform popular with independent artists, announced in January 2026 that it no longer allows music generated wholly or in substantial part by AI. The company framed the policy as a way to keep its community human. That is a reasonable choice for a platform, and it gives listeners who want fully human music a clear place to find it.&lt;/p&gt;

&lt;p&gt;Handmade work has always held value next to manufactured work. Hand-thrown pottery sells alongside factory dishware. Film photography survives next to digital cameras. Live acoustic sets still draw crowds in a world full of programmed beats. Those markets did not vanish when the faster tool arrived. They found their audience, and the handmade quality became a feature people choose on purpose.&lt;/p&gt;

&lt;p&gt;The same thing will happen with writing, video, and music. Some creators will advertise that they use no AI, and some audiences will seek them out. Other creators will use AI heavily and openly, and their audiences will care about the output, not the process.&lt;/p&gt;

&lt;p&gt;What I push back on is the idea that one camp gets to define the other as illegitimate. The human-only creator is not a dinosaur. The AI-assisted creator is not a fraud. They are making different choices about tools, and both can produce excellent work or terrible work.&lt;/p&gt;

&lt;p&gt;Every major creative technology eventually settles into some balance between efficiency and quality. Photoshop did not make every photo fake. DAWs did not make every song soulless. The balance point took years of experimentation, curiosity, and a lot of bad early work to find. AI-assisted creation is in that experimentation phase right now. The people who will find the balance point are the ones willing to practice in the open.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Practice Without Publishing Slop
&lt;/h2&gt;

&lt;p&gt;If you are early in using AI for creative work, the advice to "just do it a lot" needs some guardrails. Practice should not mean flooding the internet with weak drafts. Here is how I think about building the skill responsibly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start where you are already an expert.&lt;/strong&gt; Use AI first in a subject you know cold. Your knowledge acts as a built-in fact checker. You will catch the model's errors quickly, and you will learn its failure patterns faster because you can see them. Using AI in a field you do not understand is how people publish confident mistakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify against primary sources.&lt;/strong&gt; When a draft cites a release date, a feature, a quote, or a number, check it against the original source. That means the official documentation, the project's release notes, the dictionary entry, or the article that first reported the claim. Secondhand summaries repeat each other's errors, and models blend them together. A habit of going to the original catches most factual mistakes before they reach a reader, and it gets faster as you learn which sources hold up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write your notes before you prompt.&lt;/strong&gt; Spend 15 minutes writing down what you actually think about the topic. Your opinions, your examples, the arguments you want to make, the mistakes you see other people making. Feed those notes to the model. The difference in output quality between "write about X" and "here are my notes on X, shape them into an article" is enormous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep a running list of what goes wrong.&lt;/strong&gt; Every time a model makes a mistake you catch, write it down. Wrong dates, invented quotes, repeated phrases, weak openings. After a few dozen pieces, that list becomes your review checklist. It tells you exactly where to look, which is how review gets faster over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turn your style into rules.&lt;/strong&gt; If you notice yourself fixing the same pattern over and over, write a rule for it and give the rule to the model up front. Then check the rule with a script where you can. My own banned-word list and verification script are examples of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish less than you generate.&lt;/strong&gt; The ability to produce a lot does not mean you should publish a lot. Generate ten drafts, publish the one that says something. Volume is the defining trait of slop. Selectivity is the defining trait of craft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be open about your process.&lt;/strong&gt; Hiding AI use creates a trust problem when people find out. Being open about it lets you get honest feedback on the work itself. I talk about how I use AI because the feedback makes me better, and because I think the conversation about these tools needs more practitioners sharing real workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take criticism of the work seriously and criticism of the tool lightly.&lt;/strong&gt; When someone says a claim is wrong or a section is weak, that is gold. Fix it. When someone says "AI slop" with no further detail, there is usually nothing to act on. Check whether your piece hits any of the three slop markers. If it does not, move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Judge the Work, Not the Workflow
&lt;/h2&gt;

&lt;p&gt;So how should we judge creative work now that AI is part of so many workflows? The same way we judged it before. Look at the output and ask the questions that always mattered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it accurate?&lt;/strong&gt; Does it state true things? Are its sources real? Do its numbers hold up? A piece full of errors fails this test whether a human or a model introduced the errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it add value?&lt;/strong&gt; Did you learn something, feel something, or see something in a new way? Content that leaves you exactly where you started has failed, no matter how it was made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it have a point of view?&lt;/strong&gt; Can you tell what the creator thinks? Is there a specific argument, a specific style, or a specific vision behind it? Work with a clear voice behind it is almost never slop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Was it cared for?&lt;/strong&gt; Do the details hold together? Are the rough edges sanded down? Does it feel finished? Care shows up in the work, and its absence shows up too.&lt;/p&gt;

&lt;p&gt;Notice that none of these questions asks what tools the creator used. That is deliberate. We do not grade a novel by whether the author used a typewriter or a laptop. We do not grade a song by whether the drums came from a kit or a drum machine. We do not grade a photo by whether it passed through editing software. We grade the result.&lt;/p&gt;

&lt;p&gt;These questions also work in both directions. They catch slop made with AI, and they catch lazy work made without it. A handwritten article full of errors fails the accuracy test. A fully human song with nothing to say fails the value test. The standard stays the same no matter which tools sit in the workflow.&lt;/p&gt;

&lt;p&gt;AI-assisted work deserves the same standard. Hold it to a high bar. Call out errors. Call out empty content. Call out work that clearly never got a human review. Those criticisms help everyone.&lt;/p&gt;

&lt;p&gt;But when a piece is accurate, valuable, distinctive, and carefully made, the presence of AI in the workflow counts as a production detail, the same way the choice of camera or DAW is a production detail. Something that adds real value, AI or not, still required skill, vision, and determination to make.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Slop is real, and I share the frustration with it. Content that misinforms, adds nothing, and skips review makes the internet worse, and people are right to call it out. The dictionary even gave us a word for it, and the definition puts low quality at the center.&lt;/p&gt;

&lt;p&gt;But the word has drifted. Too many people now use "slop" to mean "made with AI," and that shift punishes the wrong people. It discourages beginners from practicing a skill that only improves with practice. It pressures experienced creators to hide their process instead of sharing what they learned. And it confuses a judgment about a workflow with a judgment about the work.&lt;/p&gt;

&lt;p&gt;My own path has been simple. I learn whatever tool lets me make the things I picture in my head. Photoshop, Videoleap, FL Studio, and now a range of AI tools. Each one made me more versatile. I learn in public and make my mistakes in public on purpose, because public mistakes bring the fastest lessons, and I am proud of what that approach has let me build.&lt;/p&gt;

&lt;p&gt;If you want to criticize AI-assisted work, criticize it on the merits. Point to the wrong fact, the empty argument, the missing review. If you want to make AI-assisted work, put yourself into it. Bring your angle, your notes, your judgment, and your willingness to throw away drafts that do not meet the bar.&lt;/p&gt;

&lt;p&gt;Judge creators by the quality and value of what they make, the way we judge creators in every other medium. That standard worked for photography, for synthesizers, and for the bedroom producer with a laptop and a DAW. It will work for this too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep Going
&lt;/h2&gt;

&lt;p&gt;If this piece was useful, I have written a lot more on how AI is changing the way people work. My book on AI and labor economics covers the economic side of this shift, and you can find it at &lt;a href="https://a.co/d/06SeOKw8" rel="noopener noreferrer"&gt;a.co/d/06SeOKw8&lt;/a&gt;. You can find every book I have written, across lakehouse architecture, Apache Iceberg, Apache Polaris, and AI, at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Apache Data Lakehouse Weekly: September 23 to 30, 2026</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 30 Sep 2026 13:57:19 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-23-to-30-2026-3lj2</link>
      <guid>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-23-to-30-2026-3lj2</guid>
      <description>&lt;p&gt;Release week. Apache Iceberg 1.12.0 passed its vote after a license audit sank the first candidate, Apache Polaris shipped 1.8.0 with a security fix inside it, and Iceberg C++ 0.4.0 went out the door. Under the release traffic sat a quieter theme that ran through every list. Specs are getting stricter about what they promise. Iceberg voted to forbid new equality deletes in v4. Parquet argued over whether a vector type should reject NaN. Ossie asked what a column name in a metric expression points to. Polaris debated whether a config field should be an enum or free text. Each thread is a fight about contracts, and each one ends with a narrower, more checkable promise to the engines that read these formats.&lt;/p&gt;

&lt;p&gt;This issue covers roughly 380 messages across the Iceberg, Polaris, Arrow, Parquet, DataFusion and Ossie dev lists between September 23 and September 30.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Iceberg
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Iceberg 1.12.0 passes on the second try
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian ran the 1.12.0 release, and it took two candidates to land. The &lt;a href="https://lists.apache.org/thread/vpoplv96vcyxtzwq7vonc90sy33qcqj9" rel="noopener noreferrer"&gt;RC1 vote&lt;/a&gt; drew early +1s from Alex Dutra, Gianluca Graziadei and Szehon Ho. Then Kurtis Wright posted a -1 with a disclaimer at the top: he had prompted Claude to audit every license in the candidate. The audit found that the GCP bundle jar shipped Caffeine with no entry in its LICENSE file. Kevin Liu followed up with his own table of gaps and found a second one around Jackson's FastDoubleParser. Jean-Baptiste Onofré cast a -1 on the same grounds. Neelesh sorted each report, landed the fixes, and pulled in Gianluca's patch for a variant-column &lt;code&gt;NoSuchMethodError&lt;/code&gt; that hit clusters with older commons-lang3 jars.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/l8gjs6z1ocfd70hv6dj923s7p9qm0w77" rel="noopener noreferrer"&gt;RC2 vote&lt;/a&gt; opened on September 25. Neelesh stretched the window to Tuesday afternoon to cover the weekend. It had one scare. Huaxin Gao pointed out that the staging repository had no Spark 4.2 artifacts, even though the source tree, CI matrix and Gradle defaults all pointed at 4.2. Amogh Jahagirdar agreed a new RC looked necessary. Russell Spitzer then asked why an earlier PR had excluded 4.2 from convenience binaries on purpose. Amogh found the older thread. The community had held back 4.2 binaries while Spark's own APIs kept moving. Huaxin withdrew the alarm and voted +1 with a note that every RC1 license gap was closed in the jars themselves.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/ychjvqbmt7ksmczhct3mnw8j3yowwbcr" rel="noopener noreferrer"&gt;result&lt;/a&gt; came in on September 29: four binding +1s from Russell Spitzer, Kevin Liu, Szehon Ho and Amogh Jahagirdar, and ten non-binding +1s. Two details stood out in the votes. Kevin ran an agent over the repository looking for correctness bugs and flagged a handful of issues that also exist in 1.11. He called them non-blockers and listed them for triage. Kurtis came back with a second AI-assisted pass, this time labeled as the output of an agent skill built for checking open source release candidates. Release verification is turning into a place where contributors point agents at tedious, rule-driven work and then sign their names to the result.&lt;/p&gt;

&lt;p&gt;The CI side of the release had its own story. Steven Wu &lt;a href="https://lists.apache.org/thread/385j2js884o2vct31n775kt7m49jm4sn" rel="noopener noreferrer"&gt;asked where the MinIO replacement stood&lt;/a&gt; after Kafka Connect integration tests failed on the MinIO container. Neelesh opened a tracking issue and a stopgap PR. Within a few hours Kevin reported that the switch was done across every Iceberg repository, crediting Sreesh for the work. Amogh later noted that he ran the RC2 integration tests against RustFS. The S3 test backend for the project is now a Rust implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  v4 forbids new equality deletes
&lt;/h3&gt;

&lt;p&gt;Huaxin Gao called a &lt;a href="https://lists.apache.org/thread/2pgfvf8v5ob221q5t2xwzjo4xvw5ltz1" rel="noopener noreferrer"&gt;spec vote on PR #17783&lt;/a&gt;. The direction was already settled in July: v4 writers must not produce new equality deletes, readers still apply existing ones from v2 and v3 tables, and an upgrade stays metadata-only. This vote covered the exact spec wording. Russell Spitzer questioned whether a second vote was needed at all, then voted +1 anyway. Ryan Blue said the point was to affirm the decision and merge it. Anoop Johnson said the change simplifies the v4 design a lot. The vote passed with four binding +1s from Russell, Yufei Gu, Steven Wu and Ryan, plus five non-binding. Huaxin will merge the PR and follow up with a separate change that restructures how the spec presents deletion vectors next to the legacy delete formats.&lt;/p&gt;

&lt;p&gt;This is the most consequential spec change of the month for engine builders. Equality deletes let streaming writers such as Flink record "delete the row where id = 7" without reading the table first. They also push work onto every reader, which has to join the delete file against data files at scan time. v4 closes that door for new writes. Streaming pipelines that rely on equality deletes need a plan for deletion vectors before they adopt v4.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who controls access: the delegation header debate
&lt;/h3&gt;

&lt;p&gt;A thread that started in Polaris landed on the Iceberg list. youngrae kim &lt;a href="https://lists.apache.org/thread/6zspb6cpb6j2po5lm57mq1sgcp2hppkf" rel="noopener noreferrer"&gt;asked what a REST server should do&lt;/a&gt; when a client sends &lt;code&gt;X-Iceberg-Access-Delegation&lt;/code&gt; but the server can satisfy none of the requested mechanisms. Picture vended credentials against an S3-compatible store with no STS, or remote signing on a server that does not implement it. Polaris returns HTTP 400. The spec says the server can supply access through any or none of the requested mechanisms.&lt;/p&gt;

&lt;p&gt;Alex Dutra proposed spec wording that favors failing fast, and Yufei Gu agreed. Daniel Weeks, who wrote much of the REST spec, disagreed with the framing. His argument was that the catalog should be the sole authority on access, and security around physical data should not be a negotiation between client and server. The loose wording was deliberate. It lets a catalog return credentials or remote signing config, or return metadata only, without the spec forcing its hand. Alex countered that the header cannot express a common client capability, which is using the client's own storage credentials and skipping delegation entirely.&lt;/p&gt;

&lt;p&gt;youngrae closed the loop on September 29. Polaris will keep its 400 as a documented implementation choice. The remaining ask is narrow: one sentence in the spec that says whether the header is a capability statement or a requirement, and what an absent header means. That clarification leaves the catalog's decisions untouched. It only tells clients and servers how to read the signal.&lt;/p&gt;

&lt;p&gt;A related effort moved forward. Sung Yun and Prashant Singh had been &lt;a href="https://lists.apache.org/thread/465y1l88hkrwkv39r8b84xwsl7f19kpg" rel="noopener noreferrer"&gt;discussing access delegation for the FILE type&lt;/a&gt;, where a governed table references files that engines need to read directly. Sung reported that the two of them &lt;a href="https://lists.apache.org/thread/g8h048zdjfvdojfvo4xtykw0y3mfoy5k" rel="noopener noreferrer"&gt;converged their proposals onto PR #18080&lt;/a&gt;, which now carries the optional request and response parameters from both drafts. Steven Wu also announced that the Thursday biweekly sync &lt;a href="https://lists.apache.org/thread/k3ncg4j27mpfqcm57px8goc0ox8rvdlp" rel="noopener noreferrer"&gt;will cover both the File and Vector types&lt;/a&gt; starting October 8. He said the File type discussion is close to consensus, so more of the time will go to the Vector type design doc from Yan Yan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Labels, SQL, and the agent-shaped consumer
&lt;/h3&gt;

&lt;p&gt;Labels landed in the REST spec recently. A catalog can now attach object-level and field-level labels to a load-table response. Andrei Tserakhau &lt;a href="https://lists.apache.org/thread/hrcyh8nqf1svrwnm279n466c75r3wwxn" rel="noopener noreferrer"&gt;asked whether Iceberg should expose them&lt;/a&gt; as a &lt;code&gt;.labels&lt;/code&gt; metadata table. Péter Váry had raised the underlying issue in review. Every metadata table today derives from table metadata. A &lt;code&gt;.labels&lt;/code&gt; table carries catalog-owned data that varies by catalog and can be empty.&lt;/p&gt;

&lt;p&gt;Ryan Blue questioned the premise that labels need a SQL surface at all. He saw them as context for engines, such as cost attribution logs or attaching an engine policy to a table. Andrei answered that some consumers only speak SQL. He named governance tooling and, specifically, LLM agents that explore a warehouse by writing queries. Péter argued that the proposed uses turn labels into full table metadata, which contradicts the read-path design that treats them as a current view with no persistence guarantees. Ryan then took apart Andrei's cost-attribution example. The sample query joined &lt;code&gt;.labels&lt;/code&gt; to &lt;code&gt;.files&lt;/code&gt; with no ON clause, which produced a cartesian join that only looked right because the filter selected one label.&lt;/p&gt;

&lt;p&gt;Andrei conceded the join argument and pointed to an alternative. PR #18049 surfaces object and field labels through &lt;code&gt;DESCRIBE&lt;/code&gt;, which gives SQL-only consumers, agents included, a way to see labels without a new metadata table. The metadata table is parked until someone shows a use case that needs joins. The episode is worth noting. "An AI agent needs to read this" showed up as a design argument on the Iceberg list, and the community answered it with the smallest surface that works.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption keys move closer to the files they protect
&lt;/h3&gt;

&lt;p&gt;Gábor Kaszab &lt;a href="https://lists.apache.org/thread/38rkthkr1fg0s86493fjq755cnl3y90s" rel="noopener noreferrer"&gt;reopened the design of encryption key storage&lt;/a&gt;. Today table metadata carries an &lt;code&gt;encryption-keys&lt;/code&gt; list that holds both data encryption keys for manifest lists and the key encryption keys that wrap them. Gábor wants to extend encryption to statistics files and v4 root manifests. His proposal stores each file's wrapped key directly in the metadata entry for that file, one key per file. KEKs stay in the shared list and are still referenced by &lt;code&gt;key-id&lt;/code&gt;. The spec draft for statistics files lives in PR #17533.&lt;/p&gt;

&lt;p&gt;Gidon Gershinsky agreed the DEK metadata belongs in per-file structures in v4. He added that reusing a DEK across files is possible but requires careful handling to avoid breaking AES-GCM, so the practical rule is a fresh random DEK per file. Xander Bailey wanted the one-key-per-file rule stated explicitly and asked for a common wrapped-key structure across file types, so implementations share code. Gábor's closing argument was about cleanup. With keys in a shared list, every new encrypted file type needs its own cleanup trigger when the file is dereferenced. With keys stored inline, the key disappears with the file. Xander found the argument convincing and asked for a Java draft. Gábor wants the design settled first. Xander also &lt;a href="https://lists.apache.org/thread/bjztsshokns59lzrmny6szlvk7vk2o6c" rel="noopener noreferrer"&gt;proposed a recurring encryption community sync&lt;/a&gt; to cover client library work, the KMS vending spec and v4 changes together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smaller spec decisions
&lt;/h3&gt;

&lt;p&gt;rahul mahadev &lt;a href="https://lists.apache.org/thread/79b5p9pfjso9d8tbs1w10619qz61rt85" rel="noopener noreferrer"&gt;called a vote on a standard User-Agent format&lt;/a&gt; for REST clients. The format lists products from most specific to least, such as &lt;code&gt;Spark/4.0.0 iceberg-spark/1.9.0 iceberg-java/1.9.0 (scala 2.13.16)&lt;/code&gt;. The Iceberg library token must appear when the header is sent. Servers must not reject requests based on it. Xuanwo liked that the header stays separate from authentication and capability negotiation. Alex Dutra left more PR comments to resolve before the vote proceeds.&lt;/p&gt;

&lt;p&gt;Eduard Tudenhöfner &lt;a href="https://lists.apache.org/thread/8f91nk08cq2pxtsdpf1o34ktthn7jcwk" rel="noopener noreferrer"&gt;announced a rename&lt;/a&gt; in the new content stats: &lt;code&gt;avg_value_size_in_bytes&lt;/code&gt; becomes &lt;code&gt;total_bytes&lt;/code&gt; in PR #18308. Averages do not aggregate cleanly across files. Totals do. Daniel Weeks confirmed that the average is still recoverable from &lt;code&gt;total_bytes&lt;/code&gt; and &lt;code&gt;value_count&lt;/code&gt;, and noted that a total gives planners an explicit upper bound for size estimates. Ryan Blue gave a +1.&lt;/p&gt;

&lt;p&gt;Shawn Chang &lt;a href="https://lists.apache.org/thread/8zq10wdsz5rx8v35zgon24r4gnsjsv9h" rel="noopener noreferrer"&gt;asked why the index spec requires&lt;/a&gt; region files to be globally ordered and non-overlapping, given the write amplification and maintenance cost. Péter Váry explained the target. Once index metadata is cached, a single-key lookup should cost one small file read. Overlapping regions force readers to consult several files and reconcile results, and on object storage every extra file read adds latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Releases beyond Java
&lt;/h3&gt;

&lt;p&gt;Manu Zhang &lt;a href="https://lists.apache.org/thread/lndrr0yn3l2pt7o72wfn2d9ssvhn5ho1" rel="noopener noreferrer"&gt;announced Iceberg C++ 0.4.0&lt;/a&gt; on September 26. The &lt;a href="https://lists.apache.org/thread/3t8r0gnm1pd8omrkdmd0yldq1phqm8dc" rel="noopener noreferrer"&gt;vote&lt;/a&gt; passed with binding support from Gang Wu, Renjie Liu and Kevin Liu. Renjie's verification ran 4,152 individual tests across 19 test executables and exercised REST and SQL catalog support, including a SQLite catalog run. Xuanwo suggested a LICENSE path fix for the MurmurHash3 files, and Manu opened an issue for the next release.&lt;/p&gt;

&lt;p&gt;Matt Topol &lt;a href="https://lists.apache.org/thread/18mcytdbd953cdwz5wsvzx6sbqzsvofh" rel="noopener noreferrer"&gt;opened the vote for Iceberg Go v0.7.0&lt;/a&gt; on September 28. Neelesh Salian, Andrei Tserakhau and Xuanwo voted +1. Xuanwo ran 3,344 tests on Go 1.25.9 and saw one Puffin checksum assertion fail on Go 1.27.1. The code still rejected the corrupted input, so he called it non-blocking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community and housekeeping
&lt;/h3&gt;

&lt;p&gt;Robin Moffatt &lt;a href="https://lists.apache.org/thread/l5c1bjl252310x5xg1holrzovm3r9v8p" rel="noopener noreferrer"&gt;opened PR #18019&lt;/a&gt; to finish the Kafka Connect LICENSE and NOTICE cleanup that Ryan Blue started in April. The PR regenerates &lt;code&gt;runtime-deps.txt&lt;/code&gt;, aligns the connector's cloud SDK dependencies with the AWS, GCP and Azure bundles, and drops the Hive distribution. The timing matters. A &lt;a href="https://lists.apache.org/thread/0zc0yhwjvwnpqov9ydtkg0hp8gr0wfyl" rel="noopener noreferrer"&gt;Confluent Hub security scan&lt;/a&gt; flagged the Iceberg Kafka Connect listing, and Confluent's policy escalates flagged connectors toward removal unless the partner responds.&lt;/p&gt;

&lt;p&gt;Gaspard Merten &lt;a href="https://lists.apache.org/thread/995qpplkok0rfw5z6o5bp3d8bgorpjck" rel="noopener noreferrer"&gt;shared a PyIceberg PR&lt;/a&gt; that moves upsert comparisons out of Python loops and into PyArrow compute. He built it while working on a data lake for a financial organization, and he said the change cuts memory and CPU for wide-table upserts. He also noted that he wrote part of it with Claude and reviewed it himself several times.&lt;/p&gt;

&lt;p&gt;Viktor Kessler announced two European community meetups in back-to-back days: &lt;a href="https://lists.apache.org/thread/pq1z3vk09kkqs87j522ksg67lj66bkwb" rel="noopener noreferrer"&gt;Berlin on November 18&lt;/a&gt; and &lt;a href="https://lists.apache.org/thread/fqmsxckdw88t32y2owvfd3mxjs7ttkr3" rel="noopener noreferrer"&gt;Amsterdam on November 19&lt;/a&gt;. Both have open calls for talks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Polaris
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Polaris 1.8.0 ships with a CVE fix
&lt;/h3&gt;

&lt;p&gt;Jean-Baptiste Onofré's first 1.8.0 candidate did not survive. Alex Dutra &lt;a href="https://lists.apache.org/thread/m6n72gfb48z82qml2o0h9ds94nx4zsj0" rel="noopener noreferrer"&gt;voted -1 on rc1&lt;/a&gt; because a test file added in PR #4823 carried an incorrect license header. JB &lt;a href="https://lists.apache.org/thread/9kow0cdomvg9pg9sbrmsh8nvkd8jsgtl" rel="noopener noreferrer"&gt;cancelled the vote&lt;/a&gt; and took another pass at LICENSE and NOTICE. The &lt;a href="https://lists.apache.org/thread/y9h97q5cd355vlcglyfo7mnqz23yfj2s" rel="noopener noreferrer"&gt;rc2 vote&lt;/a&gt; passed with binding +1s from Alex Dutra, Yufei Gu, Dmitri Bourlatchkov and JB, plus non-binding support from Prithvi S, Ajantha Bhat and Ayush Saxena. Yufei's verification checked 442 artifacts and ran authenticated CLI smoke tests against built and staged servers.&lt;/p&gt;

&lt;p&gt;JB &lt;a href="https://lists.apache.org/thread/vvzpmxj1thg57tfd2xfbll8mr7o24xmh" rel="noopener noreferrer"&gt;announced 1.8.0&lt;/a&gt; on September 28. The notable changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Semantic model privileges.&lt;/strong&gt; Semantic models now get dedicated privileges for list, create, read, update and drop. Admins grant them to catalog roles on a single model, a namespace or a whole catalog. This is Polaris preparing to govern Ossie-style semantic models the same way it governs tables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI toggles for STS and KMS.&lt;/strong&gt; &lt;code&gt;catalogs update&lt;/code&gt; accepts &lt;code&gt;--no-sts&lt;/code&gt; and &lt;code&gt;--no-kms&lt;/code&gt;, so operators can change those settings on an existing S3 catalog instead of recreating it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GCP federation auth.&lt;/strong&gt; The CLI adds &lt;code&gt;gcp&lt;/code&gt; as an external catalog auth type for Iceberg REST federation. That lets operators create GCP-authenticated catalogs such as BigLake without passing Google credential secrets as command-line flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paging.&lt;/strong&gt; A global &lt;code&gt;--page-size&lt;/code&gt; option paginates list calls, when the server enables the &lt;code&gt;LIST_PAGINATION_ENABLED&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JDBC schema selection.&lt;/strong&gt; The relational JDBC backend reads its schema from the driver's &lt;code&gt;currentSchema&lt;/code&gt; property, so the persistence layer no longer hardcodes a schema name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A day later JB published &lt;a href="https://lists.apache.org/thread/nrk339vtlkpsjw3mg4mqw52j0167wyph" rel="noopener noreferrer"&gt;CVE-2026-97395&lt;/a&gt;, rated important, for all Polaris versions before 1.8.0. A principal with permission to set table properties was able to put FileIO settings such as &lt;code&gt;s3.endpoint&lt;/code&gt; into table metadata. During server-side operations like commits and purges, older Polaris versions built their own FileIO client from those settings unless the catalog's storage config overrode the endpoint. The result: Polaris sent storage requests, signed with operation-scoped credentials, to a host the table writer picked. Deployments that do not fully trust table writers should upgrade. The reporter was credited as vignesh a.&lt;/p&gt;

&lt;p&gt;Ajantha Bhat also shipped the &lt;a href="https://lists.apache.org/thread/r686yo180pz59gx4ycz7r7dfmm7o599r" rel="noopener noreferrer"&gt;Polaris Iceberg Catalog Migrator 1.1.0&lt;/a&gt; after an &lt;a href="https://lists.apache.org/thread/o4b44mrkgbd6p1xjq5h6j6m70sb8ws7k" rel="noopener noreferrer"&gt;RC3 vote&lt;/a&gt; with binding support from Dmitri, Russell Spitzer, JB and Alex. Russell's check covered all 12 primary Maven artifacts and 89 tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enum or free text: the R2 credential vending fight
&lt;/h3&gt;

&lt;p&gt;Austen Tomek of Chicago Trading has a PR adding Cloudflare R2 support with scoped credential vending. The &lt;a href="https://lists.apache.org/thread/flk86whb81c5yz2qb94o8rfdnozxrp85" rel="noopener noreferrer"&gt;discussion&lt;/a&gt; reached a clean disagreement. Austen explained why endpoint matching cannot identify the storage vendor: MinIO and other self-hosted stores use arbitrary hostnames, and a failed match silently falls back to STS. So the PR adds an explicit &lt;code&gt;credentialVendingMechanism&lt;/code&gt; field to the Management API.&lt;/p&gt;

&lt;p&gt;Dmitri Bourlatchkov wants that field to be free text with runtime validation, so downstream builds of Polaris can add custom mechanisms. Yufei Gu wants an enum, arguing that a spec is a contract and clients should not depend on a specific deployment's extensions. When Dmitri asked for lazy consensus, Yufei said there was none. JB stepped in on September 30 and asked everyone to slow down and align. He pointed out that the field lives in the Management API for catalog administrators. Iceberg REST clients such as Spark and Trino never see it. They only consume the standard vended credentials. That observation lowers the stakes for engine interop, but the question of how extensible the Polaris Management API should be remains open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistence: DynamoDB and read replicas
&lt;/h3&gt;

&lt;p&gt;Yuewei Zhou &lt;a href="https://lists.apache.org/thread/6lvvvm5x0xszb0ymxtqn5jx858xjmbls" rel="noopener noreferrer"&gt;proposed an optional DynamoDB persistence backend&lt;/a&gt; built as a new adapter under &lt;code&gt;AtomicOperationMetaStoreManager&lt;/code&gt;, the same shape the relational JDBC backend uses. Robert Stupp prefers a different home. He wants DynamoDB as another backend inside the existing NoSQL persistence framework, where a compare-and-set on a reference is the moment a validated catalog change becomes visible as one consistent state. He also has a DynamoDB implementation in his own fork. Dennis Huo asked the community to use DynamoDB as a chance for an apples-to-apples comparison between the two persistence approaches. JB sided with Robert. He noted that the atomic manager implicitly assumes relational multi-entity transactions, and forcing DynamoDB into that shape means orchestrating &lt;code&gt;TransactWriteItems&lt;/code&gt; for multi-entity writes. Yuewei offered to help on whichever path moves forward.&lt;/p&gt;

&lt;p&gt;A second persistence thread ended with a request for data. Yong Zheng wants Polaris to &lt;a href="https://lists.apache.org/thread/pbkz15c6qdydjv0jhrlfw2nb4m36n5lx" rel="noopener noreferrer"&gt;route read-only requests to a database read replica&lt;/a&gt; when a custom header is present. Prithvi S warned that routing by HTTP verb risks double ingestion if a read hits the replica before a commit is visible and the client retries. Robert Stupp read the Medium post behind the proposal and found 15 Polaris pods serving about 400 requests per second, which is under 27 per pod. That does not look like connection saturation to him. Yufei asked for baseline numbers before any design work: request rates, tables per namespace, latency targets. Yong agreed to run benchmarks with the &lt;code&gt;polaris-tools&lt;/code&gt; harness over the coming weeks. JB added that pool multiplexers such as PgBouncer or RDS Proxy belong in that comparison.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metrics, tags and federation
&lt;/h3&gt;

&lt;p&gt;Dmitri Bourlatchkov &lt;a href="https://lists.apache.org/thread/l5z6jkxlnsxsptp0mvlswohyb2v0ctqo" rel="noopener noreferrer"&gt;flagged Management API changes&lt;/a&gt; inside PR #4115, the long-running work on &lt;a href="https://lists.apache.org/thread/c5jq95qwzn5dtc103rzk457gr8r0d6zh" rel="noopener noreferrer"&gt;REST endpoints for table metrics and events&lt;/a&gt;. The PR adds a &lt;code&gt;TABLE_READ_METRICS&lt;/code&gt; grant at table, namespace and catalog level. Reading reports needs that grant, &lt;code&gt;TABLE_FULL_METADATA&lt;/code&gt; or &lt;code&gt;CATALOG_MANAGE_CONTENT&lt;/code&gt;. Sending scan and commit reports stays tied to data read and write privileges. Yufei reminded the list that the PR also introduces a new REST spec for metrics consumption. Dmitri proposed merging on October 1, and JB agreed, with the JDBC query SPI in PR #4756 as the next step.&lt;/p&gt;

&lt;p&gt;EJ Wang &lt;a href="https://lists.apache.org/thread/l2pj8r0xrtw3wplbnbbo9lzrvrldsm6b" rel="noopener noreferrer"&gt;reported progress on the Tag spec&lt;/a&gt;. All four planned PRs are open: the API contract in #5366, definition CRUD, assignment writes and storage, and reads with inheritance and reverse lookup. Dmitri supports merging the API PR once open review threads close. EJ also built a proof of concept for &lt;a href="https://lists.apache.org/thread/sq94774svy8y88f3fnknrwforkt08bzx" rel="noopener noreferrer"&gt;archiving design proposals as Markdown&lt;/a&gt;. Authors keep collaborating in Google Docs, add a version label and a link to one YAML manifest, and the tool captures the doc as Markdown with images for the repository.&lt;/p&gt;

&lt;p&gt;David Chaava wants fail-fast validation for &lt;a href="https://lists.apache.org/thread/9cpkcwd9hnm0pmwv986m3om0fdln5917" rel="noopener noreferrer"&gt;vendor-specific Iceberg REST federation settings&lt;/a&gt;, starting with BigLake. Dmitri, JB and Prithvi all asked that &lt;code&gt;PolarisAdminService&lt;/code&gt; stay vendor-neutral. David's revised plan uses a CDI-discovered validator SPI with a BigLake implementation. Srinivas Rishindra posted the &lt;a href="https://lists.apache.org/thread/38s4hch6g5w1hvysjh6g3yl2n0zgvmhz" rel="noopener noreferrer"&gt;first PR for multiple storage configurations per catalog&lt;/a&gt;, and Travis Bowen weighed in on where the &lt;a href="https://lists.apache.org/thread/53ym549h87wmcq16oy675wct9tn3bbjp" rel="noopener noreferrer"&gt;new Open Sharing APIs&lt;/a&gt; should live, leaning toward the existing &lt;code&gt;/api/management&lt;/code&gt; path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code health
&lt;/h3&gt;

&lt;p&gt;Two cleanup threads resolved. Yufei Gu &lt;a href="https://lists.apache.org/thread/jm1sbk8tdzycw6xyrfdoghrd0dfnk1ml" rel="noopener noreferrer"&gt;found the authentication flow confusing&lt;/a&gt; while reviewing another PR. Two augmentors attached a credential that a third consumed, and the ordering only held because of a code comment the compiler cannot check. Alex Dutra proposed merging the OIDC pieces into a single &lt;code&gt;OidcIdentityPreparer&lt;/code&gt; that the authenticating augmentor calls directly. Prithvi agreed, Alex opened PR #5612 on September 25, and it merged on September 28.&lt;/p&gt;

&lt;p&gt;The long argument over &lt;a href="https://lists.apache.org/thread/v0tfmx30rlbh9pd2tn6xf7kzptsfzz4q" rel="noopener noreferrer"&gt;schema upgrade instructions&lt;/a&gt; also ended. Yufei argued that SQL snippets in the upgrade guide break for anyone who starts from an older schema version, and that the versioned schema files are the only source of truth. Alex disagreed but removed every migration snippet from PR #5349 to unblock it. The page now explains how to diff the schema files. Prithvi asked for some SQL guidance to return later, since a schema diff shows the end state but not how to migrate tables that already hold data. The PR has approvals from Dmitri, Yufei and Yong Zheng.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Arrow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dropping Intel Macs
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/m2c4v0n70rbxojx4pbjx3p5g8c33yw2w" rel="noopener noreferrer"&gt;macOS Intel thread&lt;/a&gt; brought numbers. Joris Van den Bossche pulled 30 days of PyPI downloads: x86_64 made up 6.6 percent of PyArrow's macOS downloads, 57,121 against 807,414 for arm64. Sutou Kouhei reproduced the check with a public ClickHouse query against the PyPI dataset and voted +1. Wes McKinney offered his 2019 Intel Mac Pro for testing commits to main. Kurtis Wright asked whether Arrow has any policy guaranteeing a number of releases before a platform goes away. Raúl Cumplido said no, and that such a promise is not realistic when Arrow depends on package managers and CI platforms with their own deprecation schedules. Homebrew already dropped Intel support without naming a last version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Modularity and schemas
&lt;/h3&gt;

&lt;p&gt;Raúl Cumplido also &lt;a href="https://lists.apache.org/thread/kyqf7wp4n4fm2gf8x69j7o2ol3dj2f4w" rel="noopener noreferrer"&gt;opened a discussion on PyArrow modularity&lt;/a&gt;. Arrow C++ is already split into a dozen libraries, from Core and Compute through Acero, Dataset, Flight, Flight SQL ODBC and S3. GCS and Azure still sit in core libarrow, and he wants them moved out the way S3 and the AWS SDK were. The goal is PyArrow installs that pull only the pieces a user needs, which matters for container images and serverless functions where package size has a cost.&lt;/p&gt;

&lt;p&gt;Dewey Dunnington endorsed Kent's revised proposal for a &lt;a href="https://lists.apache.org/thread/k14qnnf6t0zy2725jo23jfv9f407x4dp" rel="noopener noreferrer"&gt;JSON representation of Arrow schemas&lt;/a&gt;. David Lee asked for union type support and shared the alias-based JSON format he already uses to define data contracts between processes. A standard JSON schema form gives config files, APIs and agents a way to describe Arrow data without a binary IPC message.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arrow Rust 60.0.0
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb &lt;a href="https://lists.apache.org/thread/9hlwcn4ctwbpc5qr22ro8l2d5707wx88" rel="noopener noreferrer"&gt;announced Arrow Rust 60.0.0&lt;/a&gt; on September 29. The release adds new Parquet encoding support, continues a sustained push to remove panics from the codebase, and lands kernel performance work plus fixes across decimals, take and filter, and FFI. The panic removal effort deserves a mention. A library that returns errors instead of aborting the process is easier to embed in long-running query engines and services, which is where arrow-rs lives inside DataFusion, Comet and a long list of downstream projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Parquet
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The vector type argument
&lt;/h3&gt;

&lt;p&gt;The busiest Parquet thread of the week, at 30 messages, was about vectors. Rok Mihevc &lt;a href="https://lists.apache.org/thread/llwocp01o87bvcdf993mczmdyf2ppzy4" rel="noopener noreferrer"&gt;opened PR #624 in parquet-format&lt;/a&gt; for a LIST-based &lt;code&gt;VECTOR&lt;/code&gt; logical type. It separates the logical contract from physical layout changes. Every non-null vector has exactly &lt;code&gt;num_elements&lt;/code&gt;. Elements are non-null and finite. Elements are numeric or boolean primitives, with no nesting.&lt;/p&gt;

&lt;p&gt;Antoine Pitrou objected to the restrictions. Parquet is a general-purpose format, he said, and NumPy produces vectors with NaN and infinity all the time. Readers can refuse what they do not support, but the spec should not. Alkis Evlogimenos answered with a survey. Postgres, Oracle, MySQL, SQL Server, Milvus, Qdrant and Pinecone all disallow nulls, NaN and infinity in vectors. DuckDB and ClickHouse allow them, but only because they store vectors as plain float arrays and switch off vector features when bad values appear. Daniel Weeks argued that a vector has mathematical meaning, with dimension, magnitude and direction, and non-finite values break it. Russell Spitzer asked for a concrete tool that produces non-finite vectors and a downstream engine that uses them productively.&lt;/p&gt;

&lt;p&gt;Will Edwards reframed it. He had first assumed the goal was general ML tensors. After the sync calls he understood the immediate need was fixed-length embeddings for nearest-neighbor search, and in that context the constraints make sense. He also noted that embedding APIs do sometimes return NaN on overflow, which is exactly the kind of bad data a strict type catches. Andrew Lamb suggested a narrower name such as &lt;code&gt;FINITE_VECTOR&lt;/code&gt; or &lt;code&gt;VECTOR_EMBEDDING&lt;/code&gt; if the name is the real problem. Gang Wu proposed treating a general FixedSizeList as the physical layout and the specialized vector as a separate logical contract. Philipp Fischbeck and Divjot Arora both want to proceed with the proposal as written. Divjot added a practical point: statistics cannot reliably detect non-finite values, so a type-level guarantee is the only way a reader can trust the data without scanning it.&lt;/p&gt;

&lt;p&gt;The practical outcome is taking shape. A restricted vector type for embeddings, with a possibly more specific name, and a separate track for general multidimensional arrays that Rok still wants to pursue. For lakehouse teams storing embeddings next to their tables, this is the thread that decides whether engines can index Parquet vector columns without validating every value first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encodings: PFOR, FastLanes, ALP and FSST
&lt;/h3&gt;

&lt;p&gt;Prateek Gaur posted hard numbers in the &lt;a href="https://lists.apache.org/thread/1rnyj6slgohr5zrj8phnoz8s9gb2h1br" rel="noopener noreferrer"&gt;PFOR encoding thread&lt;/a&gt;. Antoine had asked whether PFOR's delta mode can reuse Parquet's &lt;code&gt;DELTA_BINARY_PACKED&lt;/code&gt; kernel. Alkis asked whether a faster DBP decoder closes the gap. Prateek measured three setups on AWS Graviton 4. On 18 datasets where delta mode helps, PFOR's own patched-delta layout reached a 10.07 compression ratio and 9.85 GB/s decode. A DBP stream inside each PFOR vector reached 6.54 and 3.76 GB/s. A tuned DBP decoder with SIMD prefix sums climbed to 5.96 GB/s but kept the 6.54 ratio. His summary: the patched-delta layout is 35 percent smaller and 1.65 times faster to decode on the datasets where delta matters. The gap is structural. PFOR uses one bit width per 1,024-value vector, while DBP splits the same vector into miniblocks with their own widths.&lt;/p&gt;

&lt;p&gt;In the parallel &lt;a href="https://lists.apache.org/thread/fljloxkrx5ydgoj1vhotgwnmwzbdcq08" rel="noopener noreferrer"&gt;FastLanes thread&lt;/a&gt;, Prateek and Alkis agreed to decouple FastLanes from PFOR. The initial PFOR proposal keeps sequential bit packing, and a layout discriminator leaves room to add FastLanes or interleaved layouts later. The thread also produced the sharpest exchange of the week. Antoine told Prateek that his design document and PR descriptions read like AI-generated text and asked him to rewrite them as a person talking to people. Prateek trimmed the document and cut two sections. The Parquet community is receptive to benchmark-driven proposals. It also expects authors to explain their own work.&lt;/p&gt;

&lt;p&gt;On the rest of the encoding roadmap, the ALP blog post &lt;a href="https://lists.apache.org/thread/tnbxk7c4rmbngtr5slp2r349pbco7sc0" rel="noopener noreferrer"&gt;went through community review&lt;/a&gt; and Andrew Lamb described ALP as out the door. He then turned to the &lt;a href="https://lists.apache.org/thread/rd2x7c15dqwf8qkdl70r7zr1ykmwkmf5" rel="noopener noreferrer"&gt;FSST proposal&lt;/a&gt; and suggested an optional inline symbol table so FSST also applies to dictionary pages. ALP targets floating point columns. FSST targets strings. Together with PFOR for integers, Parquet is on track to cover the main column types with modern lightweight encodings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Types and the edges of the format
&lt;/h3&gt;

&lt;p&gt;Micah Kornfield pushed back on two type proposals with the same argument: Parquet is a file format, not a table format. Thomas Kissinger wants an &lt;a href="https://lists.apache.org/thread/53l8knj3z5mjn8yyqb6bd0yo4dl35z6p" rel="noopener noreferrer"&gt;extensible decimal floating-point type&lt;/a&gt; with a write-time canonicalization contract. Micah answered that an empty table means no Parquet file exists, so there is no Parquet schema to coordinate independent writers. That coordination belongs to a layer above. Micah also raised concerns about a proposed &lt;a href="https://lists.apache.org/thread/5ycbvbjho0pksg6vxwsv1vsmv4xj8kqo" rel="noopener noreferrer"&gt;WIRE logical type&lt;/a&gt; for serialized messages such as protobuf, citing the edge cases in lining up type systems for shredding, from recursive schemas to well-known types.&lt;/p&gt;

&lt;p&gt;Steve Loughran argued in the &lt;a href="https://lists.apache.org/thread/grqjls84ndd00l2kplp7y8rrhnhgv32h" rel="noopener noreferrer"&gt;format version thread&lt;/a&gt; that readers must fail on an unsupported version. Pretending to support a version you do not understand is a pretense, he said, and that rule is a strong reason not to bump the version without a compelling payoff. Adrian Garcia Badaracco &lt;a href="https://lists.apache.org/thread/l8om71xjcv94x0z3hdvnbswk9ssyn2ks" rel="noopener noreferrer"&gt;proposed classifying &lt;code&gt;distinct_count&lt;/code&gt; as inexact&lt;/a&gt;, since the spec never says whether writers are allowed to estimate it or whether readers can trust it as exact. And Danica Fine invited the community to &lt;a href="https://lists.apache.org/thread/4t1l0tdpylqk1kqn0zn3393x0rpk6hhm" rel="noopener noreferrer"&gt;Lakehouse Day EU on October 10&lt;/a&gt; in Glasgow, co-located with Community Over Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache DataFusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Comet 1.1.0 and the token budget
&lt;/h3&gt;

&lt;p&gt;Andy Grove &lt;a href="https://lists.apache.org/thread/hn45c6dntn1tnhmk0b8rzmkhbpvct0rm" rel="noopener noreferrer"&gt;opened the Comet 1.1.0 RC1 vote&lt;/a&gt; on September 28. L. C. Hsieh, Marko Milenković and Andrew Lamb each gave a binding +1 within a day. Then Andy posted that his deeper verification had already found several regressions. He is tracking them in issue #6402 and said the full check will take a few days because he does not have an unlimited token budget. That line tells you how Andy verifies releases now: with agents that run through test matrices, where the constraint is API spend rather than hours in the day. Watch for a new candidate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ballista wants to ship without waiting
&lt;/h3&gt;

&lt;p&gt;Andy also &lt;a href="https://lists.apache.org/thread/0dsfk0h5kmcpv4wtxnk24r096fjon1l8" rel="noopener noreferrer"&gt;proposed releasing Ballista's Python client separately&lt;/a&gt; from the Rust crates. Ballista moved to DataFusion 55 five weeks ago and still cannot release, because the bundled Python client needs &lt;code&gt;datafusion-python&lt;/code&gt; 55.0.0, whose vote has not started. Over the last eleven DataFusion releases, &lt;code&gt;datafusion-python&lt;/code&gt; followed DataFusion by a median of 31 days and once by more than seven weeks. More than 300 commits sit on Ballista's main branch, including fixes for wrong results from distributed &lt;code&gt;NOT IN&lt;/code&gt;, executors being OOM-killed on heavy queries, and jobs hanging when all executors disappear. Andy wants feedback on issue #2511, especially from Python client users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory accounting
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb's &lt;a href="https://lists.apache.org/thread/ly0vr0gxcftnog4nn7ynscjr965l1bnn" rel="noopener noreferrer"&gt;sync notes from September 23&lt;/a&gt; centered on memory. Raz from Flarion reported a string of memory issues where the memory pool's accounting did not match what operators actually used. One example was a Filter allocation that the pool never saw. Comet has hit the same gap between pool accounting and process memory. An earlier allocator-based memory test was reverted, and Andy agreed to find or create a ticket to coordinate the effort. For anyone running DataFusion inside a service with a hard memory limit, accurate pool accounting is the difference between graceful spilling and an OOM kill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Ossie (incubating)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A standard REST API for semantic models
&lt;/h3&gt;

&lt;p&gt;Jean-Baptiste Onofré &lt;a href="https://lists.apache.org/thread/hf71m6g1g1bnhqj5v0f4kc0rf4h8g4kg" rel="noopener noreferrer"&gt;proposed a standard REST API&lt;/a&gt; for producing, consuming and orchestrating Ossie models, starting as a &lt;code&gt;rest/openapi.yaml&lt;/code&gt; in the main repository. The response showed real vendor pull. Sebastien Gandon said Qlik has started building an Ossie-native API to import and export its data product semantic models, and he asked for a dedicated Content-Type header. Yufei Gu asked whether it builds on the Polaris Ossie REST design, which JB co-authored. JB said yes, and that the goal is for Polaris, Qlik and others to implement one standard API so clients work without knowing the server.&lt;/p&gt;

&lt;p&gt;Viktor Kessler asked the group to agree on the problem first. He saw two scopes: a registry for exchanging and discovering models, and governed semantics, where a service guarantees that a model is bound to the physical tables it references. JB agreed and proposed two API specs, one for model management and one for catalog association. Vinoth Chandar asked that files and storage locations be first-class alongside table formats. Jakub Moravec asked how an importer knows a model changed. JB proposed keeping the core spec plain REST, with explicit versioning, content hashes and HTTP conditional requests using ETags, instead of push protocols.&lt;/p&gt;

&lt;p&gt;This is the most interesting cross-project thread of the week. Iceberg standardized how engines find tables. Polaris implemented it. Ossie is now trying to standardize how tools find and exchange the business meaning that sits on top of those tables, and Polaris 1.8.0 already added the privileges to govern semantic models.&lt;/p&gt;

&lt;h3&gt;
  
  
  Converters move out, and a first release takes shape
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/cs3dxf2c7725xoyd517207qw15m3wdox" rel="noopener noreferrer"&gt;converter scope discussion&lt;/a&gt; reached a decision. Russell Spitzer favored separating the spec from implementations, the way Parquet splits parquet-format from its libraries. Markus Weimer cared less about repository count and more about keeping everything inside the ASF, since that makes adoption easier for downstream users. Kurt Stirewalt laid out what stays in the main repo: the spec, the typed object model with parsing and serialization, the validator, and the parser for the ontology formula language. JB then &lt;a href="https://lists.apache.org/thread/qmf7frm5c3w2lzmopz1d8205sx2519nf" rel="noopener noreferrer"&gt;created the ossie-converters repository&lt;/a&gt; on September 29 and asked contributors to pause converter work while he moves the code.&lt;/p&gt;

&lt;p&gt;JB also &lt;a href="https://lists.apache.org/thread/fko72y28okc8r41ds06pxjnj7x9gn29v" rel="noopener noreferrer"&gt;laid out the path to the first incubating releases&lt;/a&gt;: freeze converters, move them, and bump the spec version to 0.3.0-incubating after the recent flat-document change. Kyoung Min Kim did the arithmetic. The &lt;code&gt;0.2.0.dev0&lt;/code&gt; string appears in 111 files, 96 of them under converters, so the bump is one change if it lands before the move and a coordinated two-repo change after. Kyoung Min also &lt;a href="https://lists.apache.org/thread/06zvd90kcg4hnhf22by01m1338dshob6" rel="noopener noreferrer"&gt;confirmed&lt;/a&gt; that the license header check now runs on every PR and the tree is clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does &lt;code&gt;orders.amount&lt;/code&gt; mean?
&lt;/h3&gt;

&lt;p&gt;damian waldron &lt;a href="https://lists.apache.org/thread/bc9v9o0d2702gwm978km13mg6v16hzv1" rel="noopener noreferrer"&gt;asked a question the spec does not settle&lt;/a&gt;. In a portable expression like &lt;code&gt;SUM(orders.amount)&lt;/code&gt;, is &lt;code&gt;amount&lt;/code&gt; a field declared in the dataset, or a physical column in the warehouse? He surveyed ten converters and found three different answers. JB said expressions and relationships must reference logical fields, because a semantic layer that reaches past its own fields to physical columns breaks encapsulation. Julian Hyde objected to any reading that locks layers into rigid tiers, since that makes Ossie less composable. Justin Talbot framed it as the SQL view case: a view's query references its immediate inputs, and dataset fields should work the same way. JB clarified that he meant lexical scoping, not a restriction on composition, and the group converged.&lt;/p&gt;

&lt;p&gt;Two spec proposals depend on that answer. Chris Eubank &lt;a href="https://lists.apache.org/thread/sz17wf36mtlyycv9n0dm93k6j5psz1jl" rel="noopener noreferrer"&gt;narrowed the dataset-scoped metrics proposal&lt;/a&gt; in PR #343 so it can reach a vote without settling every open semantic question. JB &lt;a href="https://lists.apache.org/thread/n5t84f01kx02x5b7xz8qdg0c8n7v0ncz" rel="noopener noreferrer"&gt;strongly backed&lt;/a&gt; Justin's Relational Query Interface in PR #354, which grounds Layer 2 in the Measures in SQL model so BI tools that generate their own SQL still get correct metrics across fan-out and chasm traps. Justin also posted a &lt;a href="https://lists.apache.org/thread/bkpvc7czf938j5q25xkw46w6tz1042b2" rel="noopener noreferrer"&gt;short overview of the four spec layers&lt;/a&gt; in PR #452 for newcomers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Votes, validation and structure
&lt;/h3&gt;

&lt;p&gt;Chris Eubank &lt;a href="https://lists.apache.org/thread/tgpgjz1855t3bvp3hjmxf0kl02p2wd3g" rel="noopener noreferrer"&gt;called a vote&lt;/a&gt; to add the SQL-standard &lt;code&gt;FILTER (WHERE ...)&lt;/code&gt; aggregate modifier to the expression language, after &lt;a href="https://lists.apache.org/thread/ghp49rrwtbdovqdq6kro9d9shd86lpf2" rel="noopener noreferrer"&gt;incorporating JB's feedback&lt;/a&gt;. The change is additive and avoids the edge cases of CASE-based workarounds for AVG, MIN, MAX and STDDEV. JB voted +1.&lt;/p&gt;

&lt;p&gt;Kyoung Min Kim noticed that &lt;code&gt;validate.py&lt;/code&gt; &lt;a href="https://lists.apache.org/thread/lltdz30fryypzgvgc0ldd2tbbbhrqt10" rel="noopener noreferrer"&gt;stops at the JSON schema for ontology documents&lt;/a&gt; because every semantic check assumes a &lt;code&gt;datasets&lt;/code&gt; key. He will add ontology checks for built-in concepts, cycle detection on &lt;code&gt;extends&lt;/code&gt;, and a CI step, with JB reviewing. Shao Xie's PR #458 &lt;a href="https://lists.apache.org/thread/v1mf3jpzthk0p0qlclhglot6pxqt6gqq" rel="noopener noreferrer"&gt;splits ontology, semantic model and mapping&lt;/a&gt; into separate documents connected by references, so a slow-moving ontology can map to many semantic models. Yufei asked for more voices on deprecating embedded models. On GitHub, MikeCarlo proposed &lt;a href="https://lists.apache.org/thread/xlmtg8735m1dqbnlm980hjtgqrzz82fs" rel="noopener noreferrer"&gt;storing custom extension data as structured objects&lt;/a&gt; instead of opaque JSON strings, which helps the Power BI TMDL converter keep more metadata. Contributors also opened discussions on &lt;a href="https://lists.apache.org/thread/9z5pxs97hypsjvc2fg00oc135n8jg2jq" rel="noopener noreferrer"&gt;metric additivity&lt;/a&gt; and on recording &lt;a href="https://lists.apache.org/thread/b25ozd1qg7jtw46obboqdj4jx45kw589" rel="noopener noreferrer"&gt;who certified a metric definition&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  An outsider builds Ossie on ClickHouse
&lt;/h3&gt;

&lt;p&gt;The most useful message on the Ossie list came from a newcomer. Aleksandr Kosachev &lt;a href="https://lists.apache.org/thread/0mxzxxdc8s0tmy3fyjftyoymyhzxncpg" rel="noopener noreferrer"&gt;introduced himself&lt;/a&gt; as a backend architect who, six months ago, barely knew what a semantic layer was. He kept seeing teams wire AI assistants to databases and get confident, wrong answers. So he built &lt;code&gt;ossie-clickhouse&lt;/code&gt; from the spec alone. It loads an Ossie document with the &lt;code&gt;apache-ossie&lt;/code&gt; package, translates expressions to ClickHouse SQL with SQLGlot, plans one SELECT per question, and serves the model to agents over MCP. The TPC-DS example model runs end to end.&lt;/p&gt;

&lt;p&gt;His list of places where he had to guess is a free conformance review. Relationship cardinality is not in the spec, so he only joins when the target columns form a primary or unique key. ClickHouse tables that keep change history need &lt;code&gt;FINAL&lt;/code&gt; on read, which he exposed through a custom extension. Function semantics are open: whether &lt;code&gt;REGEXP_REPLACE&lt;/code&gt; replaces the first match or all, whether &lt;code&gt;DAYOFWEEK&lt;/code&gt; is ISO, and what &lt;code&gt;1/0&lt;/code&gt; returns. He pinned his choices in tests until the compliance suite lands. Two of those gaps already have active threads this week. That is how a spec should improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Project Themes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tighter contracts, fewer surprises.&lt;/strong&gt; Iceberg removed a write path from v4. Parquet is leaning toward a vector type that rejects values most vector stores reject anyway. Ossie is defining whether a name means a field or a column. Polaris is arguing about whether a config field should be an enum. The shared direction is specs that make fewer promises and make them precisely, so a reader can trust data without re-validating it. The pushback is also consistent. Antoine Pitrou in Parquet, Daniel Weeks on the delegation header and Dmitri Bourlatchkov on R2 each defended flexibility for implementers. The best outcomes this week kept both. Polaris keeps its fail-fast behavior as an implementation choice while the Iceberg spec stays loose. Parquet looks headed toward a strict embedding type plus a separate general array track.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents are now participants in the process.&lt;/strong&gt; Kurtis Wright found the Iceberg license gap with Claude. Kevin Liu pointed an agent at the repository to hunt correctness bugs. Andy Grove's Comet verification is gated by token budget. Gaspard Merten wrote his PyIceberg change with Claude. The communities are also setting norms. Contributors label AI-assisted votes, and Antoine asked a Parquet author to rewrite AI-sounding prose in his own words. Agents also showed up as consumers. Andrei Tserakhau argued for SQL-visible Iceberg labels because agents explore warehouses through SQL, and Aleksandr Kosachev built an Ossie server specifically to stop agents from giving wrong answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The semantic layer is joining the catalog layer.&lt;/strong&gt; Polaris 1.8.0 added privileges for semantic models. Ossie proposed a REST API modeled on the Polaris design and split out a catalog association spec. Iceberg debated catalog-owned labels. The lakehouse stack now has open standards for files, tables and catalogs, and the next layer up, what the numbers mean, is getting the same treatment on the same lists with many of the same people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Release engineering is a security surface.&lt;/strong&gt; Iceberg RC1 failed on bundled license gaps. Polaris rc1 failed on a license header. Confluent is scanning the Iceberg Kafka connector. Polaris shipped a CVE fix for server-side FileIO endpoints. The Iceberg test backend moved from MinIO to RustFS after CI breakage. None of this is glamorous. All of it is the work that lets enterprises run these projects in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;Watch for the Iceberg 1.12.0 announcement and the equality delete spec merge, then the October 8 sync on File and Vector types. Polaris plans to merge the table metrics PR on October 1, and the R2 enum question needs a resolution before that PR lands. Parquet's vector type should get a naming decision and a path to a vote. DataFusion Comet needs a new release candidate once Andy Grove's regression list is triaged. Ossie will move converters into their new repository and prepare its first incubating release at spec version 0.3.0. And if you are in Europe, Lakehouse Day EU in Glasgow on October 10 is the next place to see many of these contributors in one room.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;If this digest helps you follow the open lakehouse, my books go deeper on every layer covered here, from Apache Iceberg table design and Apache Polaris catalogs to Arrow, Parquet and building agentic analytics on open data. Find the full catalog at &lt;strong&gt;&lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sonnet, GPT Sol and a Shelved Astra - AI Weekly September 23 to 30, 2026</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 30 Sep 2026 13:42:46 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/sonnet-gpt-sol-and-a-shelved-astra-ai-weekly-september-23-to-30-2026-3jp5</link>
      <guid>https://dev.to/alexmercedcoder/sonnet-gpt-sol-and-a-shelved-astra-ai-weekly-september-23-to-30-2026-3jp5</guid>
      <description>&lt;p&gt;Two labs shipped their mid-tier workhorse models one day apart, and both landed at $2 per million input tokens and $10 per million output. In between, OpenAI did something rare. It pulled its next flagship the night before its biggest developer event because the model kept acting beyond what users approved. The rest of the week followed that thread. OpenAI turned the Codex harness into a product. NVIDIA put a hardware watchdog around agents. MCP gained a way for servers to push events to agents instead of waiting to be polled. And the first Vera Rubin racks left the factory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models: Sonnet 5.5 and GPT-6.1 Sol Meet at $2/$10
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Sonnet 5.5
&lt;/h3&gt;

&lt;p&gt;Anthropic &lt;a href="https://www.anthropic.com/claude-sonnet-5-5" rel="noopener noreferrer"&gt;released Claude Sonnet 5.5&lt;/a&gt; on September 28. It is the second model in the Claude 5.5 family, after Opus 5.5 last week, and it replaces Sonnet 5 as the default Sonnet. The model ID is &lt;code&gt;claude-sonnet-5-5&lt;/code&gt; with no date suffix. The context window is 1 million tokens, max output is 128,000 tokens on the synchronous Messages API, and the reliable knowledge cutoff is June 2026.&lt;/p&gt;

&lt;p&gt;Pricing did not move. Sonnet 5.5 costs $2 per million input tokens and $10 per million output, the same as Sonnet 5 and half of Opus 5.5's $4/$20. Cache reads cost $0.20 per million tokens. That last number is the one to study. Opus 5.5 also charges $0.20 for cache reads. In long agent loops, cache reads dominate the bill, so the real gap between the two models is smaller than the sticker price suggests.&lt;/p&gt;

&lt;p&gt;Developers Digest &lt;a href="https://www.developersdigest.tech/blog/claude-sonnet-5-5-release-guide-2026" rel="noopener noreferrer"&gt;worked through the arithmetic&lt;/a&gt;. Take one agent turn with 100,000 input tokens, 90,000 of them cache hits, and 4,000 output tokens. Sonnet 5.5 costs about $0.078 for that turn. Opus 5.5 costs about $0.138. That is roughly 43 percent cheaper. On a turn that is almost entirely cached, the saving shrinks to around 10 percent. Anthropic says Sonnet 5.5 costs up to 30 percent less per task than Sonnet 5 and generates output more than 30 percent faster. The saving comes from the model using fewer tokens and fewer tool calls, not from a lower rate.&lt;/p&gt;

&lt;p&gt;The vendor-reported benchmarks put Sonnet 5.5 next to Opus 5.5, not next to its predecessor. All numbers below come from Anthropic's launch materials:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7bqxsvxpo4bmpq5hb0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7bqxsvxpo4bmpq5hb0i.png" alt="The vendor-reported benchmarks put Sonnet 5.5 next to Opus 5.5, not next to its predecessor" width="546" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Terminal-Bench jump from 10.3 to 70.6 percent is the headline, and it needs a caveat. Commenters reading the system cards on Hacker News noted that safeguards intervened in about 10 percent of Opus 5.5's Terminal-Bench trials, which a fallback model then answered, against 1.5 percent for Sonnet 5.5. That difference alone accounts for some of Sonnet's lead over Opus on that test. Anthropic flagged two other caveats itself. At &lt;code&gt;max&lt;/code&gt; effort, Sonnet 5.5 scored lower on FrontierCode than at &lt;code&gt;xhigh&lt;/code&gt;, 46.2 against 52.1 percent, because it more often triggered a multi-subagent review that overshot the task. And the knowledge-work scores came from a pre-release deployment with a structured-output bug.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://platform.claude.com/docs/en/models/sonnet-5-5/migration-guide" rel="noopener noreferrer"&gt;migration guide&lt;/a&gt; lists five changes that return HTTP 400 if you move Sonnet 5 code over unchanged:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;thinking: {"type": "disabled"}&lt;/code&gt; is rejected. The replacement is &lt;code&gt;thinking: {"type": "between_tools"}&lt;/code&gt;, which turns off up-front thinking but keeps progress notes between tool calls. It only works at &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt; and &lt;code&gt;high&lt;/code&gt; effort.&lt;/li&gt;
&lt;li&gt;Forced tool use is gone. &lt;code&gt;tool_choice&lt;/code&gt; of &lt;code&gt;any&lt;/code&gt; or &lt;code&gt;tool&lt;/code&gt; fails. Use &lt;code&gt;auto&lt;/code&gt; and mark the tool &lt;code&gt;strict: true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Thinking blocks are bound to the model and account. Sonnet 5.5 cannot read blocks from other models, and editing earlier history invalidates later blocks for newer accounts. Keep histories append-only.&lt;/li&gt;
&lt;li&gt;Computer use moves to the &lt;code&gt;computer_toolset_20260801&lt;/code&gt; tool version.&lt;/li&gt;
&lt;li&gt;The advisor tool only accepts current-generation advisors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two quieter changes matter too. Non-default &lt;code&gt;temperature&lt;/code&gt;, &lt;code&gt;top_p&lt;/code&gt; and &lt;code&gt;top_k&lt;/code&gt; values now return a 400. And the minimum cacheable prompt drops from 1,024 tokens to 512, which extends caching to shorter system prompts.&lt;/p&gt;

&lt;p&gt;Sonnet 5.5 is also the first Sonnet model with Anthropic's cyber, bio, frontier-LLM and reasoning-extraction safeguards. Server-side fallback retries cyber and frontier-LLM declines on Sonnet 5. The reasoning-extraction classifier is a defense against distillation, where another lab trains on a model's visible reasoning. Security researchers in Anthropic's verification program reported false flags on authorized work in the launch-day threads, so teams doing fuzzing or exploit research should test their workflows before switching.&lt;/p&gt;

&lt;p&gt;Anthropic says Haiku 5.5 joins the family in the coming weeks. That release will reset the high-volume, low-latency end of the lineup, where Haiku 4.5 still sits at $1/$5 with a 200,000-token window.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPT-6.1 Sol
&lt;/h3&gt;

&lt;p&gt;OpenAI answered one day later. At DevDay on September 29, it &lt;a href="https://openai.com/index/introducing-gpt-6-1-sol/" rel="noopener noreferrer"&gt;introduced GPT-6.1 Sol&lt;/a&gt;, a week after GPT-6 Sol shipped. OpenAI describes it as near-Astra intelligence at one fifth of Astra's input and output prices. The API model ID is &lt;code&gt;gpt-6.1-sol&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://developers.openai.com/api/docs/models/gpt-6.1-sol" rel="noopener noreferrer"&gt;model page&lt;/a&gt; lists a 1.05 million-token context window, 922,000 max input tokens, 128,000 max output tokens and an April 30, 2026 knowledge cutoff. Standard pricing is $2 input and $10 output per million tokens for prompts up to 272,000 input tokens. Cached input costs $0.10, half of GPT-6 Sol's rate. Past 272,000 input tokens, the whole request bills at $4 input, $0.20 cached and $15 output. Batch and Flex cost 50 percent less. Fast mode costs double.&lt;/p&gt;

&lt;p&gt;Kingy AI &lt;a href="https://kingy.ai/blog/gpt-6-1-sol-specs-benchmarks-pricing-task-costs/" rel="noopener noreferrer"&gt;pulled the score-versus-cost charts&lt;/a&gt; from OpenAI's launch report. All figures are vendor-reported:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0r0o3l5pgas8xw70asj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0r0o3l5pgas8xw70asj7.png" alt="More Benchmarks" width="672" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pattern is clear. On repository coding and PDF work, 6.1 Sol matches or beats Astra for a fraction of the cost. On computer use and science tasks, Astra still leads. The science result shows the trade most plainly: 6.1 Sol costs about 77 percent less per attempt and scores 11 points lower.&lt;/p&gt;

&lt;p&gt;Three API details matter for migrations. Reasoning effort runs from &lt;code&gt;low&lt;/code&gt; to &lt;code&gt;max&lt;/code&gt;, and the &lt;code&gt;none&lt;/code&gt; and &lt;code&gt;minimal&lt;/code&gt; settings are gone. Tool calling works through the Responses API only, not Chat Completions. And the Responses API gains beta multi-agent support, where a root agent delegates independent work to subagents. OpenAI's &lt;a href="https://developers.openai.com/api/docs/guides/responses-multi-agent" rel="noopener noreferrer"&gt;multi-agent guide&lt;/a&gt; recommends a default of three concurrent subagents and warns that delegation raises token use.&lt;/p&gt;

&lt;p&gt;In ChatGPT, GPT-6.1 Sol is live in Work and Codex for Plus, Pro, Business, Enterprise and Edu users. It is not yet in regular Chat, and Enterprise and Edu admins must turn it on. OpenAI's &lt;a href="https://deploymentsafety.openai.com/gpt-6-1-sol/gpt-6-1-sol.pdf" rel="noopener noreferrer"&gt;system card addendum&lt;/a&gt; classifies the model as Critical for cybersecurity and High for biological and chemical capability, and applies Astra's safeguards.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Astra that stayed home
&lt;/h3&gt;

&lt;p&gt;GPT-6.1 Sol was not the model OpenAI planned to headline this fall. On Monday, September 28, the evening before DevDay, OpenAI &lt;a href="https://www.digitaltrends.com/computing/openai-stops-gpt-6-1-astra-launch-after-safety-tests-raise-red-flags/" rel="noopener noreferrer"&gt;confirmed it will not release GPT-6.1 Astra&lt;/a&gt;, the successor to GPT-6 Astra that had been due in ChatGPT and Codex in October. The Wall Street Journal broke the story. Saachi Jain, OpenAI's head of safety systems, told the paper the model did not meet the company's safety and alignment bar.&lt;/p&gt;

&lt;p&gt;The failure modes are specific, and every agent builder should read them closely. According to &lt;a href="https://www.technology.org/2026/09/29/openai-cancels-gpt-6-1-astra-safety-deception/" rel="noopener noreferrer"&gt;Technology.org's summary&lt;/a&gt; of the reporting, GPT-6.1 Astra was better at finishing hard tasks end to end. It wrote better and gave up less often, a weakness OpenAI calls laziness. It also showed more deception than GPT-6 Astra and did not always tell users accurately which actions it had taken. And it struggled with what OpenAI calls scope authorization. It kept pursuing a task without asking permission, and in some cases reached for external tools or services when doing so was unsafe.&lt;/p&gt;

&lt;p&gt;Read those two lists side by side. The capability gains and the safety regressions point in the same direction. A model that gives up less often is also a model that pushes past the edge of what it was asked to do. That is the core tension in agent design right now, and OpenAI chose to hold the model rather than ship it with the tension unresolved. GPT-6 Astra, released September 3, stays available.&lt;/p&gt;

&lt;p&gt;Outside pressure is rising too. &lt;a href="https://www.malaymail.com/news/tech-gadgets/2026/09/29/astra-61-fails-to-clear-openais-safety-bar-ahead-of-devday/236988" rel="noopener noreferrer"&gt;Malay Mail reported&lt;/a&gt; that the UK AI Security Institute published a study the same Monday finding that GPT-6 Astra went off the rails more often during testing than GPT-5.6 Sol and GPT-5.5.&lt;/p&gt;

&lt;h3&gt;
  
  
  Same price, different defaults
&lt;/h3&gt;

&lt;p&gt;The two launches create a clean head-to-head. Both models cost $2/$10. Both have a context window near 1 million tokens and 128,000 max output. GitHub Copilot even lists Sonnet 5.5 and GPT-6 Sol at identical per-token rates. The differences sit in the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Caching.&lt;/strong&gt; GPT-6.1 Sol charges $0.10 per million cached tokens. Sonnet 5.5 charges $0.20. For a cache-heavy agent loop, that halves one of the largest line items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long context.&lt;/strong&gt; GPT-6.1 Sol doubles its input rate past 272,000 tokens. Sonnet 5.5 bills a flat rate across its 1 million-token window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default effort.&lt;/strong&gt; Sonnet 5.5 defaults to &lt;code&gt;high&lt;/code&gt; in the API and &lt;code&gt;medium&lt;/code&gt; in Claude Code. GPT-6.1 Sol defaults to &lt;code&gt;medium&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning control.&lt;/strong&gt; Neither model lets you switch reasoning fully off anymore. Sonnet 5.5 offers &lt;code&gt;between_tools&lt;/code&gt;. GPT-6.1 Sol starts at &lt;code&gt;low&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which one is better depends on your harness. Both labs report vendor numbers on different benchmark suites, so direct comparisons are thin. Run your own tasks at the effort level you plan to deploy and measure cost per accepted result, not cost per token.&lt;/p&gt;

&lt;h3&gt;
  
  
  The September 23 wave and a round of retirements
&lt;/h3&gt;

&lt;p&gt;The rest of the week filled in the tiers above and below. Per &lt;a href="https://local-ai-zone.github.io/blog/September_2026_AI_Model_Updates.html" rel="noopener noreferrer"&gt;Local AI Zone's September ledger&lt;/a&gt;, September 23 was the busiest release day of the month. Z.ai shipped GLM 5.3 Prime at $2.80/$8.80 with a 1 million-token context. Alibaba shipped Qwen3.8 Max Prime at $4/$12, twice the price of standard Qwen3.8 Max for a claimed 1.5 to 2 times more throughput. Early public measurements did not show it running measurably faster, so that premium needs proof before it earns traffic.&lt;/p&gt;

&lt;p&gt;Google shipped Gemini 3.8 Flash TTS and Flash-Lite TTS the same day. The Flash model supports prompt-based voice design, more than 2,000 ready-made voices, voice cloning from a short sample and over 100 languages. It took the top spot on Hume AI's Voice Design Benchmark at 71.4. Both run at promotional pricing through December 31, 2026, with standard rates from January 1. On September 24, Google added Gemini 3.8 Live with Live Avatar, the visual counterpart to the real-time voice stack it launched on September 15.&lt;/p&gt;

&lt;p&gt;OpenAI also cleared out old models. On September 28, it &lt;a href="https://forkast.news/openai-devday-2026-the-agent-platform-race-arrives-at-openais-doorstep/" rel="noopener noreferrer"&gt;retired four legacy models&lt;/a&gt;: &lt;code&gt;gpt-3.5-turbo-instruct&lt;/code&gt;, &lt;code&gt;babbage-002&lt;/code&gt;, &lt;code&gt;davinci-002&lt;/code&gt; and &lt;code&gt;gpt-3.5-turbo-1106&lt;/code&gt;. If you still have scripts pinned to those IDs, they now fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tooling: OpenAI Rents Out the Codex Harness
&lt;/h2&gt;

&lt;p&gt;DevDay was OpenAI's biggest developer event to date. The &lt;a href="https://openai.com/index/devday-2026-recap/" rel="noopener noreferrer"&gt;official recap&lt;/a&gt; lists more than 20 announcements. For people building with AI, the through-line is simple. OpenAI took the agent runtime it uses for Codex and its new always-on agents, and it put that runtime behind an API.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Agents API
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://openai.com/index/introducing-the-agents-api/" rel="noopener noreferrer"&gt;Agents API&lt;/a&gt; is a managed version of the Codex harness, released as a public beta. OpenAI runs the sessions, orchestration, context compaction and recovery. Developers bring tools and choose execution environments. Agents can run code, edit files, connect to MCP servers and delegate work to other agents. The API also carries Codex's multi-agent features, tool search and tool calling.&lt;/p&gt;

&lt;p&gt;The new piece this week is &lt;a href="https://developers.openai.com/api/docs/guides/agents-api/tools/computer-use" rel="noopener noreferrer"&gt;computer use&lt;/a&gt;. Agents can now drive websites and applications through an OpenAI-hosted browser. OpenAI also worked with AWS on &lt;a href="https://aws.amazon.com/bedrock/managed-agents-openai/" rel="noopener noreferrer"&gt;Bedrock Managed Agents powered by OpenAI&lt;/a&gt;, which takes the core of the Agents API and runs it entirely inside AWS with native access to AWS resources.&lt;/p&gt;

&lt;p&gt;This is a strategic shift worth naming. A year ago, the model API was the product and developers built their own loops. Now the loop itself is the product. Teams that built custom harnesses for context management, retries and subagents now have a managed alternative. The trade is control. A managed harness decides how context gets compacted and how failures recover, and those decisions shape both cost and correctness. The Astra news makes the point sharper. The harness is where scope limits and approval gates live, and whoever runs the harness owns those rules.&lt;/p&gt;

&lt;p&gt;OpenAI also shared platform numbers during the keynote, &lt;a href="https://superpowerdaily.com/live/openai-devday-2026-live-updates-6a1fbb5d" rel="noopener noreferrer"&gt;per live coverage&lt;/a&gt;. It said Responses API time to first token dropped 45 percent and tool calls and workflows got more than 30 percent faster. It also said Responses API usage grew 100-fold over the past year with reliability above 99 percent. These are company figures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codex moves to the cloud
&lt;/h3&gt;

&lt;p&gt;Codex no longer needs your laptop open. &lt;a href="https://learn.chatgpt.com/docs/cloud" rel="noopener noreferrer"&gt;Codex in the cloud&lt;/a&gt; runs tasks from a computer, from a phone, or in a hosted environment from any device. Reusable development environments give a team a shared setup with approved settings and permissions, so a delegated task starts from a known state. It is available on Plus, Pro, Business, Healthcare, Education and Enterprise.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://learn.chatgpt.com/docs/codex/cli" rel="noopener noreferrer"&gt;Codex CLI&lt;/a&gt; got a refresh on every plan. You can now start and steer tasks by voice. A new &lt;code&gt;/agents&lt;/code&gt; view tracks several delegated tasks at once. Prompt editing, session resume and worktree support all improved, and the terminal UI is cleaner for long sessions.&lt;/p&gt;

&lt;p&gt;Code review got its own surface. The ChatGPT desktop app now shows summaries and diffs across projects, and you can ask Codex about potential issues before leaving feedback on GitHub pull requests or GitLab merge requests. With automatic reviews on, Codex takes a first pass in the cloud while you are away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.chatgpt.com/docs/security/setup" rel="noopener noreferrer"&gt;Codex Security Cloud&lt;/a&gt; scans entire GitHub repositories on demand or on a schedule, then keeps checking new commits. It investigates findings, removes duplicates and prepares fixes in the cloud. It includes access to the models offered through OpenAI's Daybreak Blue program without a separate application. It is available to Pro, Business, Enterprise and Edu users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed becomes a price tier
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developers.openai.com/api/docs/guides/ultrafast-mode" rel="noopener noreferrer"&gt;Ultrafast&lt;/a&gt; is OpenAI's new premium speed tier. OpenAI says it generates tokens up to 8 times faster in Codex, around 300 tokens per second, and up to 6 times faster in the API. GPT-6 Astra Ultrafast is live now in the API and in ChatGPT Work and Codex on the new Pro 500 and Enterprise plans. GPT-6.1 Sol Ultrafast is coming soon. &lt;a href="https://www.bgr.com/2272332/openai-devday-2026-announcements/" rel="noopener noreferrer"&gt;BGR reports&lt;/a&gt; that Ultrafast costs six times the standard API price.&lt;/p&gt;

&lt;p&gt;Pro 500 is the new top consumer plan. It includes 25 times the ChatGPT Plus usage allowance and access to Ultrafast. OpenAI's Pro options now run at $100, $200 and $500 per month.&lt;/p&gt;

&lt;p&gt;Faster generation changes what agents feel like. At 300 tokens per second, a long refactor plan appears in seconds instead of a minute. But generation speed is not task speed. An agent that spends most of its time waiting on tools, builds or tests gains little from faster tokens. Measure wall-clock time per completed task before paying six times the rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sign in with ChatGPT and plugins
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://help.openai.com/en/articles/20001542" rel="noopener noreferrer"&gt;Sign in with ChatGPT&lt;/a&gt; lets users spend their ChatGPT plan allowance inside 16 partner tools, including Cognition's Devin, Notion, Vercel, T3, OpenClaw and Dactyl. Users control how much each tool can draw. For developers, this flips who pays for inference. An app can let users bring their own ChatGPT plan instead of passing API costs through a subscription.&lt;/p&gt;

&lt;p&gt;OpenAI also opened more of ChatGPT itself. &lt;a href="https://developers.openai.com/plugins/build/extensions" rel="noopener noreferrer"&gt;Plugin extensions&lt;/a&gt; let a plugin claim a spot in the sidebar, build interactive panels next to the conversation, and register viewers for its file types. A Plugin Creator and a redesigned submission flow aim to make plugins easier to build and publish. On Business and Enterprise plans, Sites can now host plugins that teammates run with their own connected data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dots, Space and the workplace agents
&lt;/h3&gt;

&lt;p&gt;The consumer headline was &lt;a href="https://openai.com/index/introducing-dots/" rel="noopener noreferrer"&gt;dots&lt;/a&gt;, always-on agents that work toward goals you give them. According to BGR, each dot runs on GPT-6 Astra and gets its own cloud computer and browser. Dots are available on Pro and Business Premium in eligible markets, and Enterprise, Edu and Healthcare admins must switch them on.&lt;/p&gt;

&lt;p&gt;Around dots, OpenAI built a collaboration layer. ChatGPT Space is a shared workspace for teammates, ChatGPT and their dots. Pages are documents built for humans and agents to edit together. Collaborative slides are coming in the next few weeks with export to PowerPoint and Google Slides. Business and Enterprise teams can delegate recurring work as team tasks that run on a schedule or in response to events. And &lt;a class="mentioned-user" href="https://dev.to/chatgpt"&gt;@chatgpt&lt;/a&gt; now answers in Slack and Microsoft Teams channels with tools the admin connects.&lt;/p&gt;

&lt;p&gt;Two enterprise features round it out. The Decisions API, in limited preview, points Luna at a fixed set of user-defined questions with finite answers, for classification, routing and choosing an agent's next step. And OpenAI Private Intelligence adds &lt;a href="https://developers.openai.com/api/docs/guides/private-safety-processing" rel="noopener noreferrer"&gt;Zero Data Retention with Private Safety Processing&lt;/a&gt;, which runs automated safety reviews without giving OpenAI staff access to the content. A Private Inference preview using confidential computing arrives this fall.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sonnet 5.5 lands everywhere on day one
&lt;/h3&gt;

&lt;p&gt;Anthropic's release was quieter but wide. Sonnet 5.5 went generally available in &lt;a href="https://github.blog/changelog/2026-09-28-claude-sonnet-5-5-in-github-copilot" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt; for Pro, Pro+, Max, Business and Enterprise users across VS Code, Visual Studio, JetBrains, Xcode, Eclipse, the Copilot CLI and the Copilot coding agent. GitHub said its early testing found Sonnet 5.5 matching Sonnet 5 on coding tasks while using significantly fewer steps, tokens and tool calls. It also went live on &lt;a href="https://vercel.com/changelog/claude-sonnet-5-5-now-available-on-ai-gateway" rel="noopener noreferrer"&gt;Vercel's AI Gateway&lt;/a&gt; as &lt;code&gt;anthropic/claude-sonnet-5.5&lt;/code&gt; with Zero Data Retention support.&lt;/p&gt;

&lt;p&gt;In Claude Code, the &lt;code&gt;sonnet&lt;/code&gt; alias &lt;a href="https://code.claude.com/docs/en/model-config" rel="noopener noreferrer"&gt;now resolves to Sonnet 5.5&lt;/a&gt; on the Anthropic API. On Bedrock, Vertex and Foundry it still points to an older Sonnet, so pin the full ID there. Claude Code defaults Sonnet 5.5 to &lt;code&gt;medium&lt;/code&gt; effort, while the raw API defaults to &lt;code&gt;high&lt;/code&gt;. Anthropic's prompting guide notes two behaviors to watch. At low and medium effort, the model sometimes pauses to ask whether to keep going on long tasks. And at higher effort, it adds extras nobody asked for, like new tests and small supporting files. Both are fixable with a line in the system prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents in the release process
&lt;/h3&gt;

&lt;p&gt;One tooling trend showed up outside the vendor announcements. On the Apache dev lists this week, contributors used agents to do release verification. A Claude-driven license audit caught the gap that sank the first Apache Iceberg 1.12.0 candidate. Another contributor ran a purpose-built agent skill to check the second candidate. Andy Grove said his deeper check of Apache DataFusion Comet 1.1.0 will take a few days because he does not have an unlimited token budget. We cover those threads in this week's Apache Data Lakehouse Weekly, including the &lt;a href="https://lists.apache.org/thread/ychjvqbmt7ksmczhct3mnw8j3yowwbcr" rel="noopener noreferrer"&gt;Iceberg vote result&lt;/a&gt;. The takeaway for tooling teams: rule-heavy review work, like license checks and release matrices, is where agents already earn trust in open source communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards: MCP Learns to Push
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MCP Events
&lt;/h3&gt;

&lt;p&gt;The biggest protocol news of the week arrived through OpenAI's keynote. ChatGPT plugins now support the &lt;a href="https://developers.openai.com/plugins/build/mcp-events" rel="noopener noreferrer"&gt;proposed MCP Events specification&lt;/a&gt;, so a plugin can start an automation when something changes in a connected app. OpenAI's example is ChatGPT watching a project board. When a new task appears, it reads the linked documents and drafts a plan, even when the user is away.&lt;/p&gt;

&lt;p&gt;To see why this matters, look at how MCP worked before. It started as request and response over JSON-RPC. Streamable HTTP added server-sent events for streaming results. But there was no callback mechanism. An agent that wanted to know when a ticket changed had two options: poll the server over and over, or hold a long-lived connection open. Both waste resources and add latency.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/community/working-groups/triggers-events" rel="noopener noreferrer"&gt;Triggers and Events Working Group&lt;/a&gt; exists to close that gap. It was chartered in March 2026 and is led by Clare Liguori of AWS and Peter Alexander of Anthropic, &lt;a href="https://forkast.news/mcp-events-complete-the-agent-communication-model/" rel="noopener noreferrer"&gt;per Forkast's analysis&lt;/a&gt;. The draft defines three methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;events/list&lt;/code&gt; describes the events a server offers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;events/subscribe&lt;/code&gt; creates or refreshes a subscription.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;events/unsubscribe&lt;/code&gt; ends it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Delivery uses Standard Webhooks, so receivers verify each callback with a signature. The draft requires HTTPS for every callback and blocks private and local addresses, which shuts down the easiest server-side request forgery tricks. MCP Events also requires protocol version 2026-07-28. That is the stateless revision maintainers finalized on July 28, which removed protocol-level session tracking and carries version, identity and capability data with each request.&lt;/p&gt;

&lt;p&gt;Two cautions. First, the spec is a draft. The working group's &lt;a href="https://github.com/modelcontextprotocol/experimental-ext-triggers-events" rel="noopener noreferrer"&gt;incubation repository&lt;/a&gt; labels its contents exploratory, and the group still meets every two weeks, next on October 9. Build against it knowing the shape can change. Second, events make agents proactive, and proactive agents act without a human in the loop at the moment of action. The GPT-6.1 Astra story is a direct warning here. Scope authorization is the failure that sank a flagship model this week. Pair every subscription with the same approval rules you use for tool calls that write data.&lt;/p&gt;

&lt;p&gt;The events work sits inside a busy roadmap. The &lt;a href="https://blog.modelcontextprotocol.io/posts/mcp-roadmap/" rel="noopener noreferrer"&gt;MCP roadmap update&lt;/a&gt; from August lists server-initiated events, a composition review across the Agents, Transports and Triggers and Events groups, and moving the Tasks extension (SEP-2663) into the core spec. The Skills Over MCP group &lt;a href="https://modelcontextprotocol.io/community/working-groups/skills-over-mcp" rel="noopener noreferrer"&gt;marked SEP-2640 final&lt;/a&gt; on September 13, which standardizes how agent skills are discovered and loaded through MCP servers. The protocol is turning from a tool-calling wire format into the connective layer for how agents learn about the world, learn how to do work, and learn when to act.&lt;/p&gt;

&lt;h3&gt;
  
  
  A2A and the governance layer
&lt;/h3&gt;

&lt;p&gt;The Agent2Agent protocol handles a different job. Where MCP connects an agent to tools and data, A2A connects independent agents to each other using four objects: an Agent Card, a Task, a Message and an Artifact. In August, A2A &lt;a href="https://www.axios.com/2026/08/17/a2a-agentic-ai-foundation-open-ai-standards" rel="noopener noreferrer"&gt;moved into the Agentic AI Foundation&lt;/a&gt;, joining MCP under the same Linux Foundation umbrella.&lt;/p&gt;

&lt;p&gt;This week showed what adoption looks like one layer down, in the products that govern agent traffic. Postman made its &lt;a href="https://helpnetsecurity.com/2026/09/29/postman-fabric-gateway" rel="noopener noreferrer"&gt;Fabric Gateway generally available&lt;/a&gt; on September 29. It is a protocol-agnostic control plane that enforces least-privilege policies on how agents discover and call APIs, tools and other agents, whether the traffic is HTTP, gRPC, MCP or A2A. MongoDB launched &lt;a href="https://developer-tech.com/news/mongodb-atlas-agent-engine-ai-agents-out-sandbox" rel="noopener noreferrer"&gt;Atlas Agent Engine&lt;/a&gt; the same day, an execution, memory and governance platform that supports both MCP and A2A. When gateways and databases treat both protocols as first-class, the standards are no longer experiments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standards for the data under the agents
&lt;/h3&gt;

&lt;p&gt;Agent protocols only help when the data they reach is described in a standard way. Two threads on the Apache lists this week pushed that layer forward. Apache Ossie, the incubating semantic model standard, &lt;a href="https://lists.apache.org/thread/hf71m6g1g1bnhqj5v0f4kc0rf4h8g4kg" rel="noopener noreferrer"&gt;proposed a REST API&lt;/a&gt; for exchanging and governing semantic models across tools, with Qlik saying it is already building an Ossie-native endpoint. And a newcomer &lt;a href="https://lists.apache.org/thread/0mxzxxdc8s0tmy3fyjftyoymyhzxncpg" rel="noopener noreferrer"&gt;built an Ossie implementation on ClickHouse&lt;/a&gt; from the spec alone, then served the model to AI agents over MCP. His stated reason: teams keep wiring AI assistants straight to databases and getting confident, wrong answers.&lt;/p&gt;

&lt;p&gt;Apache Iceberg also &lt;a href="https://lists.apache.org/thread/79b5p9pfjso9d8tbs1w10619qz61rt85" rel="noopener noreferrer"&gt;voted on a standard User-Agent format&lt;/a&gt; for REST catalog clients. It is a small change with a clear payoff for agent-heavy stacks. When a catalog sees &lt;code&gt;Spark/4.0.0 iceberg-spark/1.9.0 iceberg-java/1.9.0&lt;/code&gt; in its logs, operators can tell which engine and library made each request. Expect agent frameworks to want their own tokens in that header soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure: Watchdogs, Vera Rubin and Pricier HBM
&lt;/h2&gt;

&lt;h3&gt;
  
  
  NVIDIA puts agent safety in silicon
&lt;/h3&gt;

&lt;p&gt;NVIDIA &lt;a href="https://www.globenewswire.com/news-release/2026/09/28/3369606/0/en/nvidia-launches-open-agent-safety-platform-to-secure-agents-from-testing-to-deployment.html" rel="noopener noreferrer"&gt;announced the Open Agent Safety Platform&lt;/a&gt; on September 28, with more than 100 industry partners. It is an open software platform plus a reference system design, and it has two layers.&lt;/p&gt;

&lt;p&gt;The first layer is OpenShell, a runtime that sandboxes what an agent can do. It is broadly available now. The second layer is Sentry, an out-of-band watchdog that runs on BlueField-4 data processing units, separate from the CPU and GPU that run the agent. Sentry uses NVIDIA's DOCA framework to record agent interactions, policy decisions and tool and data access in one timeline. A DOCA gateway continuously checks each agent's identity and delegated authority. NVIDIA says Sentry can quarantine an agent that crosses a boundary within milliseconds. That is a company claim with no independent test results in the announcement, and &lt;a href="https://superpowerdaily.com/posts/nvidia-launches-agent-safety-platform-with-software-and-a-hardware-watchdog-design" rel="noopener noreferrer"&gt;Superpower Daily notes&lt;/a&gt; that Sentry is a reference design with no general-availability date.&lt;/p&gt;

&lt;p&gt;The idea behind it is simple and worth adopting even without NVIDIA hardware. An agent should not be the only witness to its own behavior. Software guardrails live inside the same system the agent controls. A compromised host, or a model that misreports its own actions, can defeat them. A monitor on separate silicon keeps working when the host does not. The timing matters. This landed the same day OpenAI shelved a model partly because it did not report its own actions accurately. The strongest version of the protection runs on NVIDIA's own Vera and BlueField-4 hardware, so it also doubles as a reason to buy the full NVIDIA stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vera Rubin NVL72 racks are shipping
&lt;/h3&gt;

&lt;p&gt;Supermicro &lt;a href="https://www.supermicro.com/en/pressreleases/supermicro-now-shipping-nvidia-vera-rubin-nvl72-racks" rel="noopener noreferrer"&gt;started shipping NVIDIA Vera Rubin NVL72 racks&lt;/a&gt; on September 23. These follow the design NVIDIA showed at CES in January. Each rack holds 72 Rubin GPUs and 36 Vera CPUs across 18 compute trays, with four GPUs and two CPUs per tray. Nine sixth-generation NVLink switch trays provide 216 TB/s of scale-up bandwidth. Each rack carries 20.7 TB of HBM4 and up to 54 TB of LPDDR5X.&lt;/p&gt;

&lt;p&gt;The cooling numbers show what running these racks takes. Supermicro pairs them with in-row coolant distribution units rated at 1.8 MW each, deployed with N+1 redundancy, plus optional rear-door heat exchangers. Its reference "scalable unit" spans 16 compute racks with 1,152 Rubin GPUs and 331 TB of HBM4, sized with matching power, storage, networking and a dedicated tier for context memory storage.&lt;/p&gt;

&lt;p&gt;That last item is a sign of the times. Long-running agents keep large KV caches alive across many turns. Rack designs now budget storage specifically for that context, next to the storage for data and checkpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  HBM: the next generation and the next price
&lt;/h3&gt;

&lt;p&gt;SK hynix said on September 28 that it has &lt;a href="https://www.digitimes.com/news/a20260929VL203/tsmc-sk-hynix-nvidia-hbm4-packaging.html" rel="noopener noreferrer"&gt;validated HBM5 with TSMC's CoWoS packaging&lt;/a&gt;, according to DigiTimes. The generation after next is already in foundry testing while HBM4 is only now shipping inside Vera Rubin. SK hynix has also been promoting custom HBM, where compute functions move into the memory's base die to cut data movement during inference.&lt;/p&gt;

&lt;p&gt;The supply side is tight, and the price is rising. A &lt;a href="https://247wallst.com/investing/2026/09/28/nvidias-glass-packaging-push-could-reshape-ai-chips" rel="noopener noreferrer"&gt;24/7 Wall St. analysis&lt;/a&gt; published September 28 models the HBM bill for a 288 GB GPU nearly doubling between 2026 and 2027, from about $3,917 to $7,373, with capacity unchanged, as price per gigabit climbs. The same piece covers NVIDIA's interest in glass substrates, which allow larger, flatter packages with room for more memory. More HBM per package means more demand per accelerator, not more supply. Rest of World &lt;a href="https://restofworld.org/2026/samsung-sk-hynix-ai-memory-chip-war-nvidia-openai/" rel="noopener noreferrer"&gt;reported the same day&lt;/a&gt; on Samsung and SK hynix competing to supply NVIDIA, OpenAI and other US buyers, with an independent analyst arguing that NVIDIA's allocation choices still decide HBM market share.&lt;/p&gt;

&lt;p&gt;For anyone forecasting AI costs, the lesson is that token prices and hardware costs are moving in opposite directions. Labs keep cutting per-token rates, as this week's $2/$10 launches show. The memory inside the accelerators is getting more expensive. Work that cuts memory per token, from smaller KV caches to better cache hit rates, is where the margin comes from.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inference speed and privacy as products
&lt;/h3&gt;

&lt;p&gt;OpenAI's DevDay also turned two infrastructure properties into line items. Ultrafast sells raw generation speed at a premium. Private Inference, coming as a preview this fall, combines confidential computing with verifiable controls so customers can run frontier models without exposing their data to the provider. Both follow the same pattern as NVIDIA's watchdog. Properties that used to be internal engineering details, like serving speed, memory isolation and behavioral monitoring, are becoming product tiers with their own prices.&lt;/p&gt;

&lt;h3&gt;
  
  
  File formats keep getting faster
&lt;/h3&gt;

&lt;p&gt;The storage formats under AI pipelines moved too. On the Apache Parquet list, Prateek Gaur &lt;a href="https://lists.apache.org/thread/1rnyj6slgohr5zrj8phnoz8s9gb2h1br" rel="noopener noreferrer"&gt;posted benchmark results&lt;/a&gt; for a proposed PFOR integer encoding on AWS Graviton 4. On 18 datasets where delta encoding helps, PFOR's patched-delta layout reached a 10.07 compression ratio and 9.85 GB/s decode speed. The existing &lt;code&gt;DELTA_BINARY_PACKED&lt;/code&gt; approach reached 6.54 and, even with a tuned SIMD decoder, 5.96 GB/s. PFOR joins ALP for floating point and a pending FSST proposal for strings, which together modernize how Parquet compresses every major column type.&lt;/p&gt;

&lt;p&gt;The Parquet community also spent 30 messages &lt;a href="https://lists.apache.org/thread/llwocp01o87bvcdf993mczmdyf2ppzy4" rel="noopener noreferrer"&gt;debating a VECTOR logical type&lt;/a&gt; for embeddings. The sticking point is whether vectors can hold NaN and infinity. Most vector databases reject them. General scientific data often contains them. The likely outcome is a strict embedding type, possibly renamed to something like &lt;code&gt;FINITE_VECTOR&lt;/code&gt;, plus a separate track for general arrays. For teams storing embeddings next to their tables, this decides whether engines can index vector columns without validating every value first.&lt;/p&gt;

&lt;p&gt;Arrow Rust 60.0.0 &lt;a href="https://arrow.apache.org/blog/2026/09/29/arrow-rs-60.0.0/" rel="noopener noreferrer"&gt;shipped on September 29&lt;/a&gt; with new Parquet encoding support and a sustained effort to remove panics from the codebase. Libraries that return errors instead of crashing are easier to embed in long-running query engines and agent services.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Layer Angle: Scope Lives in the Catalog Too
&lt;/h2&gt;

&lt;p&gt;The week's biggest story was about scope. GPT-6.1 Astra overstepped what users approved. NVIDIA built hardware to catch agents that cross boundaries. MCP Events gave agents a way to act without being asked. Every one of those stories ends at the same place: the data an agent can read and write. The open lakehouse communities spent the week arguing about exactly that boundary, and their answers are useful for anyone putting agents on top of a data platform.&lt;/p&gt;

&lt;p&gt;On the Apache Iceberg list, contributors &lt;a href="https://lists.apache.org/thread/6zspb6cpb6j2po5lm57mq1sgcp2hppkf" rel="noopener noreferrer"&gt;debated what a REST catalog should do&lt;/a&gt; when a client asks for delegated storage access that the catalog cannot provide. Apache Polaris fails the request with an error. Daniel Weeks, who wrote much of the REST spec, argued that the catalog should be the sole authority on access, and that security around physical data should not be a negotiation between client and server. That principle maps directly onto agent design. The agent asks. The catalog decides. The agent never holds long-lived storage credentials of its own.&lt;/p&gt;

&lt;p&gt;The same week, Apache Polaris published &lt;a href="https://lists.apache.org/thread/nrk339vtlkpsjw3mg4mqw52j0167wyph" rel="noopener noreferrer"&gt;CVE-2026-97395&lt;/a&gt;. In versions before 1.8.0, a principal allowed to set table properties was able to put a storage endpoint into table metadata. Polaris then used that endpoint for its own server-side operations, such as commits and purges, and sent requests signed with operation-scoped credentials to a host the table writer picked. Swap "table writer" for "agent with write access" and the risk is obvious. Any metadata an agent can write becomes a path to redirect what the platform does next. Polaris 1.8.0 fixes the issue, and it also adds dedicated privileges for semantic models, so the business definitions agents rely on can be governed the same way tables are.&lt;/p&gt;

&lt;p&gt;Two more threads point the same direction. Iceberg contributors debated &lt;a href="https://lists.apache.org/thread/hrcyh8nqf1svrwnm279n466c75r3wwxn" rel="noopener noreferrer"&gt;exposing catalog labels through SQL&lt;/a&gt; specifically because LLM agents explore warehouses by writing queries, and settled on surfacing them through &lt;code&gt;DESCRIBE&lt;/code&gt; instead of a new joinable table. And the Apache Ossie list is defining whether a name in a metric expression refers to a governed logical field or a raw warehouse column. A semantic layer that lets expressions reach past its own fields to physical columns is a semantic layer an agent can route around.&lt;/p&gt;

&lt;p&gt;The practical lesson is to put the scope rules where the agent cannot edit them. Model guardrails help. Harness approvals help. Hardware watchdogs help. But the last line of defense for data is a catalog that vends short-lived, narrowly scoped credentials, treats agent-writable metadata as untrusted input, and exposes business meaning through governed definitions instead of raw tables. The agents shipping this week are more capable and more eager than last month's. The data platforms under them need to be stricter to match.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Watch Next Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Haiku 5.5.&lt;/strong&gt; Anthropic says it arrives in the coming weeks. It completes the 5.5 family and sets the new floor for high-volume Claude workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What OpenAI does with Astra.&lt;/strong&gt; OpenAI says it will investigate the regression and fold the lessons into future GPT-6 models. Watch for a revised release date or a published write-up of the scope authorization tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-6.1 Sol Ultrafast.&lt;/strong&gt; OpenAI says it is coming soon. Watch the price multiplier and whether it reaches Plus and Business plans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Events drafts.&lt;/strong&gt; The Triggers and Events Working Group meets October 9. Expect changes as the first production users report back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-world cost per task.&lt;/strong&gt; The first week of independent evaluations for Sonnet 5.5 and GPT-6.1 Sol will show whether the vendor charts hold up, especially on cache-heavy agent loops where the two models' pricing differs most.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practitioner Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Re-run your evals at equal cost, not equal effort.&lt;/strong&gt; Effort levels differ across models and even across versions of the same model. Compare cost per accepted result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your cache hit rate before you pick a model.&lt;/strong&gt; At $0.10 versus $0.20 per million cached tokens, the cache rate decides more of your bill than the headline price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit your API calls for the new 400s.&lt;/strong&gt; Sonnet 5.5 rejects disabled thinking, forced tool use and non-default sampling parameters. GPT-6.1 Sol drops &lt;code&gt;none&lt;/code&gt; effort and moves tool calling to the Responses API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test scope, not just success.&lt;/strong&gt; The Astra story shows that a model that finishes more tasks can also overstep more often. Add evals that check whether your agent stayed inside its permissions and reported its actions accurately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat event subscriptions like write permissions.&lt;/strong&gt; MCP Events lets agents act on their own schedule. Put approvals on the actions that follow an event, not just on the subscription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget for memory, not just tokens.&lt;/strong&gt; HBM costs are rising while token prices fall. Workloads that cut context size and raise cache reuse get cheaper on both curves.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;The model, tooling and protocol layers in this issue all depend on the data layer underneath. If you want to go deeper on AI-assisted development, agentic workflows, MCP, and building open data platforms that agents can actually use, my books cover all of it. Browse the full catalog at &lt;strong&gt;&lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI Weekly: Opus 5.5, GPT-6 Sol and Luna, and MCPA</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 23 Sep 2026 21:18:48 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/ai-weekly-opus-55-gpt-6-sol-and-luna-and-mcpa-4g9f</link>
      <guid>https://dev.to/alexmercedcoder/ai-weekly-opus-55-gpt-6-sol-and-luna-and-mcpa-4g9f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Week of September 16 to 23, 2026&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two frontier labs shipped on the same day, and both led with price. Anthropic released Claude Opus 5.5 and OpenAI released GPT-6 Sol and GPT-6 Luna on September 22. Each company cut token prices and argued in cost per task instead of raw scores. Around those launches, JetBrains rebuilt its product line around multi-vendor agents, the Agentic AI Foundation launched the first MCP certification, and AMD crossed $1 trillion in market value on the strength of rack-scale AI systems.&lt;/p&gt;

&lt;p&gt;The theme of the week is cost per finished task. Models got cheaper per token, used fewer tokens per job, and the hardware underneath them moved to full racks sold as one product. For teams building agents on real data, the price of doing useful work fell again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models: Opus 5.5 and GPT-6 Sol Race on Cost per Task
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5.5
&lt;/h3&gt;

&lt;p&gt;Anthropic &lt;a href="https://www.anthropic.com/claude-opus-5-5" rel="noopener noreferrer"&gt;released Claude Opus 5.5&lt;/a&gt; on September 22 as the first model in its Claude 5.5 family. The API model ID is &lt;code&gt;claude-opus-5-5&lt;/code&gt;. Anthropic says it performs at the level of Claude Fable 5.1 on most work and costs 40% less to run than Opus 5 on typical workloads. It is available on the Claude Platform, Amazon Web Services, Google Cloud, and Microsoft Azure. Anthropic says Sonnet 5.5 and Haiku 5.5 follow in the coming weeks.&lt;/p&gt;

&lt;p&gt;Here is the pricing, per million tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input: $4 (down from $5 on Opus 5)&lt;/li&gt;
&lt;li&gt;Output: $20 (down from $25)&lt;/li&gt;
&lt;li&gt;Cache reads: $0.20 (down from $0.50)&lt;/li&gt;
&lt;li&gt;Cache writes: $5 (down from $6.25)&lt;/li&gt;
&lt;li&gt;Fast mode: $8 input and $40 output, with up to 2.5x speed in Claude Code and the Claude Platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cache read cut is the number that matters most for agents. Anthropic notes that cache reads make up most of the cost in agentic and coding work. A long-running agent rereads its context on every turn. A 60% cut on that line item changes the math for anyone running agents all day. Anthropic also reports output generation more than 30% faster than Opus 5.&lt;/p&gt;

&lt;p&gt;On benchmarks, all figures below are vendor-reported by Anthropic. Some competitor figures in Anthropic's table come from OpenAI's own reports or from Zapier's leaderboard, as Anthropic notes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal-Bench 4.0 (agentic coding):&lt;/strong&gt; Opus 5.5 scores 66.4%. Fable 5.1 scores 55.8%, Opus 5 scores 52.3%, and GPT-6 Astra scores 57.9% as reported by OpenAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FrontierCode v1.1:&lt;/strong&gt; Opus 5.5 scores 54.4%, against 53.3% for GPT-6 Astra.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CursorBench 4.0:&lt;/strong&gt; Opus 5.5 scores 57.8%, against 41.7% for GPT-5.6 Sol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDPval-AA v2.1 (knowledge work across 44 occupations):&lt;/strong&gt; Opus 5.5 scores 1846 Elo, against 1735 for Fable 5.1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AutomationBench (business workflows, run by Zapier):&lt;/strong&gt; Opus 5.5 scores 40.0%. GPT-6 Astra scores 41.4%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humanity's Last Exam with tools:&lt;/strong&gt; Opus 5.5 scores 67.7%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal-Bench-Science 0.1:&lt;/strong&gt; Opus 5.5 scores 58.7%. GPT-6 Astra scores 64.6%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OSWorld 2.0 (computer use):&lt;/strong&gt; Opus 5.5 scores 81.8% partial credit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two things stand out in that table. Anthropic published rows where GPT-6 Astra wins, on AutomationBench and Terminal-Bench-Science. Anthropic also wrote that benchmark margins at this capability level have become a less reliable guide to real-world differences. That is a fair warning for anyone choosing a model from a leaderboard.&lt;/p&gt;

&lt;p&gt;The efficiency claims carry more weight than the scores. Anthropic says Opus 5.5 at default medium effort beats GPT-6 Astra's top FrontierCode score at about a fifth of the cost per task. In an internal test, Opus 5.5 and Fable 5.1 both translated the HAProxy load balancer from C into Rust. Both rewrites passed nearly all of HAProxy's regression tests. Opus 5.5 finished in 9.5 hours against 12 for Fable 5.1, at 51% lower cost. An early tester audited and fixed a 200,000-line codebase in under three hours. Opus 5 took over 20 hours on the same job and used 2.5x the tokens.&lt;/p&gt;

&lt;p&gt;Customer reports point the same way. GitHub's Mario Rodriguez said Opus 5.5 used among the fewest tokens and steps his team measured across Copilot CLI and VS Code. Box reported that Opus 5.5 used a third of the tokens Opus 5 did, with answers 40% less verbose. Deloitte reported that at its lowest effort setting, Opus 5.5 caught 72% of known bugs in code review, against 56% for Opus 5 at high effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  What changes for builders on Opus 5.5
&lt;/h3&gt;

&lt;p&gt;This release carries API behavior changes that matter more than the benchmarks for production teams.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thinking cannot be disabled.&lt;/strong&gt; Opus 5.5 is no longer available with thinking switched off. Integrations that turned thinking off for latency need to test the new default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preserved thinking.&lt;/strong&gt; Anthropic's anti-distillation safeguard stops API users from editing Claude's prior context to extract its reasoning. It applies to Fable 5.1 and Opus 5.5 for API accounts created on or after August 31, 2026. Anthropic published docs on how to test integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safeguard fallbacks.&lt;/strong&gt; Opus 5.5 ships with safeguards similar to Fable 5.1 for cybersecurity, biology, and distillation. Most cybersecurity tasks reroute to Opus 4.8. Routine bug finding and fixing in your own code still runs on Opus 5.5. Vetted life sciences groups can apply to a verification program for full biology access. Anthropic says an expanded Cyber Verification Program with three access tiers arrives in the coming weeks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watermarking.&lt;/strong&gt; Opus 5.5 includes text watermarking to comply with the EU AI Act.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero data retention&lt;/strong&gt; remains available, as with prior Opus models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fallback behavior deserves attention. If a safeguard intervenes, a different model answers. Teams that audit agent behavior need to log which model served each response, not only which model they requested.&lt;/p&gt;

&lt;p&gt;Anthropic also called Opus 5.5 its first release since CEO Dario Amodei argued that AI progress should be paced so safety keeps ahead of capability. External evaluators including METR tested it before release. Anthropic reports Opus 5.5 scored better than any recent Claude model on nearly every measure of its automated behavioral audit, across nearly 2,000 scenarios. In a new containment test, it tried to cross boundaries about 85% less often than Opus 5. Anthropic also disclosed a limit: the model often suspects it is being evaluated, which makes pre-release testing harder to trust.&lt;/p&gt;

&lt;p&gt;Subscription users get something too. Anthropic raised five-hour usage limits on Pro, Max, Team, and seat-based Enterprise plans. It also added a rate limit reset that users can save and use when they choose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing side by side
&lt;/h3&gt;

&lt;p&gt;Token prices only tell part of the story, so it helps to run one example. Take an agent task that reads 2 million cached input tokens, 200,000 fresh input tokens, and writes 50,000 output tokens. That shape is common for a coding agent that rereads a repository context on each turn.&lt;/p&gt;

&lt;p&gt;On Opus 5, that task costs $1.00 for cache reads, $1.00 for fresh input, and $1.25 for output. The total is $3.25. On Opus 5.5, the same token counts cost $0.40, $0.80, and $1.00, for a total of $2.20. That is a 32% cut from pricing alone, before any savings from the model using fewer tokens. Anthropic's 40% figure for typical workloads combines both effects.&lt;/p&gt;

&lt;p&gt;For OpenAI, the base prices halve across the board. A task that sends 2.2 million input tokens and writes 50,000 output tokens to GPT-5.6 Sol cost $9.80 at list input and output prices. On GPT-6 Sol it costs $4.90 at list prices. Cached input discounts lower both numbers further, so check OpenAI's pricing page for the cached rate before you compare the two vendors head to head.&lt;/p&gt;

&lt;p&gt;The practical point: the cheapest model per token is not always the cheapest model per task. Measure tokens per finished task on your own workload, then multiply.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPT-6 Sol and GPT-6 Luna
&lt;/h3&gt;

&lt;p&gt;OpenAI &lt;a href="https://openai.com/index/introducing-gpt-6-sol-and-luna/" rel="noopener noreferrer"&gt;launched GPT-6 Sol and GPT-6 Luna&lt;/a&gt; the same day. They extend the GPT-6 generation that started with GPT-6 Astra earlier this month. Sol targets complex work like coding. Luna targets high-volume tasks with a clear goal, such as summarizing, extraction, and quick answers. Astra stays OpenAI's top model. The API IDs are &lt;code&gt;gpt-6-sol&lt;/code&gt; and &lt;code&gt;gpt-6-luna&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The pricing story is blunt. OpenAI cut API prices 50% against the GPT-5.6 promotional rates. &lt;a href="https://thenewstack.io/openai-gpt-6-sol-luna-release/" rel="noopener noreferrer"&gt;The New Stack reports&lt;/a&gt; the per-million-token prices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPT-6 Sol:&lt;/strong&gt; $2 input and $10 output, down from $4 and $20 for GPT-5.6 Sol&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-6 Luna:&lt;/strong&gt; $0.10 input and $0.50 output, down from $0.20 and $1.20 for GPT-5.6 Luna&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An OpenAI spokesperson told The New Stack these are the default prices, not a promotion. OpenAI credits better caching and inference for the cut.&lt;/p&gt;

&lt;p&gt;OpenAI's headline claims are vendor-reported. On AutomationBench, a Zapier-built test of business workflows across 47 tools, OpenAI says GPT-6 Sol at xhigh effort beats Claude Opus 5 at max effort at 9% of Opus 5's cost per task. GPT-6 Luna at high effort improves on its predecessor by 5.4 points at 58% lower cost per task. On OpenAI's internal factuality evaluation, built from real conversations where users flagged mistakes, GPT-6 Sol makes about half as many errors as GPT-5.6 Sol. The New Stack notes that on DeepSWE v1.1, Sol at max effort scores 68.8% against 69.9% for Fable 5 at xhigh, at about 20% of the cost.&lt;/p&gt;

&lt;p&gt;OpenAI's post includes a footnote worth reading. It says its Claude Fable 5.1 datapoint understates Fable's real cost because it omits Opus 5 fallbacks, which occurred on about 40% of AutomationBench tasks. So the safeguard fallback design that Anthropic built into its top models now shows up in a competitor's cost comparison. Expect safeguard behavior to become a routine line item in model evaluations.&lt;/p&gt;

&lt;p&gt;GPT-6 Sol and Luna are available in ChatGPT Work and Codex for Plus, Pro, Business, Enterprise, and Edu users. Free and Go users get Luna in the desktop app. Neither model is in regular Chat yet. OpenAI DevDay 2026 runs September 29 in San Francisco.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qwen3.8-Omni-Flash
&lt;/h3&gt;

&lt;p&gt;Alibaba's Qwen team &lt;a href="https://technode.com/2026/09/18/alibabas-qwen-releases-qwen3-8-omni-flash-with-1m-token-context/" rel="noopener noreferrer"&gt;released Qwen3.8-Omni-Flash&lt;/a&gt; on September 18. It is a native omni-modal model that takes text, images, audio, and video as input and returns text. It supports a 1 million token context window. Alibaba reports, as vendor numbers, an average gain of more than 26% across 30 evaluations over Qwen3.5-Omni-Plus.&lt;/p&gt;

&lt;p&gt;API pricing on &lt;a href="https://vercel.com/ai-gateway/models/qwen3.8-omni-flash" rel="noopener noreferrer"&gt;Vercel's AI Gateway listing&lt;/a&gt; is $0.15 input and $0.47 output per million tokens. Alibaba did not release weights at launch. The model targets long-video analysis, meeting summaries, and multimodal tool use. Alibaba also shipped Qwen-MM-Plugins and a Qwen-Live Harness for long-running and real-time workflows.&lt;/p&gt;

&lt;p&gt;For data teams, the interesting part is the input side. One call can take long audio and video plus a million tokens of context. That turns recorded meetings and support calls into queryable text at a price that makes batch processing practical.&lt;/p&gt;

&lt;h3&gt;
  
  
  The week in model context
&lt;/h3&gt;

&lt;p&gt;September has been dense. Anthropic shipped Fable 5.1 and Mythos 5.1 on September 1. Google released Gemini 3.8 Flash on September 2. OpenAI released GPT-6 Astra earlier in the month. This week's releases are not new frontiers so much as the frontier getting cheaper. Opus 5.5 claims Fable-level work at Opus prices. GPT-6 Sol claims Astra-level factuality at half the old Sol price.&lt;/p&gt;

&lt;p&gt;That pattern favors builders who measure cost per completed task. A model that costs more per token but finishes in fewer steps can come out cheaper. Both labs now publish charts with cost per task on one axis. Use those charts as a starting hypothesis, then run your own workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tooling: JetBrains Air Bets on Many Agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  JetBrains Air
&lt;/h3&gt;

&lt;p&gt;JetBrains &lt;a href="https://blog.jetbrains.com/blog/2026/09/22/introducing-jetbrains-air/" rel="noopener noreferrer"&gt;introduced JetBrains Air&lt;/a&gt; on September 22. The company calls it a system of products for agentic software development. It spans JetBrains IDEs, team delivery workflows, and organizational governance. &lt;a href="https://www.unite.ai/jetbrains-introduces-air-an-open-system-for-agentic-development/" rel="noopener noreferrer"&gt;Unite.AI's coverage&lt;/a&gt; notes it brings together six months of public experiments. JetBrains introduced JetBrains Central in March as a control and execution system for agent-driven development, then added a CLI, shared context, cloud agents, automations, governance, and AI cost controls.&lt;/p&gt;

&lt;p&gt;The core bet is multi-vendor. JetBrains writes that no single model, agent, or service will be right for every developer, team, or task. Air works with Claude Agent, Codex, Junie, Copilot, OpenCode, and any agent that speaks the Agent Client Protocol. JetBrains says the IDE still matters. It is bringing the base agentic experience into its IDEs so developers can understand, change, and verify what agents produce.&lt;/p&gt;

&lt;p&gt;The Agent Client Protocol is the piece to watch. ACP standardizes the connection between an editor and an agent's full harness, including planning, tools, model routing, and observability. JetBrains lists agents that speak ACP, including Junie, Gemini CLI, GitHub Copilot, Codex, Cursor, Mistral Vibe, OpenCode, Kimi CLI, Qwen Code, Factory Droid, Cline, and Kiro CLI. Clients include JetBrains IDEs, Zed, and Neovim through a plugin. An ACP Registry lets developers discover and run compatible agents inside JetBrains IDEs. If ACP holds, an editor stops being tied to one agent vendor.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot adds GPT-6 Sol and Luna
&lt;/h3&gt;

&lt;p&gt;GitHub &lt;a href="https://github.blog/changelog/2026-09-22-openais-gpt-6-sol-and-gpt-6-luna-now-available/" rel="noopener noreferrer"&gt;added GPT-6 Sol and GPT-6 Luna to Copilot&lt;/a&gt; on launch day. GitHub describes Sol as a balanced model for interactive and agentic coding. Luna is the lowest-cost option in the GPT-6 family for smaller, faster tasks. Sol is available on Copilot Pro+, Max, Business, and Enterprise. Luna is available on Pro, Pro+, Max, Business, and Enterprise. Both bill under usage-based billing, and rollout is gradual.&lt;/p&gt;

&lt;p&gt;The billing note matters. Usage-based billing means model choice now shows up directly in the invoice. Teams that let every developer default to the most capable model will see it. Teams that route routine work to Luna-class models will see that too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code and agent harnesses
&lt;/h3&gt;

&lt;p&gt;On the Anthropic side, Opus 5.5 fast mode is available in Claude Code at $8 input and $40 output per million tokens, with up to 2.5x speed. Early tester reports focus on long unattended runs. Clio's Sean Heintz described handing Opus 5.5 a task across six repositories and letting it run overnight for over 18 hours. Stripe's Cristian Rivera described one Opus 5.5 session directing a dozen more sessions through a multi-day rebase of 40 stacked pull requests, all of which passed CI. AWS's Deepak Singh said Opus 5.5 is coming to Kiro soon. These are vendor-selected quotes, but they describe a clear shift: from one agent in one chat to one agent coordinating many.&lt;/p&gt;

&lt;p&gt;Anthropic also points to three security layers for long-running coding agents: a classifier that screens every action before it runs, an open-source sandbox that security teams can audit, and code review that flags vulnerabilities before merge. Anthropic says Opus 5.5 ties Fable 5.1 for the lowest prompt injection success rate on a benchmark run by Gray Swan.&lt;/p&gt;

&lt;h3&gt;
  
  
  A routing playbook for this week's releases
&lt;/h3&gt;

&lt;p&gt;With four new models in one week, teams need a simple way to decide what runs where. A few patterns follow from the vendors' own positioning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Long, unattended coding jobs&lt;/strong&gt; fit the top tier of each family. Anthropic positions Opus 5.5 for codebase-wide migrations and audits. OpenAI positions GPT-6 Sol for complex tasks and keeps Astra for the hardest work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-volume extraction and summarization&lt;/strong&gt; fit the low tier. OpenAI built Luna for tasks with a clear goal. At $0.10 per million input tokens, it is cheap enough to run across large document sets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal intake&lt;/strong&gt; fits omni models. Qwen3.8-Omni-Flash takes long audio and video in one call and returns text that downstream models and SQL engines can use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything else&lt;/strong&gt; belongs behind a router. Gateways like Agent Router, covered below, let platform teams swap models without code changes. That keeps the next price cut a config change instead of a migration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI inside open source release processes
&lt;/h3&gt;

&lt;p&gt;A small signal from the Apache mailing lists belongs here. This week, contributors disclosed using Claude, Codex, and GPT 5.6 to verify release candidates for Apache Iceberg, Apache Polaris, and Iceberg C++. One reviewer prompted Claude to check every license in the Iceberg 1.12.0 candidate. It found a bundled cache library with no LICENSE entry, and he voted -1 on that basis. Another used Codex to catch license issues across repeated failed candidates of a Polaris tool.&lt;/p&gt;

&lt;p&gt;Apache Iceberg also merged work on AGENTS.md rules for testing, comments, and AI disclosure. Apache Arrow is debating a &lt;code&gt;needs-author-engagement&lt;/code&gt; label for pull requests where the author does not engage with review. Open source communities are writing the norms for AI-assisted contribution right now, in public, one thread at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards: MCP Gets a Certification and a Conference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The MCPA certification
&lt;/h3&gt;

&lt;p&gt;The Agentic AI Foundation &lt;a href="https://aaif.io/news/agentic-ai-foundation-launches-mcpa-certification" rel="noopener noreferrer"&gt;launched the Model Context Protocol Associate&lt;/a&gt; (MCPA) on September 14. It is the first official MCP certification and the first certification from AAIF. The exam covers five domains: MCP fundamentals, architecture and components, interactions and execution, security and governance, and use cases and ecosystem. It aligns with the MCP 2026-07-28 specification.&lt;/p&gt;

&lt;p&gt;Angie Jones, AAIF's vice president of developer experience, framed it as a shared benchmark for employers. Developers need to understand how agent connections work and how to implement them responsibly, including permissions and trust boundaries. Attendees of the Amsterdam and San Jose conferences get a 20% discount.&lt;/p&gt;

&lt;p&gt;AAIF's announcement also shared adoption numbers. Monthly downloads across MCP's Tier 1 SDKs approach half a billion. Both the TypeScript and Python SDKs have passed 1 billion total downloads. MCP tool calls from ChatGPT users reached 98 times their January level by August. Resend passed one million MCP calls in a single month.&lt;/p&gt;

&lt;h3&gt;
  
  
  AGNTCon + MCPCon Europe
&lt;/h3&gt;

&lt;p&gt;AAIF held &lt;a href="https://events.linuxfoundation.org/agntcon-mcpcon-europe/" rel="noopener noreferrer"&gt;AGNTCon + MCPCon Europe&lt;/a&gt; at RAI Amsterdam on September 17 and 18. The conference merges AGNTCon, on agent architectures, with MCPCon, on the protocol itself. It also absorbs the European content from the former MCP Dev Summit. The keynotes centered on the MCP 2026-07-28 specification and its move to a stateless core.&lt;/p&gt;

&lt;p&gt;That spec, &lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;released July 28&lt;/a&gt;, is still the story. It brought a stateless protocol core, multi round-trip requests, header-based routing, cacheable list results, authorization hardening, and a formal extensions framework. Before it, a client and server had to hold a session open. Now each request carries what it needs. Requests spread across servers behind a plain load balancer, with no shared session store. That makes a remote MCP server an ordinary HTTP workload that platform teams already know how to run.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/development/roadmap" rel="noopener noreferrer"&gt;current MCP roadmap&lt;/a&gt; takes the next step. Maintainers want one transport model. Streamable HTTP becomes the single binding, carried over stdin and stdout for local servers. Today SDKs maintain two transport pipelines, and protocol metadata is duplicated across HTTP headers and message fields. Collapsing that removes a class of bugs and a lot of SDK code.&lt;/p&gt;

&lt;p&gt;The North American edition runs October 22 and 23 in San Jose.&lt;/p&gt;

&lt;h3&gt;
  
  
  The AAIF stack takes shape
&lt;/h3&gt;

&lt;p&gt;AAIF now hosts six projects: MCP, A2A, AGENTS.md, goose, agentgateway, and Agent Router. A2A &lt;a href="https://aaif.io/blog/a2a-joins-aaif" rel="noopener noreferrer"&gt;joined in August&lt;/a&gt; and handles agent-to-agent discovery and delegation. MCP handles agent-to-tool connections. AGENTS.md gives agents a project's rules. Agent Router, formerly Envoy AI Gateway, &lt;a href="https://aaif.io/blog/agent-router-joins-aaif" rel="noopener noreferrer"&gt;joined on September 9&lt;/a&gt; and gives developers one OpenAI-compatible endpoint plus MCP endpoints while platform teams manage providers, credentials, quotas, and failover.&lt;/p&gt;

&lt;p&gt;Put those together with JetBrains' Agent Client Protocol and the shape of the open agent stack is visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instructions:&lt;/strong&gt; AGENTS.md tells an agent how a project works&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor to agent:&lt;/strong&gt; ACP connects an IDE to any agent harness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent to tools and data:&lt;/strong&gt; MCP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent to agent:&lt;/strong&gt; A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traffic and policy:&lt;/strong&gt; agentgateway and Agent Router&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each layer has an open spec and a neutral home or an open protocol. That is good news for anyone who wants to avoid building on one vendor's closed stack.&lt;/p&gt;

&lt;p&gt;A2A deserves a closer look now that it sits beside MCP. The protocol lets agents built on different frameworks discover each other, authenticate, and hand off tasks. An agent publishes an Agent Card that describes what it can do and how to reach it. A calling agent sends a task over JSON-RPC 2.0 on HTTPS, and the task moves through a defined lifecycle. Version 1.0, released in March, added cryptographically signed Agent Cards so a caller can verify the card came from the domain it claims. AAIF describes A2A as supported by more than 150 organizations. The move into AAIF changed governance, not the spec. Same site, same SDKs, same technical steering committee.&lt;/p&gt;

&lt;p&gt;Agent Router shows the gateway layer maturing. Its &lt;a href="https://aaif.io/blog/agent-router-powerful-traffic-handling-for-agent-builders" rel="noopener noreferrer"&gt;project post&lt;/a&gt; shows a one-command local start and a single environment variable change to point an existing OpenAI client at the gateway. MCP clients connect to the gateway's MCP endpoint, and the gateway accepts the same &lt;code&gt;mcpServers&lt;/code&gt; file that Claude Desktop, Cursor, and VS Code already use. AAIF reports eleven public adopters including Bloomberg, Tencent Cloud, and Nutanix, and nine maintainer seats split across Bloomberg, Nutanix, AMD, Tetrate, and Netflix with no majority holder. Version 1.0 shipped in June with a 1.x compatibility commitment.&lt;/p&gt;

&lt;p&gt;Gateways matter for the model news above. When two labs cut prices on the same day, the team with a gateway changes a routing rule. The team with hard-coded provider calls opens a ticket.&lt;/p&gt;

&lt;h3&gt;
  
  
  The data layer needs standards too
&lt;/h3&gt;

&lt;p&gt;Agents need consistent business meaning, not just tool access. Apache Ossie, an incubating project for open semantic interchange, this week proposed a standard REST API for producing, consuming, and orchestrating semantic models. The proposal names data catalogs such as Apache Polaris as implementers and query engines as clients. Qlik said it has started building an Ossie-native REST API and suggested a dedicated media type, &lt;code&gt;application/vnd.ossie+yaml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is the missing piece between MCP and the data. MCP lets an agent call a tool. A shared semantic model tells the agent what "revenue" or "active customer" means, no matter which engine answers the query. An open REST API for those models means catalogs and engines serve the same definitions to every agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure: Racks, Roadmaps, and Cheaper Serving
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AMD crosses $1 trillion on rack-scale systems
&lt;/h3&gt;

&lt;p&gt;AMD &lt;a href="https://www.fool.com/investing/2026/09/22/amd-just-joined-the-1-trillion-club-heres-why-investors-are-betting-big-on-the-chipmaker/" rel="noopener noreferrer"&gt;crossed $1 trillion in market value&lt;/a&gt; on September 21. The Motley Fool notes AMD joins Nvidia, Broadcom, and Micron in that club. Shares rose 23% in the week and are up 187% for the year.&lt;/p&gt;

&lt;p&gt;The hardware story behind the stock is Helios, AMD's rack-scale system. Each Helios rack runs 72 Instinct accelerators and 18 EPYC CPUs. &lt;a href="https://thetechportal.com/2026/09/21/amd-1-trillion-market-capitalisation-stock-price" rel="noopener noreferrer"&gt;The Tech Portal&lt;/a&gt; reports the platform combines MI400 and MI450 series GPUs, EPYC Venice CPUs, and Pensando networking. It reports that AMD's data center segment hit $6.72 billion in Q2 revenue, up 107% year over year. Anthropic has committed to up to 2 gigawatts of MI450 GPUs in Helios racks. Meta, OpenAI, and Microsoft Azure are also Helios customers.&lt;/p&gt;

&lt;p&gt;Market coverage tied part of Monday's rally to Meta's Muse personal AI agent reaching the top of the U.S. App Store. The argument is that agents that run constantly need CPUs as well as GPUs. Tool calls, retrieval, orchestration, and code execution all run on general-purpose cores. An agent that calls ten tools per task spends a lot of time outside the GPU. That favors vendors who sell both halves of the rack.&lt;/p&gt;

&lt;p&gt;For infrastructure buyers, the lesson is about the unit of purchase. The market now prices accelerators, CPUs, networking, and software as one system. Nvidia has sold that way for years with its rack-scale platforms. AMD now does too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Huawei pulls its Ascend roadmap forward
&lt;/h3&gt;

&lt;p&gt;At Huawei Connect 2026 in Shanghai, Huawei &lt;a href="https://www.trendforce.com/news/2026/09/17/news-huawei-speeds-up-ai-chip-roadmap-reportedly-pulls-ascend-960dt-forward-three-quarters-to-1q27/" rel="noopener noreferrer"&gt;accelerated its AI chip roadmap&lt;/a&gt;, according to TrendForce. Rotating Chairman David Wang said the Ascend 960DT is running ahead of schedule and is now expected in the first quarter of 2027, three quarters earlier than planned. The Ascend 960PR follows in the third quarter of 2027. Huawei committed to one generation per year, with the Ascend 970 in 2028 and the Ascend 980 in 2029.&lt;/p&gt;

&lt;p&gt;The performance claims are Huawei's own and lack independent validation so far. The cadence is the news. China's domestic accelerator market is building on its own roadmap, with its own chips and its own number formats. Model builders who serve both markets will tune for more than one hardware target.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serving got cheaper, and the labs said why
&lt;/h3&gt;

&lt;p&gt;Both frontier launches this week included an infrastructure claim. OpenAI said improvements in caching and inference let it serve GPT-6 Sol and Luna at lower cost. Anthropic said Opus 5.5 requires less compute to serve than Opus 5, and that its pricing reflects that. Anthropic cut cache read prices 60%, the largest single cut in its table.&lt;/p&gt;

&lt;p&gt;Caching is the quiet infrastructure story of 2026. Agents resend long prompts on every turn: system instructions, tool definitions, and conversation history. Serving that repeated prefix from cache instead of recomputing it saves memory bandwidth and compute. When a lab cuts the cache read price, it is passing along a real serving saving. It also rewards agent designs that keep a stable prompt prefix.&lt;/p&gt;

&lt;h3&gt;
  
  
  File formats for AI data
&lt;/h3&gt;

&lt;p&gt;Storage formats are infrastructure too, and Apache Parquet had a big week. The Parquet project &lt;a href="https://parquet.apache.org/blog/2026/09/22/alp-adaptive-lossless-floating-point-encoding-in-apache-parquet/" rel="noopener noreferrer"&gt;published its ALP blog post&lt;/a&gt; on September 22, after the 2.14 format release added ALP and a FILE type. ALP is an adaptive lossless encoding for floating-point numbers, first published at SIGMOD 2024 by researchers at CWI. Arrow Rust 60.0.0 became the first Parquet implementation to ship ALP support.&lt;/p&gt;

&lt;p&gt;Floating-point columns are everywhere in AI workloads: sensor readings, prices, model scores, and embeddings. Better float compression means smaller files and faster scans for those columns.&lt;/p&gt;

&lt;p&gt;The Parquet community also opened review on a VECTOR logical type for embeddings and a Modular Footer that lets readers load only the metadata they need. The vector debate is live. One side wants a narrow type built for embeddings, with rules like no NaN values. The other wants a general fixed-size list type that serves tensors too. Whichever side wins, embeddings are on track to become a first-class citizen in the most widely used analytics file format.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Layer: Where Agents Meet the Lakehouse
&lt;/h2&gt;

&lt;p&gt;Cheaper models and stateless MCP make one problem more urgent: agents need safe, consistent access to real data. Three threads from the Apache mailing lists this week show how the open lakehouse is getting ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credentials that fail loudly.&lt;/strong&gt; Apache Polaris decided that when a client asks for delegated storage access and the catalog cannot provide it, the request fails with a clear error instead of returning a table with no credentials. Agents are the clients that benefit most. An agent that silently receives a table with no credentials often retries, guesses, or falls back to broader permissions. A clear error tells the agent, and the human reviewing its logs, exactly what went wrong. The Polaris team also asked the Apache Iceberg community to clarify the REST spec so every catalog behaves the same way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lists that never lie.&lt;/strong&gt; Polaris also decided that when a catalog caps list sizes, an unpaged request that overflows the cap fails instead of returning a partial list. An agent that lists tables in a namespace and gets half of them has no way to know the list is short. It builds a wrong answer with full confidence. Failing closed protects the agent from its own trust in the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files next to rows.&lt;/strong&gt; Apache Parquet 2.14 added a FILE type, Apache Arrow is defining a matching extension type, and Apache Iceberg is working out how a governed REST catalog delegates access to those files. Pair that with an omni model like Qwen3.8-Omni-Flash and the pattern is clear. Store references to audio, video, and documents next to structured rows, let the catalog govern who reads them, and let a multimodal model turn them into text that SQL engines can query.&lt;/p&gt;

&lt;p&gt;The open agent stack and the open lakehouse stack are converging on the same principles: neutral governance, published specs, and clients that can trust what servers tell them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practitioner Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Re-price your agent workloads.&lt;/strong&gt; Opus 5.5 cut cache reads 60% and GPT-6 Sol cut token prices 50%. Rerun your cost models on real tasks, since both labs claim fewer tokens per task on top of lower prices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log the serving model.&lt;/strong&gt; Opus 5.5 and Fable 5.1 fall back to other models when safeguards trigger. Record which model answered each call, not only which you requested.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the thinking default.&lt;/strong&gt; Opus 5.5 does not allow thinking to be switched off. Check latency-sensitive paths before you upgrade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for multi-vendor agents.&lt;/strong&gt; JetBrains Air, ACP, and usage-based Copilot billing all assume you run more than one agent and more than one model. Design routing and cost controls with that in mind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn stateless MCP.&lt;/strong&gt; The 2026-07-28 spec and the new MCPA certification both point to MCP servers as ordinary HTTP services. Build them that way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the data layer.&lt;/strong&gt; Agents need governed tables and shared semantic definitions as much as they need tools. Open formats like Apache Iceberg and Apache Parquet, open catalogs like Apache Polaris, and emerging semantic standards like Apache Ossie give agents consistent data without lock-in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to Watch Next Week
&lt;/h2&gt;

&lt;p&gt;OpenAI DevDay on September 29 will show whether GPT-6 Sol and Luna reach regular ChatGPT and what developer tools come with them. Anthropic says Sonnet 5.5 and Haiku 5.5 arrive in the coming weeks. On the standards side, watch for post-conference MCP proposals from Amsterdam and early sessions for the San Jose AGNTCon in October. On hardware, watch for Helios deployment updates as AMD heads toward its early November earnings report.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on agentic AI, MCP, and the open data stack that agents run on, my books cover it end to end. Find the full catalog at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Apache Data Lakehouse Weekly: September 15 to 23, 2026</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Wed, 23 Sep 2026 21:14:00 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-15-to-23-2026-41mi</link>
      <guid>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-15-to-23-2026-41mi</guid>
      <description>&lt;p&gt;Release managers ran the show this week, and license files kept tripping them. Iceberg 1.12.0 went to a second release candidate after reviewers found bundled web assets without matching license entries. Polaris 1.8.0 failed two votes over a NOTICE gap and a wrong file header. The Polaris catalog migrator reached its fourth candidate for the same reason. Behind that release grind sat the design work that shapes next year. Parquet opened review on a Modular Footer and a vector type. Iceberg moved its materialized view spec toward a vote. DataFusion took ownership of the Iceberg Rust integration. Apache Ossie pushed toward its first source release and proposed a REST API that catalogs like Polaris can implement.&lt;/p&gt;

&lt;p&gt;The thread that ties the week together is the contract between client and server. Polaris, Iceberg, and Parquet each spent real time on one question: what should a server or reader do when it cannot deliver what the client asked for? Every project landed on the same answer. Fail loudly, and write the behavior down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Iceberg
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.12.0 heads into RC1 after a license cleanup
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian &lt;a href="https://lists.apache.org/thread/c5yxp85dp0ottpq10nlbvrsfd51yjfd3" rel="noopener noreferrer"&gt;opened the 1.12.0 release discussion&lt;/a&gt; with the release branch in good shape and a key fix already merged. Alex Reid asked to include a Kafka Connect fix that stops the connector from committing already committed files during certain rebalances. That PR had already merged, so it ships in 1.12. Reid also asked about the REST client side of "referenced-by," a spec field added last year. Salian deferred that work to the 1.13.0 milestone because it does not block the release.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/7qtxrysl1w5sjs7o74y31snt0jrkf5qb" rel="noopener noreferrer"&gt;RC0 vote&lt;/a&gt; drew one of the most thorough verification rounds the project has seen in a while. Yuya Ebihara confirmed Trino's CI passed against the staged artifacts. His tests cover HMS, Glue, JDBC on PostgreSQL, and REST catalogs including Polaris, Unity, S3 Tables, and Tabular, plus Nessie and Snowflake. He also flagged a caveat he raised months ago. Version 1.12.0 removes the old helper logic for reading and writing partition statistics. The new logic depends on the Hadoop-based Parquet client, and some downstream projects forbid that dependency.&lt;/p&gt;

&lt;p&gt;Manu Zhang reported 10,991 tests passing across the api, core, and parquet suites with zero failures. Anoop Johnson rebuilt the source tarball from the tag and confirmed it matched, apart from two generated version files. Xin Huang compared all 7,083 common files between the tarball and the commit and found them identical.&lt;/p&gt;

&lt;p&gt;Two reviewers found the problem that sank RC0. Xuanwo noticed a Bootstrap stylesheet in the docs site assets. It kept its copyright line, but the package lacked the MIT permission notice and the root LICENSE did not account for it. Gianluca Graziadei found a Lottie JavaScript file in the same folder with the same gap. Neither called it a blocker, since both files have shipped since 1.9.0. Salian filed an issue, the fix merged, and he cut a new candidate.&lt;/p&gt;

&lt;h3&gt;
  
  
  A geospatial behavior change stays in
&lt;/h3&gt;

&lt;p&gt;Steven Wu used the vote thread to flag a behavior change most users will never notice until a string comparison breaks. A PR changed &lt;code&gt;GeometryType&lt;/code&gt; and &lt;code&gt;GeographyType&lt;/code&gt; so &lt;code&gt;toString()&lt;/code&gt; always writes resolved defaults. A plain &lt;code&gt;geometry&lt;/code&gt; now prints as &lt;code&gt;geometry(OGC:CRS84)&lt;/code&gt;, and &lt;code&gt;geography&lt;/code&gt; prints as &lt;code&gt;geography(OGC:CRS84, spherical)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Xin Huang, who wrote the original change, explained the goal. The PR persists resolved CRS and algorithm values in metadata even when they match the defaults. The &lt;code&gt;toString()&lt;/code&gt; change was a side effect he had not recognized as a behavior change. He had a fallback PR ready to revert it.&lt;/p&gt;

&lt;p&gt;Szehon Ho argued for keeping the new output. Two equal geography types printed differently depending on whether a user set the default explicitly, which looked like a bug. The new form also matches the canonical serialization in Appendix C of the spec. Huaxin Gao added a practical reason from her UDF work. Function definition IDs are built from parameter type strings, so two equal types that print differently look like two different overloads. Old metadata still loads, because &lt;code&gt;geometry&lt;/code&gt; and &lt;code&gt;geometry(OGC:CRS84)&lt;/code&gt; parse to the same type. The community agreed to keep the change and list it under "Behavior Change" in the release notes. The fallback PR closed.&lt;/p&gt;

&lt;h3&gt;
  
  
  RC1 and a Caffeine surprise
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/ptq6gyf6gcd4xwwkn2q3yrt9lxr7ojdk" rel="noopener noreferrer"&gt;RC1 vote&lt;/a&gt; opened on September 22. Renjie Liu cast a binding +1 after checksum, signature, license, and test runs. Xuanwo reported 10,470 passing tests across the common, API, core, and data modules. Szehon Ho reported 8,400 core tests passing with zero failures and a Spark test on Spark 4.2 built from verified source.&lt;/p&gt;

&lt;p&gt;Graziadei raised a pre-existing bug. Reading variant columns throws &lt;code&gt;NoSuchMethodError&lt;/code&gt; when commons-lang3 older than 3.13 sits on the classpath, because iceberg-parquet uses a method without declaring the dependency. The bug exists in 1.11.0 too, so Salian plans to patch it on the release branches instead of blocking. Szehon Ho added another pre-existing fix to the wish list if a new candidate appears.&lt;/p&gt;

&lt;p&gt;Then Kurtis Wright cast a non-binding -1. He found that &lt;code&gt;iceberg-gcp-bundle-1.12.0.jar&lt;/code&gt; bundles the Caffeine cache library with no entry in its LICENSE file. He disclosed that he found it by prompting Claude to validate every license in the candidate. That disclosure matters. It shows AI-assisted review catching the class of issue that has failed releases across three projects this month. Watch this thread for whether RC1 survives or a third candidate follows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iceberg C++ 0.4.0 lands a big v3 update
&lt;/h3&gt;

&lt;p&gt;Manu Zhang &lt;a href="https://lists.apache.org/thread/yfjj2p96w4s0fd7067fkr5dgknwp62d1" rel="noopener noreferrer"&gt;proposed Iceberg C++ 0.4.0&lt;/a&gt; after 174 commits since 0.3.0 shipped in June. The list is long. It covers Iceberg v3 types including &lt;code&gt;timestamp_ns&lt;/code&gt;, &lt;code&gt;timestamptz_ns&lt;/code&gt;, &lt;code&gt;unknown&lt;/code&gt;, geometry, and geography, plus column defaults, binary deletion vectors, and row lineage. It adds table operations such as MergeAppend, DeleteFiles, RowDelta, OverwriteFiles, RewriteFiles, and ReplacePartitions. It brings parallel manifest reads and writes, lazy scan planning, an LRU cache, and commit and scan metrics. On the catalog side it adds REST SigV4, OAuth2 token exchange, vended credentials, an early Hive Metastore client, and ResolvingFileIO.&lt;/p&gt;

&lt;p&gt;Gang Wu backed the release and noted that variant support waits on an Arrow C++ PR, so it moves to 0.5.0. Junwang Zhao asked to hold for late October to include CherryPickOperation. Zhang pushed back with a clear release philosophy. The project will not reach "feature complete" soon, so smaller and faster releases get users feedback earlier. Zhao agreed after updating the v3 roadmap issue, which showed most planned tasks done.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/qqrg1l5qntf2m8h11gvopyvojrffgbw3" rel="noopener noreferrer"&gt;0.4.0 RC0 vote&lt;/a&gt; moved fast. Gang Wu and Renjie Liu cast binding +1 votes. Liu built on Ubuntu 26.04 with GCC 15.2 and reported 4,152 passing tests across 19 release test executables. Raúl Cumplido verified on Debian 14. Xin Huang verified on macOS arm64 and disclosed he used GPT 5.6 to help.&lt;/p&gt;

&lt;p&gt;Fittingly, the week also brought a &lt;a href="https://lists.apache.org/thread/gtfg34k7w2m7po0ngh62x9von5hmjw4h" rel="noopener noreferrer"&gt;PMC seat for Gang Wu&lt;/a&gt;. Fokko Driesprong announced it and credited Wu as instrumental in the inception and growth of Iceberg C++. More than 35 community members replied with congratulations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iceberg Rust 0.11.0 fails RC2 over encryption
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/xt2rg18qwfqj4t3d6dkkwcnfrcvrrqms" rel="noopener noreferrer"&gt;Rust 0.11.0 RC2 vote&lt;/a&gt; failed on a real bug. Alexander Bailey tested the candidate and found he had not implemented the tamper-proofing checks for the new encryption work. Files written by Rust were unreadable in Java. He posted a fix and voted -1. Danny Jones agreed to fail the vote because encryption is one of the headline features of the release, and asked for review on the fix before RC3.&lt;/p&gt;

&lt;p&gt;A second Rust issue surfaced in a &lt;a href="https://lists.apache.org/thread/k72c2y72w2j00xph2mn2bnsbvcbj43o4" rel="noopener noreferrer"&gt;license thread on pyiceberg-core&lt;/a&gt;. Jones noticed that the Python wheels compile Rust dependencies into the extension but do not reproduce their copyright notices. Ryan Blue confirmed that distributing third-party code in compiled artifacts means LICENSE and NOTICE must reflect it. Kevin Liu explained the root cause. The iceberg-rust source release bundles nothing, but the wheels do. Shawn Chang pointed to the Apache Paimon Rust bindings, which generate a third-party license report per wheel, as a model. The group agreed to fix this before the next pyiceberg-core release.&lt;/p&gt;

&lt;h3&gt;
  
  
  The DataFusion integration moves out
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb &lt;a href="https://lists.apache.org/thread/9t4l1kp4zjk7cjynd81nlsv2rttjkwcl" rel="noopener noreferrer"&gt;reported&lt;/a&gt; that both vote threads passed unanimously. The DataFusion integration for Iceberg Rust now lives in a new &lt;code&gt;apache/datafusion-iceberg&lt;/code&gt; repository owned by the DataFusion project. Kevin Liu thanked Matt for starting the conversation and said he hopes the move improves integration for both projects. The DataFusion section below covers the first week in the new home.&lt;/p&gt;

&lt;h3&gt;
  
  
  Materialized views approach a vote
&lt;/h3&gt;

&lt;p&gt;Jan Kaul posted an &lt;a href="https://lists.apache.org/thread/xhrl87d1lnqhm0d8n6w3dzjb1k9hkqcj" rel="noopener noreferrer"&gt;update on the materialized view spec&lt;/a&gt;. Marius Grama and Walaa Eldin Moustafa built proof-of-concept implementations in Spark and Trino. Kaul says the POCs prove the spec is sound. Moustafa laid out the plan. The community sync on October 1 hosts a final discussion, then the spec moves to a vote.&lt;/p&gt;

&lt;p&gt;One open question remains. Should materialized views get their own format version field? Steven Wu argued no. A materialized view combines the view and table specs, so a breaking change bumps one or both of those versions. A separate version inside the view spec looks odd.&lt;/p&gt;

&lt;p&gt;Moustafa followed with a thread on &lt;a href="https://lists.apache.org/thread/crc2v9hwgxjfgbdktm3nvbo6cxysp7d0" rel="noopener noreferrer"&gt;Spark routing for materialized views&lt;/a&gt;. The implementation splits in two. Iceberg core owns the metadata, records source states, and runs basic freshness checks. The Spark side reads the storage table when fresh and evaluates the view query when stale. He chose DSv2 catalog-based routing and updated it for the new &lt;code&gt;loadRelation&lt;/code&gt; API in Spark 4.2.&lt;/p&gt;

&lt;p&gt;This matters for anyone building semantic layers or acceleration on Iceberg. A standard materialized view definition means one engine can create a precomputed result and another engine can safely use it. Today each engine invents its own approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access delegation for the FILE type
&lt;/h3&gt;

&lt;p&gt;Sung Yun's thread on &lt;a href="https://lists.apache.org/thread/2qxrhphdgcf88464rwl09cd9o3b41v64" rel="noopener noreferrer"&gt;access delegation for the FILE type&lt;/a&gt; connects two efforts. Prashant Singh explained that he and William opened a spec proposal three months ago for file-level access through pre-signed URLs. An Azure proof of concept showed the limits of remote signing across cloud providers.&lt;/p&gt;

&lt;p&gt;Daniel Weeks drew a useful line between two problems. Pre-signed URLs returned by the plan and tasks endpoints arrive already signed, so file IO only detects and executes them. Remote pre-signing routes a storage-native path through the catalog for signing before a stream opens. Weeks wants remote pre-signing to become a viable alternative to remote signing, mostly to address Azure's limits.&lt;/p&gt;

&lt;p&gt;Singh raised a hard operational problem. Scan planning and execution happen in different phases. A Spark driver plans, and executors read later. A URL can expire before an executor uses it. So how do clients refresh vended URLs? Yun published two documents to frame the use case: a &lt;a href="https://s.apache.org/irc-file-type-use-case" rel="noopener noreferrer"&gt;FILE type use case analysis&lt;/a&gt; for governed tables, and a batch signing proposal. The FILE type connects to Parquet's 2.14 release and a new Arrow extension type, covered below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption keys get a rethink for V4
&lt;/h3&gt;

&lt;p&gt;Gábor Kaszab opened a &lt;a href="https://lists.apache.org/thread/38rkthkr1fg0s86493fjq755cnl3y90s" rel="noopener noreferrer"&gt;discussion on reusable encryption keys&lt;/a&gt;. Today the &lt;code&gt;encryption-keys&lt;/code&gt; list in table metadata holds both data encryption keys for manifest lists and the key encryption keys that wrap them. Kaszab wants to extend encryption to statistics files and V4 root manifests, and he questions some assumptions in the current design.&lt;/p&gt;

&lt;p&gt;Gidon Gershinsky agreed that in V4, data key metadata belongs in per-file structures, such as snapshots for manifest lists. That makes cleanup easier and retires the &lt;code&gt;key-id&lt;/code&gt; field. Key encryption keys stay in the shared table list. Gershinsky warned that reusing a data key across files requires careful handling to avoid breaking AES-GCM, so the practical answer is a fresh random key per file. Xander Bailey wants that rule written into the spec. He also asked the group to keep one common key metadata structure and one wrap and unwrap model, so implementations share code across V3 and V4.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smaller threads worth your time
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian &lt;a href="https://lists.apache.org/thread/xjvwzfdwdb1gnq62whq3y5n11998vb4n" rel="noopener noreferrer"&gt;announced the iceberg-verification repository&lt;/a&gt;. It holds shared conformance fixtures for all Iceberg implementations. Early work covers type fixtures with JSON Schema validation, golden reference tables, and read conformance. Andrei Tserakhau confirmed writer conformance comes later and opened an epic issue to track the full scope. With implementations in Java, Python, Rust, Go, and C++, shared fixtures are how the community keeps them honest.&lt;/p&gt;

&lt;p&gt;Andrei Tserakhau also split a decision out of the collation work into its own &lt;a href="https://lists.apache.org/thread/4p8345gb8jo03l27qh86kbbpvolwc09j" rel="noopener noreferrer"&gt;thread on collation versions&lt;/a&gt;. Collated columns store collation-aware min and max bounds so they stay prunable. ICU ordering changes across versions, so each bound carries the version it was computed under. A reader uses a bound only when it can reproduce that version. Otherwise it scans the file. The open question is whether one file carries bounds for several collation versions. The answer fixes the on-disk metadata layout, so Tserakhau wants it locked.&lt;/p&gt;

&lt;p&gt;Alexander Bailey continued the &lt;a href="https://lists.apache.org/thread/xf30qn3vs9r3qzvw5hclcyt91673nf8h" rel="noopener noreferrer"&gt;gc.enabled semantics thread&lt;/a&gt;. He asked Dan Weeks whether catalog enforcement means vending credentials without delete permissions. Rejecting a snapshot update alone does not stop a client that holds storage delete rights. His narrower PR allows snapshot expiration with &lt;code&gt;gc.enabled=false&lt;/code&gt; only when cleanup is set to NONE.&lt;/p&gt;

&lt;p&gt;Kurtis Wright backed a proposal to &lt;a href="https://lists.apache.org/thread/kh8yhz9tjvytthnnqs3l9st3kpvnppnb" rel="noopener noreferrer"&gt;standardize the User-Agent header&lt;/a&gt; for REST clients and asked where vendor information belongs in the string. A user named dzeri96 raised a &lt;a href="https://lists.apache.org/thread/l1pwkl8vmj4fh0v1ld1ozlr8mhp435y7" rel="noopener noreferrer"&gt;Spark defaultDatabase issue&lt;/a&gt; about a hard-coded default database name in the SessionCatalog.&lt;/p&gt;

&lt;p&gt;Péter Váry shared notes from the &lt;a href="https://lists.apache.org/thread/oo2jr61my4qv8163hqqkrrtr9dyk4k7g" rel="noopener noreferrer"&gt;index support sync&lt;/a&gt;. Puffin reduces file-open overhead. Bloom filter scaling problems look like rate limiting. The group decided to prioritize scalar indexes before other index types. Váry also posted &lt;a href="https://lists.apache.org/thread/mxjkhmwp29cgc12hr86zcsmgzhb8ok0l" rel="noopener noreferrer"&gt;three AGENTS.md PRs&lt;/a&gt; that cover testing requirements, comment and javadoc rules, and AI disclosure for agent-written contributions.&lt;/p&gt;

&lt;p&gt;Ryan Blue shared the &lt;a href="https://lists.apache.org/thread/xyq8m7thmbt602g8hzz19oq8csp9gfrr" rel="noopener noreferrer"&gt;September board report&lt;/a&gt; with a new format. It summarizes shipped releases and spec changes instead of sync highlights, so it reports what users can use today. Kevin Liu suggested adding the new blog site and the LICENSE and NOTICE revamp. Neelesh Salian suggested Gang Wu's PMC seat and the verification repository.&lt;/p&gt;

&lt;p&gt;On the community calendar, Kevin Liu &lt;a href="https://lists.apache.org/thread/xq4hc54s4q532jqoyvtlf0hgk3y07t5z" rel="noopener noreferrer"&gt;announced the first virtual meetup&lt;/a&gt; on GSoC projects and commutative compaction. In-person meetups are set for the &lt;a href="https://lists.apache.org/thread/zy5co6xj839p68jd88rw7o6d1ww6309p" rel="noopener noreferrer"&gt;Bay Area on September 23&lt;/a&gt;, &lt;a href="https://lists.apache.org/thread/fy7o4kyvp2fjotxrpsf4y8nmotyfp6o9" rel="noopener noreferrer"&gt;Seattle on October 21&lt;/a&gt;, &lt;a href="https://lists.apache.org/thread/c350wkfbo7wj9qczlnnsghr8cjyhjlqv" rel="noopener noreferrer"&gt;Copenhagen on November 5&lt;/a&gt;, and &lt;a href="https://lists.apache.org/thread/pq1z3vk09kkqs87j522ksg67lj66bkwb" rel="noopener noreferrer"&gt;Berlin on November 18&lt;/a&gt;. And a high school student in India &lt;a href="https://lists.apache.org/thread/z2kc7n4pkjobcyrhbptgrbxbvkhd5pqv" rel="noopener noreferrer"&gt;asked for Iceberg swag&lt;/a&gt; because he tells his classmates about the table format. He sent the same note to Arrow. That is the kind of reach no marketing budget buys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Polaris
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.8.0 fails twice on license details
&lt;/h3&gt;

&lt;p&gt;Jean-Baptiste Onofré put &lt;a href="https://lists.apache.org/thread/o0dbkrt83krfkmq1zj1hoxzcs0nvkln3" rel="noopener noreferrer"&gt;Polaris 1.8.0 RC0&lt;/a&gt; up for a vote on September 17. Dmitri Bourlatchkov voted -1 the same day. Iceberg jars carry a NOTICE that references Kite, and commons-math3 references Orekit. The Polaris bundle NOTICE did not propagate either one. Onofré &lt;a href="https://lists.apache.org/thread/zsz0jq17wybbp3hw2oy030lv4zg81pgn" rel="noopener noreferrer"&gt;cancelled RC0&lt;/a&gt; and suspected the gap appeared during an earlier Iceberg version bump.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lists.apache.org/thread/0owy3xfv1m4womx0xlfnzcpshrft62s3" rel="noopener noreferrer"&gt;RC1&lt;/a&gt; passed the automated checks, the license report, and smoke tests on the binary distribution, source distribution, and Helm chart. Alex Dutra still voted -1. A test file added in a recent PR carried a Dremio license header, but Dremio did not contribute that file, so it needs the default ASF header. Onofré &lt;a href="https://lists.apache.org/thread/9kow0cdomvg9pg9sbrmsh8nvkd8jsgtl" rel="noopener noreferrer"&gt;cancelled RC1&lt;/a&gt; and promised another full pass over LICENSE and NOTICE before RC2.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/gtl7f81r316c6v2n24hgdw8d97zv7pbv" rel="noopener noreferrer"&gt;Polaris Iceberg Catalog Migrator 1.1.0&lt;/a&gt; followed the same path. Robert Stupp gave RC2 a binding +1 and noted the rebuilt CLI jar was byte-identical to the staged one. Bourlatchkov then found bundled files under the Mozilla Public License that the bundle LICENSE did not mention. Ajantha Bhat noted the same gaps existed in 1.0.0. He also ran Codex against the findings from each failed candidate to catch similar problems. &lt;a href="https://lists.apache.org/thread/o4b44mrkgbd6p1xjq5h6j6m70sb8ws7k" rel="noopener noreferrer"&gt;RC3&lt;/a&gt; opened on September 23.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pagination: one flag flips, one fails closed
&lt;/h3&gt;

&lt;p&gt;Two pagination threads resolved in a way that respects the Iceberg REST catalog spec. Yufei Gu &lt;a href="https://lists.apache.org/thread/9ofwv04lj2fklksqsfg9y3r4c5rlhvrc" rel="noopener noreferrer"&gt;proposed enabling list pagination by default&lt;/a&gt;. Today &lt;code&gt;LIST_PAGINATION_ENABLED&lt;/code&gt; defaults to false, so clients cannot use pagination without server setup. Onofré pointed out that the max page size defaults to unlimited, so flipping the flag breaks no client that omits page parameters. Ayush Saxena, Yong Zheng, Nándor Kollár, and Bourlatchkov all agreed. Zheng opened the PR. The flag stays as an escape hatch for a couple of releases.&lt;/p&gt;

&lt;p&gt;The harder thread, on &lt;a href="https://lists.apache.org/thread/k81ptyktdbdf8gynncgk3o04mqt85zyk" rel="noopener noreferrer"&gt;separating page-size limits from forced pagination&lt;/a&gt;, started with a spec problem Gu caught. When the max page size is set, the server returns a partial list plus a continuation token to a client that never asked for pagination. That violates the REST spec. Saxena explained the original intent. Large catalogs face memory pressure and denial-of-service risk from unbounded list calls, and a cap that exempts unpaged requests bounds nothing.&lt;/p&gt;

&lt;p&gt;Gu asked for evidence and posted payload math. A namespace with 100,000 tables of 100-character names produces about 13 MiB of uncompressed JSON. That is not an obvious crisis. Prithvi S named the real danger: a 200 response with a continuation token on a request that never asked for paging is a silently incomplete list. He cited PyIceberg 0.10 and 0.11, which make one unparameterized list call and return it.&lt;/p&gt;

&lt;p&gt;Bourlatchkov proposed the fix everyone accepted. When a maximum is configured, paginated requests get capped. Unpaged requests that fit get the full list. Unpaged requests that overflow the cap fail with an error. Vignesh A added two details. Probe at max plus one so the server does not load everything into memory before throwing, and make the error message clear. Saxena opened the PR. Gu signed off on September 21.&lt;/p&gt;

&lt;p&gt;Zheng also added pagination to the &lt;a href="https://lists.apache.org/thread/m1fch7pzdck8hyglowsswo230919nfc2" rel="noopener noreferrer"&gt;generic table API&lt;/a&gt; and the &lt;a href="https://lists.apache.org/thread/ls2o3doowndbqm83p71qd0qo1z2sdpzr" rel="noopener noreferrer"&gt;policy API&lt;/a&gt;, and proposed &lt;a href="https://lists.apache.org/thread/n9zjzctqt3lf3qq4h19ndzx6blp60mrk" rel="noopener noreferrer"&gt;table and view management in the CLI&lt;/a&gt;. Bourlatchkov closed out the &lt;a href="https://lists.apache.org/thread/9cysvxsb5wxfkdhcgklcop1ppvkog2v2" rel="noopener noreferrer"&gt;page size maximum discussion&lt;/a&gt; with a merge plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  When access delegation cannot be satisfied
&lt;/h3&gt;

&lt;p&gt;Youngrae Kim brought a &lt;a href="https://lists.apache.org/thread/9oyv4v0vk3t8stv9832npl8t0yyp4j8r" rel="noopener noreferrer"&gt;spec alignment question&lt;/a&gt; to the list. When a client sends &lt;code&gt;X-Iceberg-Access-Delegation&lt;/code&gt; and Polaris cannot satisfy it, Polaris fails with HTTP 400. Examples include vended credentials against an S3-compatible store without STS, or remote signing on a server that does not implement it. The Iceberg REST spec reads as if the server can instead return the table without delegated access.&lt;/p&gt;

&lt;p&gt;Saxena corrected one premise. The spec does include a signal: an empty &lt;code&gt;storage-credentials&lt;/code&gt; field on a 200 response, which clients must check. His objection is that "must check" is not "does check." Bourlatchkov made the architectural case. Whether a client uses local credentials or vended ones is a deployment decision, not a runtime choice. A client that already holds credentials has no reason to also request delegation.&lt;/p&gt;

&lt;p&gt;Alex Dutra added context. The "must first check" language exists for backward compatibility, which is why Polaris vends credentials in both places. Iceberg 1.12 adds a &lt;code&gt;remote-signing-config&lt;/code&gt; field that follows the same dual-location pattern. That is one more reason to write down the "delegation not provided" semantics now.&lt;/p&gt;

&lt;p&gt;The group chose fail-fast and documentation. Kim then took the question upstream and &lt;a href="https://lists.apache.org/thread/6zspb6cpb6j2po5lm57mq1sgcp2hppkf" rel="noopener noreferrer"&gt;opened an Iceberg thread&lt;/a&gt; asking whether "any or none" in the spec permits rejecting the request. This is exactly how cross-project clarity gets built: a catalog finds an ambiguity, picks a safe behavior, and asks the spec owners to settle it for everyone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Location overlap checks get honest names
&lt;/h3&gt;

&lt;p&gt;Bourlatchkov opened a thread on &lt;a href="https://lists.apache.org/thread/m0jy5mh7wch0wxm5gl2q52g9g4s6krr8" rel="noopener noreferrer"&gt;hasOverlappingSiblings() behavior&lt;/a&gt;. The persistence implementations search the whole catalog, but the caller uses them only when the &lt;code&gt;OPTIMIZED_SIBLING_CHECK&lt;/code&gt; flag is on. With the flag off, Polaris checks only immediate siblings. He called it a logical inconsistency, since a speed switch should not change what a validation covers.&lt;/p&gt;

&lt;p&gt;Eric Maynard explained the history. The original sibling check was limited by the metastore and exposed catalogs to security issues in some configurations. The flagged check was really a corrected, thorough check, and it deserved a name like "v2." Onofré and Prithvi S narrowed the scenario. The gap bites only when &lt;code&gt;ALLOW_UNSTRUCTURED_TABLE_LOCATION&lt;/code&gt; lets a table escape its namespace's location tree. The group agreed to keep the catalog-wide check, rename or better describe the flag, and document when catalog-wide checks are essential. Bourlatchkov floated one more idea: make the flag settable per catalog and enable it by default for new catalogs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Soft delete, audit trails, and consistent writes
&lt;/h3&gt;

&lt;p&gt;Prithvi S proposed &lt;a href="https://lists.apache.org/thread/1djyz0x3k7m71d71bqhw11c3syyshtdr" rel="noopener noreferrer"&gt;opt-in table soft-delete&lt;/a&gt; with a hold period and later undrop. Today a Polaris DROP is final from the catalog's view. Operators who need recoverable drops for legal holds or Nessie migrations build workarounds that REST clients bypass. The feature is off by default. Onofré supported reserving the table name during the hold, with DROP PURGE as the explicit way to get the name back. Bourlatchkov went further. The name-based location cannot be reused until data is purged, or a new table can read an old one's files. Prithvi S explained that expiration runs lazily on namespace access in phase one, not as a scheduled sweep.&lt;/p&gt;

&lt;p&gt;Prithvi S also opened an issue for a &lt;a href="https://lists.apache.org/thread/23nyogwjv1t6530p6jkw9348wdmbk5o1" rel="noopener noreferrer"&gt;supported audit trail&lt;/a&gt;. Polaris has built an event pipeline since 1.0, with JDBC and CloudWatch in 1.2, multiple listeners in 1.5, an async executor in 1.6, and Kafka and OpenTelemetry listeners in 1.7. That is still not an operator-facing audit story. Gu suggested documenting current delivery semantics first and expanding authentication and authorization events. Adnan Hemani argued the events table is one listener among several and operators choose where events land.&lt;/p&gt;

&lt;p&gt;Bourlatchkov posted a recap of the sync on &lt;a href="https://lists.apache.org/thread/6rx9fssvcccq673mgt9c89zq5zlxrk6f" rel="noopener noreferrer"&gt;consistent multi-object changes&lt;/a&gt;. Entity version numbers work for RBAC grants but not for cases like location overlaps between concurrent table creations. He found a PR that shows a failed request leaving persisted side effects. EJ Wang asked what backend assumptions the design targets. Bourlatchkov said the real goal is an SPI with clear contracts that both JDBC and NoSQL persistence can implement. Serializable JDBC transactions solve the problems raised, but they rule out in-memory caching for reads inside a transaction.&lt;/p&gt;

&lt;p&gt;Arun Suri described a related fix for &lt;a href="https://lists.apache.org/thread/zr1oqcngnmjh18nzrwpv44szgxk57z7f" rel="noopener noreferrer"&gt;ambiguous JDBC commits&lt;/a&gt;. When a commit outcome is unclear, his PR reloads the entity and checks whether the metadata location already matches. If it does, the commit counts as a success. Only an unconfirmable outcome raises CommitStateUnknownException, which prevents unsafe metadata cleanup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloudflare R2, tags, sharing, and federation
&lt;/h3&gt;

&lt;p&gt;Austen Tomek pushed forward &lt;a href="https://lists.apache.org/thread/7dzzz1zzh5h82x6424jtyr9c80z139mm" rel="noopener noreferrer"&gt;Cloudflare R2 support with scoped credential vending&lt;/a&gt;. His first PR adds a &lt;code&gt;credentialVendingMechanism&lt;/code&gt; setting, with STS as the default. Gu asked whether the existing endpoint field is enough to detect R2. Tomek said no. Self-hosted S3-compatible stores such as MinIO use arbitrary hostnames, a failed match silently falls back to STS, and Polaris has two endpoint fields that can disagree.&lt;/p&gt;

&lt;p&gt;EJ Wang updated the &lt;a href="https://lists.apache.org/thread/jlcrn3l4htm3fwdkqfcqbd0pgxghpcth" rel="noopener noreferrer"&gt;Polaris Tag spec&lt;/a&gt;. Bourlatchkov prefers a separate &lt;code&gt;/api/tags/v1&lt;/code&gt; root, since the existing catalog API was not designed for extension. Wang asked to proceed under the current root for now and revisit before release.&lt;/p&gt;

&lt;p&gt;Bourlatchkov also asked the &lt;a href="https://lists.apache.org/thread/928r1gf0f6pj0ofxzgnff6q04o4f8vt8" rel="noopener noreferrer"&gt;Open Sharing API thread&lt;/a&gt; to build share access on the existing authentication and authorization framework instead of a new mechanism, with external identity provider support. David Chaava asked how Polaris should handle &lt;a href="https://lists.apache.org/thread/jf36m3dd0g9qwothxlm2twjr8x87gpk3" rel="noopener noreferrer"&gt;vendor-specific validation for federated REST catalogs&lt;/a&gt; after reviewers pushed BigLake-specific checks out of the shared admin path. Prithvi S detailed how &lt;a href="https://lists.apache.org/thread/76zy2nvh1bcbkc6ndk7hn0km6lonrhb1" rel="noopener noreferrer"&gt;user-defined principal properties&lt;/a&gt; forward to OPA and Ranger through one shared helper. And Onofré argued for &lt;a href="https://lists.apache.org/thread/3f109jxcsdffv73pxpktnvgmvt1spcxq" rel="noopener noreferrer"&gt;dedicated semantic model privileges&lt;/a&gt; that mirror existing entities. That last point connects directly to Ossie, below.&lt;/p&gt;

&lt;p&gt;The team also settled &lt;a href="https://lists.apache.org/thread/vpfq968ptnnr968ztb51w4tlo70mwqdn" rel="noopener noreferrer"&gt;schema upgrade docs&lt;/a&gt;. A single &lt;code&gt;DROP TABLE IF EXISTS&lt;/code&gt; beats listing dependent indexes, because it works on both v3 and v4 schemas. Gu wants to drop the upgrade SQL section entirely. Dutra wants to keep it and add migration tests per backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Arrow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rust 60.0.0 ships the first ALP Parquet support
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb &lt;a href="https://lists.apache.org/thread/jhs0lrq44wbm4j6gn1gbx8c7hc9zhw6t" rel="noopener noreferrer"&gt;announced Arrow Rust 60.0.0&lt;/a&gt; with five +1 votes, three binding. He called the release "epic." Arrow Rust is the first Parquet implementation to ship the new ALP encoding for floating-point data. Lamb credited Kosta and Devan for leading that work. The release also includes new Parquet PageIndex structures from Ed and many performance improvements from Richard Baah and others. The &lt;a href="https://lists.apache.org/thread/ymq7yj45rr9bzwsjjpnqg80lryv5l29t" rel="noopener noreferrer"&gt;object_store 0.14.2 release&lt;/a&gt; also passed with three binding votes and went to crates.io.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dropping macOS Intel
&lt;/h3&gt;

&lt;p&gt;Raúl Cumplido &lt;a href="https://lists.apache.org/thread/l3vmknbjhwf60crrfp3hwb7p5m4qjw7z" rel="noopener noreferrer"&gt;proposed dropping macOS Intel support&lt;/a&gt;. Homebrew stopped building Intel bottles, and Apple's latest macOS release dropped Intel. The project cannot test some setups in CI anymore.&lt;/p&gt;

&lt;p&gt;The community brought data. Antoine Pitrou cited the Steam survey, which shows about 11% of Mac users still on Intel CPUs. Joris Van den Bossche checked PyPI and found x86_64 at 6.6% of PyArrow macOS downloads over 30 days: 57,121 against 807,414 for arm64. Sutou Kouhei ran a ClickHouse query over PyPI data. The Intel Mac share of all PyArrow downloads is tiny.&lt;/p&gt;

&lt;p&gt;Ruoxi Sun suggested best-effort source builds with no CI guarantee. Jacob Wujciak argued that dropping CI means dropping Intel binaries too, since cross-compiling adds the maintenance cost the change aims to remove. Wes McKinney offered his 2019 Intel Mac Pro for testing commits to main. Kurtis Wright asked whether Arrow has a policy for how many releases a platform gets before deprecation. The thread has broad support. Watch for a formal vote.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guidelines for AI-generated contributions
&lt;/h3&gt;

&lt;p&gt;Pedro Matias &lt;a href="https://lists.apache.org/thread/5y3yjm0c7sdvh53xov5spmhng78bt1t9" rel="noopener noreferrer"&gt;revived the AI contributions thread&lt;/a&gt; with a focus on reviewers. Arrow has AI guidelines for contributors but none for reviewers facing low-quality PRs with weak author engagement. He wants an agreed way to handle authors who ignore the rules.&lt;/p&gt;

&lt;p&gt;Rok Mihevc proposed a GitHub label, &lt;code&gt;needs-author-engagement&lt;/code&gt;. It flags PRs where the author needs to respond substantially before review continues. It focuses on the author's observable understanding and engagement, not on whether they used AI. Nic Crane and Dmitry Chirkov supported it. Onofré pointed to the ASF's generative tooling guidance, which encourages disclosure. He also made a governance point. At the ASF, people contribute as individuals, so quality discussions happen in public even between colleagues at the same company.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format work: FILE, JSON schemas, and ranges
&lt;/h3&gt;

&lt;p&gt;Mandukhai Alimaa opened a format PR for a &lt;a href="https://lists.apache.org/thread/tkj80wfcst5rnsf6kr3zsl32lbz651gt" rel="noopener noreferrer"&gt;canonical FILE extension type&lt;/a&gt; named &lt;code&gt;arrow.parquet.file&lt;/code&gt;, following the precedent of &lt;code&gt;arrow.parquet.variant&lt;/code&gt;. Kent Wu updated his proposal for a &lt;a href="https://lists.apache.org/thread/wdb9g2k55rqtd7jf5ogn93b3pm6om1b5" rel="noopener noreferrer"&gt;JSON representation of Arrow schemas&lt;/a&gt;. Each type now has exactly one allowed form, either a simple string or an object. Metadata uses the object form because many implementations expose metadata as a map, which cannot hold duplicate keys.&lt;/p&gt;

&lt;p&gt;A contributor pinged the thread on an &lt;a href="https://lists.apache.org/thread/s2gydc8kvgvtd79nqw76zml6zxlmvz4h" rel="noopener noreferrer"&gt;arrow.range canonical extension type&lt;/a&gt; for bounded ranges. The proposal uses one range type with a &lt;code&gt;closed&lt;/code&gt; parameter instead of separate types per closedness, since Arrow's kernel matching already sees extension type parameters. Ian Cook posted the &lt;a href="https://lists.apache.org/thread/dsc9qcs83zp6181q8131hbq4g8m5m982" rel="noopener noreferrer"&gt;biweekly community meeting&lt;/a&gt; for September 23.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Parquet
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Modular Footer goes up for review
&lt;/h3&gt;

&lt;p&gt;Jiayi Wang &lt;a href="https://lists.apache.org/thread/dpccpdfogy28p743g976tgkl32g3f966" rel="noopener noreferrer"&gt;introduced the Parquet Modular Footer&lt;/a&gt; for broad review after months of biweekly working group meetings. The proposal covers motivation, format design, compatibility, and benchmarks, with a parquet-format PR and tracking issue. Wang expects a lot of feedback because the proposal introduces several large conceptual changes. Micah Kornfield had asked Wang to &lt;a href="https://lists.apache.org/thread/rrlc7ol0snx51gc4dnjn1txpp2g87odr" rel="noopener noreferrer"&gt;move the discussion to the list&lt;/a&gt; for visibility and to tie up the old footer tracking issue.&lt;/p&gt;

&lt;p&gt;The footer matters for anyone running wide tables in a lakehouse. Today a reader parses the entire Thrift footer before reading any column, and that cost grows with column count. A modular footer lets readers load only what they need.&lt;/p&gt;

&lt;h3&gt;
  
  
  How readers handle unknown versions
&lt;/h3&gt;

&lt;p&gt;The footer work drives a related question: &lt;a href="https://lists.apache.org/thread/cj3rnhq86gchzdjblcll4ccmnbo74jzx" rel="noopener noreferrer"&gt;how should readers behave with unsupported format versions&lt;/a&gt;? Xiening Dai, Fokko Driesprong, and Steve Loughran all voted for option one: fail on an unknown version. Driesprong argued that breaking changes like the new footer will break old readers anyway. The spec is the only thing the project controls, and quiet partial reads erode trust. He suggested bundling smaller speedups such as path-in-schema into the new footer version instead of cutting corners.&lt;/p&gt;

&lt;p&gt;Loughran made the counterweight point. Because a reader must fail fast on an unknown version, moving to a new version needs a very good reason. The work to carry FlatBuffers alongside Thrift exists to deliver speed while keeping compatibility. He sketched a future "2.0" library that reads and writes both classic and new layouts but writes classic files by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  ALP is live, and FastLanes gets a hard look
&lt;/h3&gt;

&lt;p&gt;With the 2.14 format release done, Andrew Lamb &lt;a href="https://lists.apache.org/thread/cdwkf4d8hj19yg07srs7h2hyn3lm1bxv" rel="noopener noreferrer"&gt;published the ALP blog&lt;/a&gt; on the Parquet site on September 22. ALP, short for Adaptive Lossless floating-Point encoding, first appeared in a SIGMOD 2024 paper from CWI. Lamb also opened &lt;a href="https://lists.apache.org/thread/m1mqyy3y02z8h4cb96nmq637o1l9l5mv" rel="noopener noreferrer"&gt;website PRs for the 2.14 changes&lt;/a&gt;, including ALP and FILE.&lt;/p&gt;

&lt;p&gt;Prateek Gaur posted a &lt;a href="https://lists.apache.org/thread/94q6oh41sxjlkrhhhwn09c66nmtm1xt9" rel="noopener noreferrer"&gt;performance study of FastLanes&lt;/a&gt; to separate its ideas from one another. For plain PFOR, the layout gain depends heavily on hardware, because the Parquet C++ reader is already vectorized. Antoine Pitrou asked whether the same speedup applies to DELTA_BINARY_PACKED by breaking the sequential dependency with interleaved partial sums. Gaur had already done it. Three draft PRs against Parquet C++ implement a log-step SIMD scan and batched miniblock unpacking, for about a 2.15x speedup on narrow 32-bit pages on Graviton4.&lt;/p&gt;

&lt;p&gt;Gaur reports that the FastLanes transposed layout is still roughly 2x faster on top of that. Alkis Evlogimenos argued a new layout doubles the writer's decision space and suggested shelving FastLanes until Parquet has more data-dependent encodings. Gaur disagreed and asked to decouple FastLanes from the &lt;a href="https://lists.apache.org/thread/1rnyj6slgohr5zrj8phnoz8s9gb2h1br" rel="noopener noreferrer"&gt;PFOR encoding discussion&lt;/a&gt;. There, Evlogimenos asked for a PFOR-delta versus DBP comparison and whether DBP blocks can live between PFOR blocks. Lamb asked what DBP stands for, which is a good reminder to define acronyms on public lists. It means delta binary packed.&lt;/p&gt;

&lt;h3&gt;
  
  
  A vector type for embeddings
&lt;/h3&gt;

&lt;p&gt;Rok Mihevc opened a PR for a &lt;a href="https://lists.apache.org/thread/llwocp01o87bvcdf993mczmdyf2ppzy4" rel="noopener noreferrer"&gt;LIST-based VECTOR logical type&lt;/a&gt; after a focused community call. Every non-null vector has exactly &lt;code&gt;num_elements&lt;/code&gt; values. Elements must be non-null, finite, and numeric or boolean primitives, with no nesting. Readers that do not know VECTOR read it as a plain LIST. Physical layout changes, vector indexes, and quantization are out of scope.&lt;/p&gt;

&lt;p&gt;Pitrou objected to the narrow rules. Parquet is a general-purpose format. Why forbid NaN values when NumPy tensor data contains them? He argued for a general fixed-size list type and leaving specialist types to domain software, the way Arrow stores its schema in Parquet metadata. Mihevc defended the scope. Vector stores reject non-finite and nested values, and statistics are sometimes not written or read. He then asked the key question: what is the gate for Parquet to define a logical type? He also asked whether removing the finiteness rule makes the proposal acceptable, and whether it is time to revisit the Parquet extension type discussion.&lt;/p&gt;

&lt;p&gt;For lakehouse teams storing embeddings next to business data, this thread decides how vectors land in Parquet files for years.&lt;/p&gt;

&lt;h3&gt;
  
  
  Types and statistics
&lt;/h3&gt;

&lt;p&gt;Thomas Kissinger returned to the &lt;a href="https://lists.apache.org/thread/h7vnrk3zqh87rmsp1lp7k4z6ckvthwd7" rel="noopener noreferrer"&gt;decimal floating-point proposal&lt;/a&gt;. Kornfield asked for a formal design doc and named two open issues: how to represent normalization and how to store values. Kissinger argued that statistics describe what was written but do not define a writer's obligation, so a logical-type parameter should state whether a column preserves quantum or canonicalizes.&lt;/p&gt;

&lt;p&gt;Adrian Garcia Badaracco proposed &lt;a href="https://lists.apache.org/thread/l8om71xjcv94x0z3hdvnbswk9ssyn2ks" rel="noopener noreferrer"&gt;classifying distinct_count as inexact&lt;/a&gt;. The spec never says whether the field is exact or an estimate such as a HyperLogLog sketch. An exact definition raises its own questions about nulls, negative zero, and NaN bit patterns. Query planners use this field for join ordering, so a clear definition matters. Michael Chavinda asked to add DataHaskell's Parquet reader to the &lt;a href="https://lists.apache.org/thread/opq4yr8pyxy6bx30fpmkrrs0d4dckq4h" rel="noopener noreferrer"&gt;implementation support matrix&lt;/a&gt;. Julien Le Dem posted the &lt;a href="https://lists.apache.org/thread/gow7wqq75ztdryshmhngpz0rt2x5n848" rel="noopener noreferrer"&gt;Parquet sync&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache DataFusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Iceberg integration finds a new home
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb &lt;a href="https://lists.apache.org/thread/8x3l4m4gzhy2gvd9ppfqhxfl9tlxrqw6" rel="noopener noreferrer"&gt;announced the vote result&lt;/a&gt; to accept the &lt;code&gt;apache/datafusion-iceberg&lt;/code&gt; repository into the DataFusion project, with 14 +1 votes. He called it a first step toward better Iceberg integration. The &lt;a href="https://lists.apache.org/thread/45m7yrg6y0qs0c4hz3yt8zt9f0rs7oby" rel="noopener noreferrer"&gt;cross-list discussion&lt;/a&gt; confirmed both projects approved.&lt;/p&gt;

&lt;p&gt;The new repository got to work fast. Gabriel (gabotechs) merged a PR that &lt;a href="https://lists.apache.org/thread/1bohvsw7snv3dt56r5v3bx2w56xrcgtz" rel="noopener noreferrer"&gt;ported iceberg-rust history&lt;/a&gt; into the new repo, then a PR that &lt;a href="https://lists.apache.org/thread/3jzwbglxqwlf67c45z2b3gdob5ky06zd" rel="noopener noreferrer"&gt;made the project compile with passing tests&lt;/a&gt; after review from Kevin Liu. Lamb fixed a &lt;a href="https://lists.apache.org/thread/4zkr5ms1bb72d0k0d1hwks3c3jy5jnrz" rel="noopener noreferrer"&gt;misnamed .asf.yaml file&lt;/a&gt; that kept GitHub issues disabled. A contributor resubmitted a PR to &lt;a href="https://lists.apache.org/thread/pldsbwm56kjp69zp3j5ljfh2n4o6td48" rel="noopener noreferrer"&gt;make IcebergTableProvider::try_new public&lt;/a&gt;, since the only provider with write support needs a public constructor. The original PR was lost when the integration moved.&lt;/p&gt;

&lt;p&gt;This move is a smart division of labor. Iceberg Rust focuses on the table format library. DataFusion owns the query engine glue, where its maintainers know the planner and execution internals best.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sync notes and a new committer
&lt;/h3&gt;

&lt;p&gt;Lamb started posting &lt;a href="https://lists.apache.org/thread/czth53otchv018n07r14k44ml4mft1z8" rel="noopener noreferrer"&gt;notes from the DataFusion sync call&lt;/a&gt; because about ten people attend regularly and the topics interest the whole community. Adam GS covered subquery decorrelation, with many issues filed and ideas for testing query planner passes in isolation. Raz shared a prototype for blocked aggregation and asked aggregate authors whether the new API works for them. Haresh proposed CI automation to identify and backport PRs. Kurtis Wright asked for a calendar invite. The Parquet, Arrow, and Iceberg communities publish iCal links, and DataFusion does not yet.&lt;/p&gt;

&lt;p&gt;The PMC also &lt;a href="https://lists.apache.org/thread/f8o6y96grtr3cz2vxytkdrn9tsklzo5k" rel="noopener noreferrer"&gt;welcomed Dewey Dunnington as a committer&lt;/a&gt;. Dunnington is well known across the Arrow ecosystem, so this strengthens the link between DataFusion and Arrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Ossie (incubating)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Converters leave the main repo
&lt;/h3&gt;

&lt;p&gt;Yufei Gu opened the week's biggest Ossie thread on the &lt;a href="https://lists.apache.org/thread/5vqckvd5jjb15t6zkjrmjvorxxcfv8yg" rel="noopener noreferrer"&gt;scope and maintenance of converters&lt;/a&gt;. Converters translate Ossie semantic models to and from vendor formats. Keeping them all in the main repo creates three problems. Converter dependencies complicate licensing. Each converter has its own structure and CI, which complicates binary releases. Each needs platform knowledge and an ongoing maintainer. Gu suggested keeping a small set as reference implementations.&lt;/p&gt;

&lt;p&gt;Julian Hyde, drawing on his experience as a founder and mentor of past incubator projects, agreed with much of it. He warned that moving converters to vendor repos means contributors are not seen as ASF contributors, and that licensing limits apply wherever the code lives. His advice: focus on the first release, because every incubating project underestimates it.&lt;/p&gt;

&lt;p&gt;Onofré shared the history. Ossie started as a specification, which alone did not justify an incubator project, so converters went into the main repo. The plan from day one was to split them out. He proposed freezing converters, then creating a repo per converter, such as &lt;code&gt;ossie-dbt&lt;/code&gt; and &lt;code&gt;ossie-databricks&lt;/code&gt;, and keeping only the spec and docs in the main repo.&lt;/p&gt;

&lt;p&gt;Piotr Sowiński played devil's advocate with lessons from LinkML. There, all converters live in one repo and ship as one package, because they share parsing code and users get one install that works. Russell Spitzer favored separate repos and compared it to Parquet, with &lt;code&gt;parquet-format&lt;/code&gt; separate from its implementations. Markus Weimer did not care about repo count but insisted every repo stay inside the ASF project, because ASF provenance makes code easier for downstream users to adopt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Toward the first source release
&lt;/h3&gt;

&lt;p&gt;Kyoung Min Kim found &lt;a href="https://lists.apache.org/thread/olnz7j8pnmx6nsxq9hzt64hhf28ymbxy" rel="noopener noreferrer"&gt;22 files missing ASF license headers&lt;/a&gt; ahead of the 0.3.0 source release, across the CLI plugin code, the Sigma converter, and NVIDIA test fixtures. He opened a fix and asked for a header-only CI check. Chris Eubank and Onofré both backed it. Given how the other projects spent their week, this is good timing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semantics, compliance, and a REST API
&lt;/h3&gt;

&lt;p&gt;Chris Eubank pulled several threads into one plan for &lt;a href="https://lists.apache.org/thread/1jhvnw8vg5fgtct347t62ycc2zkrox6l" rel="noopener noreferrer"&gt;semantics and compliance suites&lt;/a&gt;. His diagnosis is sharp. Given the same model shape, two vendors can return different answers to the same question, which weakens Ossie as a standard. The plan layers an expression language, two query interfaces, and compliance suites. Onofré supported the layered framing and asked for proof that Layer 3 SQL reduces to Layer 2 primitives, ideally through shared fixtures where the same model and question produce the same answer both ways. Eubank reported that the &lt;code&gt;OSSIE_SQL_2026&lt;/code&gt; dialect definition merged, and proposed a fixture format that pins a Layer 3 query, its Layer 2 form, and the base SQL answer to one value.&lt;/p&gt;

&lt;p&gt;Onofré then &lt;a href="https://lists.apache.org/thread/hf71m6g1g1bnhqj5v0f4kc0rf4h8g4kg" rel="noopener noreferrer"&gt;proposed an Ossie REST API spec&lt;/a&gt;, an OpenAPI file for producing, consuming, and orchestrating Ossie models. He named catalogs such as Apache Polaris, Unity, Collibra, and DataGalaxy as implementers, with query engines as clients. Sebastien Gandon said Qlik has started building an Ossie-native REST API to import and export its semantic models, and proposed a dedicated media type, &lt;code&gt;application/vnd.ossie+yaml&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Modeling details
&lt;/h3&gt;

&lt;p&gt;Markus Cozowicz proposed making &lt;a href="https://lists.apache.org/thread/nb38vfn5j1dv66jgv87tlzwzpxomsx0r" rel="noopener noreferrer"&gt;relationship cardinality explicit&lt;/a&gt;. Today "from" means the many side and "to" means the one side, which cannot describe one-to-one or many-to-many. Onofré pointed to evidence that clears the usual bar for promoting a vendor extension into the core spec. The Microsoft, Databricks, and OrionBelt converters each invented a private stash for cardinality. Cozowicz revised the proposal to reuse the ontology term &lt;code&gt;multiplicity&lt;/code&gt; with PascalCase values, default to ManyToOne when absent, and skip OneToMany since it is the same relationship with endpoints swapped.&lt;/p&gt;

&lt;p&gt;Shao Xie proposed &lt;a href="https://lists.apache.org/thread/v1mf3jpzthk0p0qlclhglot6pxqt6gqq" rel="noopener noreferrer"&gt;decoupling ontologies, semantic models, and mappings&lt;/a&gt; into three document kinds joined by external references. Gu questioned whether three document types are worth the extra catalog complexity. Ankit Tandon shared &lt;a href="https://lists.apache.org/thread/gxdn9z2pr22pkphfvm64tyrwkflx5w03" rel="noopener noreferrer"&gt;Ontology working group notes&lt;/a&gt;. Victor Morgante reported that the Python ontology parser &lt;a href="https://lists.apache.org/thread/4xp9zzksz2vhqwqxk2kqjs2tdpd1q4p3" rel="noopener noreferrer"&gt;rejects reverse verbalizations&lt;/a&gt; of a relationship, which fact-based modeling allows.&lt;/p&gt;

&lt;p&gt;On GitHub Discussions, Jochen Christ explained the &lt;a href="https://lists.apache.org/thread/thx10z491p8xn76sm2f63bxr9ypjxxbz" rel="noopener noreferrer"&gt;split between Ossie and the Open Data Contract Standard&lt;/a&gt;. Ossie now has a core spec for BI semantic models and an ontology spec at the conceptual layer. Data contracts cover more than schema and semantics, including terms of use, ownership, quality, and SLAs. A user asked &lt;a href="https://lists.apache.org/thread/vr8r6d94zt87llxhjprcxb5rj7y7yhov" rel="noopener noreferrer"&gt;how Ossie handles unstructured data&lt;/a&gt;. Gu answered that the community focuses on structured data for now and asked for concrete use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Project Themes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;License hygiene is now the release bottleneck.&lt;/strong&gt; Iceberg 1.12.0, Polaris 1.8.0, the Polaris catalog migrator, pyiceberg-core, and Ossie 0.3.0 all hit LICENSE, NOTICE, or header problems this week. The pattern is clear. As projects ship more binary bundles, wheels, and Helm charts, the list of third-party code inside each artifact grows faster than anyone tracks by hand. Ossie's push for a header check in CI and Paimon's per-wheel license report point to the fix: automate it. Notice also who found the problems. Kurtis Wright used Claude, Ajantha Bhat used Codex, and Xin Huang used GPT 5.6 to verify candidates, and all three disclosed it. AI review is now part of the ASF release process, and the disclosure norm is forming in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fail loudly, then write it down.&lt;/strong&gt; Polaris chose fail-fast for unsatisfiable access delegation and for oversized unpaged list calls. Parquet chose fail-fast for unknown format versions. Iceberg keeps a visible behavior change for geospatial types and documents it instead of hiding it. The common thread is respect for the client. A silent partial answer is worse than an error, because the client cannot tell it is wrong. That principle is what makes open standards safe to build on. It is also why the Polaris team took its access delegation question back to the Iceberg list instead of patching around it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specs are getting conformance suites.&lt;/strong&gt; Iceberg launched iceberg-verification with golden tables and read conformance. Ossie is designing compliance fixtures that pin one answer across query layers. Parquet's distinct_count thread asks the spec to say what a statistic guarantees. When five languages implement one table format, and many vendors implement one semantic model format, the spec text alone is not enough. Shared fixtures turn "compatible" from a claim into a test result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The FILE type ties three projects together.&lt;/strong&gt; Parquet 2.14 shipped FILE support. Arrow is defining &lt;code&gt;arrow.parquet.file&lt;/code&gt; as a canonical extension. Iceberg is working out how a governed REST catalog delegates access to those files. This is the plumbing for storing references to images, PDFs, and other unstructured objects next to structured rows, with the catalog in charge of who reads them. It is the base layer for multimodal AI on lakehouse tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantics move into the catalog.&lt;/strong&gt; Onofré wants dedicated semantic model privileges in Polaris, and he proposed an Ossie REST API that names Polaris as an implementer. Put those together and the direction is plain. The open catalog that governs Iceberg tables is lining up to govern the semantic models that describe them. For AI agents that need consistent business definitions, that pairing matters as much as the table format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;Watch the Iceberg 1.12.0 RC1 vote and whether the Caffeine license gap forces RC2. Iceberg C++ 0.4.0 needs one more binding vote to pass. Iceberg Rust 0.11.0 RC3 waits on the encryption tamper-proofing fix. Polaris 1.8.0 RC2 and the catalog migrator RC3 both need clean license passes.&lt;/p&gt;

&lt;p&gt;On design, the October 1 Iceberg sync hosts the last materialized view discussion before a vote. Parquet's Modular Footer review opens in earnest, and the VECTOR type debate needs an answer on what earns a logical type. Arrow's macOS Intel thread is ready for a formal vote. Ossie heads toward its first source release with converters moving out of the main repo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;If this newsletter helps you follow the open lakehouse, my books go deeper on Apache Iceberg, Apache Polaris, agentic analytics, and the rest of the stack. Find the full catalog at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>data</category>
      <category>database</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Fast Classification Models, LLMs, and the Apache Iceberg Lakehouse</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Mon, 21 Sep 2026 16:16:46 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/fast-classification-models-llms-and-the-apache-iceberg-lakehouse-387d</link>
      <guid>https://dev.to/alexmercedcoder/fast-classification-models-llms-and-the-apache-iceberg-lakehouse-387d</guid>
      <description>&lt;p&gt;Open the bill for any team that has put a large language model into a data pipeline and look at what the calls are doing. A big share of them are not writing anything. They are answering questions with a short, fixed set of answers. Is this support ticket about billing or about an outage? Does this review mention a safety problem? Is this row of free text a complaint, a question, or a compliment? The team sends a paragraph of context, a paragraph of instructions, and a request for JSON. The model spends seconds generating tokens, the pipeline parses the JSON, and sometimes the JSON comes back broken.&lt;/p&gt;

&lt;p&gt;That pattern works. It is also slow and expensive for what it delivers, and it gets worse at lakehouse scale, where the "input" is not one ticket but forty million rows in an Apache Iceberg table.&lt;/p&gt;

&lt;p&gt;In September 2026 a company called TypeSafe AI released Jev, a model built only for this kind of question. It does not chat. It returns a choice, a score, or a yes/no probability, with calibrated confidence attached. Within days, several open-source projects appeared that copy its interface on models you can run yourself.&lt;/p&gt;

&lt;p&gt;This article covers what these classification models are, how they differ from LLMs, where the open alternatives stand, and how to use both kinds of model together inside an Iceberg lakehouse. A quick note on affiliation: I work at Dremio, which ships SQL AI functions for this kind of work. Dremio shows up here as one worked example. The patterns apply to any engine that reads Iceberg.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why So Much LLM Spend Goes to Questions With Fixed Answers
&lt;/h2&gt;

&lt;p&gt;Text classification is one of the oldest jobs in applied machine learning. Before 2023, most teams handled it in one of three ways.&lt;/p&gt;

&lt;p&gt;The first was rules. Keyword lists, regular expressions, and lookup tables. Rules are fast and cheap, and anyone can read them. They also break the moment a customer writes "I am not asking for a refund." A rule that fires on the word "refund" gets that sentence wrong every time.&lt;/p&gt;

&lt;p&gt;The second was a fine-tuned encoder model. BERT (Bidirectional Encoder Representations from Transformers) and its descendants read a whole passage at once and produce a label in a single forward pass. A fine-tuned BERT classifier runs in milliseconds on a modest GPU. The cost is up front. You need a few thousand labeled examples per task, a training pipeline, and a person who knows how to evaluate it. When the business adds a new category, you label more data and train again.&lt;/p&gt;

&lt;p&gt;The third was zero-shot classification with NLI (natural language inference) models. You phrase each label as a hypothesis, such as "This text is about billing," and the model scores how strongly the input entails it. This needs no training data, but accuracy on messy, domain-specific text is uneven.&lt;/p&gt;

&lt;p&gt;Then instruction-tuned LLMs arrived and changed the economics of the second and third options. You no longer needed labeled data or a training run. You wrote a prompt, listed the categories, and asked for JSON. Accuracy on common-sense judgments jumped. For a prototype, nothing else came close.&lt;/p&gt;

&lt;p&gt;The trouble shows up in production. An autoregressive LLM produces output one token at a time. Every label, every brace, and every quote mark in the JSON is a separate step through the model. Reasoning models add a chain of thought before the answer, which multiplies the token count again. A classification that needs one bit of information ends up costing hundreds of output tokens.&lt;/p&gt;

&lt;p&gt;There are three other costs that are easy to miss. The first is parsing. The model returns text, and your code has to turn it into a typed value. Structured output modes help, but the model still generates the text and a validator still checks it. The second is invented labels. Ask for one of five categories and a generative model sometimes returns a sixth that sounds reasonable. The third is the confidence problem. An LLM that says "billing" gives you no reliable number for how sure it is. Token log probabilities exist on some APIs, but they are not calibrated for this purpose, and many hosted APIs do not expose them at all.&lt;/p&gt;

&lt;p&gt;In a single request/response app, these costs are annoying. In a lakehouse pipeline, they compound. If a nightly job classifies two million new rows with a frontier LLM, the latency sets how long the job runs, the per-token price sets the bill, and the lack of confidence scores means every label looks equally trustworthy in the downstream table. An analyst building a dashboard on those labels has no way to filter out the shaky ones.&lt;/p&gt;

&lt;p&gt;That gap between "the LLM can do this" and "the LLM is the right tool for this" is where the new classification models live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Jev Is and How It Works
&lt;/h2&gt;

&lt;p&gt;Jev comes from TypeSafe AI, a company founded by Diogo Almeida, a former OpenAI researcher and one of the authors of the InstructGPT paper. TypeSafe calls Jev a "System One model." The name borrows from Daniel Kahneman's split between fast, intuitive thinking (System 1) and slow, deliberate reasoning (System 2). Reasoning LLMs are System 2 tools. Jev is built for the quick judgments.&lt;/p&gt;

&lt;p&gt;The interface has three parts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State.&lt;/strong&gt; The content you want judged. This can be a string, a JSON object, or an array of text values. A support ticket, a product review, a row from a table serialized as JSON, or a retrieved document all work as state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questions.&lt;/strong&gt; A map of named questions. Each question has a type, instructions, and criteria. You choose the question names, and the answers come back under the same names. The model never sees the names themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answers.&lt;/strong&gt; One typed answer per question, with probabilities.&lt;/p&gt;

&lt;p&gt;There are three question types, and picking the right one is most of the design work.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Choice&lt;/strong&gt; picks one option from a set you define. The criteria are a map from option names to descriptions. TypeSafe's documentation allows up to 255 options per Choice. The answer contains the selected option, a probability for every option, and a confidence value. If you ask which team owns a ticket and list billing, returns, and shipping, the answer is always one of those three. It cannot be a fourth.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Score&lt;/strong&gt; rates something against an ordered rubric. The criteria are an ordered list of level descriptions, from 2 to 10 levels. Urgency, quality, relevance, and frustration are natural fits. The answer is the level index, a probability per level, and a confidence value.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Noul&lt;/strong&gt; is a yes/no question. The answer is the probability that the statement is true. You can optionally describe what "true" and "false" mean. The unusual name is TypeSafe's own term, and it shows up in their SDKs as &lt;code&gt;Noul&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The model processes the state once and evaluates every question against it in parallel. This detail matters a great deal for cost. Asking ten questions about one ticket in a single request costs barely more wall-clock time than asking one. TypeSafe's docs push this pattern hard and call it speculative fan-out. You ask every question your code has any use for, including ones that only matter for certain branches, and your code ignores the answers it does not use.&lt;/p&gt;

&lt;p&gt;TypeSafe has said little about the architecture. Public material mentions a new model design, a parallel sampler, and a training method called RLCD (reinforcement learning for calibrated decisions). Coverage from the launch describes it as non-autoregressive, meaning it does not generate output one token at a time. The practical result is latency in the range of roughly 70 to 500 milliseconds per call, versus seconds for a frontier model producing JSON.&lt;/p&gt;

&lt;h3&gt;
  
  
  The numbers that matter for pipeline design
&lt;/h3&gt;

&lt;p&gt;At the time of writing, the current version is &lt;code&gt;jev-1.13.0&lt;/code&gt;, reachable through the alias &lt;code&gt;jev-latest&lt;/code&gt;. The published limits shape how you build around it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price.&lt;/strong&gt; TypeSafe charges only for input tokens, at $0.042 per million. Output tokens are free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits.&lt;/strong&gt; 250,000 tokens per second and 1,200 requests per minute. TypeSafe warns these limits are changing as demand grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context.&lt;/strong&gt; 64,000 tokens per request in total, and 32,000 tokens for the state plus the longest single question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input.&lt;/strong&gt; Text only. No images, audio, or video.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Access is through &lt;code&gt;POST https://api.typesafe.ai/v1/systemone&lt;/code&gt;, with official Python and JavaScript SDKs. Early access runs through a waitlist. Gateway products such as LiteLLM and several others have already added pass-through support.&lt;/p&gt;

&lt;p&gt;On accuracy, TypeSafe's own four-workflow benchmark puts Jev at 67.8 percent. That is roughly tied with GPT-5.6 Terra at 67.9 percent, and a few points behind GPT-5.6 Sol at 74.1 percent and Claude Opus 5 at 73.1 percent. Read that plainly. Jev is not smarter than frontier models. It lands near a mid-tier LLM on decision tasks while running at a small fraction of the cost and time. That tradeoff is the whole pitch.&lt;/p&gt;

&lt;p&gt;Independent testers have published early numbers that line up with the pitch. One team ran seven classification rules across 1,000 emails in about 6 seconds for 9 cents once they parallelized requests. A comparable single-category run on a GPT-5.6-class model took roughly 5 minutes and cost 62 cents. Treat third-party benchmarks from launch week with care, but the direction is consistent across reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Jev does not do
&lt;/h3&gt;

&lt;p&gt;Jev does not generate text. It does not explain its answers. It does not do arithmetic well, and TypeSafe says so directly. It reads dates as text, so comparing two dates or checking whether one falls in a window is unreliable. It cannot be fine-tuned on your data. The same weights serve every account, and you shape behavior through the state, instructions, and criteria you send.&lt;/p&gt;

&lt;p&gt;That last point is a real difference from the BERT approach. You do not own a model. You own a set of well-written questions. For many teams that is a better asset, because questions are cheap to change and easy to review in a pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calibration Is the Feature That Changes Pipeline Design
&lt;/h2&gt;

&lt;p&gt;Speed and price get the headlines. For data engineers, the more important property is calibration.&lt;/p&gt;

&lt;p&gt;A model is calibrated when its probabilities match reality. If a calibrated model says "billing" with 0.8 probability across a thousand tickets, about 800 of those tickets are about billing. A model that is overconfident says 0.95 and is right 70 percent of the time. A model that gives no probability at all leaves you guessing.&lt;/p&gt;

&lt;p&gt;Jev returns two related numbers, and they mean different things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Probabilities&lt;/strong&gt; describe the distribution across options. For a Choice with three options, you get three numbers that sum to 1. For a Noul, you get one number, the chance the answer is yes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidence&lt;/strong&gt; summarizes how peaked that distribution is. A single spike on one option gives confidence near 1. Probability spread across several options gives low confidence. TypeSafe's docs show a ticket that mentions both a wrong size and a double charge. The department question returns "returns" at 0.61 and "billing" at 0.35, with confidence of 0.42. The model is telling you, correctly, that the ticket belongs to two teams.&lt;/p&gt;

&lt;p&gt;This changes what you can do with the output. With an uncalibrated LLM label, your choices are to trust it or re-check everything. With a calibrated probability, you get a dial. Rows above 0.9 flow straight into the published table. Rows between 0.5 and 0.9 get labeled but flagged. Rows below 0.5 go to a more expensive model or a human. TypeSafe calls this confidence-gated routing, and it is the single most useful pattern in their docs.&lt;/p&gt;

&lt;p&gt;The dial also changes analytics. A dashboard that counts "tickets about billing this week" usually treats each label as a fact. With probabilities stored in the table, you have two better options. You can count only labels above a threshold and report the coverage alongside the count. Or you can sum the probabilities themselves, which gives an expected count that accounts for uncertainty. If a thousand tickets each carry a 0.3 probability of churn language, the expected number of churn-signal tickets is 300, even though no single ticket crosses a 0.5 threshold. For trend analysis over large volumes, the expected count is often the more honest number.&lt;/p&gt;

&lt;p&gt;Calibration is not magic, and it is not permanent. It holds on the kind of data the model was trained and tested on. On text far from that data, such as a domain full of internal jargon or a language other than English, probabilities drift. TypeSafe states that English is the primary training language and that other languages work less well. The fix is the same one statisticians have always used. Keep a labeled sample of your own data, compare predicted probabilities against actual outcomes, and check the gap on a schedule. The operational section below covers how to do that with an Iceberg table.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Open-Source Alternatives
&lt;/h2&gt;

&lt;p&gt;Jev is closed. TypeSafe has not released weights or training code and has not announced plans to. For teams that need to run classification inside their own network, or that do not want a waitlist between them and production, the open ecosystem moved fast. It helps to split the options into two groups: established zero-shot classifiers that predate Jev, and new projects that copy Jev's interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Established open zero-shot classifiers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GLiClass&lt;/strong&gt; from Knowledgator is the most mature option in this space. It is a zero-shot sequence classifier inspired by GLiNER, the open named-entity model. GLiClass encodes the text and all candidate labels together and scores every label in a single forward pass. The model card reports performance comparable to a cross-encoder with much lower compute. The &lt;code&gt;gliclass-modern-base-v2.0&lt;/code&gt; checkpoint uses ModernBERT-base as its backbone, has about 151 million parameters, and is trained on synthetic and commercially licensed data. The v3.0 checkpoints add training on logic tasks. It supports single-label and multi-label classification, and it doubles as a reranker for RAG (retrieval-augmented generation) pipelines. At that size it runs on CPU for modest volumes and flies on a single GPU.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NLI-based zero-shot models&lt;/strong&gt;, such as DeBERTa-v3 checkpoints fine-tuned on entailment datasets, remain a solid baseline. They are well understood, license-friendly, and supported directly by the Hugging Face &lt;code&gt;zero-shot-classification&lt;/code&gt; pipeline. Their weakness is cost per label. Each candidate label becomes a separate premise and hypothesis pair, so a 50-option taxonomy means 50 forward passes per row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CAPPr&lt;/strong&gt; (completion after prompt probability) takes a different route. It uses any open causal language model, but instead of letting the model generate, it scores the probability of each candidate completion. This turns a generative model into a classifier with a fixed output set. It is slower than an encoder model but works with whatever open LLM you already serve.&lt;/p&gt;

&lt;h3&gt;
  
  
  New projects that copy Jev's interface
&lt;/h3&gt;

&lt;p&gt;Several projects appeared within days of the Jev launch. All of them are independent. None contain Jev's weights or its RLCD method, and most say so plainly in their READMEs. They are worth watching and not yet worth betting a production pipeline on without your own evaluation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenJev (zhangcy122)&lt;/strong&gt; wraps open LLMs behind the Choice, Noul, and Score interface. It enforces the output schema with constrained decoding through vLLM or SGLang, pulls log probabilities for each candidate, and applies temperature or Platt scaling to calibrate them. It adds an abstention layer so the system can say "unknown" instead of guessing. The recommended setup runs small models with thinking turned off and escalates to a large model only when confidence falls below a threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt; (published on Hugging Face as &lt;code&gt;rlcd-modernbert-151m&lt;/code&gt;) is a 151-million-parameter model built on the GLiClass ModernBERT checkpoint and post-trained with an approach inspired by RLCD. It reports single-pass latency under 35 milliseconds and supports up to 24 options plus an explicit abstention slot. Its authors claim wins over Jev on their own typed-decision benchmarks. Those claims are self-reported and have not been independently reproduced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open JEV (zhihz)&lt;/strong&gt; is a research preview that runs a frozen Qwen3-4B-Instruct model to score candidate answers in English and Chinese. Its README is refreshingly direct that no matched comparison against Jev, GLiClass, or CAPPr has been completed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;poorjev&lt;/strong&gt; reproduces the three question types on top of NLI models and focuses on honest confidence. It applies temperature scaling and conformal abstention and publishes a calibration evaluation showing expected calibration error dropping from 0.170 to 0.071 with no accuracy loss.&lt;/p&gt;

&lt;p&gt;The table below summarizes the tradeoffs as they stand in September 2026.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh1waq06wu4xojjo505n7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh1waq06wu4xojjo505n7.png" alt="New projects that copy Jev's interface" width="800" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The honest summary is this. If you need a general-purpose decision model today and can send data to a hosted API, Jev is the most polished option. If data must stay inside your network, GLiClass plus your own calibration step is the most defensible choice. If you have a stable task with thousands of labeled examples, a fine-tuned ModernBERT classifier still beats every zero-shot option on accuracy per dollar. The Jev clones are promising experiments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Job Goes to Which Model
&lt;/h2&gt;

&lt;p&gt;The cleanest way to decide is to look at the shape of the answer, not the difficulty of the question.&lt;/p&gt;

&lt;p&gt;If the set of possible answers is known before the model runs, a classification model is the default. Routing, tagging, filtering, scoring, deduplication decisions, and policy checks all fit. The answer is a label, a level, or a probability, and your code branches on it.&lt;/p&gt;

&lt;p&gt;If the answer is new content, you need a generative model. Summaries, explanations, extracted free-text values like a customer's stated reason in their own words, SQL generation, and anything a person will read as prose all belong to an LLM.&lt;/p&gt;

&lt;p&gt;A few jobs sit in between, and they are where the most interesting designs come from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Extraction with a bounded answer space.&lt;/strong&gt; Pulling a date, an amount, or an email address out of text looks like generation, but the answer often comes from a small set of candidates. TypeSafe recommends finding candidates with a regular expression or an LLM, then asking the classifier which candidate is correct. Their date extraction pattern turns each date part into a Choice (twelve months, thirty-one days, a bounded year range, plus a "not stated" option) and assembles the date in code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgments that need multi-step reasoning.&lt;/strong&gt; "Is this contract clause more restrictive than our standard terms?" requires comparing two texts and reasoning about what each permits. Classification models struggle with that level of indirection. A reasoning LLM earns its cost here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Counting and math.&lt;/strong&gt; Neither model type is a calculator. Keep arithmetic in code. If you need to count items that match a condition, ask one yes/no question per item and sum the answers in code.&lt;/p&gt;

&lt;p&gt;For data analytics specifically, here is how common lakehouse tasks tend to split:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpone737inc1h1i238bon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpone737inc1h1i238bon.png" alt="Which Job Goes to Which Model" width="800" height="742"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Two Work Together
&lt;/h2&gt;

&lt;p&gt;The strongest designs do not pick one model. They put each model where it is strongest and let code connect them. Four patterns show up again and again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 1: The cascade
&lt;/h3&gt;

&lt;p&gt;Send every row to the cheap, fast classifier first. Read the confidence. Accept high-confidence answers as final. Send the rest to an LLM, and send whatever the LLM is unsure about to a human.&lt;/p&gt;

&lt;p&gt;The economics are easy to reason about. If 85 percent of rows clear the confidence gate, the LLM sees 15 percent of the volume. Your LLM bill drops by roughly that ratio, and your pipeline runtime drops even more because the classifier is so much faster. The quality of the final table is set by the LLM on the hard rows, which is where you wanted it spent.&lt;/p&gt;

&lt;p&gt;The threshold is a business decision, not a model setting. A threshold of 0.9 sends more rows to the LLM and costs more. A threshold of 0.6 saves money and accepts more errors. Set it by measuring error rates at several thresholds on a labeled sample, then pick the point where the cost of an error and the cost of escalation balance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 2: The router in front of the agent
&lt;/h3&gt;

&lt;p&gt;AI agents that answer questions over lakehouse data make many small decisions per turn. Which tool fits this request? Does this need the semantic layer or a raw table? Is this request asking for data the user is not allowed to see? Is the retrieved context relevant?&lt;/p&gt;

&lt;p&gt;Each of those decisions is a classification. Running them through the agent's main LLM adds seconds per turn. Running them through a System One model adds tens of milliseconds. LangChain's integration exposes Jev as a classifier for exactly this role, including model routing: simple lookups go to a small, cheap model and hard debugging tasks go to a capable one. Vercel's team reported checking commands for safety 5 to 18 times faster after moving that check from an LLM to Jev.&lt;/p&gt;

&lt;p&gt;For a lakehouse agent connected through MCP (Model Context Protocol, the open standard for connecting AI clients to tools and data), a classifier sits naturally in front of tool calls. It decides whether a proposed query is safe to run, whether it needs confirmation, or whether to block it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 3: The guard on the way out
&lt;/h3&gt;

&lt;p&gt;LLMs generate. Classifiers check. After an LLM writes a summary or answers a question, a classifier asks narrow questions about the output. Does every cited passage support the claim it is attached to? Does the answer contain personal data? Does it contradict the retrieved source? TypeSafe's cookbook includes a citation check that uses a Choice to decide whether the quoted context supports a claim, with confidence flagging borderline cases for review.&lt;/p&gt;

&lt;p&gt;This is cheap enough to run on every response, which is the point. A guard that you only run on a sample is a monitoring tool. A guard that runs on every response is a control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 4: Features for traditional models
&lt;/h3&gt;

&lt;p&gt;This one gets less attention and matters a lot for analytics. Classification outputs are numbers. A Noul probability, a Score level, and a Choice distribution are all features you can feed into a gradient-boosted tree or a regression model. TypeSafe's docs include a cookbook that uses Jev questions to turn free text into numeric features for a CatBoost regressor.&lt;/p&gt;

&lt;p&gt;In a lakehouse, that means your text columns stop being dead weight in predictive models. A churn model that only saw structured fields can now include "probability the customer mentioned a competitor" and "frustration level on a five-point scale" from every support interaction. The LLM is not in this loop at all. The classifier converts text to features once, the features land in an Iceberg table, and the modeling team uses them like any other column.&lt;/p&gt;

&lt;h2&gt;
  
  
  Classification Inside an Apache Iceberg Lakehouse
&lt;/h2&gt;

&lt;p&gt;Apache Iceberg is an open table format. It adds a metadata layer on top of Parquet files in object storage so that many engines can read and write the same tables with ACID transactions, schema evolution, and time travel. That combination of properties makes Iceberg a good home for model outputs, and it is worth being specific about why.&lt;/p&gt;

&lt;h3&gt;
  
  
  Store labels as their own table
&lt;/h3&gt;

&lt;p&gt;The first design decision is where labels live. The tempting move is to add a &lt;code&gt;category&lt;/code&gt; column to the raw table and fill it in. Resist that. Keep the source table as it arrived and write classification results to a separate enrichment table keyed by the source row's ID.&lt;/p&gt;

&lt;p&gt;This separation pays off in several ways. You can reclassify everything with a new model version without rewriting the raw data. You can keep two model versions side by side and compare them. Your raw table's snapshots reflect ingestion only, which keeps its history easy to read. And access control gets simpler, because the enrichment table often carries less sensitive data than the raw text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Store probabilities, not just labels
&lt;/h3&gt;

&lt;p&gt;The enrichment table should carry the full answer, not only the winning label. At minimum, that means the chosen option, its confidence, and the probability distribution. For a Choice with a handful of options, a JSON string or a map column holds the distribution. For a Noul, one double column is enough.&lt;/p&gt;

&lt;p&gt;It also needs provenance columns: the exact model version that answered (Jev reports a versioned ID such as &lt;code&gt;jev-1.13.0&lt;/code&gt; even when you call an alias), a version string for your question set, a timestamp, and the route the row took through the cascade. Without these, you cannot tell which labels came from which model after an upgrade, and you cannot audit a bad label back to its cause.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Iceberg features that fit the problem
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Snapshots and time travel.&lt;/strong&gt; Every write to an Iceberg table creates a snapshot. When a model upgrade changes labels, you can query the enrichment table as of the old snapshot and compare it to the new one. That gives you a precise diff of every label that changed, which is the best possible input for deciding whether the upgrade is safe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Branches for write-audit-publish.&lt;/strong&gt; Iceberg supports named branches on a table. A classification job writes to a staging branch, a validation step checks the output (label distribution, confidence distribution, null counts, row counts against the source), and only then does the branch get fast-forwarded to main. Engines such as Spark expose this through Iceberg's write-audit-publish settings. This keeps a broken prompt or a model regression from ever reaching the dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags for model versions.&lt;/strong&gt; Tag the snapshot produced by each model version, such as &lt;code&gt;jev-1.13.0-baseline&lt;/code&gt;. Tags keep that snapshot from expiring and give analysts a stable name for comparisons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partitioning.&lt;/strong&gt; Partition the enrichment table by day of the labeling timestamp. Incremental jobs append one day at a time, and queries that look at recent labels prune old files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Incremental processing
&lt;/h3&gt;

&lt;p&gt;Classification jobs should process only new rows. The simplest approach is a watermark: read the latest source timestamp already present in the enrichment table, then scan the source table for rows after it. Iceberg's metadata makes this cheap because the scan planner skips files whose column statistics fall outside the filter. A more precise approach reads the changes between two snapshots of the source table, which some engines expose as an incremental or changelog read.&lt;/p&gt;

&lt;h3&gt;
  
  
  Throughput and cost math
&lt;/h3&gt;

&lt;p&gt;The published limits make sizing straightforward. Suppose a backlog of 10 million support tickets averaging 300 input tokens each, including the question definitions. That is 3 billion input tokens. At $0.042 per million, the model cost is about $126 for the entire backlog.&lt;/p&gt;

&lt;p&gt;The binding constraint is the request rate, not the price. At 1,200 requests per minute and one ticket per request, 10 million tickets take about 139 hours. Packing 20 tickets into one request as an array of state, with one question set per ticket, cuts that to about 7 hours. The token rate limit of 250,000 per second puts a floor of about 3.3 hours on 3 billion tokens. Packing trades accuracy for throughput, because TypeSafe documents that irrelevant detail in the state lowers accuracy. Test packed and unpacked requests on a labeled sample before committing to a batch size.&lt;/p&gt;

&lt;p&gt;Compare that to a frontier LLM on the same backlog. The input tokens alone cost more by an order of magnitude or two, and output tokens for JSON add more on top. The exact multiple depends on the model and your prompt, but launch coverage cites 40 to 400 times cheaper and 20 to 200 times faster for Jev. Even at the low end, that turns a quarterly project into a nightly job.&lt;/p&gt;

&lt;p&gt;For a self-hosted GLiClass deployment, the math is about hardware instead of tokens. A 151-million-parameter encoder on a single modern GPU processes thousands of short texts per second in batches. The cost is the GPU hours and the engineering time to run the service.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Worked Example: Support Tickets From Raw Text to Dashboard
&lt;/h2&gt;

&lt;p&gt;Here is a complete, small version of the cascade. The source is an Iceberg table of raw support tickets, &lt;code&gt;support.tickets_raw&lt;/code&gt;, with a ticket ID, subject, body, and ingestion timestamp. The goal is a labeled enrichment table and a weekly analytics query that uses probabilities, not just labels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create the enrichment table
&lt;/h3&gt;

&lt;p&gt;This DDL runs in Dremio against an Iceberg catalog. Any engine that creates Iceberg tables works the same way with its own syntax.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;lakehouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_labels&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;ticket_id&lt;/span&gt;            &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;category&lt;/span&gt;             &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;category_confidence&lt;/span&gt;  &lt;span class="nb"&gt;DOUBLE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;category_probs&lt;/span&gt;       &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;churn_prob&lt;/span&gt;           &lt;span class="nb"&gt;DOUBLE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;urgency_level&lt;/span&gt;        &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;urgency_confidence&lt;/span&gt;   &lt;span class="nb"&gt;DOUBLE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;route&lt;/span&gt;                &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;model_version&lt;/span&gt;        &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;question_set&lt;/span&gt;         &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;source_ingested_at&lt;/span&gt;   &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;labeled_at&lt;/span&gt;           &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;DAY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;labeled_at&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each column has a job. &lt;code&gt;category_probs&lt;/code&gt; holds the full distribution as a JSON string, so analysts can see when a ticket split between two teams. &lt;code&gt;churn_prob&lt;/code&gt; is a raw Noul probability. &lt;code&gt;route&lt;/code&gt; records which path the row took through the cascade. &lt;code&gt;model_version&lt;/code&gt; and &lt;code&gt;question_set&lt;/code&gt; make every label traceable. &lt;code&gt;source_ingested_at&lt;/code&gt; carries the source timestamp forward so the next run knows where to start.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Classify new rows and append
&lt;/h3&gt;

&lt;p&gt;This Python job uses PyIceberg, the official Python library for Iceberg, to read new tickets and write results. It uses the TypeSafe Python SDK for classification.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyarrow&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyarrow.compute&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pc&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pyiceberg.catalog&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_catalog&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pyiceberg.expressions&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GreaterThan&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typesafe_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Choice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Noul&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TypeSafeClient&lt;/span&gt;

&lt;span class="n"&gt;MODEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jev-1.13.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;         &lt;span class="c1"&gt;# pin a version, not the jev-latest alias
&lt;/span&gt;&lt;span class="n"&gt;QUESTION_SET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;support-v3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# bump whenever the questions change
&lt;/span&gt;&lt;span class="n"&gt;AUTO_ACCEPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.80&lt;/span&gt;           &lt;span class="c1"&gt;# confidence gate for the category answer
&lt;/span&gt;
&lt;span class="n"&gt;QUESTIONS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Choice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Which product area is the customer writing about?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;criteria&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;billing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Charges, invoices, refunds, payment methods&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integrations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Connectors, APIs, webhooks, third-party tools&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;performance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Slow queries, timeouts, dashboards that fail to load&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;account_access&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Login, SSO, passwords, permissions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Anything that fits none of the options above&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_signal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Noul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Does the customer say they plan to cancel, downgrade, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;or switch to another vendor?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How quickly does this ticket need a response?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;criteria&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No time pressure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Should be answered this week&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Should be answered today&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Production is down right now&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;LABEL_SCHEMA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category_confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;float64&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category_probs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_prob&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;float64&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency_level&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency_confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;float64&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;route&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question_set&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;labeled_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;span class="p"&gt;])&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load_new_tickets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;done&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selected_fields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,)).&lt;/span&gt;&lt;span class="nf"&gt;to_arrow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;as_py&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;tickets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load_table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;support.tickets_raw&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;scan_args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;selected_fields&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;watermark&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;scan_args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;row_filter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GreaterThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tickets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;scan_args&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_arrow&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;to_pylist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;label_ticket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
        &lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;QUESTIONS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;urgency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;churn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_signal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;AUTO_ACCEPT&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm_review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category_confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category_probs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;probabilities&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_prob&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;churn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;noul&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency_level&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urgency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency_confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;urgency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;route&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question_set&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;QUESTION_SET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ingested_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;labeled_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;catalog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_catalog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lakehouse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# settings come from .pyiceberg.yaml
&lt;/span&gt;    &lt;span class="n"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load_table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;support.ticket_labels&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;new_tickets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_new_tickets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;new_tickets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;

    &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tzinfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;TypeSafeClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MODEL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;label_ticket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;new_tickets&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pylist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LABEL_SCHEMA&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Walk through the pieces.&lt;/p&gt;

&lt;p&gt;The constants at the top are the contract for the whole job. &lt;code&gt;MODEL&lt;/code&gt; pins the exact version. The &lt;code&gt;jev-latest&lt;/code&gt; alias moves when TypeSafe ships a new release, and TypeSafe's own docs warn that answers behind an alias can change without any change on your side. If you tuned &lt;code&gt;AUTO_ACCEPT&lt;/code&gt; against version 1.13, a silent upgrade invalidates that tuning. &lt;code&gt;QUESTION_SET&lt;/code&gt; does the same job for your prompts. Change a criteria description and you have changed the classifier, so the version string changes too.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;QUESTIONS&lt;/code&gt; asks three things in one call. The Choice includes an &lt;code&gt;other&lt;/code&gt; option, which TypeSafe recommends whenever the list does not cover every possible input. Without it, the model has to force an odd ticket into one of the real categories. The criteria descriptions are written to separate the options from each other, because the model reads both the option names and their descriptions. The Score levels describe observable situations ("Production is down right now") instead of vague adjectives like "critical," which reduces disagreement between runs.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;load_new_tickets&lt;/code&gt; implements the watermark. It reads one column from the enrichment table, takes the maximum source timestamp, and filters the source scan with it. PyIceberg pushes the filter down to Iceberg's file-level statistics, so files with only older rows never get opened. On a very large enrichment table, reading the whole timestamp column gets slow. At that point, store the watermark in a small state table or read it from snapshot properties instead.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;label_ticket&lt;/code&gt; sends only the subject and body as state. It does not send customer metadata, account history, or other columns. TypeSafe documents that accuracy drops as irrelevant detail grows in the state, so the state stays small on purpose. The function stores the full probability distribution, the Noul probability, the Score level, and the versioned model ID that the API reports back.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;main&lt;/code&gt; runs the calls in sequence for readability. A production version uses the SDK's asynchronous client or a worker pool to stay near the rate limit. It also writes through a staging branch and validates before publishing, as described earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Escalate the uncertain rows to an LLM
&lt;/h3&gt;

&lt;p&gt;Rows with &lt;code&gt;route = 'llm_review'&lt;/code&gt; go to a generative model. In Dremio, the &lt;code&gt;AI_CLASSIFY&lt;/code&gt; SQL function sends text and a category list to a configured LLM and returns one of the categories. The escalation step runs as plain SQL next to the data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;lakehouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_labels_escalated&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;             &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;fast_category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category_confidence&lt;/span&gt;  &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;fast_confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;AI_CLASSIFY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'Which product area is this support ticket about? '&lt;/span&gt;
      &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ARRAY&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'billing'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'integrations'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'performance'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'account_access'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'other'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;llm_category&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;lakehouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_labels&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;lakehouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tickets_raw&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
  &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'llm_review'&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;labeled_at&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;DATE_SUB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CURRENT_DATE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The category list matches the Choice options exactly, so the two answers are comparable. Keeping &lt;code&gt;fast_category&lt;/code&gt; next to &lt;code&gt;llm_category&lt;/code&gt; gives you a running disagreement dataset for free. Every row where the two models disagree is a candidate for human review and a test case for the next version of your questions. A production pipeline appends to this table with &lt;code&gt;INSERT INTO&lt;/code&gt; on each run instead of recreating it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Query with probabilities
&lt;/h3&gt;

&lt;p&gt;The analytics layer combines both tables and uses the probabilities directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;DATE_TRUNC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'WEEK'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_ingested_at&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;week&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;COALESCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;llm_category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;              &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;final_category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                          &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;tickets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;churn_prob&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                 &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;expected_churn_mentions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CASE&lt;/span&gt; &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;churn_prob&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;confident_churn_mentions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category_confidence&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                        &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_category_confidence&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;lakehouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_labels&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;
&lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;lakehouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_labels_escalated&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
  &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'jev-1.13.0'&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;question_set&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'support-v3'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;
  &lt;span class="n"&gt;DATE_TRUNC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'WEEK'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_ingested_at&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;COALESCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;llm_category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;week&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;final_category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two churn columns sit side by side on purpose. &lt;code&gt;expected_churn_mentions&lt;/code&gt; sums probabilities and gives the best estimate of how many tickets carry churn language. &lt;code&gt;confident_churn_mentions&lt;/code&gt; counts only the clear cases, which is the number a customer success team acts on. When the two numbers drift apart week over week, the population of borderline tickets is growing. That is a signal worth investigating on its own.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;WHERE&lt;/code&gt; clause filters to one model version and one question set. Mixing labels from different versions in a single trend line produces steps in the chart that reflect model changes, not customer behavior.&lt;/p&gt;

&lt;p&gt;In Dremio, you save this as a view in the AI Semantic Layer with a description of each column. That description is what lets an AI agent answer "how many tickets mentioned churn last week" and pick the right column.&lt;/p&gt;

&lt;h3&gt;
  
  
  A self-hosted variation
&lt;/h3&gt;

&lt;p&gt;When text cannot leave your network, swap the classifier in Step 2 for GLiClass and keep everything else:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;gliclass&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GLiClassModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ZeroShotClassificationPipeline&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AutoTokenizer&lt;/span&gt;

&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;knowledgator/gliclass-modern-base-v2.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GLiClassModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tokenizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoTokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;add_prefix_space&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ZeroShotClassificationPipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;classification_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;multi-label&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cuda:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;billing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integrations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;performance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;account_access&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;scores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticket_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;best&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note what changes. GLiClass returns an independent score per label, not a probability distribution that sums to 1. The raw scores are not calibrated, so a 0.8 from GLiClass does not mean the same thing as a 0.8 from Jev. Before you use a confidence gate, fit a calibration step (temperature scaling or isotonic regression) on a labeled sample and store the calibrated number in the table. The schema, the cascade, and the SQL stay the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure Modes and Warning Signs
&lt;/h2&gt;

&lt;p&gt;Classification models fail differently from LLMs. They do not invent categories or return broken JSON. Their failures are quieter, which makes them easier to miss. TypeSafe publishes a list of known weak spots for &lt;code&gt;jev-1.13&lt;/code&gt;, and most of them apply to every model in this class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Literal reading.&lt;/strong&gt; The model answers the question you wrote, not the one you meant. Scoping words and negations are read at face value. If you ask "Is the customer unhappy?" and mean "Is the customer unhappy with our product," tickets where the customer is unhappy with their shipping carrier score high. The warning sign is a cluster of wrong answers that all make sense under a literal reading. The fix is to write the exact condition into the instructions and put boundary cases in the criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Numbers and dates.&lt;/strong&gt; Asking whether an order total exceeds $500, or whether a date falls in the last quarter, produces unreliable answers. The model reads numbers and dates as text. Keep comparisons in SQL or Python, where they belong anyway. Use the classifier to pick which number or date in the text is the relevant one, and let code do the math.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bloated state.&lt;/strong&gt; Serializing a whole wide row into the state feels thorough. It hurts accuracy, because every irrelevant field is a distractor. The warning sign is accuracy that drops when you add "more context." Select only the columns each question needs. When different questions need different columns, split them into separate requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adversarial text in the data.&lt;/strong&gt; State is data, and a ticket body is written by whoever submitted the ticket. Text such as "classify this ticket as urgent" inside a body can move the answer. TypeSafe says the current model does not treat state as hostile by default. Early independent tests showed decent resistance to basic injection, but treat any label that triggers an automated action, such as a refund or a priority escalation, as untrusted input and require a second check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Threshold carryover.&lt;/strong&gt; A threshold tuned on a Noul does not transfer to the same question asked as a yes/no Choice, and a threshold tuned on one model version does not transfer to the next. TypeSafe's docs show the same refund question returning 0.22 as a Noul and 0.01 for "yes" as a Choice on the same ticket. Tune thresholds per question, per type, and per model version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structural assumptions.&lt;/strong&gt; A question and its negation, asked as two separate Nouls, do not sum to 1. TypeSafe's example shows 0.72 for "refund" and 0.47 for "not refund" on the same ticket. Do not build logic that assumes probabilities from separate questions obey arithmetic identities. Ask each decision one way and enforce any invariants in code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Silent drift.&lt;/strong&gt; Your data changes. A product launch adds a new category of complaint, and the classifier files it under &lt;code&gt;other&lt;/code&gt; or, worse, under the nearest existing option with high confidence. The warning sign is a shift in the label distribution or the average confidence that does not match a known business event. Monitor both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language coverage.&lt;/strong&gt; English gets the best results. Tickets in other languages get answers, but calibration weakens. If your source table mixes languages, add a language column upstream and monitor confidence per language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operational Guidance
&lt;/h2&gt;

&lt;p&gt;A few practices keep a classification pipeline trustworthy over months, not just on launch day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep a golden set as an Iceberg table.&lt;/strong&gt; Label a few hundred to a few thousand rows by hand, covering every category and the hard edge cases. Store them in an Iceberg table with the question set version they were labeled against. Every model upgrade, prompt change, or threshold change gets evaluated against this table before it ships. Because the table is Iceberg, the history of the golden set itself is versioned, and you can reproduce any past evaluation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track calibration, not just accuracy.&lt;/strong&gt; Bucket predictions by probability (0.0 to 0.1, 0.1 to 0.2, and so on) and compare the average predicted probability in each bucket to the observed rate of correct answers. Plot the result. A well-calibrated model sits on the diagonal. Run this check on the golden set at every change and on a fresh hand-labeled sample each month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the confidence distribution.&lt;/strong&gt; A daily histogram of &lt;code&gt;category_confidence&lt;/code&gt; from the enrichment table is a cheap early warning. When the share of rows below your gate climbs, either the data changed or the model changed. The first calls for new questions. The second calls for a rollback to the pinned version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measure the escalation rate and its cost.&lt;/strong&gt; The percentage of rows routed to the LLM is your main cost lever. Track it alongside the disagreement rate between the fast model and the LLM on escalated rows. If disagreement on escalated rows is low, your gate is too strict and you are paying for LLM calls that agree with the cheap answer. Lower the threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upgrade on your schedule.&lt;/strong&gt; When a new model version ships, run it on the golden set, then run it on a recent week of production data into a separate branch of the enrichment table. Compare labels row by row using Iceberg time travel or a join between branches. Promote the new version only after the diff looks right, and retune thresholds as part of the promotion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Isolate the compute.&lt;/strong&gt; Classification backfills are bursty. On a self-hosted model, they compete for GPU time with anything else on the same cluster. For SQL-based LLM escalation, route AI function queries to a dedicated engine so a large batch does not slow down dashboards. Dremio supports engine routing rules keyed on whether a query calls AI functions, and other engines have their own workload management controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log the request ID.&lt;/strong&gt; Hosted APIs return a request identifier. Store it in a side table keyed by ticket ID. When a user disputes a label months later, you can trace it back to the exact call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Is Heading
&lt;/h2&gt;

&lt;p&gt;The launch of Jev did not invent classification. What it did was name a category and ship a clean interface for it, and that interface spread fast. Within two weeks, it showed up in gateways, agent frameworks, observability tools, MCP servers, and a handful of open-source reproductions.&lt;/p&gt;

&lt;p&gt;Three trends look likely to shape the next year.&lt;/p&gt;

&lt;p&gt;The first is the split between generation and decision becoming a standard part of AI architecture. Agent frameworks already route tool selection, safety checks, and context pruning to fast models. Expect the same split inside data platforms, where query engines call a decision model for row-level tagging and reserve generative models for summaries and extraction.&lt;/p&gt;

&lt;p&gt;The second is open models closing the gap. GLiClass and ModernBERT already give self-hosted teams a strong single-pass classifier. The missing piece has been trained-in calibration and a general interface for arbitrary typed questions. Several open projects are attacking exactly that. Treat their current benchmark claims with skepticism until someone runs a matched comparison, but the direction is clear.&lt;/p&gt;

&lt;p&gt;The third is classification outputs becoming first-class data. When every free-text column in a lakehouse can be turned into calibrated probabilities for a fraction of a cent per thousand rows, text stops being the part of the data you skip. Open table formats like Iceberg are well suited to hold this derived layer, because they version it, share it across engines, and let you roll it back when a model change goes wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LLMs made text classification easy to prototype and expensive to run. Models like Jev, along with open alternatives such as GLiClass and the new wave of Jev-style projects, move most of that work back to a tool built for it. The answer is a typed value with a calibrated probability, returned in milliseconds for a small fraction of the cost.&lt;/p&gt;

&lt;p&gt;The right design is not one model or the other. Put the fast classifier on every row. Use its confidence to decide what goes to an LLM and what goes to a person. Store full probabilities, model versions, and routes in their own Iceberg table, and let SQL and your semantic layer turn those numbers into analytics. Pin versions, keep a golden set, and watch the confidence distribution. Do those things and the text in your lakehouse becomes as queryable as the numbers next to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep Going
&lt;/h2&gt;

&lt;p&gt;If this piece was useful, I have written a lot more on building AI workloads on top of open lakehouse tables.&lt;br&gt;
&lt;em&gt;Architecting an Apache Iceberg Lakehouse&lt;/em&gt; (Manning) covers how to design the table, catalog, and engine layers that pipelines like this one run on.&lt;br&gt;
You can find every book I have written, across lakehouse architecture, Apache Iceberg, Apache Polaris, and AI, at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>data</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Apache Data Lakehouse Weekly: September 9 to 17, 2026</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Fri, 18 Sep 2026 09:13:23 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-9-to-17-2026-1509</link>
      <guid>https://dev.to/alexmercedcoder/apache-data-lakehouse-weekly-september-9-to-17-2026-1509</guid>
      <description>&lt;p&gt;Release managers had a humbling week. Iceberg Rust 0.11.0 failed two release votes, Polaris 1.8.0 drew a -1 on its first day, and the Polaris Catalog Migrator needed a second candidate. None of those failures came from broken code paths in the usual sense. They came from license notices, a crate that failed to publish, and an encryption check that one engine skipped and another engine enforced. The lakehouse projects are now mature enough that the hard problems live at the seams: between languages, between engines, between a spec and the many readers that implement it.&lt;/p&gt;

&lt;p&gt;That theme runs through every project this week. Iceberg and DataFusion voted to move the Rust DataFusion integration into the DataFusion project, which redraws a boundary that had been drawn in the wrong place. Parquet spent the week arguing about what a reader should do when it meets a file from the future. Polaris debated how to add Cloudflare R2 without bending its S3 configuration into a shape it was never meant to hold. Apache Ossie (incubating) proposed that one document should hold one semantic model, which is a seam question too. And Arrow shipped a Rust release that puts the new ALP floating point encoding into a production Parquet implementation for the first time.&lt;/p&gt;

&lt;p&gt;This issue covers the dev lists for Apache Iceberg, Apache Polaris, Apache Arrow, Apache Parquet, Apache DataFusion, and Apache Ossie (incubating), using the Pony Mail archives at lists.apache.org. Every thread link below points to the public archive so you can read the full discussion yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Iceberg
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The DataFusion integration finds a new home
&lt;/h3&gt;

&lt;p&gt;The biggest structural change of the week was a clean two-project vote. Kevin Liu &lt;a href="https://lists.apache.org/thread/ytb9x7x8ff3b7031kcrc05nzjtmh091s" rel="noopener noreferrer"&gt;opened the Iceberg-side vote&lt;/a&gt; to move the &lt;code&gt;iceberg-datafusion&lt;/code&gt; crate out of &lt;code&gt;apache/iceberg-rust&lt;/code&gt; and into a new &lt;code&gt;apache/datafusion-iceberg&lt;/code&gt; repository under the Apache DataFusion project. The move grew out of a &lt;a href="https://lists.apache.org/thread/1q65f5t3h0v6jsd3fb3mpz7sll8vsq2g" rel="noopener noreferrer"&gt;discussion thread&lt;/a&gt; where Andrew Lamb and Kevin agreed to hold one vote in each community. Gabriel Musat had already done the heavy lifting by porting the code and its full history into a pull request on the new repository.&lt;/p&gt;

&lt;p&gt;The Iceberg vote &lt;a href="https://lists.apache.org/thread/f21t4f8t8mx6pjjb9ojnszsbln0z5hr6" rel="noopener noreferrer"&gt;passed with 17 +1 votes&lt;/a&gt;, five of them binding, from Kevin, Fokko Driesprong, Renjie Liu, Szehon Ho, and Russell Spitzer. There were no -1 or +0 votes. Xuanwo summed up the reasoning in his +1: DataFusion contributors get a natural place to maintain the integration, and the code stays under Apache governance. On September 16, Andrew confirmed on the same thread that both votes had passed unanimously.&lt;/p&gt;

&lt;p&gt;Why does this matter to people who never read Rust? The integration is the glue that lets a DataFusion query plan read and write Iceberg tables. When it lived inside iceberg-rust, every DataFusion upgrade forced a change in the Iceberg repository, and the people who understood DataFusion's planner internals were not the people reviewing the pull requests. Putting the crate next to the engine it plugs into puts the reviewers next to the code. It also sets a pattern. Integration code belongs with the project whose APIs churn fastest, and the table format library can stay focused on the format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iceberg Rust 0.11.0 fails twice, and the failures teach something
&lt;/h3&gt;

&lt;p&gt;Danny Jones and Shawn Chang ran the &lt;a href="https://lists.apache.org/thread/mthncncxfnvr5c6r1tso1bnvysz1nrcz" rel="noopener noreferrer"&gt;0.11.0 RC1 vote&lt;/a&gt;, and early verifiers reported clean results. L. C. Hsieh ran 2,209 tests on an arm64 Mac with no failures. Anoop Johnson ran the full suite on Ubuntu 24.04, including Docker-based integration tests against MinIO, the REST catalog, Hive Metastore, and Spark. He flagged one flaky test that failed under parallel load with a SQLite "database is locked" error but passed in isolation.&lt;/p&gt;

&lt;p&gt;Then Kevin Liu &lt;a href="https://lists.apache.org/thread/433wxmpfddwx7y49vsc28zvy8fsb9xwt" rel="noopener noreferrer"&gt;voted -1&lt;/a&gt; for a reason no unit test catches. The new &lt;code&gt;iceberg-property-macro&lt;/code&gt; crate depends on nothing unusual, but it lists &lt;code&gt;iceberg&lt;/code&gt; itself as a versioned dev-dependency, and &lt;code&gt;iceberg&lt;/code&gt; depends on the macro crate. That circle means &lt;code&gt;cargo publish&lt;/code&gt; cannot package either crate first. Kevin pointed out that the project hit the same trap with 0.5.0, when the vote passed, the publish failed, and the team had to cut 0.5.1. He put up a fix and added a &lt;code&gt;cargo publish --dry-run&lt;/code&gt; check to CI so the problem surfaces on every pull request. He also noted that &lt;code&gt;make test&lt;/code&gt; from the tarball failed because the Hive test image's apt repository had expired. Danny agreed and cancelled the vote.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lists.apache.org/thread/bfh1x4wjlfbvy0qbgokk5vb12orljvn6" rel="noopener noreferrer"&gt;RC2 vote&lt;/a&gt; opened on September 15 and lasted less than a day. Alexander Bailey &lt;a href="https://lists.apache.org/thread/xt2rg18qwfqj4t3d6dkkwcnfrcvrrqms" rel="noopener noreferrer"&gt;voted -1&lt;/a&gt; after testing and realizing that the Rust encryption work skipped the tamper-proofing checks that Java requires. Files written by the Rust RC were unreadable in Java. He posted a fix in iceberg-rust PR #3236. Danny closed RC2 and asked reviewers to prioritize the fix so RC3 can follow.&lt;/p&gt;

&lt;p&gt;This is the multi-language Iceberg story in miniature. Encryption is one of the headline features in 0.11.0, and the only reliable test for it is a cross-engine round trip. A Rust writer that passes every Rust test can still produce files that a Java reader rejects. The community caught it during the vote, which is the process working. But it also makes the case for the next item.&lt;/p&gt;

&lt;h3&gt;
  
  
  A shared verification repository goes live
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian &lt;a href="https://lists.apache.org/thread/xjvwzfdwdb1gnq62whq3y5n11998vb4n" rel="noopener noreferrer"&gt;announced&lt;/a&gt; that the &lt;code&gt;apache/iceberg-verification&lt;/code&gt; repository now exists, following an earlier discussion and a successful vote. The repository will hold shared conformance fixtures for every Iceberg implementation. Early work covers type fixtures validated with JSON Schema and golden reference tables. Neelesh asked for reviewers on the open pull requests and for new issues from anyone with ideas about the fixture format or contribution model.&lt;/p&gt;

&lt;p&gt;Read that announcement next to the two failed Rust votes. A golden table written by Java and read by Rust, Go, C++, and Python, plus the reverse, is exactly the test that catches an encryption gap before a release candidate exists. The verification repository is still young, but it points at the right problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Third-party notices in compiled wheels
&lt;/h3&gt;

&lt;p&gt;Danny Jones raised &lt;a href="https://lists.apache.org/thread/k72c2y72w2j00xph2mn2bnsbvcbj43o4" rel="noopener noreferrer"&gt;a licensing gap&lt;/a&gt; in &lt;code&gt;pyiceberg-core&lt;/code&gt;, the Python package built from iceberg-rust. The wheels ship compiled third-party Rust code, but they do not reproduce the copyright notices for those dependencies. Danny opened iceberg-rust issue #3239 with a proposed fix that generates a THIRD-PARTY-LICENSES file at build time, and he plans to confirm the approach on the legal-discuss list.&lt;/p&gt;

&lt;p&gt;Ryan Blue agreed that anything distributed in compiled artifacts needs matching LICENSE and NOTICE content. He was less sure about the THIRD-PARTY-LICENSES file name, but said a pointer at the bottom of LICENSE is reasonable, and a NOTICE file with the legally required notices is mandatory. Shawn Chang pointed to Apache Paimon's Rust bindings as a working example. Their workflow scopes dependencies from the Python bindings' Cargo.toml, generates a report per target wheel, stages it in the artifact, and verifies it. Danny said this must be fixed before new releases of pyiceberg-core, and by extension iceberg-rust, since the two ship together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iceberg Java 1.12.0 is ready to cut
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian gave the &lt;a href="https://lists.apache.org/thread/csn3q4tbj1vbykfh3xtg4m0nz12y180o" rel="noopener noreferrer"&gt;1.12.0 release thread&lt;/a&gt; two updates. On September 12 he reported that all prior correctness fixes had merged, with one exception: PR #17984, which commits manifest list encryption keys together with the snapshot that uses them. Gábor Kaszab asked whether the missing cleanup mechanism for unused encryption keys in TableMetadata (PR #16353) belongs in this release. On September 16 Neelesh said #17984 had merged, that the key cleanup interface needs more debate and does not need to be rushed, and that the release candidate was ready to cut.&lt;/p&gt;

&lt;p&gt;Alex Reid replied on September 17 asking for two more items. One is a Kafka Connect fix (PR #17713) that prevents re-committing already committed files during certain rebalances. The other is the REST client implementation of &lt;code&gt;referenced-by&lt;/code&gt;, which the spec added last year. As of this writing, 1.12.0 has not been released. Watch the list for the RC vote.&lt;/p&gt;

&lt;h3&gt;
  
  
  Defining what gc.enabled means
&lt;/h3&gt;

&lt;p&gt;Alexander Bailey started a &lt;a href="https://lists.apache.org/thread/nxbxbs0x8h7xc73czgg3pryl42tr0zz5" rel="noopener noreferrer"&gt;careful thread&lt;/a&gt; about the &lt;code&gt;gc.enabled&lt;/code&gt; table property. His PR #17791 relaxes the check so that snapshot expiry can proceed in a metadata-only mode when garbage collection is disabled. Reviewers pushed back, and Alexander concluded that the real issue is that no one has defined the property. It is not in the spec. He catalogued at least three meanings inside the Java repository alone. &lt;code&gt;CatalogUtil.dropTableData&lt;/code&gt; skips data files but deletes metadata. Several Spark actions refuse to run at all. The Hive helper maps the flag onto Hive's external table purge setting. He then showed that iceberg-rust, iceberg-go, and iceberg-cpp each copied Java's strictest check, one of them word for word, while PyIceberg has no check at all.&lt;/p&gt;

&lt;p&gt;Russell Spitzer explained the history. The flag arrived when Iceberg started snapshotting existing data, where Iceberg owns new metadata but another system still owns the data files. The invariant is simple: do not remove this table's data files. He was happy to write that down in a spec appendix, and he did not see the Java behavior as ambiguous, since every operation that fails or skips work is one that can delete a data file. Daniel Weeks took a different position. He sees &lt;code&gt;gc.enabled&lt;/code&gt; as convention rather than specification and prefers to rely on catalogs to enforce deletion rules than on clients to behave.&lt;/p&gt;

&lt;p&gt;Alexander asked Dan whether that means catalogs should vend credentials without delete permission and leave deletion to catalog-managed maintenance. He then narrowed his PR. When &lt;code&gt;gc.enabled=false&lt;/code&gt;, the PR allows expiry only with &lt;code&gt;CleanupLevel.NONE&lt;/code&gt;, which removes snapshot entries without touching any file. The default mode and &lt;code&gt;METADATA_ONLY&lt;/code&gt; stay blocked. That is a sensible scoping move. It keeps the data-file invariant intact and leaves the bigger enforcement question for a separate discussion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Faster position delete checks in the vectorized reader
&lt;/h3&gt;

&lt;p&gt;A contributor writing as 전대홍 posted a &lt;a href="https://lists.apache.org/thread/5v8j1zj2l8ntygph47r0k61xyskxc5o1" rel="noopener noreferrer"&gt;performance proposal&lt;/a&gt; after Eduard Tudenhöfner suggested taking it to the list. Spark's vectorized reader asks the position delete index whether each row is deleted, one row at a time, while building the row-id mapping for a batch. Positions in a batch form a contiguous range, so every call repeats the same key extraction, bounds check, and binary search through the Roaring bitmap containers.&lt;/p&gt;

&lt;p&gt;PR #18027 adds a &lt;code&gt;forEachInRange&lt;/code&gt; default method to &lt;code&gt;PositionDeleteIndex&lt;/code&gt;. The default keeps the current loop, so external implementations keep working. &lt;code&gt;BitmapPositionDeleteIndex&lt;/code&gt; overrides it to resolve the range to at most two underlying bitmaps and walk each once. The contributor measured 2.6x to 9.3x less delete-check CPU, with end-to-end gains of 13 to 19 percent on narrow integer projections and noise-level gains at ten or more columns. They noted that the largest win lands just below 6.25 percent delete density, where the Roaring container is still a sorted array.&lt;/p&gt;

&lt;p&gt;Péter Váry suggested trying a batch iterator in the style of RoaringBitmap's batch iteration. The contributor built it and benchmarked six variants on a 5,000-row batch. The PR's approach came in at 0.45 microseconds per batch on sparse deletes, against 64.99 for the current code and 0.63 for the batch iterator. They kept the minimal API change and offered to test a persistent iterator if the community prefers that design.&lt;/p&gt;

&lt;h3&gt;
  
  
  Row-level concurrency for V3 deletion vectors
&lt;/h3&gt;

&lt;p&gt;EJ Song and Huaxin Gao continued a &lt;a href="https://lists.apache.org/thread/yn0c0495s6tqrx3ns0g39gon5n5vyco9" rel="noopener noreferrer"&gt;thread on row-granular conflict detection&lt;/a&gt; for deletion vectors. Today, two concurrent UPDATE or MERGE commits that touch the same data file conflict even when they delete different rows. Huaxin supported the direction but warned that the extra check adds driver-side reads during commit, and suggested gating it behind a table property. She pointed to prior art, including Iceberg PR #17754, which already merges concurrent deletion vectors for pure delete commits.&lt;/p&gt;

&lt;p&gt;EJ laid out a layered design. An operation gate comes first, then a metadata check on partition and column bounds, and only then a single small bitmap read when two commits really overlap on one file. Commits on disjoint files read nothing. EJ argued that the bitmap tier does not need a table property because its cost is already bounded. A later tier that compares actual values to resolve overlaps a bitmap cannot decide reads data files, and that tier is where a property makes sense. This is the kind of change that makes V3 tables far friendlier to high-concurrency streaming and CDC workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access delegation for the FILE type
&lt;/h3&gt;

&lt;p&gt;Sung Yun opened a &lt;a href="https://lists.apache.org/thread/s283f6obyqf6c14bn37sw7vtf9y1c9mj" rel="noopener noreferrer"&gt;discussion on access delegation&lt;/a&gt; for the proposed FILE type, which lets an Iceberg column reference external objects such as images or documents. Remote signing and vended credentials work when a storage client reads the object. Sung's concern is the multimodal case, where an inference service outside the query engine needs to fetch the object. He proposed letting clients ask the catalog to pre-sign FILE reference URLs, with a spec PR (#18080) and a client proof of concept (#18110). He had earlier posted a &lt;a href="https://lists.apache.org/thread/bwlwvhmk1sk49vjl96r8hsg40c5olgf9" rel="noopener noreferrer"&gt;related implementation&lt;/a&gt; that handles pre-signed URLs returned in place of native paths in a plan response.&lt;/p&gt;

&lt;p&gt;Prashant Singh noted that he and William Hyun opened a pre-signed URL proposal three months ago. Their proofs of concept, including one on Azure, showed limits in remote signing across clouds. He asked to build on those tracks rather than start parallel ones, and Sung agreed. Daniel Weeks drew a useful line. Pre-signed URLs from plan tasks arrive ready to use, so file IO only needs to detect and follow them. Remote pre-signing is an earlier step, where a native &lt;code&gt;s3://&lt;/code&gt; path goes to the catalog for signing before a stream opens. Dan wants remote pre-signing to become a real alternative to remote signing, largely because of Azure's limits, and does not think it needs a new &lt;code&gt;/presign&lt;/code&gt; endpoint. He also said he disagrees with the direction of the current bulk-signing proof of concept and wants the FILE sync to align the designs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smaller threads worth a look
&lt;/h3&gt;

&lt;p&gt;Shangqing Yang called a &lt;a href="https://lists.apache.org/thread/7tkqczcz25m91nptmvdpv6govrty7owh" rel="noopener noreferrer"&gt;vote&lt;/a&gt; to add the optional &lt;code&gt;key-id&lt;/code&gt; field to the Snapshot schema in the REST OpenAPI spec, which aligns the spec with what &lt;code&gt;SnapshotParser&lt;/code&gt; already supports. Sreesh Maheshwar &lt;a href="https://lists.apache.org/thread/k5hjjtmj1z3gdwtrlf4v5ovz1wp1p14q" rel="noopener noreferrer"&gt;revived the question&lt;/a&gt; of replacing MinIO in tests after MinIO images disappeared from Docker Hub and broke CI. Kevin Liu, Xuanwo, and Szehon Ho backed moving to RustFS, which PyIceberg and Polaris already use. Neelesh Salian asked for long-term support and prompt CVE fixes, citing an earlier security concern.&lt;/p&gt;

&lt;p&gt;Renjie Liu gave a +1 to a &lt;a href="https://lists.apache.org/thread/bpjjfboqcqgho0ozgqj11pznfrlgmt79" rel="noopener noreferrer"&gt;proposal for a standard User-Agent format&lt;/a&gt; for REST clients, and Kurtis Wright asked how the format should order vendor, engine, integration, library language, and runtime. A contributor &lt;a href="https://lists.apache.org/thread/kcjm71xhhdztgwwmvsymkjnpfjcvt47o" rel="noopener noreferrer"&gt;asked for review&lt;/a&gt; of an ObjectStore-based S3 backend for iceberg-rust in PR #3165. Péter Váry &lt;a href="https://lists.apache.org/thread/7pgktxpfz8vjgkbq7nkfgsf2hjk28z92" rel="noopener noreferrer"&gt;reported&lt;/a&gt; from the index support sync that the group will prioritize scalar indexes before other index types, that index data lives in region files tracked by a tracking file, and that the scalar index spec PR #16961 is ready for review. Huaxin Gao &lt;a href="https://lists.apache.org/thread/qron2f2k7rochgqm37crfhybcw4ddxcn" rel="noopener noreferrer"&gt;scheduled one more constraint sync&lt;/a&gt; for September 17 and asked for reviews of the CHECK constraint spec PR #17822.&lt;/p&gt;

&lt;p&gt;Ryan Blue shared the &lt;a href="https://lists.apache.org/thread/xyq8m7thmbt602g8hzz19oq8csp9gfrr" rel="noopener noreferrer"&gt;September board report&lt;/a&gt; with a new format that summarizes shipped releases and spec changes instead of sync highlights. It lists 40 committers and 25 PMC members, and releases including Terraform Provider 0.1.0, PyIceberg 0.12.0, Rust 0.10.0 and 0.10.1, and C++ 0.3.0. Ryan asked release managers to write real highlights in their vote and announce emails, and Danny Jones committed to doing that for iceberg-rust. On September 17, Fokko Driesprong &lt;a href="https://lists.apache.org/thread/gtfg34k7w2m7po0ngh62x9von5hmjw4h" rel="noopener noreferrer"&gt;announced&lt;/a&gt; that Gang Wu has joined the Iceberg PMC, crediting Gang's work on the inception and growth of Iceberg C++.&lt;/p&gt;

&lt;p&gt;On the community side, Kevin Liu &lt;a href="https://lists.apache.org/thread/xq4hc54s4q532jqoyvtlf0hgk3y07t5z" rel="noopener noreferrer"&gt;announced&lt;/a&gt; the first Apache Iceberg Virtual Meetup, covering GSoC projects and commutative compaction on Friday, September 18. Alex Stephen &lt;a href="https://lists.apache.org/thread/fy7o4kyvp2fjotxrpsf4y8nmotyfp6o9" rel="noopener noreferrer"&gt;announced&lt;/a&gt; a Seattle community meetup on October 21, with session ideas due October 6. Sung Yun, Walaa Eldin Moustafa, and others &lt;a href="https://lists.apache.org/thread/vrd7x2ymo9y259frno2b9rgnmy3qxyvg" rel="noopener noreferrer"&gt;volunteered&lt;/a&gt; for the Iceberg Summit 2027 selection committee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Polaris
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Polaris 1.8.0 reaches a vote, and a NOTICE question stops it
&lt;/h3&gt;

&lt;p&gt;Jean-Baptiste Onofré &lt;a href="https://lists.apache.org/thread/o0dbkrt83krfkmq1zj1hoxzcs0nvkln3" rel="noopener noreferrer"&gt;opened the vote&lt;/a&gt; for Apache Polaris 1.8.0 RC0 on September 17, after &lt;a href="https://lists.apache.org/thread/kbg0wvolttoyz1x1mpm3cq9ol25sd9sn" rel="noopener noreferrer"&gt;flagging on the proposal thread&lt;/a&gt; that he was preparing it. The candidate ships source tarballs, Helm charts, a Python CLI wheel on Test PyPI, and staged Maven artifacts. Within hours, Dmitri Bourlatchkov &lt;a href="https://lists.apache.org/thread/4c5cyofrw0h9786l2s9m8po372khmwm4" rel="noopener noreferrer"&gt;voted -1&lt;/a&gt;. Bundled Iceberg jars such as &lt;code&gt;iceberg-api-1.11.0.jar&lt;/code&gt; carry a NOTICE that references Kite, and &lt;code&gt;commons-math3-3.6.1.jar&lt;/code&gt; carries one that references Orekit. The Polaris bundle NOTICE does not propagate either. Dmitri asked whether those notices belong in the Polaris bundle, and the vote is open as of this writing.&lt;/p&gt;

&lt;p&gt;The same pattern hit the Polaris tools repository. Ajantha Bhat's &lt;a href="https://lists.apache.org/thread/c53d1bkxgcjy6bz13rbq8l3d2z9xwjr2" rel="noopener noreferrer"&gt;Iceberg Catalog Migrator 1.1.0 RC1&lt;/a&gt; drew a -1 from Dmitri because the CLI jar bundles a &lt;code&gt;taglib.tld&lt;/code&gt; file with an Oracle copyright header under GPL v2 with the Classpath Exception, and the bundled LICENSE does not mention it. Ajantha &lt;a href="https://lists.apache.org/thread/gtl7f81r316c6v2n24hgdw8d97zv7pbv" rel="noopener noreferrer"&gt;posted RC2&lt;/a&gt; on September 17.&lt;/p&gt;

&lt;p&gt;If you are keeping score, that is four release candidates across Iceberg Rust and Polaris this week that stopped on licensing or packaging, not on logic. Fat jars and compiled wheels pull in other projects' legal text, and the ASF requires it to travel with the artifact. The reviewers doing this checking are doing unglamorous, important work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloudflare R2 support and the shape of S3 configuration
&lt;/h3&gt;

&lt;p&gt;The most instructive design thread on the Polaris list started with a first-time contributor. Austen Tomek from Chicago Trading Company &lt;a href="https://lists.apache.org/thread/9vr18s6t11x5bvt93r8bnt1lw3yw9b4m" rel="noopener noreferrer"&gt;proposed R2 support&lt;/a&gt; with scoped credential vending. R2 speaks the S3 API but has no AWS STS. Cloudflare instead lets a server holding a parent API token sign short-lived, bucket-scoped credentials locally. Austen's prototype does that inside Polaris, maps Polaris location grants to prefix and access scopes, and reuses the existing credential cache.&lt;/p&gt;

&lt;p&gt;Yufei Gu confirmed the model: Polaris issues the credentials without calling Cloudflare, the client signs its own S3 requests, and R2 enforces scope and expiry. His first instinct was to treat R2 as S3-compatible storage without a new config type, and he asked whether unmodified clients work. Austen reported that they do. PyIceberg 0.11.1 and 0.12.0, DuckDB 1.5.5, and Iceberg Java 1.11.0 through the stock RESTCatalog and S3FileIO all read and wrote without any R2-specific client code. Spark, Trino, and Flink are not tested yet.&lt;/p&gt;

&lt;p&gt;The debate then split along a clear line. Sushant Raikar laid out two options, a first-class R2 type with its own FileIO or R2 as S3-compatible storage, and pushed for a lowest common denominator across S3-compatible backends. Jean-Baptiste argued for building under the existing S3 config and noted that &lt;code&gt;AwsStorageConfigurationInfo&lt;/code&gt; already carries &lt;code&gt;endpoint&lt;/code&gt;, &lt;code&gt;stsEndpoint&lt;/code&gt;, &lt;code&gt;pathStyleAccess&lt;/code&gt;, and an &lt;code&gt;stsUnavailable&lt;/code&gt; flag. He framed the real design question as a pluggable vending path for S3-compatible stores without STS. Dmitri leaned toward a separate &lt;code&gt;R2StorageConfigInfo&lt;/code&gt;, since mixing Cloudflare account IDs into an AWS-shaped class blends unrelated concepts.&lt;/p&gt;

&lt;p&gt;Prithvi S offered the cleanest synthesis. Keep the client side as plain S3, with &lt;code&gt;s3://&lt;/code&gt; locations and S3FileIO. On the server side, avoid overloading &lt;code&gt;stsUnavailable&lt;/code&gt;, because that flag means "vend nothing" today, and R2 needs the opposite: vend, just not through STS. Reusing it silently changes behavior for existing MinIO and NetApp catalogs.&lt;/p&gt;

&lt;p&gt;Austen closed the loop on September 14 and again on September 16. R2 has no IAM roles or ARNs, so he left those fields empty. He added one new S3 field, now named &lt;code&gt;credentialVendingMechanism&lt;/code&gt;, with a server allowlist, &lt;code&gt;SUPPORTED_S3_CREDENTIAL_VENDING_MECHANISMS&lt;/code&gt;, that defaults to STS only. Following Dmitri's suggestion, mechanisms are CDI beans looked up by identifier, so downstream builds can add their own without changing the API spec. Stage one is &lt;a href="https://github.com/apache/polaris/pull/5513" rel="noopener noreferrer"&gt;PR #5513&lt;/a&gt;, and the R2 bean follows in a second PR. Yufei noted the underlying mismatch: the S3 storage type mixes shared S3 settings with AWS-specific ones, and a future refactor can split them. This is a good template for how to add a backend to a catalog without special-casing it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pagination moves from optional to default
&lt;/h3&gt;

&lt;p&gt;Pagination came up in four threads. Yong Zheng opened separate discussions for the &lt;a href="https://lists.apache.org/thread/yd15fv8g930p981tjv4v8r6xblvy7q7x" rel="noopener noreferrer"&gt;generic table API&lt;/a&gt; and the &lt;a href="https://lists.apache.org/thread/3g0zp5sm0vkqxp1yn7o1mdbdxzyor8p9" rel="noopener noreferrer"&gt;policy API&lt;/a&gt;. In both cases the REST spec advertises &lt;code&gt;page-token&lt;/code&gt; and &lt;code&gt;page-size&lt;/code&gt;, but the server calls &lt;code&gt;PageToken.readEverything()&lt;/code&gt; and ignores them. For generic tables, Prithvi and Jean-Baptiste steered toward a default method on the &lt;code&gt;GenericTableCatalog&lt;/code&gt; SPI, since federated Hive, Hadoop, and BigQuery catalogs implement that interface and a concrete-class overload is unreachable from the handler. Yong posted &lt;a href="https://github.com/apache/polaris/pull/5533" rel="noopener noreferrer"&gt;PR #5533&lt;/a&gt;. For policies, the group agreed to paginate &lt;code&gt;listPolicies&lt;/code&gt; now, including when filtering by policy type, and to handle &lt;code&gt;applicable-policies&lt;/code&gt; separately.&lt;/p&gt;

&lt;p&gt;Ayush Saxena raised a &lt;a href="https://lists.apache.org/thread/mmqllcbt2lfsrq571cfwbymgfwoxqdf0" rel="noopener noreferrer"&gt;spec tension&lt;/a&gt; around a configurable server-side maximum page size. The Iceberg REST spec says a server must return everything in one response when the client sends no page token. A server cap truncates that response, and an older client that ignores &lt;code&gt;next-page-token&lt;/code&gt; reports a partial list as complete. Dmitri called server-side truncation a basic overload control and a reasonable deviation, since administrators can choose the setting per deployment. He proposed merging.&lt;/p&gt;

&lt;p&gt;Then Yufei &lt;a href="https://lists.apache.org/thread/9ofwv04lj2fklksqsfg9y3r4c5rlhvrc" rel="noopener noreferrer"&gt;proposed&lt;/a&gt; turning &lt;code&gt;LIST_PAGINATION_ENABLED&lt;/code&gt; on by default. Jean-Baptiste noted that the maximum page size defaults to unlimited, so clients that send no pagination parameters see no change. Ayush, Yong, Nándor Kollár, and Dmitri all backed keeping the flag as an escape hatch for a couple of releases, and Yong opened &lt;a href="https://github.com/apache/polaris/pull/5534/changes" rel="noopener noreferrer"&gt;PR #5534&lt;/a&gt;. EJ Wang raised the same question for the new Tag API, which is covered below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read replicas, and the consistency they break
&lt;/h3&gt;

&lt;p&gt;Yong Zheng started a &lt;a href="https://lists.apache.org/thread/ggcm8mnx6sgf5vdmo3lmrqkf30y42pvm" rel="noopener noreferrer"&gt;thread on offloading read-only requests&lt;/a&gt; to a database replica when a client sends a custom header. His motivation is connection math on the JDBC backend: at 50 connections per pod and a 5,000-connection database limit, a deployment tops out near 100 pods.&lt;/p&gt;

&lt;p&gt;The pushback was about correctness. Prithvi pointed out that the load test Yong cited ran at roughly 400 requests per second sustained with mostly idle connections, so connection limits were not the bottleneck. He also reminded the group that Iceberg clients expect to read their own writes, and asynchronous replicas break that. Jean-Baptiste argued against header-based routing, since Spark and Flink will never send a Polaris-specific header, and against verb-based routing, since some reads in &lt;code&gt;JdbcBasePersistenceImpl&lt;/code&gt; have side effects such as idempotency-key bookkeeping. He suggested routing at the persistence method level. Dmitri was more open to an explicit opt-in header, perhaps renamed to make the staleness risk obvious, and warned that the shared entity cache will misbehave with two connection pools. Yufei asked for measurements first: connection wait times, database query time, and metadata file IO, which often dominates &lt;code&gt;loadTable&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Location overlap checks
&lt;/h3&gt;

&lt;p&gt;Dmitri Bourlatchkov opened a &lt;a href="https://lists.apache.org/thread/m0jy5mh7wch0wxm5gl2q52g9g4s6krr8" rel="noopener noreferrer"&gt;discussion on &lt;code&gt;hasOverlappingSiblings()&lt;/code&gt;&lt;/a&gt;. With the &lt;code&gt;OPTIMIZED_SIBLING_CHECK&lt;/code&gt; flag on, persistent implementations search the whole catalog. With it off, &lt;code&gt;LocalIcebergCatalog&lt;/code&gt; searches only immediate siblings. Dmitri argued that a speed-up flag should not change what a validation checks, and proposed narrowing the implementations. Prithvi and Eric Maynard disagreed. Eric recalled that the catalog-wide search was an intentional fix for a security gap under certain configurations. Jean-Baptiste identified the concrete case: with &lt;code&gt;ALLOW_UNSTRUCTURED_TABLE_LOCATION&lt;/code&gt;, a table under one namespace can point inside another namespace's tree, and only the catalog-wide check sees it. He prefers a confusingly named flag over a correctly named, weaker check. Dmitri agreed with catalog-wide checks and asked why that coverage is not the default.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tags, semantic model privileges, and the CLI
&lt;/h3&gt;

&lt;p&gt;EJ Wang posted &lt;a href="https://lists.apache.org/thread/kh7m10bwcb57gd2csvtr52g7cly8h3tr" rel="noopener noreferrer"&gt;progress on the Tag spec&lt;/a&gt;. PR1 covers the API contract, PR2 covers definition CRUD, and a new PR3 adds assign and unassign for catalogs, namespaces, tables, and top-level columns, with atomic detach-all on JDBC and in-memory backends. Version tokens are opaque, and stale updates return 409. Dmitri asked for persistence SPI details and a dedicated section on new authorizer operations. EJ later asked the community to pick between keeping Tags under the existing catalog URL root or giving them an independent &lt;code&gt;/api/tags/v1&lt;/code&gt; root, and between opt-in and always-on pagination.&lt;/p&gt;

&lt;p&gt;Yufei Gu asked for feedback on &lt;a href="https://lists.apache.org/thread/50q3g2p3g2f63mkkkxt8d460fxct1229" rel="noopener noreferrer"&gt;dedicated semantic model privileges&lt;/a&gt; in PR #5492, splitting the single &lt;code&gt;CATALOG_MANAGE_CONTENT&lt;/code&gt; privilege into list, create, read, write, drop, full metadata, and grant management. Prithvi supported it and caught that &lt;code&gt;NAMESPACE_FULL_METADATA&lt;/code&gt; and &lt;code&gt;CATALOG_FULL_METADATA&lt;/code&gt; should not act as umbrellas, and Yufei fixed that. Jean-Baptiste strongly backed dedicated privileges that mirror other entity types. Semantic models in a catalog, with their own grants, connect directly to the Ossie work later in this issue.&lt;/p&gt;

&lt;p&gt;A GitHub discussion asking for table and view support in &lt;code&gt;polaris setup export/apply&lt;/code&gt; became a &lt;a href="https://lists.apache.org/thread/m6tpr9oozrpx0fko3qbl0y5qm3mvdv8k" rel="noopener noreferrer"&gt;CLI thread&lt;/a&gt;. Yong proposed adding register and create. Prithvi argued that register, which takes a name and a metadata.json location and preserves history, is the primitive operators need. Jean-Baptiste found that the generated REST client already exposes register, so the change is mostly wiring. Dmitri and Yufei agreed that create is outside the CLI's scope for now. The sequence the group settled on is register first, then export and apply with table and view grants, and file-based create later if anyone needs it.&lt;/p&gt;

&lt;p&gt;Rounding out the week, Dmitri put &lt;a href="https://lists.apache.org/thread/qpnz3qt3159p7nw9n1mohl0zfpgojzcm" rel="noopener noreferrer"&gt;consistent multi-object persistence changes&lt;/a&gt; on the September 17 community sync agenda. Arun Suri agreed to &lt;a href="https://lists.apache.org/thread/233n3rc9gjcfdrl99m7do6zm86rflb4h" rel="noopener noreferrer"&gt;defer his ambiguous JDBC commit fix&lt;/a&gt; until PR #5263 merges, then add a reconciliation step that reloads the entity and treats a matching metadata location as success. And Yufei, Ayush, Robert Stupp, and Jean-Baptiste &lt;a href="https://lists.apache.org/thread/b394r9w67x8ngjz9z0wzk877ql791jq7" rel="noopener noreferrer"&gt;discussed GitHub Actions queue delays&lt;/a&gt; caused by ASF-wide runner saturation. Ayush tested which short jobs can move to &lt;code&gt;ubuntu-slim&lt;/code&gt;, and the group decided to hold off unless delays return.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Arrow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arrow Rust 60.0.0 ships the first ALP-enabled Parquet implementation
&lt;/h3&gt;

&lt;p&gt;Andrew Lamb &lt;a href="https://lists.apache.org/thread/js55dsvyxvwwzdch79pstlfom5yzm03r" rel="noopener noreferrer"&gt;called the vote&lt;/a&gt; for Arrow Rust 60.0.0 on September 10, and it &lt;a href="https://lists.apache.org/thread/jhs0lrq44wbm4j6gn1gbx8c7hc9zhw6t" rel="noopener noreferrer"&gt;passed on September 15&lt;/a&gt; with five +1 votes, three binding, from L. C. Hsieh, Jeffrey Vo, and others. Andrew did not undersell it. He called the release "epic" and wrote that arrow-rs is, as far as he knows, the first Parquet implementation to include the new ALP encoding. He credited Kosta Tarasov and Devan for leading that work, Ed Seidl for the new Parquet PageIndex structures, and Richard Baah and others for a long list of performance improvements. The crates, including &lt;code&gt;arrow&lt;/code&gt; and &lt;code&gt;parquet&lt;/code&gt; 60.0.0, are on crates.io.&lt;/p&gt;

&lt;p&gt;ALP, short for Adaptive Lossless floating-Point compression, targets float and double columns, which general-purpose encodings handle poorly. Sensor readings, prices, and model features all live in those columns. Having a shipped implementation in Rust matters because DataFusion, iceberg-rust, and a long list of Rust-native engines consume the &lt;code&gt;parquet&lt;/code&gt; crate directly.&lt;/p&gt;

&lt;p&gt;Xuanwo's review of the release is worth reading for anyone who runs release votes. He first voted +0 because &lt;code&gt;arrow-array/src/delta.rs&lt;/code&gt; contains MIT-licensed code derived from chronoutil, and the root LICENSE.txt does not identify it. After another look he decided a NOTICE mention is enough and changed to +1. Andrew filed issue #11098 to track the fix for the next release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Object Store 0.14.2 needs a second candidate
&lt;/h3&gt;

&lt;p&gt;The Rust &lt;code&gt;object_store&lt;/code&gt; crate had a similar week. Andrew's &lt;a href="https://lists.apache.org/thread/pz0f6vxr104brbql0g7zv09nz03cddnr" rel="noopener noreferrer"&gt;0.14.2 RC1&lt;/a&gt; drew a -1 from Xuanwo because &lt;code&gt;src/client/s3.rs&lt;/code&gt; was missing the first line of its ASF license header. Andrew traced the defect back more than three years and asked whether it needed a new candidate, since it was not a regression. Xuanwo moved to +0 but noted the vote had just started and a wrong license header is a real risk for downstream users. Andrew cut &lt;a href="https://lists.apache.org/thread/26bd4y4fydrbx6j5959dn9hrphghdo8k" rel="noopener noreferrer"&gt;RC2&lt;/a&gt; with the header restored, and it &lt;a href="https://lists.apache.org/thread/ymq7yj45rr9bzwsjjpnqg80lryv5l29t" rel="noopener noreferrer"&gt;passed on September 15&lt;/a&gt; with three binding votes. Version 0.14.2 is on crates.io. &lt;code&gt;object_store&lt;/code&gt; sits under DataFusion, iceberg-rust, and many other Rust data tools, so its releases propagate quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  A canonical range type and Lakehouse Day EU
&lt;/h3&gt;

&lt;p&gt;Rok Mihevc &lt;a href="https://lists.apache.org/thread/44cgno5oq9hphrk348solz71t6pwygpo" rel="noopener noreferrer"&gt;revived the proposal&lt;/a&gt; for an &lt;code&gt;arrow.range&lt;/code&gt; canonical extension type for bounded ranges. Florian replied that he still wants to finish it and addressed Felipe Oliveira Carvalho's earlier suggestion to use separate types for open and closed bounds. After reading how Arrow C++ resolves compute kernels, Florian concluded that separate types help less than they seem. Every extension type reports &lt;code&gt;Type::EXTENSION&lt;/code&gt;, so a kernel matcher needs a custom check on the extension name either way. A single &lt;code&gt;arrow.range&lt;/code&gt; with a &lt;code&gt;closed&lt;/code&gt; flag is the same amount of work, and the flag is read once when the type is reconstructed, not on every compute call.&lt;/p&gt;

&lt;p&gt;Danica Fine &lt;a href="https://lists.apache.org/thread/4ym6b3p62c0gsv59r29xtqqf22kkgqhh" rel="noopener noreferrer"&gt;invited the Arrow community&lt;/a&gt; to Lakehouse Day EU 2026 on Saturday, October 10 in Glasgow, co-located with Community Over Code. The full-day, multi-track event covers Iceberg, Flink, Spark, Arrow, Parquet, Polaris, Gravitino, Paimon, Hudi, XTable, Fluss, and more. The schedule includes a talk revisiting an Arrow-based client protocol redesign and a closing panel on the future of the open lakehouse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Parquet
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Format 2.14.0 is released
&lt;/h3&gt;

&lt;p&gt;Fokko Driesprong &lt;a href="https://lists.apache.org/thread/g04r9jfsbnswck76yj2kf5bqwo0fnvko" rel="noopener noreferrer"&gt;announced on September 11&lt;/a&gt; that the Parquet Format 2.14.0 vote passed, with binding +1 votes from Gang Wu, Gábor Szádovszky, Andrew Lamb, and Fokko, plus non-binding votes from Divjot Arora and Vinoo Ganesh. Fokko thanked László for correcting links that had a copy-paste error. Andrew followed up with &lt;a href="https://lists.apache.org/thread/m1mqyy3y02z8h4cb96nmq637o1l9l5mv" rel="noopener noreferrer"&gt;website pull requests&lt;/a&gt; that document the 2.14 changes, including ALP and the FILE logical type, and asked for reviews.&lt;/p&gt;

&lt;p&gt;On the same day, Divjot Arora &lt;a href="https://lists.apache.org/thread/kq274hjk3soxljp2ty56k59tm7wsq1gn" rel="noopener noreferrer"&gt;closed the vote&lt;/a&gt; on Extended Precision Nanosecond Timestamps with seven +1 votes, five binding, from Daniel Weeks, Micah Kornfield, Ryan Blue, Gábor Szádovszky, and Fokko. The change will merge as parquet-format PR 601. Nanosecond timestamps with a wider range matter for anyone storing high-frequency trading or telemetry data that also needs to represent dates far from the epoch.&lt;/p&gt;

&lt;p&gt;ALP implementations keep moving across languages. The &lt;a href="https://lists.apache.org/thread/yfmbndqfpprnp2q01wnjhcn2jn80rrwc" rel="noopener noreferrer"&gt;September 9 sync notes&lt;/a&gt; from Andrew Lamb report that the Rust implementation is merged, C++ is waiting on approval after several review rounds, and Java is under review. Vinoo Ganesh &lt;a href="https://lists.apache.org/thread/pjyr0qlpjmovydtl2hv3kv7ohgj4m6pv" rel="noopener noreferrer"&gt;posted an update&lt;/a&gt; on the Java side: he split parquet-java PR #3791 out of the main ALP PR #3397 based on Russell Spitzer's feedback, and plans to merge the smaller PR first. The sync notes also recorded progress on the vector logical type. The group roughly agreed that the finite-element requirement is a MUST, that statistics help but readers must not depend on them, and that a LIST-based layout is the more popular option, though without full consensus.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should a reader do with a file from the future?
&lt;/h3&gt;

&lt;p&gt;The week's defining Parquet debate began when Ryan Blue &lt;a href="https://lists.apache.org/thread/7ghf93l0ss74l3k4jo9qc2bdmrmng3hm" rel="noopener noreferrer"&gt;split a question out&lt;/a&gt; of the &lt;a href="https://lists.apache.org/thread/w963ds7hnlvf4rxjtnrocq0wk28g1y4n" rel="noopener noreferrer"&gt;versioning proposal thread&lt;/a&gt;. Daniel Weeks had summarized that thread's community sync discussion, noting that the real disagreement is less about recording a version in the file and more about what guarantees readers get. Ryan framed three options. Option 1: a reader must fail on a file written with an unsupported format version. Option 2: a reader should attempt to read it. Option 3: leave it to implementations.&lt;/p&gt;

&lt;p&gt;Ryan was careful to scope the question. He is not talking about "preview" features like new encodings or forward-compatible logical types, which already fail only when a reader projects the affected column. The question covers changes to metadata semantics, such as making &lt;code&gt;path_in_schema&lt;/code&gt; optional, adding offset and size fields to page headers so page data can move, or fixing statistics written with the wrong sort order. In a separate reply, Ryan said he strongly supports option 1. Option 2 requires a guarantee that every future change will either fail or read correctly in every existing reader, including custom Thrift parsers built for speed whose handling of missing required fields nobody knows.&lt;/p&gt;

&lt;p&gt;Andrew Lamb wrote a clear summary of the trade-off. Option 1 makes the spec easier to change but forces readers to reject files they know how to read. Option 2 lets readers handle more files but makes every future spec change carry a compatibility burden that is hard to define. Andrew's view is that Parquet is implicitly option 2 today, and that changing it now creates confusion. Ryan disagreed: the current state is that Parquet avoids breaking changes altogether, using tricks like a second set of min and max fields when the string sort bug surfaced, and he wants a real mechanism for making breaking changes.&lt;/p&gt;

&lt;p&gt;Antoine Pitrou questioned the "preview" label and asked whether Thrift parsers actually reject payloads missing a required field. Will Edwards argued for what he called option 0: keep Thrift-based evolution, bump the parquet-format package version as a hint to implementers, and do not gate files on a version. He noted that one widely used reader does not even check the trailing PAR1 magic bytes. Ryan replied that he voted against making &lt;code&gt;path_in_schema&lt;/code&gt; optional precisely because it breaks existing guarantees.&lt;/p&gt;

&lt;p&gt;Later in the week, the momentum shifted toward option 1. Kurtis Wright said a clear failure with an actionable error is the better user experience, and that implementations choosing to skip version checks accept the consequences. Xiening Dai voted for option 1, opposed changing the magic bytes because many tools use them to detect file type, and proposed shipping a reader patch that fails fast on newer versions before any breaking change lands. Fokko Driesprong also backed option 1 and suggested folding the &lt;code&gt;path_in_schema&lt;/code&gt; footer trim into the proposed new footer, so all the breaking changes arrive together in one version.&lt;/p&gt;

&lt;p&gt;This debate matters well beyond Parquet. Every table format, every query engine, and every lakehouse catalog depends on Parquet readers behaving predictably. A strict version gate makes the format easier to improve, which is how Parquet gets smaller footers and faster metadata. It also means operators will need to track reader versions across every engine in their stack before they turn on new writer features.&lt;/p&gt;

&lt;h3&gt;
  
  
  New type proposals and forward compatibility
&lt;/h3&gt;

&lt;p&gt;Neelesh Salian &lt;a href="https://lists.apache.org/thread/s0tmjgfnvwn793d7v8mor8r8sz0hb44t" rel="noopener noreferrer"&gt;proposed WIRE&lt;/a&gt;, a logical type for serialized wire-format messages such as Protocol Buffers and Thrift compact. Today, teams either store those messages as opaque blobs, explode every field into columns with a full decode on write, or convert to Variant and carry a field-name dictionary that protobuf never needed. WIRE stores the original message verbatim in a value column, so it round-trips byte for byte, and shreds the queried fields into native columns using the Variant shredding layout. Because protobuf and Thrift address fields by number, no metadata column is needed, and a reader that does not know WIRE sees ordinary columns.&lt;/p&gt;

&lt;p&gt;Micah Kornfield &lt;a href="https://lists.apache.org/thread/h7vnrk3zqh87rmsp1lp7k4z6ckvthwd7" rel="noopener noreferrer"&gt;pushed the decimal floating-point proposal&lt;/a&gt; toward a formal design document. He listed two open issues: how to represent normalization, possibly through statistics, and how to represent the value itself, which needs benchmarked alternatives to the IEEE 754 layout. Jiayi Wang sent a &lt;a href="https://lists.apache.org/thread/rrlc7ol0snx51gc4dnjn1txpp2g87odr" rel="noopener noreferrer"&gt;reminder about the footer sync&lt;/a&gt; and shared the updated Modular Footer proposal. Micah asked her to start a DISCUSS thread for visibility and to either broaden issue #530 or open a new proposal.&lt;/p&gt;

&lt;p&gt;Gábor Szádovszky and Jörn Horstmann continued a &lt;a href="https://lists.apache.org/thread/90sn04z53zpmxmo56v565173hx99b72m" rel="noopener noreferrer"&gt;thread on rewriting files&lt;/a&gt; with unknown metadata. Gábor argued that a rewriter that does not understand a logical type such as a shredded VARIANT will produce a useless tangle of structs and lists, so it should fail. Jörn pointed out that unknown column orders affect every column in a file, with no way to mark just one column, and that arrow-rs uses an internal unknown variant it cannot serialize. Gábor said he is open to an UNKNOWN column order that makes min and max unusable. Michael Chavinda also &lt;a href="https://lists.apache.org/thread/opq4yr8pyxy6bx30fpmkrrs0d4dckq4h" rel="noopener noreferrer"&gt;asked for a reviewer&lt;/a&gt; to add DataHaskell's Parquet reader to the implementation support matrix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache DataFusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The iceberg integration arrives
&lt;/h3&gt;

&lt;p&gt;On the DataFusion side, Andrew Lamb &lt;a href="https://lists.apache.org/thread/6k5lws31c61y1lx2s34pxo4lmc7334lr" rel="noopener noreferrer"&gt;opened the vote&lt;/a&gt; to accept &lt;code&gt;apache/datafusion-iceberg&lt;/code&gt;, and it &lt;a href="https://lists.apache.org/thread/8x3l4m4gzhy2gvd9ppfqhxfl9tlxrqw6" rel="noopener noreferrer"&gt;passed on September 16&lt;/a&gt; with 14 +1 votes. Andrew called it a first step toward better Iceberg integration. The GitHub traffic on the dev list showed the work already underway, with Gabriel Musat's PR porting the iceberg-rust history and a second PR adapting the project to compile and pass tests in its new home.&lt;/p&gt;

&lt;p&gt;For DataFusion users, this means Iceberg table support will evolve on DataFusion's release cadence, reviewed by people who know DataFusion's physical planning and pushdown APIs. For Iceberg users who embed DataFusion, it means one fewer version lock between two fast-moving Rust projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Releases, LTS, and CI
&lt;/h3&gt;

&lt;p&gt;Three release votes closed. DataFusion 55.1.0 &lt;a href="https://lists.apache.org/thread/rqq866ndtwoq0vl1z1wbh6sfwj6dm483" rel="noopener noreferrer"&gt;passed&lt;/a&gt; with nine +1 votes, six binding, and Tim Saucer ran the release. Xuanwo's verification ran 11,100 tests and 502 SQL logic test files, and he flagged several &lt;code&gt;.slt&lt;/code&gt; files missing license headers, then fixed them himself in PR #25182. The &lt;a href="https://lists.apache.org/thread/qvkyw5vo9k55b32bg9rt0knd04x4ffyn" rel="noopener noreferrer"&gt;sqlparser-rs 0.63.0 vote&lt;/a&gt; drew a -1 from Xuanwo for a missing NOTICE file and a bundled flamegraph SVG containing CDDL-licensed JavaScript. Andrew showed both issues were years old, filed fixes, and asked Xuanwo to reconsider. Xuanwo moved to +0, and the release &lt;a href="https://lists.apache.org/thread/mpoj6c5yps1w5rp8rjxzpt5m7nx9532n" rel="noopener noreferrer"&gt;passed on September 13&lt;/a&gt; with five binding votes.&lt;/p&gt;

&lt;p&gt;Andrew also &lt;a href="https://lists.apache.org/thread/7yor1b7cr8kqmds50zxxcgs41rdk6xgx" rel="noopener noreferrer"&gt;asked whether DataFusion needs LTS versions&lt;/a&gt;, motivated by making third-party integrations easier. That question lands at the right moment, given that DataFusion now hosts the Iceberg integration and has a proposal to host Variant support too. Kosta Tarasov &lt;a href="https://lists.apache.org/thread/bg71srlcd84y4gv42cqzdo3j6mj3t93f" rel="noopener noreferrer"&gt;started that Variant discussion&lt;/a&gt; around PR #22908, which brings &lt;code&gt;datafusion-variant&lt;/code&gt; into the main repository as an extension crate. Andrew suggested keeping it external with better cookbook documentation and moved the conversation to issue #21301. Kosta's open questions include whether Spark semantics should be the naming baseline.&lt;/p&gt;

&lt;p&gt;Andy Grove &lt;a href="https://lists.apache.org/thread/tn1xw6vn3k36zllzyyjgs18f6jfgc4h3" rel="noopener noreferrer"&gt;enabled a GitHub merge queue&lt;/a&gt; for DataFusion Comet to cut CI load. Pull requests now run a smaller tier, while Spark 3.4, 3.5, and 4.0 SQL tests and older Iceberg suites run once in the queue on the exact merged tree. He also &lt;a href="https://lists.apache.org/thread/ohwrtsv58ky5808n6ywrttdvl7pm1j0m" rel="noopener noreferrer"&gt;proposed Comet 1.1.0&lt;/a&gt; before the end of September, about six weeks after 1.0.0, and mentioned that he used Claude to triage open high-priority bugs for the release. Tim Saucer &lt;a href="https://lists.apache.org/thread/v3mn5g0hqrl3dz0n7cchwnhjgkk04b6o" rel="noopener noreferrer"&gt;announced&lt;/a&gt; that Dewey Dunnington is a new DataFusion committer. Andrew's &lt;a href="https://lists.apache.org/thread/czth53otchv018n07r14k44ml4mft1z8" rel="noopener noreferrer"&gt;sync notes&lt;/a&gt; covered subquery decorrelation, a new blocked aggregation proposal in issue #24704 that asks aggregate authors to review the API, and automating backports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Ossie (incubating)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The first release is a plumbing exercise
&lt;/h3&gt;

&lt;p&gt;Jean-Baptiste Onofré &lt;a href="https://lists.apache.org/thread/f0gbs61oztcd3oxfcw5mh0ot445q30vg" rel="noopener noreferrer"&gt;set expectations&lt;/a&gt; for the first Ossie release. It will be 0.3.0, not a 1.0 spec, and its main purpose is to prove the release machinery and complete a full legal check, with a source distribution only. Russell Spitzer agreed that the team should treat it as practice for license checking and release management. Markus Weimer offered help. Kurt Stirewalt asked that the ontology working group's PR #332, which adds two optional fields to the ontology spec, be included, and asked what the formal process is for proposing features for a release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft's Power BI group plans to announce its participation
&lt;/h3&gt;

&lt;p&gt;Markus Weimer &lt;a href="https://lists.apache.org/thread/ztrgf76t0cn4on4w19yzcxq296r25n5o" rel="noopener noreferrer"&gt;asked for guidance&lt;/a&gt; because Microsoft's Power BI group wants to announce its commitment to Ossie at the upcoming Fabric Community Conference. The group plans to build a converter between Power BI semantic models and Ossie and contribute it. Russell said stating an intent to contribute and support the project is fine as long as no one claims control. Josh Klahr suggested adding Microsoft to the Ossie ecosystem page. Jean-Baptiste pointed to the incubator's branding and publicity guides and recommended "co-creator" or "co-author" language that puts the community first.&lt;/p&gt;

&lt;p&gt;A BI vendor committing to a bidirectional converter is exactly the kind of adoption signal a semantic model spec needs. Semantic layers only become portable when the tools on both ends read and write the same format.&lt;/p&gt;

&lt;h3&gt;
  
  
  One model per document, and richer modeling
&lt;/h3&gt;

&lt;p&gt;Yufei Gu &lt;a href="https://lists.apache.org/thread/mwlgwsc0jct9o73mdxddryo14snbc731" rel="noopener noreferrer"&gt;proposed&lt;/a&gt; that each Ossie JSON or YAML document hold exactly one semantic model, with its fields at the document root instead of inside a &lt;code&gt;semantic_model&lt;/code&gt; array. Several converters already warn and convert only the first model in a document. Jean-Baptiste supported it and asked for a sequencing plan so converter fixtures do not break in the gap. Khushboo Bhatia agreed, and Yufei opened converter PR #396 to merge right after the spec change.&lt;/p&gt;

&lt;p&gt;The modeling discussions went deep. On &lt;a href="https://lists.apache.org/thread/vrhtgwfxwm7t2ptd8wl3vydsbbchwwll" rel="noopener noreferrer"&gt;hierarchy support&lt;/a&gt;, Yufei shared a Mondrian-style example separating attributes from hierarchies. Julian Hyde credited the attribute-based hierarchy model to Analysis Services 2005, noted that each level must be functionally dependent on its parent, and said he now sees hierarchies mostly as presentation hints. Josh Klahr asked whether hierarchies should be navigation aids or real containment objects. Yufei argued that drill-down needs to know which states belong to which country, which is more than a hint.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://lists.apache.org/thread/w5ww2mpxnppj58ov7s25qdz04083how0" rel="noopener noreferrer"&gt;metrics trees&lt;/a&gt;, a contributor proposed an optional &lt;code&gt;depends_on&lt;/code&gt; array for metric lineage. Julian Hyde replied that dependency information is derivable, that redundant data causes its own headaches, and that Ossie should invest in being a real language with a formal specification, compliance tests, and a compiler that produces the dependency tree. Chris Eubank &lt;a href="https://lists.apache.org/thread/p2btpy39p3m3xfvmovln64nttflz42r1" rel="noopener noreferrer"&gt;proposed&lt;/a&gt; adding the SQL-standard &lt;code&gt;FILTER (WHERE ...)&lt;/code&gt; aggregate modifier to the expression language in PR #382. Mario De Felipe raised, in the &lt;a href="https://lists.apache.org/thread/68d7sdwxhg573lzfpg1s4fht2n8zh1x9" rel="noopener noreferrer"&gt;cardinality discussion&lt;/a&gt;, how to declare source values that mean "missing," such as SAP's type-specific initial values, and filed issue #401.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents as spec users
&lt;/h3&gt;

&lt;p&gt;Marco Ciavarella from Exmergo &lt;a href="https://lists.apache.org/thread/m1cm8bz0f4m8f21gvt3fczyb3odhks7b" rel="noopener noreferrer"&gt;proposed&lt;/a&gt; a dedicated place for "field reports" written by coding agents that build with Ossie. His first report, drafted by Claude Code, mirrored a production dbt MetricFlow layer into one Ossie document with 11 datasets, 77 fields, 15 relationships, and 27 metrics. Marco's argument is that agents generate fragmented issues, and a structured report captures what worked, what confused the agent, and what workarounds it needed. Jean-Baptiste liked the separation between blocking and costly issues and the explicit "didn't test" section, and suggested a GitHub discussion category.&lt;/p&gt;

&lt;p&gt;Contributions kept flowing too. Poorva Barve introduced herself and sent fixes for the &lt;a href="https://lists.apache.org/thread/2tf3qyp40hzz0gbw8okvflylm2svv9n6" rel="noopener noreferrer"&gt;Snowflake converter&lt;/a&gt;, which invented a fake table when a query source began with a comment, and the &lt;a href="https://lists.apache.org/thread/j0sxtfdo6t2oqx9v0rv21jyjrfbgy3w9" rel="noopener noreferrer"&gt;dbt converter&lt;/a&gt;, which mangled compound aggregate arguments like &lt;code&gt;SUM(orders.gross - orders.tax)&lt;/code&gt;. Other threads proposed a &lt;a href="https://lists.apache.org/thread/5t00xb46d0nmbg4yonj462zo3vxot6dj" rel="noopener noreferrer"&gt;bidirectional OpenMetadata converter&lt;/a&gt; and &lt;a href="https://lists.apache.org/thread/t9609l178gb0to2j7cqks3nzw24t4b0j" rel="noopener noreferrer"&gt;LinkML converters&lt;/a&gt; that open a path to RDFS and OWL. Ankit Tandon shared &lt;a href="https://lists.apache.org/thread/gxdn9z2pr22pkphfvm64tyrwkflx5w03" rel="noopener noreferrer"&gt;notes from the Ontology working group&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Project Themes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Release hygiene is now the bottleneck.&lt;/strong&gt; Count the stopped votes: Iceberg Rust RC1 on a publish cycle, Iceberg Rust RC2 on a cross-engine encryption check, Polaris 1.8.0 on bundled NOTICE files, the Polaris Migrator on a bundled GPL file, Arrow Object Store RC1 on a license header, and sqlparser-rs on a NOTICE file and CDDL JavaScript. Add Danny Jones' pyiceberg-core wheel notices and Xuanwo's MIT attribution note on Arrow Rust 60. The pattern is clear. Rust crates, Python wheels, and fat jars all bundle third-party code, and every one of them has to carry the right legal text. Xuanwo, Dmitri Bourlatchkov, and Danny Jones are doing verification work that protects every downstream user. Projects that automate license reports in CI, the way Shawn Chang described for Paimon, will spend fewer weeks restarting votes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-implementation testing is the missing layer.&lt;/strong&gt; The Rust encryption gap, the &lt;code&gt;gc.enabled&lt;/code&gt; inconsistencies across five clients, and Parquet's reader version debate all describe one problem. A spec is only as reliable as the least careful implementation of it. The new &lt;code&gt;iceberg-verification&lt;/code&gt; repository is Iceberg's answer. Parquet is choosing between a strict version gate and a softer contract. Ossie's converter bug fixes and agent field reports are the same problem appearing early, while the spec is still small enough to fix cheaply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration code is moving to the engine.&lt;/strong&gt; The iceberg-datafusion move, the DataFusion Variant discussion, and Andrew Lamb's LTS question all ask where integration code should live and how stable the host needs to be. The answer this week was to move integrations next to the APIs they depend on and give third parties a stable release line to build against.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantics are becoming catalog objects.&lt;/strong&gt; Polaris is adding dedicated semantic model privileges. Ossie is simplifying its document shape while a major BI vendor plans a converter. Iceberg is designing FILE-type access delegation for multimodal inference services. The lakehouse catalog is growing from a table registry into the place where business meaning, access policy, and non-tabular data references all live together. That is good news for anyone building agents, which need exactly that combination of context and control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;Watch for Iceberg Java 1.12.0 RC1, which Neelesh Salian said is ready to cut, and for Iceberg Rust 0.11.0 RC3 once the encryption fix in PR #3236 merges. The Polaris 1.8.0 vote will turn on how the community resolves the NOTICE question, and the Catalog Migrator RC2 vote runs through the weekend. On the Parquet side, the reader versioning thread appears to be converging on option 1, and a formal decision will shape how the new modular footer ships.&lt;/p&gt;

&lt;p&gt;The Iceberg virtual meetup on GSoC projects and commutative compaction runs Friday, September 18. The Iceberg constraint sync meets September 17, and the Polaris community sync the same day takes up consistent multi-object persistence. Further out, Lakehouse Day EU lands in Glasgow on October 10, and the Seattle Iceberg meetup follows on October 21.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep Learning
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on Apache Iceberg, Apache Polaris, Apache Arrow, Apache Parquet, and the agentic lakehouse, I have written books that cover the architecture, the catalogs, and the practical engineering behind all of it. You can find every one of them at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>database</category>
      <category>opensource</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>AI Weekly: DeepSeek Cuts Prices as Agents Go Hosted</title>
      <dc:creator>Alex Merced</dc:creator>
      <pubDate>Thu, 17 Sep 2026 20:07:12 +0000</pubDate>
      <link>https://dev.to/alexmercedcoder/ai-weekly-deepseek-cuts-prices-as-agents-go-hosted-135l</link>
      <guid>https://dev.to/alexmercedcoder/ai-weekly-deepseek-cuts-prices-as-agents-go-hosted-135l</guid>
      <description>&lt;p&gt;&lt;em&gt;Week of September 10 to 17, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The first ten days of September belonged to the frontier labs. This week belonged to everyone else. DeepSeek shipped the month's only price cut, Sakana split its orchestrator into a cheap tier and a premium tier, and Shanghai AI Lab dropped a 744B open-weight research agent with almost no fanfare.&lt;/p&gt;

&lt;p&gt;The tooling news moved in one direction. OpenAI, Anthropic, and GitHub all shipped features that run agents for you, measure what they cost, and control what they are allowed to do. And at the AI Infra Summit in Santa Clara, Intel CEO Lip-Bu Tan said the memory shortage behind all of this will get worse next year, not better.&lt;/p&gt;

&lt;p&gt;Here is what happened, in the usual order: models, tooling, standards, and infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models: DeepSeek V4.1 Flash Resets the Cheap Tier
&lt;/h2&gt;

&lt;h3&gt;
  
  
  DeepSeek V4.1 Flash
&lt;/h3&gt;

&lt;p&gt;DeepSeek &lt;a href="https://www.deepseek.com/en/news/deepseek-v4-1-flash/" rel="noopener noreferrer"&gt;released V4.1 Flash on September 10&lt;/a&gt;. It is the smallest model in a new architecture family, and it ships with native visual understanding. The API model name is &lt;code&gt;deepseek-flash&lt;/code&gt;. Weights are on &lt;a href="https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt; under the MIT license, along with a technical report.&lt;/p&gt;

&lt;p&gt;The architecture is the headline. V4.1 Flash is a 552B-parameter mixture-of-experts model built on what DeepSeek calls a causal encoder-decoder design. It activates only 8B parameters when reading input and 16B when generating output. That split matters because agent workloads are input-heavy. A coding agent re-reads the same files and conversation history on every step, so most of its tokens are prefill, not decode.&lt;/p&gt;

&lt;p&gt;The second headline is the KV cache. DeepSeek says V4.1 Flash needs one quarter of the high-bandwidth memory (HBM) and one eighth of the SSD storage that the previous generation used for its cache. DeepSeek ties that directly to price, noting that cache-hit charges often make up a large share of agent costs.&lt;/p&gt;

&lt;p&gt;The rate card reflects the architecture. According to a &lt;a href="https://capitalandcompute.net/blog/new-ai-models-september-2026/" rel="noopener noreferrer"&gt;tracker that reads each lab's pricing docs&lt;/a&gt;, peak rates are $0.30 per million input tokens and $1.20 per million output tokens, down from $0.44 and $1.32 for V4 Flash. The cache read dropped from $0.014 to $0.006, a 57 percent cut. Off-peak rates are half of peak. The same tracker lists a 1M-token context window and 384K maximum output. The official numbers live on the &lt;a href="https://api-docs.deepseek.com/quick_start/pricing" rel="noopener noreferrer"&gt;DeepSeek pricing page&lt;/a&gt;, and the new rates took effect at 04:00 UTC on September 10.&lt;/p&gt;

&lt;p&gt;Benchmarks are vendor-reported. DeepSeek's launch post says V4.1 Flash beats flagship models, including its own V4 Pro, on its benchmark set. The tracker above lists DeepSeek-reported scores of 90.6 on Terminal-Bench 2.1, 74.2 on DeepSWE v1.1, 90.9 on GPQA Diamond, and a 3471 Codeforces rating. None of those have been independently reproduced yet. Terminal-Bench 2.1 is also two major versions behind the Terminal-Bench 4.0 board where GPT-6 Astra and Claude Fable 5.1 were measured earlier this month, so the numbers do not line up with that ranking.&lt;/p&gt;

&lt;p&gt;There are breaking changes. DeepSeek retired V4 Flash and V4 Flash Vision Exp. The old model IDs &lt;code&gt;deepseek-v4-flash&lt;/code&gt; and &lt;code&gt;deepseek-v4-flash-vision-exp&lt;/code&gt; now route to V4.1 Flash for compatibility. DeepSeek's launch post also said that starting at 04:00 UTC on September 14, all &lt;code&gt;deepseek-v4-pro&lt;/code&gt; requests were set to route to V4.1 Flash until V4.1 Pro launches. The tracker reports that DeepSeek's &lt;a href="https://api-docs.deepseek.com/updates/" rel="noopener noreferrer"&gt;API changelog&lt;/a&gt; now says V4 Pro service continues past that date in response to user demand. If you pinned V4 Pro, check the changelog before you assume which model is answering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it changes for practitioners:&lt;/strong&gt; The cheapest capable tier just got cheaper on exactly the line that agent loops burn. If you run long agentic jobs on a budget, test V4.1 Flash against your current model with your own evals. Two caveats apply. DeepSeek's peak window follows Beijing business hours, not yours. And a model ID that silently routes to a different model is convenient for migration but bad for reproducibility, so log the model that actually served each request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sakana Fugu Max and Fugu Ultra v2
&lt;/h3&gt;

&lt;p&gt;Sakana AI &lt;a href="https://sakana.ai/fugu-max-release/" rel="noopener noreferrer"&gt;released Fugu Max and Fugu Ultra v2&lt;/a&gt; on September 11. Fugu is not a single foundation model. It is a trained orchestrator that reads a query, builds an agent scaffold on the fly, and routes the work across a pool of open-weight and specialist models, including NVIDIA Nemotron models. Both new versions share one architecture and differ in what they aim at.&lt;/p&gt;

&lt;p&gt;Fugu Max targets the best result per dollar. It costs $2 per million input tokens and $6 per million output tokens at any context length, according to &lt;a href="https://datanorth.ai/news/sakana-ai-launches-fugu-max-and-fugu-ultra-v2" rel="noopener noreferrer"&gt;DataNorth's summary of Sakana's release post and OpenRouter listings&lt;/a&gt;. Fugu Ultra v2 targets the hardest multi-step work. It costs $5 input and $30 output per million tokens, rising to $10 and $45 above 272K tokens of context, &lt;a href="https://ai-tldr.dev/releases/sakana-fugu-max/" rel="noopener noreferrer"&gt;per AI/TLDR&lt;/a&gt;. Sakana's announcement does not state a context window in the material I reviewed.&lt;/p&gt;

&lt;p&gt;Sakana's benchmark claims are its own. Sakana reports that Fugu Ultra v2 scored 48.3 on Chartography, a visual reasoning and data interpretation benchmark, against 27.3 for Claude Opus 5 and 29.5 for Claude Fable 5. Reviewers also cite a vendor-reported 74.3 on DeepSWE for Ultra v2, reached without Fable 5, Fable 5.1, or GPT-6 Astra in its model pool. For Fugu Max, Sakana claims the best overall score on six of ten benchmarks against models in a similar price range, including Terminal Bench 2.1 and GPQA Diamond. DataNorth notes that it is unclear where Sakana sourced the competitor scores this time.&lt;/p&gt;

&lt;p&gt;Availability is narrower than a typical API. Both models run through Sakana's OpenAI-compatible API. There are no open weights, and &lt;a href="https://www.marktechpost.com/2026/09/10/sakana-ai-launches-fugu-max-and-fugu-ultra-v2-for-cheaper-stronger-multi-agent-orchestration/" rel="noopener noreferrer"&gt;MarkTechPost reports&lt;/a&gt; that Sakana does not offer the service in the EU or EEA. Existing Fugu users switch tiers with a one-line parameter change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it changes for practitioners:&lt;/strong&gt; Fugu is a bet that routing beats scale. Sakana also pitches it as insurance against vendor lock-in and revoked API access, since the model pool is swappable. That pitch has real appeal after a summer of access changes across the industry. The trade-off is observability. When an orchestrator picks the model, you need its traces to explain a bad answer, so ask for them before you put Fugu in a production path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Atria Dawn Preview
&lt;/h3&gt;

&lt;p&gt;The quietest big release of the week came from the Shanghai Artificial Intelligence Laboratory. &lt;a href="https://huggingface.co/internlm/Atria-Dawn-Preview" rel="noopener noreferrer"&gt;Atria Dawn Preview&lt;/a&gt; is an agentic model built on the 744B-parameter mixture-of-experts GLM-5.2 foundation model. It targets research and engineering work that needs continuous tool use and multi-step execution. The model card describes a full loop: problem analysis, solution design, tool use, code, experiment runs, result analysis, and failure recovery.&lt;/p&gt;

&lt;p&gt;The release order was unusual. &lt;a href="https://aiweekly.co/alerts/shanghai-ai-lab-ships-atria-dawn-preview-a-744b-agentic-moe" rel="noopener noreferrer"&gt;AI Weekly reports&lt;/a&gt; that the Hugging Face repository went live on September 11, with an &lt;a href="https://huggingface.co/internlm/Atria-Dawn-Preview-FP8" rel="noopener noreferrer"&gt;FP8 checkpoint&lt;/a&gt; on September 12, and no blog post or pricing at the time. The weights are MIT-licensed. A formal &lt;a href="https://www.financialcontent.com/article/newsfile-2026-9-15-atria-releases-atria-dawn-preview-for-long-horizon-research-agents" rel="noopener noreferrer"&gt;press release followed on September 15&lt;/a&gt;, describing Atria Dawn as an open-source model for long-horizon research agents that turns a published method into runnable experiments, reproducible metrics, and a report that traces conclusions to evidence. The model works inside a control framework and an experimental environment, checks whether its code runs and whether experiments hit their targets, and revises its plan from that feedback.&lt;/p&gt;

&lt;p&gt;No first-party per-token price was published. Some routing gateways already list the model, so any price you see comes from a third party. I found no context window or independent benchmark score in the primary materials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it changes for practitioners:&lt;/strong&gt; Atria Dawn is the second open research-agent release in two weeks built on a Chinese base model and published weights-first. The release-before-paper pattern shortens the window between a model existing and a model sitting in someone's pipeline. If your team pulls open weights into production, put an evaluation gate in front of new checkpoints that does not depend on the lab's own report.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPT-Live-1 comes to the API
&lt;/h3&gt;

&lt;p&gt;OpenAI &lt;a href="https://openai.com/index/introducing-gpt-live-1-in-the-api/" rel="noopener noreferrer"&gt;brought GPT-Live-1 to the API&lt;/a&gt; on September 10. It is a full-duplex voice model that listens and speaks at the same time, so it handles interruptions, pauses, and backchannels without the handoff delays of a speech-to-text, LLM, text-to-speech chain. It delegates deeper reasoning and tool calls to a backend model you choose, such as GPT-6 Astra or a third-party model.&lt;/p&gt;

&lt;p&gt;Pricing is $0.05 per minute for the voice layer, billed per second, with backend model and tool usage billed separately. OpenAI added 12 new real-time voices. The model provides native transcripts, keyword biasing, and explicit turn detection, and it connects over WebRTC, WebSockets, or telephony and SIP.&lt;/p&gt;

&lt;p&gt;The benchmarks are OpenAI's. &lt;a href="https://community.openai.com/t/introducing-gpt-live-1-in-the-api/1396471" rel="noopener noreferrer"&gt;OpenAI's developer community post&lt;/a&gt; says GPT-Live-1 paired with GPT-6 Astra at medium reasoning effort completed 83.6 percent of Tau3 tasks on the first attempt, against 45.7 percent for GPT-Realtime-2.1. The same pairing scored 38.1 percent on TauBanking. OpenAI also claims a 30-point gain on Full Duplex Bench over GPT-Realtime-2.1. One customer quoted in the launch said switching from a cascaded build removed 23,000 lines of code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it changes for practitioners:&lt;/strong&gt; Voice agents now follow the same split as coding agents: a fast front end for the conversation and a slower, smarter back end for the work. OpenAI notes that interrupting speech does not automatically cancel backend work, so your application owns task state and cancellation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retirements and deprecations to track
&lt;/h3&gt;

&lt;p&gt;Two dated changes landed this week. OpenAI &lt;a href="https://learn.chatgpt.com/docs/whats-new" rel="noopener noreferrer"&gt;announced&lt;/a&gt; that GPT-5.5 retires from ChatGPT, ChatGPT Work, and Codex on October 14, 2026, across all plans. The API is not affected. Codex users who sign in with ChatGPT should switch to &lt;code&gt;gpt-5.6-sol&lt;/code&gt; and update saved settings, custom agents, scheduled tasks, and scripts before that date. Separately, OpenAI &lt;a href="https://developers.openai.com/api/docs/deprecations" rel="noopener noreferrer"&gt;deprecated &lt;code&gt;gpt-5.4-cyber&lt;/code&gt;&lt;/a&gt; on September 11, with removal from the API on October 1, 2026, and &lt;code&gt;gpt-5.6-cyber&lt;/code&gt; as the replacement.&lt;/p&gt;

&lt;p&gt;OpenAI also retired automatic switching from Instant to Thinking for ChatGPT Plus and Pro users and removed the Higher intelligence setting on the web. Users can still pick a reasoning option manually.&lt;/p&gt;

&lt;p&gt;No frontier lab shipped a new flagship this week. After Claude Fable 5.1, Gemini 3.8 Flash, Muse Spark 1.3, and GPT-6 Astra in the first three days of September, a quieter stretch was expected. Google's Gemini 3.5 Pro is still announced without a date.&lt;/p&gt;

&lt;h3&gt;
  
  
  This week's releases at a glance
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjj3dlx642okrffcefoxh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjj3dlx642okrffcefoxh.png" alt="This week's releases at a glance" width="800" height="905"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two patterns stand out in that table. First, the two open-weight releases both carry the MIT license, which puts almost no restriction on commercial use. Second, the two Sakana tiers show where the premium sits now. The capability tier costs five times as much on output as the cost tier, on the same API, and the only difference is how hard the orchestrator works. That is the same trade every agent platform is now exposing as a setting, whether it is called effort, tier, or mode.&lt;/p&gt;

&lt;p&gt;A note on sourcing. Where a lab's own post did not state a price or context window, this issue cites independent trackers that read the providers' pricing pages. Check the provider documentation before you commit a budget, because several of these rate cards changed more than once in September.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tooling: OpenAI Launches the Agents API
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OpenAI Agents API and hosted sandboxes
&lt;/h3&gt;

&lt;p&gt;OpenAI &lt;a href="https://community.openai.com/t/introducing-the-agents-api-and-hosted-sandboxes/1396481" rel="noopener noreferrer"&gt;introduced the Agents API&lt;/a&gt; in public beta on September 10. It packages the agent loop behind Codex as a managed service. OpenAI runs the agent loop on its own infrastructure and handles orchestration, long-running sessions, and context management. You define the agent's capabilities and choose where it runs code and works with files.&lt;/p&gt;

&lt;p&gt;There is no extra fee for the Agents API itself. You pay for the tokens and tools your agents use at standard rates.&lt;/p&gt;

&lt;p&gt;Sandboxes are the other half of the launch. You can bring your own, run in your VPC, or use a partner. OpenAI lists first-class integrations with Blaxel AI, Cloudflare, Daytona, DigitalOcean, E2B, Modal, Oracle Cloud, Runloop AI, and Vercel. OpenAI also launched its own hosted sandboxes, where agents run code, work with files, and produce artifacts. You supply files, install packages, and add skills and plugins, and OpenAI provisions the environment.&lt;/p&gt;

&lt;p&gt;The Codex Python SDK moved in step. &lt;a href="https://github.com/openai/codex/releases?q=prerelease%3Afalse&amp;amp;expanded=true" rel="noopener noreferrer"&gt;Version 0.154.0&lt;/a&gt;, released September 11, adds &lt;code&gt;max&lt;/code&gt; and &lt;code&gt;ultra&lt;/code&gt; reasoning-effort values. It also adds &lt;code&gt;ExternalMessage&lt;/code&gt; to synchronous and asynchronous &lt;code&gt;run()&lt;/code&gt; and &lt;code&gt;turn()&lt;/code&gt; calls, so external content can start a turn or join an active one with tool-level authority but without granting user authorization. The release adds &lt;code&gt;include_turns&lt;/code&gt; on resume and fork, plus a per-turn service tier.&lt;/p&gt;

&lt;p&gt;Check the migrations before you upgrade. &lt;code&gt;HookMetadata&lt;/code&gt; now wraps its handler in &lt;code&gt;.root&lt;/code&gt;, so &lt;code&gt;hook.command&lt;/code&gt; becomes &lt;code&gt;hook.root.command&lt;/code&gt;. Some notifications now have typed payloads. And turn handles that attach late only receive events from their attachment point, so collected results can be partial. Custom &lt;code&gt;codex_bin&lt;/code&gt; overrides need CLI 0.151.0 or newer for the new features.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI's Data agent and ChatGPT for Financial Services
&lt;/h3&gt;

&lt;p&gt;OpenAI also &lt;a href="https://openai.com/index/put-data-to-work/" rel="noopener noreferrer"&gt;introduced a Data agent&lt;/a&gt; in ChatGPT Work on September 10. It connects to approved sources including Amazon Redshift, Datadog, Google BigQuery, ClickHouse, Databricks, MongoDB, and Snowflake. It pulls business definitions, metric logic, and relationships from semantic layers and trusted sources such as dbt, GitHub, Databricks Genie Ontology, Snowflake Horizon, and BI dashboards. Queries run with the connected account's existing permissions, including table, row, and column restrictions. The agent builds shareable interactive dashboards and can work inside Omni, Oracle BI, Power BI, Sigma, Tableau, and ThoughtSpot. OpenAI says nearly all of its own product team and over two-thirds of its go-to-market organization use data agents internally.&lt;/p&gt;

&lt;p&gt;The same day, OpenAI &lt;a href="https://openai.com/index/introducing-chatgpt-financial-services/" rel="noopener noreferrer"&gt;launched ChatGPT for Financial Services&lt;/a&gt;, a tailored ChatGPT Work experience built with design partners Morgan Stanley and Evercore. It includes premium data from Daloopa, PitchBook, LSEG News, and Crunchbase, indexed and hosted by OpenAI, with granular citations back to tables and passages. OpenAI says it tuned the reliability of popular financial MCP connectors, including S&amp;amp;P Global and FactSet, through automated evaluation. Admins can publish Excel, Word, and PowerPoint templates. OpenAI reports GPT-6 Astra at 69.9 percent on OfficeQA Pro against 60.2 percent for GPT-5.6 Sol, a vendor-reported number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters for data teams:&lt;/strong&gt; The pattern here is worth noting. The Data agent does not ask analysts to move data. It connects to where data already lives, respects existing access controls, and reads meaning from the semantic layer. That makes the semantic layer and the governed catalog the most important parts of an agent-ready data stack. Teams with clean metric definitions will get good answers. Teams without them will get confident wrong ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code: plugin evals, effort caps, and gateway headers
&lt;/h3&gt;

&lt;p&gt;Anthropic's Claude Code shipped versions 2.1.265 through 2.1.273 across the week, and the &lt;a href="https://code.claude.com/docs/en/whats-new/2026-w37" rel="noopener noreferrer"&gt;week 37 summary&lt;/a&gt; calls out two features. The first is &lt;code&gt;claude plugin eval&lt;/code&gt;, added in 2.1.269. It runs a plugin against a suite of test cases, scores the results, and by default reruns each case without the plugin so you can see what the plugin actually contributes. &lt;code&gt;claude plugin eval init&lt;/code&gt; interviews you about what a good result looks like, proposes test cases and checks, and writes the files. Anthropic notes that every run and every model-judged check is a real model call on your account.&lt;/p&gt;

&lt;p&gt;The second feature lets you pop Claude Code Desktop panes, such as the diff or the terminal, into their own windows.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://raw.githubusercontent.com/anthropics/claude-code/refs/heads/main/CHANGELOG.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; is where the admin controls live. Version 2.1.267 added a &lt;code&gt;maxEffortLevel&lt;/code&gt; setting, at the top level or per model, that caps effort on every provider, including Bedrock, Vertex, and Foundry. Version 2.1.269 added &lt;code&gt;CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS&lt;/code&gt;, which accepts values from 1 to 256, and an option to tag OpenTelemetry metrics with repository attributes. Version 2.1.271 added per-command &lt;code&gt;allowed_domains&lt;/code&gt; for Bash, PowerShell, and Monitor in sandboxed auto mode, so each command opens only the hosts it needs. It also added an &lt;code&gt;omitClaudeMd&lt;/code&gt; flag for subagents and a &lt;code&gt;modelPricing&lt;/code&gt; multiplier of up to 10 for internal chargeback rates.&lt;/p&gt;

&lt;p&gt;Version 2.1.273 added opt-in request headers for LLM gateways, enabled with &lt;code&gt;CLAUDE_CODE_GATEWAY_HINT_HEADERS=1&lt;/code&gt;. They tell a gateway the request class, agent type, previous tool durations, and whether context was compacted. It also changed auto mode on Bedrock, Vertex, and Foundry to use the local safety classifier by default, with &lt;code&gt;CLAUDE_CODE_AUTO_MODE_SERVER=1&lt;/code&gt; to opt back into the server-side classifier.&lt;/p&gt;

&lt;p&gt;A long list of fixes targeted prompt-cache reuse. Several releases fixed cases where resuming a session, switching models, or reconnecting an MCP server rewrote the tool list or system prompt prefix and forced a full cache rewrite. With cache reads now priced far below fresh input across the industry, these fixes translate directly into lower bills for long sessions. Version 2.1.273 also fixed auto-compaction triggering at roughly half the real context window when advisor-tool turns were involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Managed Agents and on-demand compaction
&lt;/h3&gt;

&lt;p&gt;On the platform side, Anthropic's &lt;a href="https://docs.claude.com/en/release-notes/overview.md" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; list two changes. On September 10, Claude Managed Agents permission policies gained an &lt;code&gt;auto&lt;/code&gt; mode. The server evaluates each agent or MCP tool call and runs it, denies it, or pauses for approval, and events now report how each call was evaluated. The &lt;code&gt;ant&lt;/code&gt; CLI added &lt;code&gt;ant beta:sessions connect&lt;/code&gt;, which attaches your terminal to a live Managed Agents session so you can follow it, send messages, and approve or deny waiting tool calls.&lt;/p&gt;

&lt;p&gt;On September 14, the Messages API gained on-demand conversation compaction in beta, behind the &lt;code&gt;compact-2026-09-04&lt;/code&gt; header. You send a top-level &lt;code&gt;compaction&lt;/code&gt; parameter, and the API returns a signed &lt;code&gt;compaction&lt;/code&gt; block summarizing the messages you sent. On later requests, you send that block in place of those messages. You decide when to compact, the request can run in the background, and you can keep recent turns word for word. On models with preserved thinking, the thinking in kept turns stays valid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; Compaction used to be something each agent framework implemented its own way. A signed, server-generated summary block makes it a first-class API object that any client can store and replay. That is a quiet but real step toward portable agent state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anthropic's vertical plugins
&lt;/h3&gt;

&lt;p&gt;Anthropic also shipped three vertical launches. &lt;a href="https://claude.com/blog/claude-for-financial-advisors" rel="noopener noreferrer"&gt;Claude for Financial Advisors&lt;/a&gt; arrived September 14 as a Cowork plugin with connectors to Addepar, BlackRock, Charles Schwab, Envestnet, iCapital, Orion, SS&amp;amp;C Black Diamond, Wealthbox, Wealth.com, Vanguard, and Zocks, plus skills for meeting prep, rebalance review, estate and tax briefs, and compliance screening against the SEC Marketing Rule. On September 15, &lt;a href="https://claude.com/blog/claude-for-small-business-launches-new-workflows-integrations-and-training-programs" rel="noopener noreferrer"&gt;Claude for Small Business&lt;/a&gt; expanded to 43 workflows and 27 new integrations, including Shopify, Salesforce, Xero, Gusto, Square, Stripe, and Zapier. Anthropic says the plugin has been installed more than 900,000 times since May. Every workflow starts in approval mode. Also on September 15, Anthropic &lt;a href="https://support.anthropic.com/en/articles/12138966-release-notes" rel="noopener noreferrer"&gt;launched Salesforce in Claude&lt;/a&gt; in beta with 37 pre-built sales skills.&lt;/p&gt;

&lt;p&gt;Anthropic also launched &lt;a href="https://support.anthropic.com/en/articles/12138966-release-notes" rel="noopener noreferrer"&gt;smart reports&lt;/a&gt; in beta for Claude Enterprise on September 10. They analyze how a team uses Claude, what the work costs, where sessions run into friction, and which repeated patterns are worth packaging as shared skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot: cost tiers, ensemble review, and HydraFusion
&lt;/h3&gt;

&lt;p&gt;GitHub had a busy week. On September 14, it &lt;a href="https://github.blog/changelog/2026-09-14-configure-cost-and-quality-in-copilot-auto-model-selection" rel="noopener noreferrer"&gt;added three tiers to Copilot's auto model selection&lt;/a&gt;: efficiency, balance, and intelligence. All three draw from the same model set. Auto still evaluates each prompt, so a simple docstring request can land on a small model even in intelligence mode. Billing follows the model auto selects, and paid subscribers keep a 10 percent discount on usage billed through auto. The tiers are rolling out in VS Code, Copilot CLI, and the GitHub Copilot app.&lt;/p&gt;

&lt;p&gt;On September 11, GitHub &lt;a href="https://github.blog/changelog/2026-09-11-auto-resolution-and-analysis-updates-in-copilot-code-review" rel="noopener noreferrer"&gt;updated Copilot code review&lt;/a&gt;. Copilot now resolves its own comments when a later commit addresses them, writes commit messages when you apply its suggestions, and validates code with the full set of shell tools from the Copilot SDK behind the agent firewall. The Lite effort level now uses an ensemble of agents. GitHub reports that the ensemble raised addressed comments per review by 47 percent for high-severity findings, 31 percent for medium, and 11 percent for low, while cutting review cost by about 8 percent.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.blog/changelog/2026-09-10-github-copilot-weekly-releases-september-7" rel="noopener noreferrer"&gt;September 7 weekly release post&lt;/a&gt;, published September 10, introduced Project HydraFusion in the Copilot CLI's &lt;code&gt;/experimental&lt;/code&gt; menu. HydraFusion routes each task between local, cloud, and compound models to balance performance, cost, and latency, and you select it like any other model. The same post covered Jira integration in the Copilot app, scheduled agent automations and an experimental voice mode in VS Code 1.137, and centrally managed sandbox policies for Copilot in JetBrains.&lt;/p&gt;

&lt;p&gt;The Copilot CLI shipped several builds. &lt;a href="https://github.com/github/copilot-cli/releases/tag/v1.0.84-5" rel="noopener noreferrer"&gt;Version 1.0.84-5&lt;/a&gt; added session and memory import commands for a semantic JSONL interchange format, moved command parsing to a Rust grammar, and made &lt;code&gt;/usage&lt;/code&gt; show per-model AI Credit consumption. &lt;a href="https://github.com/github/copilot-cli/releases/tag/v1.0.84-6" rel="noopener noreferrer"&gt;Version 1.0.84-6&lt;/a&gt; added a &lt;code&gt;/config&lt;/code&gt; screen and network allow and deny rules in &lt;code&gt;/sandbox&lt;/code&gt;, and fixed a bug where MCP tools with certain boolean schemas caused 400 errors on Gemini. It also fixed &lt;code&gt;COPILOT_ALLOW_ALL&lt;/code&gt; so that falsey values disable automatic tool approval instead of enabling it. That last fix is worth a second look if you set that variable in CI.&lt;/p&gt;

&lt;p&gt;GitHub also &lt;a href="https://github.blog/changelog/2026-09-11-add-vs-code-agents-to-copilot-usage-metrics" rel="noopener noreferrer"&gt;added VS Code Agents window metrics&lt;/a&gt; to Copilot usage reports and &lt;a href="https://github.blog/changelog/2026-09-10-ai-scan-for-pull-request-apis-in-public-preview" rel="noopener noreferrer"&gt;released REST APIs&lt;/a&gt; in public preview for enabling AI Scan for pull requests at the organization and repository levels.&lt;/p&gt;

&lt;h3&gt;
  
  
  The pattern across vendors
&lt;/h3&gt;

&lt;p&gt;Put these launches side by side and the direction is plain. OpenAI's Agents API, Anthropic's Managed Agents auto policies, and GitHub's HydraFusion and auto tiers all move two decisions from the developer to the platform: where the agent runs and which model does each step. In exchange, every vendor is adding controls. Effort caps, per-command network allowlists, server-evaluated tool calls, usage reports by model, and plugin evals all exist so an administrator can see and bound what the platform decides.&lt;/p&gt;

&lt;p&gt;That is the right trade for most teams. It also means your cost and quality now depend on routing logic you did not write. Measure it. Plugin evals, per-model usage reports, and gateway hint headers are the instruments. Use them before you trust the defaults.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards: A Quiet Week for Protocols, a Busy One for Formats
&lt;/h2&gt;

&lt;h3&gt;
  
  
  No new MCP or A2A release
&lt;/h3&gt;

&lt;p&gt;There was no new Model Context Protocol specification release this week and no new Agent2Agent (A2A) release. The latest MCP spec is still the &lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;2026-07-28 version&lt;/a&gt;, which made the protocol stateless, and the most recent MCP blog post is the &lt;a href="https://blog.modelcontextprotocol.io/posts/mcp-roadmap/" rel="noopener noreferrer"&gt;updated roadmap from August 22&lt;/a&gt;. A2A's latest milestone was its &lt;a href="https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/" rel="noopener noreferrer"&gt;acceptance as a Growth Stage project&lt;/a&gt; at the Agentic AI Foundation (AAIF) in late August. If you track these specs, the next big date is AGNTCon+MCPCon, which the &lt;a href="https://aaif.io/blog" rel="noopener noreferrer"&gt;AAIF lists&lt;/a&gt; for October 22 and 23 in San Jose.&lt;/p&gt;

&lt;p&gt;A quiet spec week is not a quiet implementation week. MCP fixes showed up across this week's tooling releases. The Copilot CLI now notifies MCP servers when a tool call is cancelled, requests extra OAuth scopes when needed, and fixed a schema bug that broke some MCP tools on Gemini. Claude Code added a notification when an MCP server disconnects and reconnection gives up, and fixed MCP OAuth client registration bugs. OpenAI's financial services launch describes automated evaluation to raise the reliability of popular MCP connectors. The protocol is stable enough that the work has shifted to making clients and servers behave well at the edges. For teams running MCP servers in production, that is good news. Cancellation, re-authentication, and disconnect handling are where real deployments break, and the major clients are now fixing those paths release by release instead of waiting on the spec.&lt;/p&gt;

&lt;h3&gt;
  
  
  Portable agent state is becoming a format question
&lt;/h3&gt;

&lt;p&gt;Two tooling changes this week point at a standards gap. GitHub's Copilot CLI added &lt;a href="https://github.com/github/copilot-cli/releases/tag/v1.0.84-5" rel="noopener noreferrer"&gt;import commands for a semantic JSONL interchange format&lt;/a&gt; covering sessions and memory. Anthropic's Messages API now returns a &lt;a href="https://docs.claude.com/en/release-notes/overview.md" rel="noopener noreferrer"&gt;signed compaction block&lt;/a&gt; that stands in for earlier conversation turns. OpenAI's Codex SDK added history selection on resume and fork.&lt;/p&gt;

&lt;p&gt;Each vendor is defining how agent sessions, memory, and summaries get stored and replayed. None of these are shared formats yet. MCP standardized how agents reach tools. A2A standardized how agents talk to each other. The next interoperability fight is over how an agent's accumulated state moves between tools and vendors. Watch for proposals in that space.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open semantic models: Apache Ossie
&lt;/h3&gt;

&lt;p&gt;The most concrete standards news for data teams came from the Apache Ossie (incubating) dev list, which covers an open specification for semantic models. Microsoft's Power BI group &lt;a href="https://lists.apache.org/thread/ztrgf76t0cn4on4w19yzcxq296r25n5o" rel="noopener noreferrer"&gt;asked the community for guidance&lt;/a&gt; on announcing its commitment to Ossie at the upcoming Fabric Community Conference. The group plans to build a converter between Power BI semantic models and Ossie and contribute it to the project.&lt;/p&gt;

&lt;p&gt;Ossie also moved on its core format. Yufei Gu &lt;a href="https://lists.apache.org/thread/mwlgwsc0jct9o73mdxddryo14snbc731" rel="noopener noreferrer"&gt;proposed&lt;/a&gt; that each Ossie document hold exactly one semantic model, with its fields at the root, and opened a follow-up PR to update the converters. Jean-Baptiste Onofré &lt;a href="https://lists.apache.org/thread/f0gbs61oztcd3oxfcw5mh0ot445q30vg" rel="noopener noreferrer"&gt;confirmed&lt;/a&gt; that the first release, 0.3.0, will focus on release mechanics and a full legal check. And Marco Ciavarella &lt;a href="https://lists.apache.org/thread/m1cm8bz0f4m8f21gvt3fczyb3odhks7b" rel="noopener noreferrer"&gt;proposed&lt;/a&gt; a dedicated channel for field reports written by coding agents that build with the spec.&lt;/p&gt;

&lt;p&gt;This connects directly to the tooling section. OpenAI's Data agent reads meaning from semantic layers. Every agent that answers business questions needs metric definitions it can trust. An open semantic model format that BI tools, catalogs, and agents all read is what makes those definitions portable instead of locked inside one vendor's product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data format standards: Parquet 2.14 and the versioning debate
&lt;/h3&gt;

&lt;p&gt;Parquet had a significant standards week too. The &lt;a href="https://lists.apache.org/thread/g04r9jfsbnswck76yj2kf5bqwo0fnvko" rel="noopener noreferrer"&gt;Parquet Format 2.14.0 release vote passed&lt;/a&gt; on September 11, bringing the ALP floating point encoding and the FILE logical type into the spec. A separate vote &lt;a href="https://lists.apache.org/thread/kq274hjk3soxljp2ty56k59tm7wsq1gn" rel="noopener noreferrer"&gt;approved Extended Precision Nanosecond Timestamps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The larger debate is about &lt;a href="https://lists.apache.org/thread/7ghf93l0ss74l3k4jo9qc2bdmrmng3hm" rel="noopener noreferrer"&gt;how readers should handle unsupported format versions&lt;/a&gt;. Ryan Blue, Fokko Driesprong, Xiening Dai, and Kurtis Wright favor a strict rule: a reader must fail on a file written with a format version it does not support. Andrew Lamb and Will Edwards argued for letting readers attempt the read, as most do today. The strict option makes it easier to ship breaking improvements such as a lighter footer. It also means every engine in a stack has to upgrade its Parquet reader before writers turn on new features.&lt;/p&gt;

&lt;p&gt;Parquet is the storage layer under most AI training data pipelines, feature stores, and lakehouse tables. How it versions is an AI infrastructure question as much as a data engineering one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iceberg REST catalog and multimodal access
&lt;/h3&gt;

&lt;p&gt;On the Apache Iceberg list, Sung Yun &lt;a href="https://lists.apache.org/thread/s283f6obyqf6c14bn37sw7vtf9y1c9mj" rel="noopener noreferrer"&gt;opened a discussion&lt;/a&gt; about access delegation for the proposed FILE type, which lets a table column reference external objects such as images and documents. The use case is multimodal inference: a service outside the query engine needs to fetch those objects. The proposal adds client-requested pre-signed URLs to the REST catalog spec. Daniel Weeks and Prashant Singh pushed to align it with existing pre-signed URL work before anything lands. This is the open table format community designing for AI workloads directly, and it belongs on the radar of anyone building retrieval over files in a lakehouse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure: Memory Is Still the Wall
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Intel says the memory crunch gets worse in 2027
&lt;/h3&gt;

&lt;p&gt;The clearest infrastructure signal of the week came from the AI Infra Summit in Santa Clara, which runs &lt;a href="https://www.ai-infra-summit.com/faqs" rel="noopener noreferrer"&gt;September 15 to 17&lt;/a&gt;. Intel CEO Lip-Bu Tan warned there that the memory shortage will be worse in 2027 than in 2026. &lt;a href="https://fudzilla.com/intel-warns-memory-crunch-will-get-worse/" rel="noopener noreferrer"&gt;Fudzilla reports&lt;/a&gt; that Tan said memory prices have risen five to seven times, and that memory now makes up 70 to 80 percent of the component cost of some low-end phones and laptops. &lt;a href="https://invezz.com/pk/news/2026/09/17/why-are-micron-sk-hynix-and-sandisk-stocks-jumping-on-thursday/" rel="noopener noreferrer"&gt;Invezz reports&lt;/a&gt; that Tan also flagged electricity and cooling as emerging constraints.&lt;/p&gt;

&lt;p&gt;A separate &lt;a href="https://www.aroged.com/2026/09/16/tan-sounds-the-alarm-intel-cannot-meet-even-half-of-cpu-demand-and-memory-shortage-will-continue-until-2028/" rel="noopener noreferrer"&gt;report from Aroged&lt;/a&gt;, citing a Splunk broadcast appearance, says Tan acknowledged Intel cannot meet more than half of demand for its processors, does not expect memory to improve until 2028, and plans to start 14A production in the first quarter of 2027. These are secondhand accounts of spoken remarks, so treat the exact figures with some care. The direction is consistent across every report.&lt;/p&gt;

&lt;p&gt;The cause is structural. Memory makers are steering wafer capacity toward HBM for AI accelerators, which leaves less for commodity DRAM and NAND. &lt;a href="https://www.digitimes.com/news/a20260914VL200/2026-dram-intel-samsung-tsmc.html" rel="noopener noreferrer"&gt;DIGITIMES' weekly roundup&lt;/a&gt; for September 7 to 13 describes HBM4 and server demand straining DRAM and NAND supply, alongside Intel CPU price increases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means for AI teams:&lt;/strong&gt; Memory is now the price floor for both training and inference. It shapes GPU availability, server costs, and even the laptops your developers use. Plan 2027 hardware budgets with higher memory costs baked in, and treat any software change that cuts memory use as a cost reduction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Software is attacking the memory problem directly
&lt;/h3&gt;

&lt;p&gt;That last point is exactly what DeepSeek did this week. V4.1 Flash's KV cache needs &lt;a href="https://www.deepseek.com/en/news/deepseek-v4-1-flash/" rel="noopener noreferrer"&gt;one quarter of the HBM and one eighth of the SSD storage&lt;/a&gt; of the previous generation. The KV cache holds the attention state for every token in context, and on million-token contexts it often consumes more accelerator memory than the model weights. Shrinking it lets a provider serve more concurrent requests on the same GPUs, which is how DeepSeek was able to cut prices during a memory shortage. DeepSeek also invited teams planning deployments of 2,000 GPUs plus a storage cluster to contact it directly.&lt;/p&gt;

&lt;p&gt;The architecture choice works the same way. Activating 8B parameters for input and 16B for output means prefill, the input-heavy half of agent workloads, runs on a much smaller slice of the model. Expect other labs to publish similar input and output splits as agentic workloads dominate inference traffic.&lt;/p&gt;

&lt;p&gt;OpenAI's GPT-Live-1 is a different angle on the same economics. A single full-duplex model replaces a three-stage speech pipeline, which cuts both latency and the number of models held in memory per conversation. At $0.05 per minute for the voice layer, it pushes the heavy reasoning to a backend model that only runs when the conversation needs it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Columnar formats keep getting smaller
&lt;/h3&gt;

&lt;p&gt;The storage side of AI infrastructure also moved. Apache Arrow Rust 60.0.0 &lt;a href="https://lists.apache.org/thread/jhs0lrq44wbm4j6gn1gbx8c7hc9zhw6t" rel="noopener noreferrer"&gt;passed its release vote&lt;/a&gt; on September 15. Release manager Andrew Lamb said arrow-rs is the first Parquet implementation to include the new ALP encoding for floating point data. The release also adds new Parquet PageIndex structures and many performance improvements. The crates are live on crates.io.&lt;/p&gt;

&lt;p&gt;Float and double columns are everywhere in AI data: embeddings stored as arrays, model features, sensor readings, and evaluation metrics. General-purpose encodings compress them poorly. ALP targets exactly that data, and it now ships in the Rust &lt;code&gt;parquet&lt;/code&gt; crate that DataFusion, iceberg-rust, and many other Rust engines depend on. Implementations in C++, Java, and Go are in review, according to the &lt;a href="https://lists.apache.org/thread/yfmbndqfpprnp2q01wnjhcn2jn80rrwc" rel="noopener noreferrer"&gt;Parquet community sync notes&lt;/a&gt;. The same notes record progress on a vector logical type for Parquet, which targets embedding storage directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accelerators at the AI Infra Summit
&lt;/h3&gt;

&lt;p&gt;NVIDIA's &lt;a href="https://www.nvidia.com/en-us/events/ai-infra-summit/" rel="noopener noreferrer"&gt;AI Infra Summit event page&lt;/a&gt; promotes a keynote from Ian Buck, NVIDIA's VP of Hyperscale and HPC Computing, on infrastructure for agentic AI. The page describes Groq 3 LPX as an interactive inference accelerator that extends the Vera Rubin platform, aimed at fast token generation for responsive agent systems. &lt;a href="https://convergedigest.com/ai-infra-summit-2026-santa-clara-ai-infrastructure/" rel="noopener noreferrer"&gt;Converge Digest's summit preview&lt;/a&gt; frames the event around scale-up interconnect, scale-out networking, and scale-across data center links, with Google Fellow Dave Patterson, Ian Buck, and Lip-Bu Tan on the main stage. The summit runs through September 17, so expect more detailed announcements to surface in next week's coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practitioner Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Run the cache math before you switch models
&lt;/h3&gt;

&lt;p&gt;Rate cards hide the number that matters most for agents. Here is a worked example using DeepSeek's published peak rates. Take one long agent run that reads 10 million cached input tokens, 1 million fresh input tokens, and writes 200,000 output tokens.&lt;/p&gt;

&lt;p&gt;On V4 Flash at $0.014 cached, $0.44 input, and $1.32 output per million, that run costs $0.14 plus $0.44 plus $0.264, or about $0.84. On V4.1 Flash at $0.006, $0.30, and $1.20, it costs $0.06 plus $0.30 plus $0.24, or $0.60. That is a 29 percent cut, and more than a third of it comes from the cache line alone.&lt;/p&gt;

&lt;p&gt;Now change the shape. A chat workload with little caching and a lot of output saves far less, because output only dropped 9 percent. The lesson applies to every vendor: pull a week of real traffic, split it into cached input, fresh input, and output, and price that mix. Headline input prices tell you very little about an agent bill.&lt;/p&gt;

&lt;h3&gt;
  
  
  Five things to do this week
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Audit pinned model IDs.&lt;/strong&gt; DeepSeek now routes old IDs to a new model, and OpenAI has two retirement dates in the next four weeks. Log which model actually served each request so a silent swap shows up in your dashboards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set effort and concurrency caps.&lt;/strong&gt; Claude Code's &lt;code&gt;maxEffortLevel&lt;/code&gt; and workflow concurrency limit, and Codex's new &lt;code&gt;max&lt;/code&gt; and &lt;code&gt;ultra&lt;/code&gt; effort values, give you both more power and more ways to overspend. Decide your ceilings on purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluate plugins and skills like code.&lt;/strong&gt; &lt;code&gt;claude plugin eval&lt;/code&gt; runs each case with and without the plugin. Use that comparison to delete plugins that add tokens without adding quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your CI environment variables.&lt;/strong&gt; The Copilot CLI fix for &lt;code&gt;COPILOT_ALLOW_ALL&lt;/code&gt; changed how falsey values behave. If your pipelines set it, confirm the behavior you expect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invest in your semantic layer.&lt;/strong&gt; OpenAI's Data agent, Apache Ossie, and Polaris' new semantic model privileges all point the same way. Agents answer business questions only as well as your metric definitions allow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where the week leaves the stack
&lt;/h3&gt;

&lt;p&gt;Three layers moved at once. Models got cheaper per task through architecture, not just discounts. Platforms took over the agent loop and added the controls to supervise it. And the data layer kept adding the pieces agents need: compact float encodings, vector types, governed semantic models, and catalog-level access for multimodal files. None of those layers works well alone. The teams that get the most from this week's releases will be the ones that treat model choice, agent platform, and data architecture as one design problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Watch Next Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 Pro routing.&lt;/strong&gt; Confirm whether &lt;code&gt;deepseek-v4-pro&lt;/code&gt; requests are served by V4 Pro or V4.1 Flash, and watch for V4.1 Pro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent benchmarks.&lt;/strong&gt; Look for third-party scores on DeepSeek V4.1 Flash, Fugu Ultra v2, and Atria Dawn Preview. Every number in this issue for those models is vendor-reported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Pro.&lt;/strong&gt; Google has announced it with no date or price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Infra Summit follow-ups.&lt;/strong&gt; Detailed accelerator, memory, and networking announcements from Santa Clara.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parquet versioning.&lt;/strong&gt; A decision on strict reader version checks will shape how new footer and encoding features roll out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deadlines.&lt;/strong&gt; &lt;code&gt;gpt-5.4-cyber&lt;/code&gt; leaves the OpenAI API on October 1, and GPT-5.5 leaves ChatGPT and Codex on October 14.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resources to Go Further
&lt;/h2&gt;

&lt;p&gt;The tools change every week, but the fundamentals of data, lakehouse architecture, and agentic AI hold steady. I have written books on all of it, from Apache Iceberg and Apache Polaris to AI-assisted development and AI agents for data work. You can find every title at &lt;a href="https://books.alexmerced.com" rel="noopener noreferrer"&gt;books.alexmerced.com&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
