No description
  • Rust 98.3%
  • Python 0.9%
  • Java 0.5%
  • Shell 0.3%
Find a file
arena-agent 920827a440
Some checks are pending
doc-engine / engine (push) Waiting to run
doc-engine / consumer (push) Waiting to run
nigig-build (CAD) / supply-chain (push) Waiting to run
nigig-build (CAD) / cad-module (push) Waiting to run
nigig-build (CAD) / full-crate-check (push) Waiting to run
repo hygiene / hygiene (push) Waiting to run
feat(doc): split multi-line paste into blocks with one-step undo
A pasted TextInput payload containing newlines used to land as a
single run of text with literal line feed characters. It now splits
block-per-line like a desktop editor: line 0 splices into the caret
block, middle lines become sibling blocks inheriting the caret block's
kind, and the trailing SplitBlock carries the caret block's suffix
onto the last pasted line (ab|XY pasted with "l0\nl1\nl2" yields
abl0 / l1 / l2XY). The caret parks after the last pasted atom.

The whole paste folds into one Compensation::Group (undo applies group
members in reverse, redo applies the inverse group in authored order),
so N lines retract in a single Ctrl+Z. The caret anchor may be
tombstoned (the caret a selection delete leaves behind): the new
CrdtDocument::live_offset_of resolves it to the same live-text offset
RGA splicing uses, so pasting over a deleted selection lands exactly
where a single-line paste would. CRLF payloads strip their \r.

Surfaced and fixed at the source while building this: the synthetic
block a SplitBlock opens was a text dead end -- atoms and style ops
addressed to a split op id landed in the op log but evaporated from
the projection, and the child always spliced directly behind its
parent. Split children are now first-class materialization targets:
suffix atoms re-link head-to-tail (keeping ids and inherited style
runs), child-addressed atoms splice in RGA-wise, and the child's
splice skips the parent's real-chain descendants, keeping the middle
paste lines ahead of it.

Runtime tests cover the split/suffix/caret/undo/redo cycle,
paste-over-selection as two undo steps, and the in-cell newline guard.
Engine tests cover grouped-undo chronology, tombstone anchors, empty
middle lines, CRLF, table refusal, peer convergence, and the
synthetic-child text/style/order regressions underneath.
2026-08-01 05:44:28 +00:00
.forgejo/workflows security(sms): stop persisting message bodies, throttle sends (Phase E) 2026-08-01 04:58:46 +00:00
crates feat(doc): split multi-line paste into blocks with one-step undo 2026-08-01 05:44:28 +00:00
REVIEWS feat(pdf): AcroForm actions and validation; JavaScript refused, not run 2026-07-31 22:41:50 +00:00
tools test(spreadsheet-ui): add headless unit target 2026-07-31 19:57:04 +00:00
ui Initial commit 2026-07-26 19:38:26 +03:00
.gitignore build: track the workspace root Cargo.lock (Phase 0.1) 2026-07-31 20:06:15 +00:00
BENCH_BASELINE.md perf(cad): evict dead meshes instead of clearing the whole cache 2026-07-28 20:12:55 +00:00
Cargo.lock security(sms): stop persisting message bodies, throttle sends (Phase E) 2026-08-01 04:58:46 +00:00
Cargo.toml feat(pay): Phase 5 platform gateway boundary, and verify Phase 4 2026-07-29 02:07:19 +00:00
CODE_QUALITY_IMPROVEMENT_SUMMARY.md docs: add final code quality improvement summary 2026-07-28 17:24:24 +00:00
deny-nigig-build.toml docs(deny): correct the exemption-count attribution 2026-08-01 05:00:17 +00:00
deny.toml ci(cad): gate nigig-build with cargo-deny (Phase 0.4) 2026-07-28 19:51:37 +00:00
MAKEPAD_CODEBASE_ASSESSMENT.md docs(map): add comprehensive codebase assessment and execution plan 2026-07-27 15:53:48 +00:00
MAKEPAD_CODEBASE_IMPROVEMENT_COMPLETE.md docs: add final comprehensive summary of all 6 phases 2026-07-27 16:50:16 +00:00
MAKEPAD_MAP_BRUTAL_ASSESSMENT.md docs: add brutal professional assessment of Makepad map codebase 2026-07-27 17:43:13 +00:00
MAKEPAD_STUDIO_REMOTE_TESTING.md docs: add Studio Remote Protocol testing guide (2026) 2026-07-27 17:18:58 +00:00
MAKEPAD_TEST_FRAMEWORK.md docs: add official makepad_test framework guide (2026) 2026-07-27 17:22:16 +00:00
MAKEPAD_TESTING_BEST_PRACTICES.md docs: add comprehensive Makepad testing best practices guide 2026-07-27 17:11:07 +00:00
MAP_REWRITE_PROGRESS.md docs(map): add implementation progress report 2026-07-27 15:30:22 +00:00
nigig_fingerprint_pay_enabled Initial commit 2026-07-26 19:38:26 +03:00
PAYMENT_RISK_REGISTER.md security(pay): complete phase zero payment containment 2026-07-27 18:17:32 +00:00
PHASE0_ARCHITECTURE.md docs: complete Phase 0 assessment and planning deliverables 2026-07-27 17:58:32 +00:00
PHASE0_CRITICAL_BUGS.md docs: complete Phase 0 assessment and planning deliverables 2026-07-27 17:58:32 +00:00
PHASE0_DATAFLOW.md docs: complete Phase 0 assessment and planning deliverables 2026-07-27 17:58:32 +00:00
PHASE0_DEPENDENCIES.md docs: complete Phase 0 assessment and planning deliverables 2026-07-27 17:58:32 +00:00
PHASE0_EXECUTION_PLAN.md docs: complete Phase 0 assessment and planning deliverables 2026-07-27 17:58:32 +00:00
PHASE0_PERFORMANCE_BASELINE.md docs: complete Phase 0 assessment and planning deliverables 2026-07-27 17:58:32 +00:00
PHASE0_STATUS.md ci(cad): gate nigig-build with cargo-deny (Phase 0.4) 2026-07-28 19:51:37 +00:00
PHASE1_BUG_FIXES.md docs: Phase 1 COMPLETE - all 12 critical bugs resolved (100%) 2026-07-28 16:32:55 +00:00
PHASE1_BUGFIX_SUMMARY.md fix: Phase 1 critical bug fixes - eliminate panics and undefined behavior 2026-07-27 16:03:19 +00:00
PHASE1_STATUS.md fix(cad): SVG export ignored rotation entirely 2026-07-28 19:36:43 +00:00
PHASE2_PERFORMANCE_SUMMARY.md docs: Phase 2 COMPLETE - performance optimization summary 2026-07-28 16:45:40 +00:00
PHASE2_STATUS.md fix(cad): time-box script evaluation so a runaway cannot wedge the worker 2026-07-28 19:26:26 +00:00
PHASE3_CODE_QUALITY_SUMMARY.md docs: Phase 3 COMPLETE - code quality improvement summary 2026-07-28 16:57:44 +00:00
PHASE3_RENDERGRAPH_SUMMARY.md refactor(map): implement trait-based render graph (Phase 3) 2026-07-27 16:17:51 +00:00
PHASE4_SECURITY_SUMMARY.md security(map): implement Phase 4 security hardening 2026-07-27 16:27:17 +00:00
PHASE4_TESTING_SUMMARY.md docs: Phase 4 COMPLETE - test coverage improvement summary 2026-07-28 17:12:14 +00:00
PHASE5_CODE_QUALITY_SUMMARY.md refactor(map): split tile_decode.rs into focused modules (Phase 5) 2026-07-27 16:42:02 +00:00
PHASE5_DOCUMENTATION_SUMMARY.md docs: add Phase 5 documentation summary 2026-07-28 17:23:15 +00:00
PHASE6_TESTING_VALIDATION.md test(map): implement comprehensive testing & validation (Phase 6) 2026-07-27 16:49:00 +00:00
README.md fix(pay): make the demo gate reachable and its message honest 2026-07-29 08:54:22 +00:00
rust-toolchain.toml build: pin rust toolchain for isolated payment tests 2026-07-26 19:21:19 +00:00
rust_out fix(ui): use valid syntax for assigning ids to metric values 2026-07-29 01:56:41 +00:00
TEST_BASELINE.md refactor(cad): track part mutations by generation (Phase 5.1, first increment) 2026-07-28 17:51:51 +00:00
THREAT_MODEL.md security(sms): stop persisting message bodies, throttle sends (Phase E) 2026-08-01 04:58:46 +00:00
VALHALLA_COMPLETE_PORT_EXECUTION_PLAN.md docs(valhalla): add 1:1 complete port execution plan for remaining Valhalla subsystems 2026-07-27 16:41:47 +00:00
VALHALLA_RUST_REWRITE_PLAN.md feat(valhalla): implement phase 1 valhalla-core crate with midgard geometry and baldr graphtile types 2026-07-27 15:55:25 +00:00
workflow.md feat(pay): migrate legacy pending records at flow startup 2026-07-26 19:12:10 +00:00

nigig-org

cargo makepad android --manifest --app-label="PFN" --abi=aarch64 run -p pageflipnav --release
cargo makepad android adb logcat -d | grep -A80 -B20 -E "FATAL EXCEPTION|beginning of crash|thread panicked|Makepad|Abort message"

cargo run -p pageflipnav --release -- --hot

the pich to zomm does not work still you have not implemented the overlay effect on top of the map the rider1 image is not implemented when we first load into rider screen we need to pull the location api to load the map as per the user location current location be detected and the map to load at the said location

now the plan for this whole code base is that each crate should have its own standalone navbar since we should be able to run each crate nigigi-* as a stanalone app except for nigig-core/nigig-uikit. Then pageflipnav can run them all in one app where we have the navbar define in pageflivnav crate/main app, but when compiling say nigig-rider and any of nigig-* app except *-core and -uikit the bottom bar for the respective app do not show up which should show up to be able to navigate the single app when compiled. so we should have each of nigig- respective nav item show in the respective cratea and when we are compiling for pageflipnav app they should aslo show up as nav items for navigation.

now we shall have a dilema where in the pageflip app nav current pulling up the bottom sheet we have the the navigation sheet to Mobility | Profile | Preferences

Component Status
Table Phase 1 (static rendering) Done
Table Phase 2 (hover + cell editing) Done
doc-model Done (with tests)
pdf-export Done (minimal B&W, both fonts embedded)
invoicer UI Phase 1 Done (load + display + export, line-item editing)
invoicer UI Phase 2 Editable header fields, currency/tax pickers, doc switcher
invoicer UI Phase 3 File browser, search, recent docs
Table Phase 3+ PopupMenu, drag-reorder, LaTeX cells

also a button besides the phone input to access phone books to search for number or select a number from phonebook to send, also where is the network status indicator to be shown on the page for network bars and status some transaction requests may not proceed especially in concrete heavy settlement where network is poor 334 dialing may not happend so we need to give the status and the transaction retry in the background be triggered and for the transaction to proceed if we need to for phonebook we have the sms app which tries to syncnronise sms recepients and there names if we dont have robius contacts we create it and wire it up we can allow a dektop or wasm makepad app to send a message since we cannot diall in a desktop context unless we a modem connected

also investigate the searchable combox box used at the home page why item do not scroll on touch or mouse interactions

we should also have a dropdown pill which is persistence at at pages at the top left of the app mobile screen showing the user account avator and dropdown for user account/and projects created so the user can easiliy switch between projects which will govern which apps or crates will be shown since in project creation will suggest which apps to use for the said project and the user can cycle through them at this pill

cp -rf crates/apps/nigig-pay-ui/nigig_solution/nigig-pay-ui/* crates/apps/nigig-pay-ui
&& cp -rf crates/apps/nigig-pay-ui/nigig_solution/nigig-mpesa/* crates/apps/nigig-mpesa
&& cp -rf crates/apps/nigig-pay-ui/nigig_solution/nigig-pay/* crates/apps/nigig-pay
&& cp -rf crates/apps/nigig-pay-ui/nigig_solution/nigig-core/* crates/nigig-core
&& cp -rf crates/apps/nigig-pay-ui/nigig_solution/nigig-uikit/* crates/nigig-uikit
&& clear && cargo makepad android --manifest --app-label="PFN" --abi=aarch64 run -p pageflipnav --release

# Verify a Cloudflare token. Supply it via the environment; never inline it.
curl "https://api.cloudflare.com/client/v4/user/tokens/verify" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

eb2c0657ac11f1b4d8056280da4acee0

https://t.co/I06wzl3TnF

the mobile app the 3d object seems transparent. the 2faces of a cube facing the screen to the human eye is transparent but the 2 behind faces in this view of the cube seem opaque.

but desktop app the cube or objects are all solid

also we can create a dropdown like in revit to see the objects in wireframe, solid, colored, real

also the sync is only working in desktop and not in mobile app

Phase 1: Change the parts field type from Vec to Vec in mod.rs, but keep ScenePart as a compatibility wrapper. Add conversion methods so existing code continues to work.

Phase 2: Gradually migrate each method to use CadNode fields directly.

Phase 3: Delete ScenePart and scene_conversion.rs.

Mostly yes.

From the current codebase and the comparison document you shared, many of the originally proposed architectural features are already implemented, while a few remain partially implemented or are still missing.

Feature Status
Immutable CAD scene Implemented
Export abstraction (GLTF/PDF) Implemented
Visitor-based traversal Implemented
Mesh cache Implemented (could use parameter hashing)
Strong typed scene IDs Implemented
Multi-selection Implemented
Properties panel Implemented
Split 2D/3D workspace Implemented
Construction geometry Implemented
Work planes (XY/XZ/YZ) Implemented
Extrusion workflow Implemented
Axis grids & story levels Implemented
AutoCAD coordinate parser 🟡 Partially implemented
Grid snap Implemented
Endpoint/Midpoint snap Implemented
Perpendicular/Nearest/Intersection snap 🟡 UI exists, snapping logic incomplete
Dynamic tool system Implemented
Rubber-band drawing Implemented
Hover highlighting Implemented
Marquee selection Implemented

Building the payment apps

Default build — payment tracker

cargo run -p nigig-pay        # or: nigig-mpesa

The default build reads and classifies M-Pesa SMS but never sends money. It does not dial USSD and never asks for or stores an M-Pesa PIN.

Tapping Send in the Pay sheet reports:

This app tracks payments — it doesn't send them. Send in the M-Pesa app or dial *334#, and it will appear here automatically. Your PIN was not requested or stored.

That is the intended behaviour, not a build error. Review items 0.1 and 0.3 require that a default build cannot move money.

demo build — USSD dispatch enabled

cargo run -p nigig-pay --features demo

This enables USSD dispatch, auto-retry and bulk pay.

Two things to know before using it:

  1. It only works on Android. robius-ussd has a real backend for Android only; every other target returns PermanentlyUnavailable. Enabling demo on Linux, macOS or Windows just moves the failure later. You also need the USSD AccessibilityService enabled in system settings on the device.
  2. It must not ship. demo turns on AccessibilityService-driven USSD automation, which is an unresolved Google Play policy risk — enforcement is app removal and developer-account termination, and it is retroactive. See review item 5.2 and ADR 0007. It is off by default, and named demo, for that reason.

Native libraries (Linux)

Makepad needs system libraries to compile, and a few more to link a test binary:

./tools/makepad-native-libs.sh --check     # report what is missing
./tools/makepad-native-libs.sh --install   # opt-in, apt-based

Omitting the audio/SSL packages produces a confusing unable to find library -lasound long after the compile appears to succeed.

Tests

TEST_TARGET=domain   ./tools/test-rust-clean.sh
TEST_TARGET=storage  ./tools/test-rust-clean.sh
TEST_TARGET=platform ./tools/test-rust-clean.sh
./tools/test-mpesa-store-clean.sh
cargo test -p nigig-pay-ui --lib

Still missing

These are the biggest gaps I see:

  • Arc drawing tool
  • Area/shell drawing tools (polygon → slab/surface)
  • Chamfered slab tool
  • Inclined UCS / arbitrary work plane
  • True ray-cast picking (currently projection-based)
  • 3D Revit-style axis bubble labels
  • Polar tracking mode (45° independent of ortho)
  • Grid snap step selector
  • Auto-focus Direct Distance Entry (AutoCAD-style typing while drawing)
  • Hover information tooltip
  • Command-based undo/redo
  • Async exporters
  • SceneBuilder API
  • Full removal of the legacy ScenePart compatibility layer

Architecturally

Compared to the original review, you've already completed roughly 8090% of the major refactor:

  • Scene graph
  • Export abstraction
  • Visitor pattern
  • Cached geometry
  • Modern workspace
  • Tool system
  • Construction aids
  • Reference planes
  • Multi-selection
  • Properties editing

The remaining work is primarily CAD UX and editor polish, not core architecture.

What I'd prioritize next

  1. Implement the three remaining OSnaps (Perpendicular, Nearest, Intersection).
  2. Replace projection-based picking with true ray casting.
  3. Add Arc and Area drawing tools.
  4. Add an inclined (3-point) work plane/UCS.
  5. Finish the migration away from the legacy ScenePart representation.
  6. Introduce a command-based undo/redo system.
  7. Add 3D axis bubbles and hover tooltips.

At this point, I would focus almost entirely on editor functionality rather than additional architectural refactoring, because the core architecture is already in good shape.

Refined priority order I'd suggest

#1 Exporter trait — pure refactor, no behavior change, unlocks STL/OBJ/SVG immediately.
#9 Visitor pattern — comes for free with #1, do them in one PR.
#7 + #2 Strong IDs + immutable CadScene — the foundation everything else needs.
#3 Mesh cache — only meaningful after #2.
#4 Incremental regeneration — only after profiling.
#5 Parallel mesh gen — only after Send/Sync audit of makepad_csg.
#6 Arena allocation — only if scene grows past ~10k nodes.
#10 Streaming execution — UX win, lower priority than perf.
#8 Builder API — ergonomic, do alongside #2.
#10 Command pattern (undo/redo) — important but separable from perf.


cad/
mod.rs                  — re-exports + module wiring only (~200 lines)
cad_scene.rs            — (already split out)
arch_gltf.rs            — (already split out)
arch_pdf.rs             — (already split out)
cad_editor_sheet.rs     — (already split out)
viewport.rs             — CadViewport widget + 3D drawing + camera (~4k lines)
viewport_2d.rs          — 2D plan view mode + projections (~1.5k lines)
tools.rs                — CadTool enum + DrawingState + SnapSettings + tool dispatch (~2k lines)
script_bindings.rs      — cad_script_mod() + Solid handle types + VM method registry (~1.5k lines)
commands.rs             — CadCommand + undo/redo stack + the future `trait Command` (~500 lines)
persistence.rs          — save/load + cad_store integration + path helpers (~500 lines)
scene_conversion.rs     — parts_to_scene() + ScenePart::to_cad_node() bridge (~300 lines)
exporters.rs            — export_floor_plan_pdf + export_3d_viewer + export_cli_script + bake entry points (~500 lines)
construction_geometry.rs — construction lines + points + measurement overlay (~500 lines)