Magic Tools
Back to all briefs

Dev Breakfast · 2026-09-27

Today's headline: Excel's 40-year-old one-value-per-cell rule broken by Ctrl+J. Plus 4 more: 301-character Postgres migration, 4 statements judged safe one by one; FTC chair: when agents cause trouble, developers are responsible; and more.

September 27, 20269 min readDev Breakfast

Press Ctrl+J to enter 'Carlos, Henrietta, Jacob', and Excel will treat it as a list and put it in the same cell. When filtering, you can filter out Carlos individually—this is the first time since 1985 that arrays are natively allowed to reside in cells. Previously, the entire string had to be treated as a single text for filtering. This difference, applied to your tables, is about whether you can split calculations by person.

🍳 Today's Headlinethe one deep dive of the day

Excel's 40-year-old one-value-per-cell rule broken by Ctrl+J

From 1985 to now, Excel has stuck to a rule: one cell holds only one value. On September 24, Microsoft changed this rule—lists, arrays in cells, and nested arrays features launched together, first for Windows and Mac Beta Channel users. This is the first time in forty years that Excel allows arrays to natively reside in cells, rather than being spread across cells.

How to use it: select a cell, press Insert > List or Ctrl+J, then use commas or semicolons based on regional settings, and type in a string like 'Carlos, Henrietta, Jacob'—it becomes a list. Double-click or press F2 to edit, and click the icon in the cell to expand and see individual values. The real change in workflow is filtering—previously, you could only filter the entire text 'Carlos, Henrietta, Jacob', but now you can directly filter out Carlos as an individual. Referencing a list (e.g., =B2) will spill the values into adjacent cells for calculations.

Excel's 40-year-old one-value-per-cell rule broken by Ctrl+J

Arrays entering cells rely on nested braces: ={1;2;3} will spill into multiple cells, while ={{1;2;3}} wraps another layer outside, becoming a 1x1 array, so the result stays in the original cell. Previously, formulas computing 'arrays of arrays' would only return truncated results or #CALC! errors, but now with nesting support, ={{1,2,3};{4,5,6}} can return completely. The change is most intuitive in functions like TEXTSPLIT: without nested arrays, each row only returns the first element; with them, results spill by row, with one array per row.

The cost, as Microsoft wrote in the announcement: this is a preview feature, behavior may change before official release, and it's explicitly not recommended for important workbooks. The original text doesn't say when these features will become official or if they'll be rolled out to the web and mobile versions. If you really want to try, start with a discarded report for practice, not the one due at the end of the month.

A forty-year-old assumption has been changed, and downstream adjustments won't be few—scripts, export tools, BI data pipelines written with the 'one-value-per-cell' logic will no longer get the string they expect when encountering list cells. Such fundamental semantic changes are never as simple as adding a feature; they require all code dependent on the old semantics to revalidate its output.

💡 Chef's take: Ctrl+J is a shortcut for 'merge lines' in many editors, but in Excel, from now on, it's 'split into a bunch of values'—the same key combination, two opposite fates. It's recommended to practice on a discarded spreadsheet, not on the end-of-month report.

Sources:

🍲 Deep Dives · 2 more

301-character Postgres migration, 4 statements judged safe one by one

The safenotsafe.dev page does a narrow job: give it a migration.sql, and it tells you line by line whether each statement is safe. The example file on the page has 4 statements, 301 characters, with output like this: npx safe-not-safe check migration.sql. It uses the wasm version of libpg_query 17 for parsing, then gives conclusions by line number—line 1 'constant column default' is judged SAFE, because literal defaults in modern Postgres versions only affect metadata, not rewriting existing rows; line 1 'create index concurrently' is judged SAFE, users_created_at_idx doesn't block normal writes; line 4 'no high-risk pattern matched' is judged SAFE; line 8 'constraint validation' is judged SAFE, VALIDATE CONSTRAINT is inherently the second step when online with foreign key or check constraints in two steps. The final summary: no blocking patterns matched, so these statements avoid common locks, rewrites, and gray-scale pitfalls in the rule set.

What's worth noting here is not the word 'safe', but that it specifies safety to a precise location: which line, which rule name it matches (add-column-constant-default, create-index-concurrently, validate-constraint), and why it's safe. The most time-consuming part of migration review is exactly questions like 'will this lock the table?', which rely on memory and experience to answer, but it provides judgments that can be cross-referenced with line numbers.

For developers, this means an additional check that can be integrated into CI before deployment. Adding a npx safe-not-safe check to a schema-changing PR is more reliable than saying 'should be fine' based on impression during review—especially for adding column defaults, creating indexes, and adding foreign key constraints, where the difference between locking and not locking the table often comes down to a single writing style. The original text only gives results for this one example file, doesn't specify how many types of statements the rule set covers, and doesn't say how it handles unrecognized syntax—these two points directly determine whether it can be used as a gatekeeper, so you need to test it with real migration files yourself.

Sources:

FTC chair: when agents cause trouble, developers are responsible

A few days ago, we discussed how agentic AI testing led to unauthorized access to company or government data, with the focus mainly on 'what the model can do and where the boundaries are'. Today's piece shifts the topic from technology to law: FTC chair Andrew Ferguson explicitly stated that he does not accept describing AI agents as autonomous actors who 'break free and have their own will and desires'—whoever gives the instructions bears the responsibility.

His quote: "As long as I am chair, I will continue to push back against the anthropomorphization of such tools. If someone tells a tool to do something, and the tool does it, I don't think we'll ask, 'what do we do with this tool?'". He also mentioned a key detail: AI companies sometimes claim systems are beyond human control, but post-audit of audit trails shows that these systems execute exactly the instructions given. This sentence is worth copying down for every agent developer—what you think is 'the model acting on its own' is likely a clear prompt in the logs. Ferguson also suggested that FTC's enforcement power against companies that 'fail to disclose data breaches' could similarly apply to AI developers.

In other words, after an incident, the claim that 'the model decided on its own' doesn't hold up in the eyes of regulators. Agent developers must think ahead: instruction chains should be logged, unauthorized operations intercepted, and it should be clear who instructed the action. This isn't just for compliance departments; it's something that should be in your architecture.

At the same event, Ferguson also talked about two things unrelated to AI but related to data. The FTC is preparing to request data from consumer-facing companies on personalized pricing, focusing on whether food delivery, ride-hailing, and airlines use personal data like location and browsing history to offer different prices to different people; he is most concerned about delivery and ride-hailing apps. Additionally, the FTC is soliciting public comments on a proposed rule on Thursday, aiming to deter platforms like Meta and Google from allowing fraudulent and misleading ads—according to previous Reuters reports, Meta itself expects 10% of its 2024 revenue to come from scam and prohibited ads.

The original text doesn't say how those unauthorized access incidents were handled later, and Ferguson only gave direction, not a timeline. But the direction is clear enough: in the future, when agents cause trouble, the first person questioned might not be the model provider, but you who wrote that line of instruction.

Sources:

🥢 Sides · 2 more

A solo-built desktop coding app, defeated by 'Plan mode'

The author has sentenced his own desktop coding app Nuanced to death, with the reason that the two old uses of plan mode are splitting: one is to give agents precise enough instructions, which is becoming obsolete as models get stronger; the other is to help humans understand what they are building, which is more important than ever, but plan mode is the wrong abstraction—especially when running multiple agents in parallel. He describes a state I believe: models write thousands of lines in minutes, you haven't even decided whether to do it, and the maintenance burden is already there, with no readable chain from prompt to code to behavior. The title saying 'is dead' is exaggerated; what's dead is the workflow of 'write a plan first, then let agents execute', not the act of 'thinking it through first'.

Sources:

A muse-special tag, leaking Meta's trump card

Someone discovered in Muse's session logs that almost all subtasks use Meta's own Avocado, except on September 21, one subagent used azure/muse-special. Tracing this name, the signature marks it as gpt_responses_v1, the payload starts with gAAAAA, and the tool call ID is call_ followed by 24 mixed-case characters—this format is completely different from Avocado's batch of call_ followed by 32 hexadecimal characters. The model directory also contains about 15 versions of Avocado, plus multiple variants of Claude Opus 4.6/4.7/4.8, Sonnet 4.6, Haiku 4.5, GPT-5.5, and GPT-5.6, and Anthropic's side even has request translation and SSE parsing code ready.

Having it in the directory doesn't mean it's running; the author also said the logs don't specify which GPT is used. But a company embedding another company's model ID, client, and API key into the runtime is itself worth pondering: the ceiling of model capability is determined by data, not by the narrative of product launches.

Sources:


For the table you filter every day, would you use this one-cell-multiple-value feature, or continue with one-value-per-cell? See you tomorrow at 8 AM.

This issue selected 5 articles from 48 pieces of information in the past 24 hours on X / Hacker News / GitHub Trending (written hourly throughout the day, fact-checked, and compiled in the morning). Content is generated with LLM assistance, each with original source links; please cross-verify for important decisions.

Like this brief? Get tomorrow's by email

Each morning at 8:00, 5-10 hand-picked AI items in plain language, with full context.

This page is auto-generated by LLM aggregation; please cross-check with original sources.