Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
2d320c4
feat(detail): generative detail screen — spec-driven blocks + shared …
itstanany Jul 26, 2026
ad2b5cf
feat(nl): parser-first resolver + typed model-failure taxonomy (ADR-0…
itstanany Jul 27, 2026
68b50f3
feat(nl): wire Tier A on both platforms + measured prompt budget (ADR…
itstanany Jul 27, 2026
7a6a94b
fix(nl,signal): dead IME action + unordered signal writes
itstanany Jul 27, 2026
770b249
feat(nl): richer vocabulary, columns, reset, clarification + model do…
itstanany Jul 27, 2026
846b883
feat(nl): Tier B on-device engine, iOS download platform, interaction…
itstanany Jul 28, 2026
c49f58c
feat(nl): engine picker surfaces — first-run, inline and settings (AD…
itstanany Jul 28, 2026
94fd985
test(home): make the lost-update race deterministic instead of probab…
itstanany Jul 28, 2026
0cd9fc0
feat(core): flags module, decision log, boundary tests, CI gate (Bloc…
itstanany Jul 29, 2026
c26d2d8
feat(a11y): preserve focus and stabilise item identity across layout …
itstanany Jul 29, 2026
5b3eb95
feat(signal): encrypt the signal log at rest, per platform (ADR-0007)
itstanany Jul 30, 2026
04c6b95
feat(nl): OS-assistant channel — one shared surface, two platform ada…
itstanany Jul 30, 2026
30a57ab
feat(perf,home): baseline profile + proactive recomposition (stretch …
itstanany Jul 30, 2026
1076967
docs(media): diagrams for the README
itstanany Jul 30, 2026
239c8e8
feat(home): widen the ranker to dwell and time-of-day, not opens alone
itstanany Jul 30, 2026
94809d8
docs: replace the template README with the project's real story
itstanany Jul 30, 2026
b7b792c
feat(nl): persist download intent so a killed process can resume
itstanany Jul 31, 2026
953e943
docs: cover download persistence in the README
itstanany Jul 31, 2026
2e69761
chore: keep write-up material local instead of in the repo
itstanany Jul 31, 2026
bbc1eb8
docs: drop the study-guide section from the README
itstanany Jul 31, 2026
d19fc21
chore: keep the study guide local too
itstanany Jul 31, 2026
9bd7d1f
docs: list the widened ranker in the README status
itstanany Jul 31, 2026
125685d
feat(channel): drive AppFunctions through the real runtime; frame the…
itstanany Jul 31, 2026
f329960
fix(test): wait for the DataStore scope to tear down, not just cancel it
itstanany Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"permissions": {
"allow": [
"Bash(./gradlew :shared:testAndroidHostTest*)",
"Bash(./gradlew :shared:compileAndroidHostTest*)",
"Bash(./gradlew :shared:iosSimulatorArm64Test*)",
"Bash(./gradlew :shared:compileKotlinIosSimulatorArm64*)",
"Bash(./gradlew :androidApp:assembleDebug*)",
"Bash(./gradlew :androidApp:testDebugUnitTest*)",
"Bash(./gradlew :core:flags:allTests*)",
"Bash(awk *)",
"Bash(curl -s *)",
"Bash(curl -sL *)",
"Bash(curl -sI *)",
"Bash(unzip -l *)",
"Bash(unzip -p *)",
"Bash(javap *)",
"Bash(xxd *)",
"Bash(adb devices*)",
"Bash(adb logcat *)",
"Bash(xcrun simctl list *)",
"mcp__claude-in-chrome__navigate",
"mcp__claude-in-chrome__find",
"mcp__claude-in-chrome__get_page_text",
"mcp__claude-in-chrome__read_page",
"mcp__claude-in-chrome__tabs_context_mcp",
"mcp__claude_ai_Notion__notion-fetch",
"mcp__claude_ai_Notion__notion-search"
]
}
}
93 changes: 93 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: CI

on:
push:
branches: [main]
pull_request:

concurrency:
# A new push supersedes an in-flight run on the same ref; nobody needs the results of a commit
# that has already been replaced.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
# Everything that needs only a JVM. Split from the iOS job because this is the fast feedback most
# commits need, and it must not wait on a macOS runner queue.
shared:
name: Shared + Android (JVM)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'

- uses: gradle/actions/setup-gradle@v4

- name: Flags module
run: ./gradlew :core:flags:allTests --stacktrace

# verify=true makes Roborazzi compare against the committed goldens and fail on a diff. Without it
# the snapshot tests run, pass, and check nothing — which is how a snapshot suite quietly becomes
# decoration.
- name: Shared unit + snapshot + architecture tests
run: ./gradlew :shared:testAndroidHostTest -Proborazzi.test.verify=true --stacktrace

- name: Compose interaction tests
run: ./gradlew :androidApp:testDebugUnitTest --stacktrace

# Proves the app actually assembles with the real ML Kit and llama.cpp dependencies wired in.
# A green test suite over a module that no longer links is not a green build.
- name: Assemble debug APK
run: ./gradlew :androidApp:assembleDebug --stacktrace

# The baseline profile is generated on a device, which CI has none of — but the committed profile must
# still be packaged, and a release assemble is what proves that wiring survives.
- name: Assemble release (packages the committed baseline profile)
run: ./gradlew :androidApp:assembleRelease --stacktrace

- name: Upload test reports
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-reports
path: |
**/build/reports/tests/
**/build/test-results/
# Roborazzi writes the actual-vs-expected diff here; without it a snapshot failure on CI
# is unreadable and the usual response is to re-record it blind.
**/build/outputs/roborazzi/

# A separate job on macOS: Kotlin/Native and the Swift Tier-A bridge cannot be built anywhere else,
# and this is the half that a JVM-only pipeline would silently never check.
ios:
name: iOS (Kotlin/Native + Swift)
runs-on: macos-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'

- uses: gradle/actions/setup-gradle@v4

- name: Kotlin/Native tests
run: ./gradlew :shared:iosSimulatorArm64Test --stacktrace

# The Swift bridge only exists in the Xcode project, so a Gradle-only iOS job would not compile
# FoundationModelsBridge.swift at all — and that file is where the Tier-A error mapping lives.
- name: Build the iOS app
run: |
xcodebuild \
-project iosApp/iosApp.xcodeproj \
-scheme iosApp \
-configuration Debug \
-destination 'generic/platform=iOS Simulator' \
-derivedDataPath build/dd \
build \
CODE_SIGNING_ALLOWED=NO
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,13 @@ node_modules/
# MemPalace per-project files (issue #185)
mempalace.yaml
entities.json

# Personal write-up material — kept locally, deliberately out of the repo.
# The three diagrams the README embeds are the exception and stay tracked.
docs/linkedin-series.md
docs/media/*
!docs/media/01-before-after.png
!docs/media/01-thesis-architecture.png
!docs/media/05-latency-measured.png
docs/study/
docs/gaps.md
Loading
Loading