Repository navigation
CodeC IDE v1.3.18
versionCode: 22
tag: app-v1.3.18
published: 2026-10-06
What's new
CodeC IDE v1.3.18 — write and run C, Python, JavaScript and HTML on
your phone; C works offline with no setup.
The AI assistant — the whole line (Phases 84–96 / AI Levels 7–12). CodeC
now carries an optional, read-first AI assistant: open it from the ✨ rail
slot or the floating ✨ button. It runs on your own provider key (Google
Gemini by default; NVIDIA Build is a manual, internal-testing selection) —
there is no CodeC server and no shared key.
-
Your key, your bill, your provider. The key is stored encrypted
(Android Keystore AES-256-GCM) underno_backup/ai/and never rides a
backup; nothing leaves the phone until you tap Send on a preview that
shows exactly what will be sent. -
Agent tools, and what they may see.
list_files,search_project,
read_file,read_files(up to 8 files per batch), plus the
readable-structure resultsfind_files,outline_fileand
read_run_output.search_projecttakeslist_files' own scoping keys
(max,path,ext) and can only narrow the walk's admitted list.
Secret-like paths (.env,.npmrc, private keys), symlink escapes and
build output are refused before they can reach a request. -
No write tool and no exec tool, by design. Edits arrive as a
<<<CODEC_EDIT>>>proposal rendered as a diff you review; only your
Apply writes (throughAiEditApplier). A run request reaches CodeC's
normal RUN ▶ pipeline only after you tap Run on the approval card —
Skip runs nothing. -
Markdown answers. Headings, lists, tables and fenced code blocks, with
a copy-only Copy per block;httpslinks open only behind a confirm
dialog that shows the full URL. -
The nine agent controls (AI panel): read window, working-set depth,
task memory, answer detail, activity display, backup-provider offer, budget
offer, reviewer — and request inspection, which is always on. Each control
tunes inside a cap; none can grant a permission. -
Caps that no control can raise: 12 model turns, 24 tool calls, 2 runs,
24 000-char reads, 8 000-char results, 8 batched reads, 3 identical
repeats before the loop stops. -
History drawer and first-run agreement. Pinned/Recents rows, pin/unpin,
a New-chat pill with one confirm, and a one-card welcome whose four bullets
end in a pinned I understand — start. -
Six bug fixes and three first-run shape fixes from the device rounds —
a settled conversation can no longer be filed under the wrong project or
the wrong chat row, the drawer's New-chat pill keeps its confirm, ☰ can
never go dead, the current row is marked, the Explain last error route
redacts exactly like theread_run_outputtool, and the agreement button,
the first-run sheet height and the instant history row all behave on a
small phone. -
3fa49d7 Docs: the AI assistant reaches the README and the privacy guide, plus a plain user guide
-
e778fb1 Release app-v1.3.18: versionCode 22 / versionName 1.3.18; the AI line (Phases 84-96) reaches the release channel
-
0edf4dd Merge pull request #115 from pabi277/arena/27c2ba75-codec
-
d928353 Phase 96 / AI: the merge record, written before the merge so it lands on main with it
-
db1e796 Phase 96 closure: record the CI run for eaea09a (9m46s, green, release 7 217 532 B)
-
eaea09a Phase 96 closed in chat: the rounds waived, Level 12 accepted, the PR held, and Level 13 postponed
-
186d5ff Phase 96 round 2: record the green CI run for d984697 (13m33s, 3 436 tests / 0 failed, release 7 217 536 B)
-
d984697 Phase 96 round 2: read the next statement in the filing pin, not a line window
-
02f0b77 Phase 96 round 2: the welcome door, the room a first chat needs, and history at settle
-
80c1802 Phase 96 docs: record the green CI run for 2eaecce (14m17s, release 7 217 232 B)
-
2eaecce Phase 96: bug sweep after the Phase 95 device round — 6 fixes, scoped search
-
1c6f910 Merge pull request #114 from pabi277/arena/01a10b97-codec
-
70a9e80 Phase 95 docs -- README, DEVICE_ROUND, NEXT_STEPS, JOURNEY entry 117
-
195d308 Phase 95 -- wire the Phase93 and SelfCheck pins to the new history
-
cec7485 Phase 95 -- re-trigger Build APK (run 37432522206 failed at 3m30s with no annotations and logs endpoint answered EOF; same tree)
-
3a72a2b Phase 95 -- history drawer, welcome+agreement, composer clears on Send, ChatGPT-style header
-
f4d6924 Phase 94 round 3 -- the branch head is green too (37372737924 on cb4d096, 14m20s, release universal 7 206 072 B)
-
cb4d096 Phase 94 round 3 -- the ~15-minute runner cut, named: zero steps, always ~15m01s, against 13m51s-14m20s of green job time
-
ab67c0f Phase 94 round 3 -- the docs commit's CI is green too (37369079122 on a172673, 19m46s)
-
a172673 Phase 94 round 3 -- re-trigger Build APK for the docs commit: run 37367483241's job was cancelled at exactly 15m03s (no step failed, rerun refused)
-
60c25af Phase 94 round 3 -- build facts: run 37365936119 green on 2d495ab (release universal 7 206 076 B, no debuggable flag)
-
2d495ab Phase 94 round 3 -- re-trigger Build APK: run 37364178929's job was cancelled by the runner (conclusion: cancelled, 15m01s, no failing step) and GitHub refused a rerun ("cannot be rerun")
-
3a07ac0 Phase 94 round 3 -- the refused write now offers Grant access, and the self-check's denial read is pinned
-
e7c8d99 Phase 94 -- build facts into the phase doc: run 37345207580 green on 12a6606 (release universal 7 206 016 B, no debuggable flag)
-
12a6606 Phase 94 -- more power: three read-only tools, a structure reader, and the value-level secret guard
-
d38c769 Phase 93c -- build facts into the phase doc: run 37328263954 green on e612db0 (release 7 197 988 B, no debuggable flag)
-
e612db0 Phase 93c -- the write path audited: the storage preflight was ordered wrong, and the parser could not diff a file the agent had read
-
fa1380b Phase 93b -- build facts into the phase doc: run 37309397712 green on ada48f9 (release 7 198 092 B, no debuggable flag)
-
ada48f9 Phase 93b -- the owner's round 2 ("Not solved"): the proposal dead end and the [5/5] misreport, both fixed in code
-
b8e9289 Phase 93 -- build facts into the phase doc: run 37303387512 green on dc96329 (release 7 194 500 B, no debuggable flag)
-
dc96329 Phase 93 fix 2 -- the storage row reads the policy's own enum, and the Settings scan stops matching a property access
-
e40b887 Phase 93 fix -- the CI round found the mixed-type listOf, and three guards against the next round
-
8a1048c Phase 93 -- the owner's five fixes and the three audited bugs: one arrow, the permission named before it fails, Welcome to CodeC, one in-memory chat per project
-
b7a6b85 Phase 92.1 -- build facts into the increment doc: run 37231109942 green on e06d3a5 (release 7 192 032 B, no debuggable flag)
-
e06d3a5 Phase 92.1 fix -- the const was between @composable and its function (CI 37230899639)
-
57bd267 Phase 92.1 -- "Not all test run": the self-check can no longer be a dead end
-
bfea912 Phase 92 -- build facts into the phase doc: run 37220578998 green on 090af93 (release 7 191 772 B, debug 27 106 392 B, no debuggable flag)
-
090af93 Phase 92 fix -- declare AiCopy.SELF_CHECK_TITLE, and pin the whole class of missing constants
-
407cf4d Phase 92 -- the self-check: one command, five checks the app judges itself, a redacted report
-
544ce7c Name the Phase 91 build on its round: head 97a8ac7, run 37215933981
-
97a8ac7 Follow the DONE branch's new shape in the Continue pin
-
592c340 Phase 91 -- the simple chat (the owner's Phase 90 device round)
-
dc816e8 Point the Phase 90 round at the latest green build (46f2cdb, run 37209301287)
-
46f2cdb Record the Phase 90 build on the round: head 2333cde, run 37208366826, byte counts from the annotations
-
2333cde Keep the two host pins Phase 90 touched: the Level 11 census and the immutable provider/model literal
-
ed54bbe Implement Phase 90 -- the conversation surface (New chat, follow-up chats, the real-assistant look)
-
b0a77ad Brief Phase 90 -- the conversation surface (owner request: New chat, follow-ups, a real-assistant look)
-
7c1c0e1 Record the owner's device-round results in the round file and everywhere the docs carry them
-
e3648e3 Transcribe the owner's device-round report for Phase 89 / Level 12
-
240c53e Record the green Build APK run and the APK delta in the Phase 89 docs
-
58039cd Move the decoder usage cases into their Robolectric homes (CI round 2)
-
0929ef5 Restore the NVIDIA usage-only contract CI round 1 caught, and pin it host-side
-
e7a8677 Implement Phase 89 / AI Level 12: evaluation and acceptance
-
92709d7 Brief Phase 89 / AI Level 12: evaluation and acceptance (docs only, no code)
-
86bcfcb Docs: record the Phase 88 merge commit 0fc2bfd and post-merge Build APK run 37136523881
-
0fc2bfd Merge pull request #113 from pabi277/arena/01a101db-codec
-
06c1433 docs(ai): record the PR #113 merge of Phase 88 / AI Level 11 to main
-
1ab64ce docs(ai): record Phase 88 Build APK round 1 green (37132310296) and the APK deltas
-
88f0186 feat(ai): implement Phase 88 / AI Level 11 (agent phone presentation)
-
0860ca3 docs(ai): brief Phase 88 / AI Level 11 (agent phone presentation)
-
8062f0c docs(ai): fix roadmap row 10 and two stale Phase 87 leftovers after carrying the merge record
-
7b71ec5 docs(ai): record the PR #112 merge of Phase 87 / AI Level 10 to main
-
c3771c5 Merge pull request #112 from pabi277/arena/01a100ed-codec
-
456ae61 docs(ai): record Build APK 37119390730 green on 27c23c1 for Phase 87 / Level 10
-
27c23c1 test(ai): repair two Phase 84 pins broken by the Level 10 cap threading
-
35d72b1 fix(ai): compile on Kotlin 2.2.10, the version the app actually builds with
-
ef97bbf feat(ai): Phase 87 / Level 10 — nine bounded agent controls and options
-
801fba6 docs(ai): record the PR #111 merge and brief Phase 87 / Level 10
-
6838ea6 Merge pull request #111 from pabi277/arena/01a1004c-codec
-
4ed3818 docs(ai): record green Level 9 CI
-
ddb75d3 fix(ai): preserve refusals and eviction markers
-
3716dd0 feat(ai): implement bounded task memory and planning
-
32e4a5f Merge pull request #110 from pabi277/arena/01a0fe36-codec
-
4e56f52 Phase 85 (AI Level 8) docs: phase record + living docs
-
a23fe87 Phase 85 (AI Level 8) part 4: S11 loop-local working set
-
e393370 Phase 85 (AI Level 8) part 3: restorable eviction
-
46b83db Phase 85 (AI Level 8) part 2: read_files batch tool
-
e3fb015 Phase 85 (AI Level 8) part 1: offset-capable honest reader
-
a1af105 Phase 84 (AI Level 7): agent correctness — fix the six defects
-
392a614 Merge pull request #109 from pabi277/arena/01a0fded-codec
-
64a31ea docs(ai): record Phase 83 baseline and Build APK results
-
cf3f1be test(ai): add Level 6 offline baseline fixtures (Phase 83)
-
7419566 Merge pull request #108 from pabi277/arena/01a0fd57-codec
-
1679caf docs(ai): split the agentic optimization roadmap into Levels 6-12 and renumber
-
4cb4151 Merge pull request #107 from pabi277/arena/01a0fbc2-codec
-
268ed24 docs(ai): record agent-core research and postpone device acceptance
-
e0665cb docs(ai): record Phase 82 green CI and device-round artifacts
-
7b2ecac test(ai): fix JUnit connection fixture after first Phase 82 CI
-
7921c01 fix(ai): honor legacy Retry-After dates and record GitHub push block
-
9285818 feat(ai): Phase 82 bounded rate retry, larger answers and NVIDIA dev/test BYOK
-
828be38 Phase 80 + 81: record PR #106 merged (e089880) and post-merge CI green
-
e089880 Merge pull request #106 from pabi277/arena/01a0f9a5-codec
-
d8703e3 Phase 80 + 81: name the open pull request (#106) in the device-pass docs
-
69777ea Phase 80 + 81: record the owner's device pass and prepare the merge
-
0afea69 Phase 81: record branch CI green (36946839410, 9f9ffac) and the device build
-
9f9ffac Phase 81: give BottomBar the onContinue parameter (CI compile fix)
-
14c14f7 Phase 81 — Continue: get the rest of an answer that was cut off
-
0aff551 Research: NVIDIA multiple-model catalogue, future updates, other providers, and the personal-use answer
-
8245dc0 Research: NVIDIA NIM/Build free API vs the owner's rate-limit and answer-length reports
-
e01a439 Phase 80: pin the final green CI run (36941118847, c5dd30a) in the phase docs
-
c5dd30a Phase 80: record the branch CI result in NEXT_STEPS too
-
143762c Phase 80: record branch CI green (36939786754, bd3276e) and the device-round build
-
bd3276e Phase 80: import kotlinx.coroutines.isActive (CI compile fix)
-
2367b9a Phase 80 — AI Level 4: whole-project map, bounded tools, and the approved run loop
-
bba0530 Phase 79: record PR #105 merged (df2c5d4) and post-merge CI green (36934250423)
-
df2c5d4 Merge pull request #105 from pabi277/arena/01a0f848-codec
-
607ccb7 Phase 79: keep reloadDiscardedFile..reloadActiveTab slice intact for GitDiscardWiringTest
-
999ebd2 Phase 79: AI Level 3 — proposed edits, local diff review, and 1-task undo
-
bd1aa06 Merge pull request #104 from pabi277/arena/01a0f5d2-codec
-
4e1412c Phase 78 round 1 fix: the send arrow follows the question
-
836a93c Phase 78 docs: part docs, device round, and the living docs
-
8abd49e Phase 78 (AI Level 2): whole-project context, still read-only
-
fd20fc2 Phase 78 brief: AI Level 2 whole-project context (read-only)
-
5abe768 Merge pull request #103 from pabi277/arena/01a0f452-codec
-
454f62e Phase 77: keep both Output-conflict variants as a saved user setting (owner decision); docs
-
4c4ec6a Phase 77: DEVICE_ROUND.md and CI record (run 36784685021 green)
-
3661264 Phase 77: rename AiBubblePolicy.snap -> snapToEdge (MotionWiringTest bans snap( outside CodecMotion); record lesson
-
90fec07 Phase 77: AI UI for phones — floating AI bubble, HALF/FULL chat sheet, AI home
-
38754cd Merge pull request #102 from pabi277/arena/01a0f34c-codec
-
fb65159 docs: Phase 77 brief (phone AI UI: floating button + chat sheet), Phase 76 merged status, prompt.md handoff
-
aee6dda Phase 76 device round 1 passed: default model gemini-3-flash-preview
-
85043aa docs(phase 76): record CI round 2 green (36755705695) and the device-round build
-
813dfd1 Phase 76: docs, literal AI-key scrub in feedback, code font in the preview (CI round 1 fix)
-
424e327 Phase 76 (AI Level 1): read-only Gemini helper in the fifth rail slot
-
0b780d2 docs: close AI Level 0 — terms/18+ gate, Level 1 technical design, default model
-
e85849b docs: record AI Level 0 owner decisions, current-main recheck and Gemini research
-
1785b92 Merge pull request #101 from pabi277/arena/01a0ecd3-codec
-
cd0d8a8 docs: align AI roadmap with current docs structure
-
6e24c51 Merge remote-tracking branch 'origin/main' into arena/01a0ecd3-codec
-
7bf6135 docs: outline staged AI integration plan
-
120460f Merge pull request #100 from pabi277/arena/01a0f2c3-codec — docs: reorganize docs/ into a categorized, navigable tree
-
fa35956 docs: repair truncated category paths from the reorganization
-
d763f6a docs: reorganize docs/ into a categorized, navigable tree
-
941fe6e Merge pull request #99 from pabi277/arena/01a0f20c-codec
-
17c27c2 Document CodeC Arcade and WebView Back behavior
-
f749a13 Fix WebView back navigation history
-
d00fd9d Fix arena asset-source assertion
-
e667468 Replace first-run game with modular arcade
-
c1fd309 Turn first-run intro into timed stories
-
6a6bfd5 Route first-run back through shared policy
-
2fa0d38 Add first-run introduction and Orbit Shift starter
-
2d19134 Merge pull request #98 from pabi277/arena/01a0f0fb-codec
-
5ebb056 Phase 75.1–75.3 docs: record CI 36701799600 green, owner device pass, and PR #98 merge
-
26dbf9e Phase 75.3: suggestion word-only insert, live strip key commits, Sora cursor/selection sync, brace outside ()
-
23bc3bc Phase 75.2 docs — CI recorded: Build APK ✅ GREEN 36692498787 on e5d66a8
-
e5d66a8 Phase 75.2 — device round 1: quiet Python block keywords, full-level brace indent, leading indent dots & Tab alignment
-
0d6923e Phase 75.1 — the device-round test card (every language, both keyboards)
-
bc0fa56 Phase 75.1 docs — note the green re-run 36681074743 on the docs commit
-
b7caa93 Phase 75.1 docs — CI recorded: Build APK ✅ GREEN 36679767045 on 5acac43
-
5acac43 Phase 75.1 — editor typing: one Python block rule for both Enter routes, one space per Backspace
-
dba1361 Merge pull request #97 from pabi277/arena/01a0ee39-codec
-
59dc91c Record Phase 74 search merge and CI
-
cdc6c93 Merge pull request #96 from pabi277/arena/01a0ee39-codec
-
5dccb76 Record green Settings search CI
-
f29f3f3 Correct Settings search match expectation
-
94bef25 Make bespoke settings controls searchable
-
d4d1697 Record post-revert CI and deferred typing phase
-
902c9f6 Defer editor typing fixes to dedicated phase
-
d65ca64 Record green CI for phases 65.1 and 74.1
-
52420c1 Fix test declaration and record first CI failure
-
eb5c6ef Polish Settings defaults and fix Python indentation
-
6c6a980 Merge pull request #95 from pabi277/arena/01a0eca9-codec
-
2bbab04 Docs: 73.1–73.9 merged via PR #95 (device pass 2026-09-29)
-
837b281 Phase 73.9 record: manual-first stamp (CI 36597542971 green on e4f8d6a)
-
e4f8d6a Phase 73.9: manual-first no-remote flow with origin as the default name
-
b8c6692 Phase 73.8 record: panel-owns-it stamp (CI 36593360018 green on aa8912d)
-
aa8912d Phase 73.8 fix: notInstalled test follows the message to the panel card
-
a212426 Phase 73.8 fix: TerminalStatusLabel is the real stage-words API
-
225846b Phase 73.8: git page owns credentials, install card, and beginner hints
-
6428542 Phase 73.7 docs: record CI green (36583980074 on 0b57c0a)
-
0b57c0a Phase 73.7 fixup: tokenize the Repository empty-state padding (TokenAdoptionTest)
-
db11469 Phase 73.7 fixup: escape $ in the badge-anchor test string (unresolved reference)
-
d878e15 Phase 73.7: git moves into the editor panel (Spck-ditto dialogs, no sheets)
-
9b6f635 Phase 73.6 docs: record CI green (36566495685 on 65d34a2)
-
65d34a2 Phase 73.6 fixup: missing EditorScreen imports (terminal trio + delay)
-
8c22bf4 Phase 73.6: drawer git goes full GUI (engine init + shared install prompt)
-
04af5c4 Phase 73.5 docs: record CI green (36560766234 on d469d52)
-
d469d52 Phase 73.5 fixup: backtick test name must not contain a colon
-
c2471fc Phase 73.5 docs: record, NEXT_STEPS, review table, handoff (CI pending)
-
0140c87 Phase 73.5: Spck-exact Git panel, install status bar, inline credentials, Commit All
-
5e242f9 Phase 73.4 docs: record CI green (36551505966 on b49e726)
-
b49e726 Phase 73.4: fix git-refresh mis-reporting 'installed' after any error
-
92b4482 Phase 73.3: record CI green (36544645579) and the two fixup rounds
-
84b8d79 Phase 73.3 fixup: scope the strings.xml substring checks to one
-
5b38694 Phase 73.3 fixup: AlertDialog dismiss controls go through DialogProperties
-
a764969 Phase 73.3: full GUI parity for the git menu (Spck-style, no terminal except install)
-
ba94d72 Phase 73.2 docs: record CI green (36523739665 on 2f6bf55)
-
2f6bf55 Phase 73.2: one-tap Install Git, plain-words not-a-repo guidance
-
e450924 Phase 73.1 docs: record CI green (36519004263 on 9acfa34)
-
9acfa34 Phase 73.1: remove the misleading per-file Git stage toggle
-
69c4b53 Merge pull request #94 from pabi277/arena/01a0ead9-codec
-
649213f Phase 71.1: record the owner's device result and merge command
-
a917f8b Phase 71.1: record CI for the zoom follow-up
-
12c4076 Phase 71.1: pinch zoom no longer separates the prompt from its cursor (Reflow trim + blank tail)
-
7b2af6d Phase 71.1: record CI runs
-
375165c Phase 71.1: SetupGateWiringTest look-back window covers the session-named toast
-
85af599 Phase 71.1: packages + terminal — true install result, pkg auto-index, pin, session names, userland confirm, resize fix
-
4589a1b Phase 71.1: record the discussion start, source findings and owner's scope answers (no code)
-
679bc69 Merge pull request #93 from pabi277/arena/01a0e84c-codec
-
7d004e5 Docs complete on the owner's word ('Yes all test passed complete docs and merge to main', 2026-09-29): every 'no device pass' in the 70.1/72.1, round-5 and composing-replay records now says when it became one, the chat README is closed with PR #93, the polish review table shows 69.1/70.1/72.1 delivered and the five drafts that remain, NEXT_STEPS carries the head entry and JOURNEY the closing paragraph, and prompt.md holds the next chat's handoff (verify state, never redo the device-passed work, ask the owner which of 65.1/68.1/71.1/73.1/74.1 — or which bug — comes next)
-
1b68266 Composing-replay fix: CI stamp — run 36467347590 on 308441e green (the mechanism reproduced under Robolectric against real sora, the bracket cases beside it; debug APK 26 171 304 B), device pass still owed
-
308441e Editor: the accepted suggestion that the next letter undid (owner, 2026-09-29: 'I write p, tap print(, write the next letter and print( is gone — only p and the letters I typed'). Read in sora 0.24.6 and reproduced against its real classes: the system keyboard was composing the word p, the accept's replay (the 2026-09-13 one-Content.replace delta) inserted rint( at the end of sora's composing range, ComposingText.shiftOnInsert grew the range over it, and the IME's next setComposingText("pr") replaced the whole range — setText had hidden this by restarting the input method, the delta path did not. SoraEditorHost now brackets the delta with sora's own recipe (EditorAutoCompletion.select): restartInput() before the delta and after the selection, gated on hasComposingText() so CodeC Keys and hardware typing pay nothing per keystroke. ComposingReplayTest x4 (Robolectric, real CodeEditor + EditorInputConnection: the mechanism, the bracket, the stale update, the committed edit), ReplayPathWiringTest +1; TROUBLESHOOTING §47, PART_48_1 follow-up, NEXT_STEPS, JOURNEY
-
cb666d0 Round-5 CI stamp: the green run 36453466081 on 0535c0f (host suite with the two phone cases, 11 m 55 s, debug APK 26 171 024 B) — the APK the device pass installs
-
0535c0f Round-5 records: the red first run (Robolectric's 320×470 dp default display clamped the phone case), the fix, the runner's corrupt NDK download on the second run, and why this push is the re-run (the session token cannot re-run jobs)
-
26cb316 Phone-pass fix-up from the red round 36452192492 (1 of 2363): the phone-sized Robolectric case laid a 411×656 dp column out on Robolectric's default 320×470 dp display, Modifier.size yielded to it and the page came out 142 dp — the two phone cases now declare a w411dp-h820dp display; the CI annotation grep also surfaces the 'AssertionError at FooTest.kt:NN' line so the next red round can be read without the raw log
-
c840787 Phone pass for Phase 70.1 + 72.1, and the project card opens the editor: measured on the owner's 411×656 dp page area the tools panel spent 209 of its 240 dp default on its own rows (one line of console; none with the keyboard up) and the Network table gave Name ~107 dp — now the strip is the drag handle, tabs and chips fit a phone, the command line is one 48 dp row with Cancel · Execute inside it, console lines are level-coloured and follow the newest entry, Network/Resources are two-line rows through pure nameLabel/requestSummary/resourceSummary (owner: two-line rows, no header), notes collapse once rows exist, Elements' details header splits the tab with the tree; the panel opens at half the page area and the keyboard slides under a panel and page that keep their size (imeDp added back, pageReserve, panel drawn over the page); run output opens at 40% of the screen (owner: your choice); the hub card's tap and Create both open the editor on the entry file (owner: and Create too — supersedes 66.1's hub-tree answer), the tree is ⋮ → Browse files; Robolectric, policy and wiring tests updated, records in the same commit
-
2b06292 Round-4 records: the collapsed modal decoded (max-height:88vh → 42 px = padding + border), the two sources that explain it (Compose stamps WRAP_CONTENT, Chromium's AwLayoutSizer forces a zero layout height from it), the MATCH_PARENT fix, the 100vh instrument and its warning rule, rounds 1–2 re-read, and the green run 36436647849
-
146986b Preview round 4, from the owner's modal screenshots: the 42 px strip was max-height:88vh collapsing to padding+border because the WebView's layout viewport was 0 px tall — Compose's AndroidView stamps WRAP_CONTENT on a bare view and Chromium's AwLayoutSizer forces a zero layout height from exactly those params (measured EXACTLY all along, which is why innerHeight looked healthy). PreviewWebView is now born MATCH_PARENT; the page-box line also reports what the page's CSS gets for 100vh, and a pure rule warns when it is shorter than half the page's own height. Rounds 1–2 re-read honestly in the records; Robolectric, wiring and policy pins added
-
5c3397c Round-3b records: the owner's four console lines decoded (three 1:1, one 457-in-a-411 drawn 0.9x), the boxMismatch rule, the one bounded reload, the reversed Phase 61 pin and the green run 36421203364
-
c954599 Preview round 3 fix: amend the Phase 61 'the native view never reloads' pin with its reason (the owner's 457-in-a-411 load) and assert the two — and only two — reload paths instead of a bare absence
-
3a0a50e Preview round 3 fix, from the owner's own console: three of his four loads laid the page out 411 CSS px in a 411 dp box (1:1, correct) and one 457 (drawn 0.9x, 10% small) — the page laid itself out for a box it did not have because Chromium decides the scale before the page's viewport meta is in effect. The preview now detects that with a pure rule (device-width pages only, zoom-aware, tolerance 4 dp) and loads the page once more with the box and the meta both known; the app's own loads re-arm the check so it cannot loop
-
53bf6f5 Round-3 records: the third-party page report, the two candidate shapes and their opposite fixes, the enriched console line and the simulated wide-layout exhibit (labelled as a simulation)
-
e436473 Preview round 3 — measure before changing anything: the per-load page-box line now also reports the page's own viewport meta and the scale the WebView applied (page box | meta | view box | scale | dpr), so a third-party page's 'very smaller view' can be told apart from its box being short without guessing
-
43bb220 Render-fix records: the preview chrome height recorded as an open item for the owner (measured, not changed)
-
394ea3b Render-fix records: the keyboard-release half of the panel-gated inset (1906b08, run 36411874083)
-
1906b08 Preview round 2 follow-through: closing the tools panel, or leaving the console tab, releases focus in the same tap, so the keyboard goes down with the only text field on the screen (the inset is reserved only while the panel is open); pinned in PreviewToolsWiringTest
-
34f10ef Render-fix round-2 records: the board falls from 380 to 200 px in a shorter box, the width-driven reversal, the panel-gated IME inset, the console page-box line and the green run 36409241166
-
0ca08dc Preview round 2 (owner: browser have a good view and code is very smaller view): the sample's board is width-driven again like a browser (a short box scrolls instead of shrinking it), the IME inset is reserved only while the tools panel is open (no phantom band under the page), the page's own viewport box is logged to the console on every load, and three suites pin it
-
fe3059f Render-fix records: CI confirmed green (36404697868 on ced2821, 36404764414 on the record) and the side-by-side render added
-
bbc54c3 Render-fix records: the reproduced clip (−53 px header at 360×520 CSS px), the page and preview changes, the two source pins, the before/after renders and the honest limits — chat README, 72.1 brief, NEXT_STEPS and JOURNEY
-
ced2821 Snake page + preview: the page no longer fixes its own height (min-height, a board capped by the viewport, no stray paragraph margins, the gesture only on the board) and the preview waits — bounded — for a measured page box before its first load; tests pin both; before/after renders in docs/chat-phase70/render-fix
-
000db1f Phase 70.1 + 72.1 records: the chat README, both briefs' implementation sections, NEXT_STEPS and JOURNEY — CI green 36399610563 on d86b4a3, no device evidence claimed
-
d86b4a3 Phase 70.1 tests: press the 55 % cap with a request above it, and keep the below-cap case
-
3ad83c7 Phase 70.1 tests: counts() reads plain strings, not OutputLine rows
-
2590429 Phase 70.1 panel: compile the state words (is Done), the motion hook, and align the two new tests with what the code actually does
-
11345c0 Phase 70.1 (editor, part 2): the run panel's state word, labelled Stop, error cards, the console line and the waiting strip
-
2a707be Phase 72.1 preview: import the Refresh icon the panel's two refresh buttons use
-
090596e Phase 72.1 (preview, part 1): the five-tab strip, a console that takes commands, Elements, Network table, Resources, Settings, and phone-sized viewport for every page
-
fbb3056 Merge pull request #91 from pabi277/arena/01a0e49f-codec
-
e251dda Phase 69.4 (2/2) — the record: the brief plus the three registers
-
e7e420e Phase 69.4 — CI round 3 fix: one stale pin of this part's own making
-
dbbe884 Phase 69.4 — CI round 2 fix: a shape the user already chose outranks the default
-
1c61f42 Phase 69.4 — CI round 1 fix: FileTreeMemory needs an import in the ViewModel
-
3bc55d8 Phase 69.4 (1/2) — the Files tree remembers its shape; the route opens once
-
e5b75f5 Phase 69.3 (2/2) — the record, and Phase 55's scrim assumption corrected
-
df6c654 Phase 69.3 — CI round 1 fix: touchSlop is pixels, and fillMaxHeight had no import
-
02988a1 Phase 69.3 (1/2) — the strip beside the panel closes it; a drag never types a key
-
7190b45 Phase 69.2 (3/3) — the record: two reports, two fixes, four CI rounds
-
b43432d Phase 69.2 — CI round 2 fix: the hold tests addressed the wrong receiver
-
d5420f0 Phase 69.2 (2/3) — the ghost reads as a suggestion and stops vanishing
-
f29fcfd Phase 69.2 — CI round 1 fix: the one stale 22.x row-order pin
-
9c7a74d Phase 69.2 (1/3) — the quick-key row answers to the file language
-
52ecfe8 Phase 69.1 docs — say the agreed part plainly: two changes across four production files
-
aa53aa6 Phase 69.1 docs — CI round 1 red for-cause, round 2 GREEN (run 36350567066, code f98ae5c)
-
f98ae5c Phase 69.1 CI round 1 fix — two self-inflicted reds, both found by CI
-
e7a11d9 Phase 69.1 — typing, keyboard and selection (owner answers A/A/A/A/A)
-
b297765 Merge pull request #90 from pabi277/arena/01a0e444-codec
-
11882f3 Phase 68.1 delivery authorised: owner — "Everything looks good merge it"
-
324579c Phase 68.1 records: completed part (MD renderer, JSON keys, sort ✓)
-
8c862c5 Phase 68.1 completed part: real Markdown preview, JSON keys row, sort ✓ truth
-
b61d225 Phase 68.1 records: CI green on arena/01a0e444-codec, close-out
-
7ca3880 Fix TabMenuWiringTest: drop unsatisfiable ')' from strip literal
-
9e7280b Mirror arena/01a0e36f-codec: Phase 68.1 split doors + CI debug history
-
f073597 Merge pull request #89 from pabi277/arena/01a0e2fc-codec
-
795fc95 Finalize Phase 67.1 docs for main merge [skip ci]
-
f4203ce Record follow-up additions and green CI 36326855236 [skip ci]
-
3dd599e Keep autosaved active-file exports on live editor content
-
1fa530d Preserve file restore write guard during nested creation
-
5fbf1c3 Add Files-first drawer, filename search, nested creation and file transfer
-
416f9b5 Record Phase 67.1 owner decisions and green Android validation [skip ci]
-
bd71cef Correct literal wiring checks and exercise Files layouts in Compose
-
63d15ad Polish Phase 67.1 file tree, actions and project search
-
1566062 Merge pull request #88 from pabi277/arena/01a0e220-codec
-
fde8b16 Record owner device verification and merge authority for Phase 66.1 (PR #88)
-
5cb2b40 Record CI verdict for the Back-from-Projects fix (3762b7b green, run 36317041278)
-
3762b7b Back from Projects returns to the editor, not the exit prompt
-
9aa1106 Record Phase 66.1 CI verdict (a96fb25 green, run 36311728346) in the phase docs
-
a96fb25 Phase 66.1: seed the demo once, make hub dialogs truthful, unify hub wording
-
249877e Merge pull request #87 from pabi277/arena/01a0e1d9-codec
-
4fe8a40 Complete Phase 64 documentation, owner decisions and delivery handoff
-
4de912a Keep install-and-run continuation bound to the original editor context
-
28b47c0 Remove installation UI locks and guide; plan focused UI polish chats
-
ef0e030 Merge pull request #86 from pabi277/arena/01a0c83e-codec
-
8cbe3ea Record owner's visual feedback, declined device rounds and merge approval
-
63c584d Record Phase 63 green CI and pending device acceptance
-
bd55e70 Refuse discard when Git redirects the project worktree
-
c43ede6 Phase 63: safely discard one file's unstaged changes and reconcile editor buffers
-
d77c5d0 Record Phase 61 green CI and phone verification checklist
-
5707e38 Phase 61: add preview console, observed Network log and viewport controls
-
83b0db4 Record owner confirmation of blank editor fix
-
73f81eb Record green CI for blank editor height fix
-
5464981 Fix tab strip consuming the editor viewport height
-
47bfc0a Docs: the Phase 60 CI verdict (green on the first round, run 36220293009)
-
017dd2c Phase 60: the tab menu's Close unmodified, Hide tabs and three sorts
-
2cc8ef4 Docs: the Phase 59 CI verdict in JOURNEY 86 (the anchor missed it in the previous pass)
-
7ddb30a Docs: Phase 59's CI verdict (two red rounds of one class, green on the third)
-
55d32f3 Phase 59 — the stray annotation, and the pin that makes it impossible
-
2667048 Phase 59 — the action chip's annotation (CI round 1 was red for cause)
-
ecee556 Phase 59 — the hub's Recent filter and the project's own mark
-
eb5b5f5 Docs: Phase 62's CI verdict (round 1 red for cause, round 2 green on aa1fcba)
-
aa1fcba Phase 62 — the section boundaries, fixed (CI round 1 was red for cause)
-
fb4e37f Phase 62 — Settings: find and group (owner's chosen start)
-
2224402 Docs: the UI/feature-upgrade spec, re-scoped against this checkout (phase 59-63 roadmap)
-
50fcfa7 Docs: the phase-58 CI verdicts (both rounds green first try) and the 57 close-out
-
ebc1296 Phase 58.3 — the preview's upper links become a hamburger (the owner's answer, after the research pass asked)
-
22b9c2e Phase 58.1 + 58.2 — the first open is the editor on a snake we wrote, and the userland installs silently with one sentence
-
7c9619b Phase 57.3 round 2 — the fourth PressableSurface call site, with its reason
-
25d2b73 Phase 57.3 — the pill, and the dead taps it closed; the two red pins fixed
-
e252f12 Phase 57.1 + 57.2 — the editor's chrome from the shots; 57.3 not started
-
9cc8a25 Phase 56 — Projects leaves the bottom bar (four tabs left); the router keeps it a room; the tour's copy counts four
-
d1bc2cf Phase 55 — the side panel: rail, 3x2 Navigation card, Recent, Files/Search/Repository; the bottom bar stays
-
0076b11 Phase 54 — reference lock: the seven shots as a citable card, the file:line inventory, the bar decision and the open questions
-
3f9fd6b Merge pull request #85 from pabi277/arena/01a0c7ec-codec
-
43cf991 Record the bottom-bar review in the phone UI notes.
-
0d5f4d8 Keep the bottom bar. Remove only the Projects tab.
-
8e953e3 Plan phases 54-58 from the real phone shots.
-
ed7dc34 Correct the phone UI notes against the real screenshots.
-
dd81a6d Real ss
-
aef402b Add phone UI spec images for the SPCK chrome review.
-
afc5979 Merge pull request #84 from pabi277/arena/01a0c587-codec
-
7e795fe Preserve Phase 44 one-shot start route wiring
-
dd54fdd Select actionable host test errors for CI annotations
-
c7bba26 Allow CI failure diagnostics to run after host tests
-
3beb66e Annotate the Phase 52 host log tail
-
7a62173 Surface Phase 52 host test failures in CI
-
5faf67c Merge branch 'arena/01a0c587-codec' of https://github.com/pabi277/CodeC into arena/01a0c587-codec Co-authored-by: arena-agent 297053741+arena-agent@users.noreply.github.com
-
10bc453 Implement Phase 52 return and perceived speed
-
3a120eb Start Phase 52 return experience
-
defc717 Merge pull request #82 from pabi277/arena/01a0c4cb-codec
-
4c215a1 Phase 51: device round ALL PASS recorded, phase closed (merge commanded)
-
feebab5 Phase 51 docs: the same CI record in all four part docs
-
67bd715 Phase 51 docs: record the green CI round and the measured APK delta
-
32c7c70 Phase 51, CI round 2 fix: import PaddingValues in EditorScreen
-
1abceca Phase 51, CI round 1 fix: escape the apostrophe AAPT2 rejected
-
b42f106 Phase 51: the feel (cold start, RUN hero, hub/packages/terminal, haptics)
-
0f1b650 Merge pull request #81 from pabi277/arena/01a0bd6d-codec
-
775d764 Phase 50 records: CI green cited, converter deleted, device round pending
-
616c46a Phase 50 round 4: audit row 64 for the wallpaper switch
-
b9504ed Phase 50 round 3: test-compile fixes (Double division, Int template set)
-
f53f638 Phase 50 round 2: CubicBezierEasing constructor (cubicBezier() needs newer Compose)
-
fc57c26 Phase 50: one CodeC design language (tokens, identity, type, motion)
-
e797ed9 Merge PR #80: Phases 50-52 planned (look, feel, return); cross-device matrix cancelled
-
9e0235e docs: PR #80 merge record in NEXT_STEPS and prompt.md
-
1b7774b Record PR #80 (the 50-52 plan merge) and fix one stale pointer
-
e78d36b Cancel Phase 53 — the cross-device matrix (owner: "Remove the full device cross check phase")
-
308624c Renumber: the cross-device matrix moves 50 -> 53 and is deferred; the UI series takes 50/51/52
-
65b550b Phases 51-53 plan: adopt Phase 50's Test-log convention, record its real status
-
a4899b5 Phases 51-53 planned (docs-only): the polished-UI / 100x series + the phase-creation playbook
-
62cfe7b Phases 48 + 49 (+ device-round fixes: the CodeC Keys blink; the guide's single-click law, tour = 11 beats) — all device tests passed (#79)
-
37cc94d Docs: device round ALL PASSED (owner: 'All device passed. Now merge it.'); PR #79 commanded
-
3a88c44 Docs: guide single-click round records (TROUBLESHOOTING §45, PART_45_2 Round 7, JOURNEY §70, NEXT_STEPS, rule.md §9, prompt.md, DEVICE_ROUND runbook rows to the 11-beat tour)
-
c5e73ac Tests: fix two pins the 77fb04f commit carried stale (for-cause red 34742573726)
-
77fb04f Guide single-click law: tour's tap performs the lesson end to end, and demo_flask gets its own beat (11 beats)
-
5fb7b8d Docs: CodeC Keys blink fix records (TROUBLESHOOTING §44, PART_48_1 device round, NEXT_STEPS, JOURNEY §69, rule.md §9, prompt.md)
-
61d60f7 CodeC Keys blink fix: small VM-driven edits replay as ONE incremental Content delta, not a wholesale setText
-
bc345f3 Docs: record CI round 2 GREEN 34740245825 (release APK 6,681,018 B, +0.06% both phases); round-1 for-cause note
-
a592295 ExitSurveyTest: move the 41 wiring pins to the 49 router shape (intent unchanged: route-decided prompt, safe mode exits directly)
-
4c25a31 Docs: phases 48 + 49 implementation records (part docs, READMEs, roadmap, JOURNEY §68, rule.md §9, prompt.md, NEXT_STEPS, README bullets)
-
b094b28 Phases 48 + 49: the caret never hides behind the keyboard; back does the obvious thing, everywhere
-
8d2668c Merge pull request #78 from pabi277/arena/01a097b5-codec
-
a8b99b2 Docs: Phases 46+47 ✅ COMPLETE & MERGED via PR #78 (owner device rounds passed: 'All working merge it')
-
c35ed0c Docs: record device-round-2 fix CI green 34737610972
-
11e87c3 Device round 2 (guide beat 2): a project pick never closes the drawer
-
cf883e2 Docs: record device-round-fix CI green 34736668771 (tip ce4044d)
-
ce4044d Device round 1 (46+47): fix the New-project hand-off + enforce the one-project-per-editor tab law
-
ea23076 Docs: record CI green 34735450676 (tip 76026b5) for Phases 46+47; update state lines
-
76026b5 Fix CI round 2: EditorRouteCompatTest joined file PATHS, not contents (missing readText transform); record the red round
-
81ca938 Fix CI round 1: missing assertEquals imports in DrawerPolicyTest + KeyboardDefaultTest (test-only); record the red round
-
f72d859 Phase 46 + 47: projects-not-folders, a drawer that behaves, system keyboard by default
-
a475fe4 Merge pull request #77 from pabi277/arena/01a0955a-codec
-
6b5ba21 Merge origin/main (PR #76's docs merge record) into Phase 45 round 6
-
935fe41 docs(phase45): record round-6 CI GREEN (run 34719753700, tip 8c3c10d)
-
8c3c10d Phase 45 round 6: the lock dies with the setup
-
b5005a1 docs(phase45): record round-5 CI GREEN (run 34714305062, tip 6c3cfea)
-
6c3cfea Phase 45 round 5: the install lock is on from the first frame
-
55eb2cc docs(phase45): record round-4 CI GREEN (run 34711827176, tip e7759f1)
-
e7759f1 Phase 45 round 4: one tap does both halves, and an install pauses the app
-
9c63a3e docs(phase45): record round-3 CI GREEN (run 34707337429, tip 0fcb3b6)
-
0fcb3b6 Phase 45 round 3: the tour has no skip — first beat to last, a close at the end
-
11cd2ce Phase 45 docs — CI round 2 observed GREEN (34704379023)
-
acadaee Phase 45 round 2: one guided tour instead of five spotlights
-
eb63174 Phase 45 docs — CI round 1 observed GREEN (34698914219): tests and lint on real Gradle, APK +0.19%, the device round named for the owner
-
3c597b2 Phase 45 — the guide: five slides on first run, five spotlights on first arrival
-
19174bb Phase 44 docs — CI round 4 observed GREEN (34695797493), round-3 record confirmed, round-2 build named for the owner
-
4bf3c4c Phase 44 device round 1 fixes — a marker is not a prefix, the bar was a wall, restoreState is not a tab
-
8c9a1c8 Phase 44 docs — CI round 3 observed green, GitHub auth expired before it could be re-read
-
ba51382 Phase 44 CI round 2 fix — no java.nio.file in a pure file (lint NewApi, minSdk 24)
-
cafea6e Phase 44 CI round 1 fix — the installer's Context constructor takes the ledger
-
e3d1e64 Phase 44 docs — implementation record, device round, owner-facing repair
-
cdb4735 Phase 44 — setup you can see, and cannot half-finish (44.1 + 44.2)
-
023ca91 Merge pull request #76 from pabi277/arena/01a094e5-codec
-
8eff438 Merge pull request #75 from pabi277/arena/01a094e5-codec
-
7ea3ab0 docs(phase50): correct the CI-tooling claims - the stack is already in the repo
-
6ec3ed9 docs: plan Phases 44-50 from the test-phase bug report; cancel Phase 43
-
d376623 Merge pull request #74 from pabi277/arena/01a09389-codec
-
0bfd4d1 web-docs: sync v2.2 with app Phases 21-43 (universal APK 6.6MB, Auto engine only, >_ mark, file icons, LAN server, outputs temporary, GitHub truth, feedback hardcoded, backup include-list, crash-loop guard, export-all, safe walk planned)
-
f3a6e32 Merge pull request #72 from pabi277/arena/01a08e79-codec
-
9b80d74 JOURNEY 58: record PR #71 + main merge commit 3c983c6 (main CI 34602562874 green)
-
3c983c6 Phase 42 — Share-readiness (signing, -74% size, trusted updater, data safety)
-
a998257 PART_42_3 status: COMPLETE + merged; unreported device items ride BETA checklist
-
feae4c0 Phase 42 CLOSED: outcome records, BETA carried items, JOURNEY 58
-
09f2db7 42.1 record: first publish round GREEN (app-v1.3.17) + notes template universal-only
Which APK should I install?
- Everyone:
CodeC-IDE-1.3.18-universal.apk— the ONLY APK. It
runs on every device CodeC supports (64-bit ARM phones, x86_64
emulators, and 32-bit ARM phones). Per-ABI variants were tried and
reverted (measured < 2 % smaller because the offline C toolchain ships
in every variant; Docs: Phase 42.2). - 32-bit ARM (armeabi-v7a / older x86) devices: the built-in C compiler
is not bundled for your ABI — C works through the downloadable Clang
module (Packages tab) or the Termux fallback. Everything else in the app
is the same.
Upgrading / downgrading
- Install the APK over the existing app — Android updates it in place and
keeps your projects as long as the signing key is the same. - The first release-signed build does not share a key with the old
debug-signed CI builds: switching from a debug build to this release is a
fresh install. Export your projects first (Files → project → Export
ZIP, or Files → ⋮ → Export all projects) and import them back afterwards. - The app's own Check for updates (Settings → About) never installs an
older release over a newer one and says why.
Checksums
Verify before sideloading (sha256sum <file>), or let the in-app updater
check for you — it refuses to install anything whose checksum does not
match these lines, and refuses to install at all when none are published:
sha256: 549a8c54cf9ff3fff4f6d985997bbb887f6b3b3098f4ab6ba68fefe7028a60d8 CodeC-IDE-1.3.18-universal.apk
What still bites (known issues)
- AI chat history lives in this session only (D6). Conversations, titles
and the drawer are held in memory: closing the app clears them. Raw chat
text is never written to a file, a store, a log or a backup. - The read window default is 400 lines. It can be lowered to 50 in the AI
panel, but the default — and the maximum the runner will serve — is 400. - The AI has no write tool by design. It can propose an edit (a diff you
tap Apply on) and request a run (which waits for your Run tap); it
cannot write a file, stage or commit, or type in your terminal. - On a small phone a code block's contrast is modest. Fenced code in an
answer is readable, but not high-contrast on narrow screens. - Opening a huge folder from the file picker can be slow on low-RAM phones;
if it hangs, back out and open a smaller subfolder. - Device-to-device restore and cloud backup carry your projects only —
the toolchain, packages, and your GitHub sign-in do not travel; a fresh
install downloads the userland again and asks you to sign in again (that
is deliberate: the backup never carries your token). - Everything user-visible that has bitten someone and what to do about it:
TROUBLESHOOTING.md; beta notes: BETA.md.
Feedback
In the app: Settings → Feedback & Support (WhatsApp chat with the
developer, email, or a GitHub issue — nothing is sent unless you send it).
Rating and exit-survey answers ride the same report.
Privacy
CodeC runs entirely on your device. No analytics, no ads, no account, no
crash upload. The only network requests it makes are the ones you start:
the bootstrap/package downloads you approve, git against the repository you
configured, and this update check when you tap it. Details:
DATA_AND_PRIVACY.md.