<?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: Roronoa</title>
    <description>The latest articles on DEV Community by Roronoa (@roronoa_).</description>
    <link>https://dev.to/roronoa_</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%2F4022649%2Fac571ee6-4982-49a9-8a57-3eb9fb326cc2.jpg</url>
      <title>DEV Community: Roronoa</title>
      <link>https://dev.to/roronoa_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roronoa_"/>
    <language>en</language>
    <item>
      <title>Test Mobile Continuity for Long-Running AI Tasks</title>
      <dc:creator>Roronoa</dc:creator>
      <pubDate>Fri, 10 Jul 2026 10:08:42 +0000</pubDate>
      <link>https://dev.to/roronoa_/test-mobile-continuity-for-long-running-ai-tasks-1jb4</link>
      <guid>https://dev.to/roronoa_/test-mobile-continuity-for-long-running-ai-tasks-1jb4</guid>
      <description>&lt;p&gt;A long-running AI task creates a mobile problem that a chat request does not: the work can outlive the screen, the network, the access token, and the app process.&lt;/p&gt;

&lt;p&gt;The success condition is not “the spinner kept spinning.” It is “the user can leave, return, and recover the authoritative task state without duplicating work or losing control.”&lt;/p&gt;

&lt;p&gt;This article is a test protocol, not a device benchmark. It defines the devices, network transitions, evidence, and invariants a team should record before claiming mobile continuity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the system boundary first
&lt;/h2&gt;

&lt;p&gt;Write down where the task actually runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mobile app -&amp;gt; task API -&amp;gt; durable task record -&amp;gt; worker -&amp;gt; artifacts
     ^             |
     +-------------+ status stream or polling
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the task executes in a cloud development environment, suspending the phone should not terminate the task. If execution is on-device, background limits, thermal state, battery, and operating-system scheduling become part of correctness. Do not mix those architectures in one result table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Record a complete test envelope
&lt;/h2&gt;

&lt;p&gt;Every result needs enough context to reproduce it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;device_model:
os_and_version:
app_build:
execution_location: cloud | edge | device
network_start: wifi | cellular | constrained
account_role:
task_fixture_and_revision:
task_id:
task_start_utc:
transition_start_utc:
recovery_start_utc:
battery_start_percent:
battery_end_percent:
screen_state:
expected_invariant:
observed_result:
evidence_links:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use at least one current iOS device and one Android device from the team's supported range. Add an older or memory-constrained device when it represents real users. A simulator is useful for deterministic UI flows, but it is not evidence for battery, radio behavior, thermal limits, or real process eviction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use one deterministic task fixture
&lt;/h2&gt;

&lt;p&gt;Choose a repository and task that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;takes at least five minutes so lifecycle changes can occur;&lt;/li&gt;
&lt;li&gt;produces an inspectable patch and test result;&lt;/li&gt;
&lt;li&gt;is safe to repeat;&lt;/li&gt;
&lt;li&gt;has no production credentials;&lt;/li&gt;
&lt;li&gt;starts from a pinned revision;&lt;/li&gt;
&lt;li&gt;has a known success condition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example fixture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Repository: a disposable calculator API
Revision: pinned commit SHA
Task: add input validation for division by zero
Success: one expected source change + one new passing test
Maximum duration: 15 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not change the prompt between network scenarios. Otherwise task variance can be mistaken for mobile lifecycle behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the continuity matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Invariant&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Background&lt;/td&gt;
&lt;td&gt;Send app to background for 30 seconds, then five minutes&lt;/td&gt;
&lt;td&gt;One task continues; return shows authoritative state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen lock&lt;/td&gt;
&lt;td&gt;Lock during execution, then unlock&lt;/td&gt;
&lt;td&gt;No duplicate task; sensitive content follows lock policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process death&lt;/td&gt;
&lt;td&gt;Terminate the app process, then relaunch&lt;/td&gt;
&lt;td&gt;Task is recovered by server ID, not recreated from UI memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wi-Fi → cellular&lt;/td&gt;
&lt;td&gt;Switch networks during a status update&lt;/td&gt;
&lt;td&gt;Reconnect resumes from a cursor/version without losing terminal state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline&lt;/td&gt;
&lt;td&gt;Enable airplane mode for 60 seconds&lt;/td&gt;
&lt;td&gt;UI says state is stale and disables unsafe repeated submission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token expiry&lt;/td&gt;
&lt;td&gt;Expire auth while task runs&lt;/td&gt;
&lt;td&gt;Reauthentication preserves task identity and intended return path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate tap&lt;/td&gt;
&lt;td&gt;Tap submit repeatedly under latency&lt;/td&gt;
&lt;td&gt;One logical task is accepted or duplicates are explicitly linked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cancel offline&lt;/td&gt;
&lt;td&gt;Request cancel while disconnected&lt;/td&gt;
&lt;td&gt;UI labels the request as pending, not completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cancel during command&lt;/td&gt;
&lt;td&gt;Cancel while a build runs&lt;/td&gt;
&lt;td&gt;“Requested” and “confirmed” are distinguishable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notification tap&lt;/td&gt;
&lt;td&gt;Open from task-complete notification&lt;/td&gt;
&lt;td&gt;Correct account and task open; access is rechecked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Account switch&lt;/td&gt;
&lt;td&gt;Switch account before opening a deep link&lt;/td&gt;
&lt;td&gt;No cross-account task data appears&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server restart&lt;/td&gt;
&lt;td&gt;Restart a non-production worker during the task&lt;/td&gt;
&lt;td&gt;Mobile UI reports recovery or failure without inventing success&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The offline cancel case is especially revealing. A local button tap is not proof that the server accepted cancellation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model freshness in the UI
&lt;/h2&gt;

&lt;p&gt;The mobile client needs more than a task state. It also needs the age and source of that state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"task-123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"running"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"updatedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-10T08:00:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"connection"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"reconnecting"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pendingAction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Render “Running — last updated 42 seconds ago; reconnecting” rather than a fresh-looking animation. When a cancel action is queued locally, show “Cancel will be sent when connected” and provide an undo path if the product can support it.&lt;/p&gt;

&lt;p&gt;On reconnect, compare a monotonic version or event cursor. A response older than the displayed version must not move the UI backward from &lt;code&gt;succeeded&lt;/code&gt; to &lt;code&gt;running&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure recovery, not animation smoothness
&lt;/h2&gt;

&lt;p&gt;Capture these metrics per scenario:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Definition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;State recovery latency&lt;/td&gt;
&lt;td&gt;app foreground or relaunch to authoritative task state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate task count&lt;/td&gt;
&lt;td&gt;extra server tasks created for one intended submission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stale-state duration&lt;/td&gt;
&lt;td&gt;time UI presents a state older than the server record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ambiguous cancel window&lt;/td&gt;
&lt;td&gt;cancel tap to confirmed terminal state or explicit failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data transferred&lt;/td&gt;
&lt;td&gt;bytes during the scenario, separated from artifact downloads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery delta&lt;/td&gt;
&lt;td&gt;percentage and duration, reported with device and screen state&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Do not publish a cross-device average without the individual samples. A median over three runs per scenario is a reasonable starting summary; keep raw runs for regressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A source-based MonkeyCode application
&lt;/h2&gt;

&lt;p&gt;The MonkeyCode README documents an online environment with native mobile support and synchronized PC/mobile data. Its repository includes this mobile screenshot:&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%2Fs98406kwiv8jo279nmat.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%2Fs98406kwiv8jo279nmat.png" alt="MonkeyCode mobile task and file management interface" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://github.com/chaitin/MonkeyCode/blob/1ac778fdba1da1b353f7f5672d2e4550801cf46d/frontend/public/monkeycode-mobile.png" rel="noopener noreferrer"&gt;MonkeyCode repository at commit &lt;code&gt;1ac778f&lt;/code&gt;&lt;/a&gt;, licensed with the project under AGPL-3.0.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That public material makes &lt;a href="https://github.com/chaitin/MonkeyCode" rel="noopener noreferrer"&gt;MonkeyCode&lt;/a&gt; a relevant target for this protocol. It does not supply the device, OS, network, battery, or recovery measurements required to fill in the result table. Those claims should wait for a controlled device run.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclosure: I contribute to the MonkeyCode project. This is a proposed mobile test protocol based on public documentation, not a hands-on performance review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mobile developers can join the &lt;a href="https://discord.gg/2pPmuyr4pP" rel="noopener noreferrer"&gt;MonkeyCode Discord&lt;/a&gt; to ask the team about supported workflows and help turn the matrix into version-specific tests. The team can also confirm current eligibility and usage limits for any free model credits.&lt;/p&gt;

&lt;p&gt;Mobile continuity is a server-state and recovery problem wearing a small-screen interface. Test process death, stale data, and ambiguous cancellation before celebrating that the task can be opened from a phone.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>android</category>
      <category>ios</category>
      <category>ai</category>
    </item>
    <item>
      <title>Should an LLM Run On the Phone, at the Edge, or in the Cloud?</title>
      <dc:creator>Roronoa</dc:creator>
      <pubDate>Fri, 10 Jul 2026 07:12:12 +0000</pubDate>
      <link>https://dev.to/roronoa_/what-every-developer-should-know-about-large-language-models-in-2026-5een</link>
      <guid>https://dev.to/roronoa_/what-every-developer-should-know-about-large-language-models-in-2026-5een</guid>
      <description>&lt;p&gt;“On-device AI” sounds like a deployment choice. For a mobile team it is a product constraint that affects download size, memory pressure, battery, startup time, privacy, and which devices receive the feature.&lt;/p&gt;

&lt;p&gt;The right placement is often not purely on-device or purely cloud. Decide per task, then measure on the slowest supported hardware and network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Begin with the task envelope
&lt;/h2&gt;

&lt;p&gt;Write down what one operation requires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;input:       up to 30 seconds of transcribed speech
output:      title plus five action items
deadline:    first useful result within the product's target
offline:     desirable, not mandatory
sensitivity: meeting content may be confidential
frequency:   several times per day
devices:     the actual supported OS and hardware range
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without this envelope, “run a small model locally” is not an engineering requirement. Input length and output size affect memory and compute. Frequency affects battery. Sensitivity affects whether a cloud path is permitted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare three placements
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Placement&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;On-device&lt;/td&gt;
&lt;td&gt;can work offline; input may stay local; no inference round trip&lt;/td&gt;
&lt;td&gt;model package size, RAM, thermal load, device fragmentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;larger model choices; centralized updates; predictable server tooling&lt;/td&gt;
&lt;td&gt;network latency, service cost, data transfer and retention concerns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hybrid/edge&lt;/td&gt;
&lt;td&gt;local routing, redaction, or fallback plus remote generation&lt;/td&gt;
&lt;td&gt;two implementations, synchronization, more failure states&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hybrid does not automatically mean “best of both.” It adds a boundary that must be tested. A local classifier followed by cloud generation can reduce unnecessary uploads, but the product now needs a rule for classifier uncertainty and offline behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Budget memory before model quality
&lt;/h2&gt;

&lt;p&gt;A model’s file size is not its complete runtime footprint. Budget for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weights after the chosen quantization;&lt;/li&gt;
&lt;li&gt;runtime and graph overhead;&lt;/li&gt;
&lt;li&gt;key-value cache, which grows with context and generation;&lt;/li&gt;
&lt;li&gt;tokenizer and supporting assets;&lt;/li&gt;
&lt;li&gt;input buffers and application UI;&lt;/li&gt;
&lt;li&gt;temporary memory during model loading or conversion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test memory warnings and background/foreground transitions. Mobile operating systems can terminate an application that behaves acceptably during a short foreground demo but exceeds pressure limits during longer use.&lt;/p&gt;

&lt;p&gt;Do not publish one device result as a universal benchmark. Record model artifact hash, runtime version, device, OS version, power state, thermal state, prompt length, output length, and whether the run was cold or warm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure the experience in phases
&lt;/h2&gt;

&lt;p&gt;For interactive generation, collect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cold model load
warm request setup
time to first output
output rate
time to completion
peak memory
energy or battery impact over a repeatable workload
thermal behavior across repeated runs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A fast first run can be misleading. Sustained use may trigger thermal throttling, and a model kept resident for speed may increase memory pressure. Test a session that resembles actual product frequency.&lt;/p&gt;

&lt;p&gt;For cloud inference, add DNS/connect time, upload time, network type, retry count, and server timing when available. Test high latency and packet loss, not only good office Wi-Fi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat model delivery as application delivery
&lt;/h2&gt;

&lt;p&gt;Bundling weights increases the base application download. Downloading after install creates a second product flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;explain the size and purpose;&lt;/li&gt;
&lt;li&gt;check storage and network conditions;&lt;/li&gt;
&lt;li&gt;support pause, resume, and cancellation;&lt;/li&gt;
&lt;li&gt;verify the artifact’s integrity;&lt;/li&gt;
&lt;li&gt;keep compatibility between app, runtime, tokenizer, and model versions;&lt;/li&gt;
&lt;li&gt;remove obsolete artifacts safely.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Avoid silently downloading a large model over a metered connection. If the model is optional, make the feature’s storage visible and removable.&lt;/p&gt;

&lt;p&gt;On Apple platforms, &lt;a href="https://developer.apple.com/documentation/coreml/downloading-and-compiling-a-model-on-the-user-s-device" rel="noopener noreferrer"&gt;Core ML model deployment&lt;/a&gt; documents downloading and compiling models on a user’s device. Other runtimes use different packaging mechanisms, but model artifacts still need versioning and lifecycle management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the privacy claim precise
&lt;/h2&gt;

&lt;p&gt;“Runs on device” does not guarantee that data stays on device. Check every path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analytics and crash reports;&lt;/li&gt;
&lt;li&gt;prompt or output logs;&lt;/li&gt;
&lt;li&gt;cloud fallback;&lt;/li&gt;
&lt;li&gt;remote safety or moderation checks;&lt;/li&gt;
&lt;li&gt;synchronization and backups;&lt;/li&gt;
&lt;li&gt;shared clipboard or exported files;&lt;/li&gt;
&lt;li&gt;third-party keyboards, extensions, or SDKs involved in input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Describe the actual boundary: “Audio and transcript remain on this device unless the user chooses cloud fallback,” for example. Then test that boundary and make fallback consent explicit.&lt;/p&gt;

&lt;p&gt;Also decide whether model outputs contain sensitive derived data. Keeping input local while uploading the generated summary may still violate the intended privacy property.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design interruption and recovery
&lt;/h2&gt;

&lt;p&gt;Mobile work is interrupted. Calls arrive, apps enter the background, connectivity changes, and the OS reclaims resources. Define behavior for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;backgrounding during model load or generation;&lt;/li&gt;
&lt;li&gt;audio-session interruption;&lt;/li&gt;
&lt;li&gt;low-memory termination;&lt;/li&gt;
&lt;li&gt;loss of network during a cloud request;&lt;/li&gt;
&lt;li&gt;switching from Wi-Fi to cellular;&lt;/li&gt;
&lt;li&gt;low-power mode and thermal warnings;&lt;/li&gt;
&lt;li&gt;app updates while an optional model is downloading.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Persist only the state required to recover. A generation operation needs an ID and clear terminal state; replaying it after restart must not duplicate an external action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a placement gate
&lt;/h2&gt;

&lt;p&gt;Choose on-device only if the evaluated model fits the supported device envelope and the privacy/offline benefit justifies packaging and runtime cost. Choose cloud only if network, data policy, and operating cost meet the task requirement. Choose hybrid when a clearly defined local stage changes the outcome enough to justify a second execution path.&lt;/p&gt;

&lt;p&gt;The final decision should include measured device results, a fallback behavior, artifact delivery plan, data-flow diagram, and a list of unsupported devices or states. Placement becomes an engineering decision when the team can say exactly which constraint it satisfies—and what it costs elsewhere.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>ai</category>
      <category>performance</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Google Now Labels AI-Generated Ads — Here's What That Means for Digital Marketing</title>
      <dc:creator>Roronoa</dc:creator>
      <pubDate>Fri, 10 Jul 2026 04:36:23 +0000</pubDate>
      <link>https://dev.to/roronoa_/google-now-labels-ai-generated-ads-heres-what-that-means-for-digital-marketing-30cd</link>
      <guid>https://dev.to/roronoa_/google-now-labels-ai-generated-ads-heres-what-that-means-for-digital-marketing-30cd</guid>
      <description>&lt;p&gt;Google just started labeling AI-generated ads. If you see an ad with a small "AI-generated" tag, that's Google's new transparency feature in action.&lt;/p&gt;

&lt;p&gt;It sounds minor. It's not. This is the beginning of a fundamental shift in how we interact with digital content.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's changing
&lt;/h2&gt;

&lt;p&gt;Google now requires advertisers to disclose when ad content (images, text, audio, video) is created or significantly modified by AI. The label appears on the ad itself, visible to users.&lt;/p&gt;

&lt;p&gt;The policy covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated images in display ads&lt;/li&gt;
&lt;li&gt;AI-written ad copy&lt;/li&gt;
&lt;li&gt;AI-processed audio or video&lt;/li&gt;
&lt;li&gt;Deepfake-style content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enforcement is based on a combination of advertiser self-reporting and Google's own detection systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;We're entering an era where you can't trust what you see online. AI can generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Photorealistic images of products that don't exist&lt;/li&gt;
&lt;li&gt;Testimonials from people who never gave them&lt;/li&gt;
&lt;li&gt;Video demonstrations of features that don't work&lt;/li&gt;
&lt;li&gt;Voiceovers that sound like real customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without labeling, consumers have no way to distinguish real content from AI-generated content. That's a problem for trust, for informed decision-making, and for the entire digital advertising ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The detection challenge
&lt;/h2&gt;

&lt;p&gt;Here's the catch: how do you detect AI-generated content?&lt;/p&gt;

&lt;p&gt;Current approaches:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Metadata analysis&lt;/strong&gt;: Checking for AI tool signatures in file metadata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual artifacts&lt;/strong&gt;: Looking for telltale signs (weird hands, inconsistent lighting)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statistical analysis&lt;/strong&gt;: Detecting patterns in pixel distribution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watermarking&lt;/strong&gt;: Embedding invisible markers in AI outputs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The problem: these methods are unreliable and easily circumvented. If an advertiser removes metadata and cleans up artifacts, detection fails.&lt;/p&gt;

&lt;p&gt;Google's approach relies heavily on self-reporting. That's like asking speeders to ticket themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for marketers
&lt;/h2&gt;

&lt;p&gt;If you're in digital marketing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Disclosure is now required&lt;/strong&gt;: Don't try to hide AI usage — the penalties aren't worth it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality matters more&lt;/strong&gt;: AI-generated content that looks obviously AI will hurt your brand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid approaches win&lt;/strong&gt;: Use AI for drafts, human editors for polish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document your process&lt;/strong&gt;: Keep records of what was AI-generated vs human-created&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The brands that embrace transparency will build trust. The ones that try to hide AI usage will get caught and lose credibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  The broader trend
&lt;/h2&gt;

&lt;p&gt;Google's labeling is part of a larger movement toward content authenticity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EU AI Act&lt;/strong&gt;: Requires disclosure of AI-generated content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C2PA standard&lt;/strong&gt;: Industry initiative for content provenance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social media platforms&lt;/strong&gt;: Adding AI content labels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;News organizations&lt;/strong&gt;: Developing AI usage policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The direction is clear: transparency about AI usage is becoming mandatory, not optional.&lt;/p&gt;

&lt;h2&gt;
  
  
  For developers
&lt;/h2&gt;

&lt;p&gt;If you build tools that generate content:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add disclosure features&lt;/strong&gt;: Make it easy for users to label AI content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support provenance standards&lt;/strong&gt;: Implement C2PA or similar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build detection tools&lt;/strong&gt;: Help identify AI-generated content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for transparency&lt;/strong&gt;: Don't make it easy to hide AI usage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've been building content tools that include automatic AI disclosure. It's a small feature that builds user trust and keeps you ahead of regulations.&lt;/p&gt;

&lt;h2&gt;
  
  
  My workflow
&lt;/h2&gt;

&lt;p&gt;When I create content (including this article), I use AI tools for research and drafting. But I always:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit and verify facts manually&lt;/li&gt;
&lt;li&gt;Add my own perspective and experience&lt;/li&gt;
&lt;li&gt;Disclose AI assistance when relevant&lt;/li&gt;
&lt;li&gt;Use tools like &lt;a href="https://github.com/chaitin/MonkeyCode" rel="noopener noreferrer"&gt;MonkeyCode&lt;/a&gt; to verify technical claims&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Transparency isn't just a legal requirement — it's good practice. Readers appreciate honesty about how content is created.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Google's labeling is a first step. Expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More detailed labels&lt;/strong&gt;: Not just "AI-generated" but what percentage was AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform-wide standards&lt;/strong&gt;: Consistent labeling across Google, Meta, TikTok&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consumer tools&lt;/strong&gt;: Browser extensions that highlight AI content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification systems&lt;/strong&gt;: Ways to prove content is human-created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The advertising industry is being forced to adapt. The question is whether it will embrace transparency or fight it.&lt;/p&gt;

&lt;p&gt;What do you think? Is labeling AI-generated ads enough, or do we need stronger measures?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>google</category>
      <category>marketing</category>
      <category>transparency</category>
    </item>
    <item>
      <title>OpenAI's New Voice Model Listens Even When You're Not Talking — And Nobody's Addressing It</title>
      <dc:creator>Roronoa</dc:creator>
      <pubDate>Thu, 09 Jul 2026 11:48:40 +0000</pubDate>
      <link>https://dev.to/roronoa_/openais-new-voice-model-listens-even-when-youre-not-talking-and-nobodys-addressing-it-25kp</link>
      <guid>https://dev.to/roronoa_/openais-new-voice-model-listens-even-when-youre-not-talking-and-nobodys-addressing-it-25kp</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1589254065878-42c01430b986%3Fw%3D800" 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%2Fimages.unsplash.com%2Fphoto-1589254065878-42c01430b986%3Fw%3D800" alt="Voice AI" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenAI just dropped new voice models that promise "more natural live conversations." The demos sound incredible — fluid, responsive, almost human.&lt;/p&gt;

&lt;p&gt;But here's the elephant in the room: &lt;strong&gt;when does "always ready" become "always listening"?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Convenience Trap
&lt;/h2&gt;

&lt;p&gt;Let's be honest about what "natural live conversation" means technically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The model needs to process audio continuously&lt;/li&gt;
&lt;li&gt;It needs to detect when you start speaking&lt;/li&gt;
&lt;li&gt;It needs to understand context from previous utterances&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this requires &lt;strong&gt;constant audio monitoring&lt;/strong&gt;. And that's where things get uncomfortable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenAI Isn't Saying
&lt;/h2&gt;

&lt;p&gt;The announcement focuses on capability, not on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;When does recording start?&lt;/strong&gt; Is it processing ambient audio before you say the wake word?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where is audio processed?&lt;/strong&gt; On-device or in the cloud?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How long is audio retained?&lt;/strong&gt; Is your conversation stored, even temporarily?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who has access?&lt;/strong&gt; Can employees review conversations for "quality"?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't hypothetical concerns. Amazon's Alexa was caught recording conversations and sharing them with contractors. Google Assistant was found storing audio even when users thought it was off.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Developer's Dilemma
&lt;/h2&gt;

&lt;p&gt;If you're building with these voice APIs, you're now responsible for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User consent&lt;/strong&gt; — do your users know they're being recorded?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data handling&lt;/strong&gt; — where does the audio go after processing?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy compliance&lt;/strong&gt; — GDPR, CCPA, and a dozen other regulations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust architecture&lt;/strong&gt; — how do you prove you're not misusing voice data?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've been building voice-enabled apps for 3 years, and I can tell you: &lt;strong&gt;most developers don't think about this until they get a legal letter.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem: No Transparency
&lt;/h2&gt;

&lt;p&gt;The issue isn't that OpenAI's voice models are malicious. It's that we have &lt;strong&gt;zero visibility&lt;/strong&gt; into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What triggers audio processing&lt;/li&gt;
&lt;li&gt;What happens to audio after it's processed&lt;/li&gt;
&lt;li&gt;What safeguards exist against misuse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare this to &lt;a href="https://github.com/chaitin/MonkeyCode/" rel="noopener noreferrer"&gt;MonkeyCode&lt;/a&gt;, which takes a fundamentally different approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On-premise processing&lt;/strong&gt; — your data stays on your infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent operations&lt;/strong&gt; — you can audit exactly what's happening&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User control&lt;/strong&gt; — you decide when AI is active, not the other way around&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson is clear: &lt;strong&gt;AI convenience shouldn't require surrendering privacy.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Should Demand
&lt;/h2&gt;

&lt;p&gt;Before celebrating OpenAI's voice breakthrough, we should ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit opt-in&lt;/strong&gt; — voice processing should never be default-on&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual indicators&lt;/strong&gt; — users should always know when audio is being processed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local processing options&lt;/strong&gt; — not everything needs to go to the cloud&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit trails&lt;/strong&gt; — developers should be able to verify what data is collected&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;OpenAI's new voice models are impressive technology. But impressive technology without privacy safeguards is just surveillance with better marketing.&lt;/p&gt;

&lt;p&gt;As developers, we need to stop accepting "it just works" as sufficient. We need to ask "how does it work?" and "what does it cost — not in dollars, but in privacy?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The future of voice AI shouldn't be "always listening." It should be "listening only when I explicitly ask."&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's your take?&lt;/strong&gt; Are you comfortable with always-on voice AI? Where do you draw the line between convenience and privacy? 👇&lt;/p&gt;

</description>
      <category>ai</category>
      <category>privacy</category>
      <category>openai</category>
      <category>voice</category>
    </item>
  </channel>
</rss>
