Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
679 commits
Select commit Hold shift + click to select a range
6a615be
rf-esp-1: extract SQLite types + converters from embedded-schema-prov…
julia-kafarska May 1, 2026
ca98022
rf-esp-2: extract query operations from embedded-schema-provider
julia-kafarska May 1, 2026
4129f2e
rf-esp-3: extract graph-query operations from embedded-schema-provider
julia-kafarska May 1, 2026
067146a
rf-esp-4: extract events + initialization from embedded-schema-provider
julia-kafarska May 1, 2026
3dd794f
rf-rval-1: extract type-checker and validation types from resource-va…
julia-kafarska May 1, 2026
ad0cf2d
rf-rval-2: extract constraint validation from resource-validator
julia-kafarska May 1, 2026
37972d9
rf-rval-3: extract property-validator and error-conversion
julia-kafarska May 1, 2026
ae7568b
rf-cload-1: extract example-file content + paths from customization-l…
julia-kafarska May 1, 2026
356a2c2
rf-cload-2: extract per-file validators from customization-loader
julia-kafarska May 1, 2026
a0c798f
rf-cload-3: extract directory scanner + base-db resolver
julia-kafarska May 1, 2026
f883238
state: add three learnings from P3 cohort 3 (rf-esp / rf-rval / rf-cl…
julia-kafarska May 1, 2026
810cf01
rf-pimp-1: extract state parsing helpers from pulumi state-importer
julia-kafarska May 1, 2026
fb2bad4
rf-pimp-2: extract resource conversion from pulumi state-importer
julia-kafarska May 1, 2026
c4c38c9
rf-pimp-3: extract graph conversion from pulumi state-importer
julia-kafarska May 1, 2026
ef2fab0
rf-timp-1: extract sensitive-attribute masking + empty metadata
julia-kafarska May 1, 2026
ff49292
rf-timp-2: extract resource conversion + dependency inference
julia-kafarska May 1, 2026
83a0609
rf-timp-3: extract graph conversion from terraform state-importer
julia-kafarska May 1, 2026
fd5f325
rf-aimp-1: extract ARN/tag helpers from aws-importer
julia-kafarska May 1, 2026
982a328
rf-aimp-2: extract AWS SDK init from aws-importer
julia-kafarska May 1, 2026
723c900
rf-aimp-3: extract resource discovery from aws-importer
julia-kafarska May 1, 2026
931c551
rf-aimp-4: extract graph conversion + relationship inference
julia-kafarska May 1, 2026
247e207
state: add two learnings from P3 cohort 4 (rf-aimp series)
julia-kafarska May 1, 2026
f0e761e
rf-tfexp-1: extract terraform types module
julia-kafarska May 1, 2026
d86a0e9
rf-tfexp-2: extract terraform sanitize_name helper
julia-kafarska May 1, 2026
1a97911
rf-tfexp-3: extract terraform fallback_type_mapping helper
julia-kafarska May 1, 2026
527dea1
rf-tfexp-4: extract terraform value-transform helpers
julia-kafarska May 1, 2026
e41f989
rf-tfexp-5: extract terraform HCL formatter helpers
julia-kafarska May 1, 2026
5fadf34
rf-tfexp-6: extract terraform converter helpers
julia-kafarska May 1, 2026
23ca614
rf-tfexp-7: slim terraform-exporter orchestrator (558 -> 102 LOC)
julia-kafarska May 1, 2026
259b2a3
rf-pmap-1: extract pulumi type-mapper data tables
julia-kafarska May 1, 2026
0ca8b63
rf-pmap-2: extract pulumi type-mapper URN/type parsers
julia-kafarska May 1, 2026
5103f66
rf-pmap-3: extract pulumi type-mapper mapping helpers
julia-kafarska May 1, 2026
5aab373
rf-pmap-4: slim pulumi type-mapper orchestrator (527 -> 42 LOC)
julia-kafarska May 1, 2026
1a73e35
rf-galg-1: extract graph topological-sort + cycle detection
julia-kafarska May 1, 2026
2af6111
rf-galg-2: extract graph path-finding helpers
julia-kafarska May 1, 2026
82de8e2
rf-galg-3: extract connected components helpers
julia-kafarska May 1, 2026
a14af8d
rf-galg-4: extract dependency analysis + graph metrics
julia-kafarska May 1, 2026
101423f
rf-galg-5: slim graph algorithms orchestrator (586 -> 51 LOC)
julia-kafarska May 1, 2026
71bd362
rf-pmap rf-galg: append learnings on critical-path quirk + data-table…
julia-kafarska May 1, 2026
42c23bf
rf-cmove: split use-container-move.ts (564 → 189 LOC orchestrator)
julia-kafarska May 1, 2026
35a4924
rf-vval: split validators.ts (524 → 68 LOC orchestrator)
julia-kafarska May 1, 2026
2b9ad6e
rf-ierr: split import-errors.ts (507 → 30 LOC orchestrator)
julia-kafarska May 1, 2026
dafc42f
rf-cmove: append learning on tri-state setter directive pattern
julia-kafarska May 1, 2026
f8e3d88
Phase 3 complete: all 18 files in 500-600 LOC band refactored
julia-kafarska May 1, 2026
d458d64
rf-deploy2-1: extract planDeployment + fallbackPlan to plan-deploymen…
julia-kafarska May 1, 2026
24d81db
rf-deploy2-2: extract applyDeployment to apply-deployment.ts
julia-kafarska May 1, 2026
86e6714
rf-deploy2-3: extract destroyAllForCard to destroy-all-for-card.ts
julia-kafarska May 1, 2026
2fa616d
rf-deploy2-4: extract destroyDeployment to destroy-deployment.ts
julia-kafarska May 1, 2026
e3907fe
rf-deploy2-5: extract rollbackDeployment to rollback-deployment.ts
julia-kafarska May 1, 2026
3ff51b6
rf-deploy2-6: orchestrator slim-down — drop unused imports + docstring
julia-kafarska May 1, 2026
8487522
rf-deploy2-2 housekeeping: split apply-deployment.ts under 500 LOC
julia-kafarska May 1, 2026
bda4b20
rf-deploy2: append awk-line-range learning from rf-deploy2-2
julia-kafarska May 1, 2026
ec91216
rf-hlres-1: extract HighLevel* type interfaces to high-level-resource…
julia-kafarska May 1, 2026
4804c63
rf-hlres-2: extract compute category to high-level-resources/categori…
julia-kafarska May 1, 2026
d93478d
rf-hlres-3: extract database category to high-level-resources/categor…
julia-kafarska May 1, 2026
f4f4d8e
rf-hlres-4: extract storage category to high-level-resources/categori…
julia-kafarska May 1, 2026
e0f78e4
rf-hlres-5: extract networking category to high-level-resources/categ…
julia-kafarska May 1, 2026
ef2954e
rf-hlres-6: extract messaging category to high-level-resources/catego…
julia-kafarska May 1, 2026
7b0f1c2
rf-hlres-7: extract security + monitoring categories (combined unit)
julia-kafarska May 1, 2026
3906f72
rf-hlres-8: extract helpers + HIGH_LEVEL_CATEGORIES to high-level-res…
julia-kafarska May 1, 2026
09ea746
rf-hlres-9: orchestrator slim-down — finalize the high-level-resource…
julia-kafarska May 1, 2026
8cc18b5
rf-hlres: append learning on helpers-owns-assembled-array pattern + a…
julia-kafarska May 1, 2026
18bdaff
rf-svgcv2-1: extract pan/zoom transform group as CanvasContent
julia-kafarska May 1, 2026
f8d2d06
rf-svgcv2-2: extract SVG mouse-event routing as useCanvasMouseRouting
julia-kafarska May 1, 2026
4a75e0b
rf-svgcv2-3: extract selection-dispatch + snapToGrid wiring as useCan…
julia-kafarska May 1, 2026
44e6f82
rf-svgcv2-4: extract RenderCtx assembly as useRenderCtx hook
julia-kafarska May 1, 2026
85eba3c
rf-spr2-1: split system prompt into composable section builders
julia-kafarska May 1, 2026
43a4f7c
rf-asttyp-1: split AST types by category, keep ast/types.ts as re-exp…
julia-kafarska May 1, 2026
209b563
rf-svgcv2-4 followup: fix RenderCtx → Record cast in test (TS2352)
julia-kafarska May 1, 2026
98f5c8a
rf-svgcv2 + rf-spr2-1 + rf-asttyp-1: capture three new learnings
julia-kafarska May 1, 2026
d8fb62d
rf-spdat: split scale-presets-data 1482 LOC into 7 category files + 4…
julia-kafarska May 1, 2026
7ebfd76
rf-cbdat: split cloud-blocks-data 1009 LOC into 9 category files + 12…
julia-kafarska May 1, 2026
c09bf99
rf-thmdat: split themes 590 LOC into 3 4-theme groups + 30-LOC orches…
julia-kafarska May 1, 2026
8019bac
Final round complete: all exceptions decomposed (excluding generated …
julia-kafarska May 1, 2026
ac4fdd4
bugfix-2: lazy require.resolve in get_base_db_path
julia-kafarska May 1, 2026
0c44dc2
bugfix-3: get_critical_path now propagates distance through chain
julia-kafarska May 1, 2026
b101042
bugfix-4: detectJsFramework now reads pnpm/yarn lockfile signals
julia-kafarska May 1, 2026
2e1d1e3
learnings: append bugfix-2/3/4 sweep gotcha (Fixed-line audit trail)
julia-kafarska May 1, 2026
38a8885
progress: archive entry for completed LOC discipline initiative
julia-kafarska May 1, 2026
c2c7b2f
progress: housekeep In flight, move pdl + rf-* detail trail to Archive
julia-kafarska May 1, 2026
78bbd83
decisions: 2026-05-02 merge-story entry for refactoring branch
julia-kafarska May 1, 2026
7e7b7b0
fix(test): cast source_node_id read in apply-pipeline-helpers test
julia-kafarska May 1, 2026
8ef2e25
state: archive pre-compaction snapshot of learnings.md (2026-Q2)
julia-kafarska May 1, 2026
763457a
state: compact learnings.md (Q2-2026 pass)
julia-kafarska May 1, 2026
b062b6c
pdl-11: default node.data.provider to active deploy provider on drop
julia-kafarska May 1, 2026
6e637e9
deploy: extract deriveRollupPercentage helper from 3 inline copies
julia-kafarska May 1, 2026
47ffecd
deploy: warm-seed nodesById from snapshot in Phase 2 (pdl-5 #7)
julia-kafarska May 1, 2026
63fb76b
deploy: drop DeployProgressSnapshot dead fields
julia-kafarska May 1, 2026
5bef36f
ui: drop data.status legacy fallback per one-status-source-deploy-status
julia-kafarska May 1, 2026
6e053af
rf-0c: hoist mapStatusToOverlay + overlayToWireStatus into @ice/types
julia-kafarska May 2, 2026
e40cdcc
rf-0c: unify network-container set via @ice/constants
julia-kafarska May 2, 2026
428104e
progress: mark 2026-05-02 batch (Step 1-4) complete
julia-kafarska May 2, 2026
614bd80
core: add 'auth' high-level resource (Cognito / Firebase Auth / Entra…
julia-kafarska May 2, 2026
7d291ff
concepts: build Auth + Data Warehouse + Search blocks
julia-kafarska May 2, 2026
3201d12
progress: log 2026-05-02 Concepts palette shipment
julia-kafarska May 2, 2026
f7fccfa
deploy: tests for 7 services at 0% coverage (+236 tests)
julia-kafarska May 2, 2026
14ecf74
deploy: tests for the three HTTP routers (+158 tests)
julia-kafarska May 2, 2026
0e7fef0
deploy: tests for google-verification + resource-mapping (+55 tests)
julia-kafarska May 2, 2026
a2e72c1
deploy: tests for provider registry + aws/gcp credential resolvers (+58)
julia-kafarska May 2, 2026
67ed216
deploy: fill gaps on 7 partially-tested services
julia-kafarska May 2, 2026
060935e
engine: full-package coverage from 0% to 100% (+74 tests)
julia-kafarska May 2, 2026
b7fbe0c
iam: full-package coverage 0% → 100% across routes and services (+236)
julia-kafarska May 2, 2026
2f8647c
canvas: full-package coverage 0% → 100% / 99% across 6 files (+206)
julia-kafarska May 2, 2026
a9b409f
ai: cover the remaining 7 untested files (+186 tests)
julia-kafarska May 2, 2026
dd6a62c
core: cover apply / plan / diff / state / compute (+360 tests)
julia-kafarska May 2, 2026
2d89a7c
ui: cover 5 Redux slices 0% → 96-100% (+326 tests)
julia-kafarska May 2, 2026
2277334
ui: cover 7 pure utility files (+244 tests)
julia-kafarska May 2, 2026
8a6ca27
ui: cover 4 canvas interaction hooks → 100% / 100% (+65 tests)
julia-kafarska May 2, 2026
f597055
ui: monitoring-log section (new) + pipeline-section branch-fill (+75)
julia-kafarska May 2, 2026
11e759c
ui: cover compact-lod3 + svg-connection-path canvas renderers (+187)
julia-kafarska May 2, 2026
ca6da8a
ui: cover 4 top-level shell components (+199 tests)
julia-kafarska May 2, 2026
a029c98
ui: cover 5 AI / log / deploy hooks (+174 tests + 1 learning)
julia-kafarska May 2, 2026
9c9a1cc
ui: cover 4 feature panels (+194 tests)
julia-kafarska May 2, 2026
cb18509
ui: cover svg-canvas + app/status bar + env-tab-bar (+179 tests)
julia-kafarska May 2, 2026
06675fa
ui: cover onboarding + wizard flows (+134 tests)
julia-kafarska May 2, 2026
8eedb31
ui: cover team-page (+43 tests, 98.46% / 98%)
julia-kafarska May 2, 2026
1b87c87
ui: cover 5 more slices + clipboard + viz-config (+127 tests)
julia-kafarska May 2, 2026
fd533f2
core: cover gcp importer (+256 tests)
julia-kafarska May 2, 2026
eeeb140
core: cover azure importer (+119 tests)
julia-kafarska May 2, 2026
148a396
core: cover terraform/pulumi converters + aws-importer (+90 tests)
julia-kafarska May 2, 2026
202ea3b
core: cover schema top-level (+145 tests)
julia-kafarska May 2, 2026
6461968
core: cover validation (+216 tests, 99.3% / 97.91%)
julia-kafarska May 2, 2026
6eb6e30
core: cover providers (+71 tests, both files at 100%/100%)
julia-kafarska May 2, 2026
76696f2
ai: cover packages/ai (+91 tests, 99.48 / 98.46) + remove stale build
julia-kafarska May 2, 2026
1b9fbf1
shared + templates: full coverage (+171 tests, both at 100%/100%)
julia-kafarska May 2, 2026
6a8008a
web: cover 8 untested pages + app shell (+275 tests)
julia-kafarska May 2, 2026
eb5fac5
test: cover deploy-events types + Electron main/preload (+103 tests)
julia-kafarska May 2, 2026
1df05de
state: triage doc for coverage-sweep findings (54 items)
julia-kafarska May 2, 2026
8c955e0
fix(iam): gate JWT_SECRET test fallback on VITEST, not NODE_ENV
julia-kafarska May 2, 2026
101f02d
fix(shared): requireProjectAccess fail-fast on unknown minRole
julia-kafarska May 2, 2026
d8b74dc
fix(core): rescue dead FORCE_NEW + Azure Static Web Apps mappings
julia-kafarska May 2, 2026
af51712
fix(deploy): webhooks idempotency catch returns 500 instead of hanging
julia-kafarska May 2, 2026
2abcdfb
fix(core): architecture-rules — Redis counts as cache, drop dead Map
julia-kafarska May 2, 2026
f202ec1
fix(core): connection-rules cycle detector skips phantom-target edges
julia-kafarska May 2, 2026
7e8d2f3
fix(iam): refresh-token reject without wiping the family
julia-kafarska May 2, 2026
8cd48c7
docs(web): document app.tsx trust model — no client-side auth gate
julia-kafarska May 2, 2026
dd5a50b
fix(iam,web): bind invitation acceptance to recipient email
julia-kafarska May 2, 2026
164cf91
fix(iam): block last-owner removal/demotion at the service+route layer
julia-kafarska May 2, 2026
ada8bf9
fix(canvas): drop body.organisationId fallback in canvas.getOrgId
julia-kafarska May 2, 2026
ac05066
fix(core): unified-type-resolver — accept the Result query shape
julia-kafarska May 2, 2026
e1fbeec
fix(ui): use-ai-command — persist SSE parser state across reads
julia-kafarska May 2, 2026
67ed3b5
fix(canvas): deleteEnvironment guards against in-flight deployments
julia-kafarska May 2, 2026
d568ebe
fix(canvas): createEnvironment differentiates expected vs hard rule e…
julia-kafarska May 2, 2026
b5f9535
fix(canvas): bootstrapProductionEnvironment surfaces card_id mismatch
julia-kafarska May 2, 2026
be06154
fix(canvas,ai): validateCanvas exposes validatedBy field
julia-kafarska May 2, 2026
6998f6c
fix(ai): openai-compat surfaces auth + wire finishReason
julia-kafarska May 2, 2026
7d7b0dc
fix(ai): writeAuditEntry logs failures instead of dropping silently
julia-kafarska May 2, 2026
cf00d58
fix(ai): canvas-intent SSE error path guards against headersSent
julia-kafarska May 2, 2026
af0c543
fix(ui): use-clipboard cut path gates delete on a successful write
julia-kafarska May 2, 2026
e8dc2b8
fix(ui): deleteEnvironment thunk guards is_protected
julia-kafarska May 2, 2026
6872693
fix(ui): setActive reducers gate on existence
julia-kafarska May 2, 2026
93fad74
fix(core): GCP type-mapper extracts bare names for pubsub + secrets
julia-kafarska May 2, 2026
bd8da1a
fix(core): GCP importer flags ACCESS_DENIED-only runs as failure
julia-kafarska May 2, 2026
287d8c2
fix(core): apply-engine derives success from summary.failed too
julia-kafarska May 2, 2026
5a2ecb1
fix(core): apply-engine warns when replace skips destroy
julia-kafarska May 2, 2026
dd759b9
findings: track 22-of-30 Tier 1 progress on refactoring branch
julia-kafarska May 2, 2026
f65b888
fix(core): apply-engine honors AbortSignal between layers and batches
julia-kafarska May 2, 2026
b4be076
findings: Tier 1 closed (30/30) on refactoring branch
julia-kafarska May 2, 2026
99d8c28
cleanup(ui): drop dead arrow-marker branch in svg-connection-path
julia-kafarska May 2, 2026
d773a2b
cleanup(ui): delete orphan use-canvas-mouse-events hook + tests
julia-kafarska May 2, 2026
767b0a0
cleanup(desktop): remove stale tsc-emit artifacts + gitignore them
julia-kafarska May 2, 2026
a93800d
cleanup(core): drop dead error branch in terraform/pulumi exporters
julia-kafarska May 2, 2026
6ddb798
cleanup(core): drop redundant guards + tautologies in validation/
julia-kafarska May 2, 2026
b4b7d6b
cleanup(core): drop unreachable 'deleted' branch in mock-provider def…
julia-kafarska May 2, 2026
f81c2f2
cleanup(core): provider-registry — warn on dupe + document lazy healt…
julia-kafarska May 2, 2026
511ee8b
fix(canvas): wrap cards/{create,delete} in try/catch like siblings
julia-kafarska May 2, 2026
884cc42
cleanup(canvas): project-members owner-gating uses shared middleware
julia-kafarska May 2, 2026
8c4b586
cleanup(templates): validate.ts is unit-testable, no side effects on …
julia-kafarska May 2, 2026
7a7d12c
fix(shared): requireProjectAccess — collapse to a single prisma round…
julia-kafarska May 2, 2026
bdd4119
findings: Tier 2 closed (16/16) on refactoring branch
julia-kafarska May 2, 2026
ca58ea0
cleanup(core): diff engine — null-vs-empty equivalence + nested _-skip
julia-kafarska May 2, 2026
6e0ae80
docs(ui): annotate dormant defensive guards (findings #50–52)
julia-kafarska May 2, 2026
4c4f5c8
cleanup(ai): document createProvider sync/async + NullProvider throw-…
julia-kafarska May 2, 2026
db72019
findings: Tier 3 closed — 54 / 54 findings cleared on refactoring
julia-kafarska May 2, 2026
a053a65
test(ui): cover selection / onboarding / validation / view slices
julia-kafarska May 2, 2026
75255f1
test(ui): cover ghost-slice (5 tests, 100% branch)
julia-kafarska May 2, 2026
1f4a867
test(ui): cover concept-info markdown renderer (23 tests)
julia-kafarska May 2, 2026
cb94c6e
test(ui): cover cost provider-pricing (20 tests)
julia-kafarska May 2, 2026
5b71f1b
test(ui): extend compact-node helpers test (truncate / shortRepo / sh…
julia-kafarska May 2, 2026
4e58e76
test: coverage sweep wave 2 — credentials, deploy, shared/{api,utils,…
julia-kafarska May 2, 2026
e9b3248
test(ui): cover use-reduced-motion (8 tests)
julia-kafarska May 2, 2026
3032689
test(ui): cover account-slice + debug-slice + onboarding thunks
julia-kafarska May 2, 2026
37ab1d2
test(ui): cover cards-slice top-level selectors
julia-kafarska May 2, 2026
8649fca
test(ui): cover logs-slice selectors
julia-kafarska May 2, 2026
85dde07
test(core): cover Result<T, E> functional helpers (33 tests)
julia-kafarska May 2, 2026
0b3108a
test(core): cover error class hierarchy (29 tests)
julia-kafarska May 2, 2026
813d2cf
test(core): cover create_provider_id (4 tests)
julia-kafarska May 2, 2026
a21c697
test: coverage sweep wave 3 — blocks + canvas compact-node + auto-lay…
julia-kafarska May 2, 2026
025a2aa
test: coverage sweep wave 4 — more compact-node + use-menu-actions + …
julia-kafarska May 2, 2026
0e61fed
test(ui): use-undo-redo hook + compact-node index extension
julia-kafarska May 2, 2026
f2d5538
test(ui): cover logs-slice clearEntries + setMode reducers
julia-kafarska May 2, 2026
f80ea57
test: coverage sweep wave 5 — canvas node types + shared hooks + wizard
julia-kafarska May 2, 2026
6455f72
test: coverage sweep wave 6 — email/message/secret nodes + toolbar + …
julia-kafarska May 2, 2026
104de3d
test: coverage sweep wave 7 — log-node + region-label + properties co…
julia-kafarska May 2, 2026
29ce15e
test: coverage sweep wave 8 — serialize-canvas + group-node (23 tests)
julia-kafarska May 2, 2026
e7bf50d
test: coverage sweep wave 9 — group-node + suggest-patterns + propert…
julia-kafarska May 2, 2026
f4c28f3
test: coverage sweep wave 10 (final) — ai-ops + custom-domain + group…
julia-kafarska May 2, 2026
304a866
test: coverage sweep wave 11 — private-network + onboarding/connect-g…
julia-kafarska May 2, 2026
b8bcbde
test: coverage sweep wave 12 (truly final) — node test fixes from can…
julia-kafarska May 2, 2026
6f06070
test: coverage sweep wave 13 (truly final) — env/integration/onboardi…
julia-kafarska May 2, 2026
4aecfb4
test(ui): cover config/blocks blueprints + config/templates barrel (1…
julia-kafarska May 3, 2026
dd000a5
test(constants): cover @ice/constants barrel re-export (8 tests)
julia-kafarska May 3, 2026
7f187dd
test(blocks): cover concepts/_shared helpers (7 tests)
julia-kafarska May 3, 2026
2003bd5
test(core): cover deploy/messages.ts (5 tests)
julia-kafarska May 3, 2026
3b976c6
test(ui): account modals + profile-avatar + project-collaborators (12…
julia-kafarska May 3, 2026
f626624
test(ui): wave 17 — shared/components/ui + canvas/nodes/_shared (160 …
julia-kafarska May 3, 2026
e90cac6
test: coverage sweep wave 18 — shared/ui primitives + canvas extras +…
julia-kafarska May 3, 2026
3ca7633
test(ui): wave 19 — canvas/_shared + hooks polish from final agent
julia-kafarska May 3, 2026
6a7195d
test: wave 20 — service barrels + predeploy-analysis (14 tests)
julia-kafarska May 3, 2026
d2aea64
test: wave 21 — aws importer + project-browser tree-item extensions
julia-kafarska May 3, 2026
706d90c
test: wave 22 — graph validator + terraform state-importer + project-…
julia-kafarska May 3, 2026
43019f5
test(cleanup): drop in-progress gcp/auth.test.ts
julia-kafarska May 3, 2026
a509d98
test(deploy/gcp): add 20 tests for GoogleAuth credential resolution
julia-kafarska May 3, 2026
6e49d28
test(deploy/azure): 55 tests for AzureDeployer create/update/delete
julia-kafarska May 3, 2026
3456268
test(ui/store): 22 tests for store/index.ts persistence subscriber
julia-kafarska May 3, 2026
c997dcc
test(constants/canvas-utils): smoke + behavior tests for 0%-line files
julia-kafarska May 3, 2026
4a7198b
test(core/ui): aws-deployer + format-parser + menu-primitives
julia-kafarska May 3, 2026
6e2906b
test(core/ui): state-bridge + state-store-adapter + sdk-loader + node…
julia-kafarska May 3, 2026
64a7c89
learnings: split-then-coalesce-defensive-rhs-unreachable-after-length…
julia-kafarska May 3, 2026
3599875
test(canvas/context): canvas-context-menu (32 tests) + aws-deployer l…
julia-kafarska May 3, 2026
8bb54f4
test(ui): inline-table-view orchestrator (36 tests, 100% all metrics)
julia-kafarska May 3, 2026
e160fad
test(graph/parser): barrel re-export smoke test (10 tests)
julia-kafarska May 3, 2026
55b5a9a
test: gateway + exporters + user-settings-page + edge-menu
julia-kafarska May 3, 2026
59021ee
test: ai-chat-panel + agent polish on gateway + graph/parser barrel
julia-kafarska May 3, 2026
9631f7b
feat(ui): wrapped Popover primitive (tour-2)
julia-kafarska May 8, 2026
2a225a9
feat(tour): types + registry (tour-1)
julia-kafarska May 8, 2026
14e4b62
feat(tour): element-position hook (tour-4)
julia-kafarska May 8, 2026
05a1bad
feat(tour): target resolver hook + rect util (tour-3)
julia-kafarska May 8, 2026
7ca95fb
feat(tour): focus-trap util (tour-5)
julia-kafarska May 8, 2026
d966406
feat(tour): User.completed_tours + onboarding API route (tour-7)
julia-kafarska May 8, 2026
af91b37
feat(tour): TourOverlay (tour-8)
julia-kafarska May 8, 2026
02e04d1
feat(tour): tour slice + useTour hook (tour-6)
julia-kafarska May 8, 2026
998c3b3
feat(tour): data-tour-id anchors on settings, wizard, cost, sidebar-s…
julia-kafarska May 8, 2026
1d7f3ab
feat(tour): keyboard + route hooks (tour-11)
julia-kafarska May 8, 2026
08198d4
feat(tour): TourPopover (tour-10)
julia-kafarska May 8, 2026
013c206
fix(tour): wizard step-4 anchor uses wizard-btn-create (tour-9 nit)
julia-kafarska May 8, 2026
6a02c43
feat(tour): TourRunner + canvas/palette tour configs + i18n + mount (…
julia-kafarska May 8, 2026
6de4471
test(tour): pin live-rect reposition through scroll event (tour-12 nit)
julia-kafarska May 8, 2026
3500907
feat(tour): autostart hook + AppBar Help menu launcher (tour-13)
julia-kafarska May 8, 2026
f7605b6
feat(tour): wire wizard finish + OnboardingChecklist tour links (tour…
julia-kafarska May 8, 2026
56682e3
fix(tour): introduce phase='entering' so onEnter completes before pai…
julia-kafarska May 8, 2026
46f91bf
docs(state): commit tour engine blueprint (state/blueprints/tour.md)
julia-kafarska May 8, 2026
647adf8
fix(tour): show hint when canvas-tour is launched off the project canvas
julia-kafarska May 8, 2026
e75b92c
chore: restore .claude/agents/ definitions
julia-kafarska May 8, 2026
d807a8a
oss release prep
julia-kafarska May 14, 2026
19d3877
oss release prep
julia-kafarska May 14, 2026
eb2f84f
oss release prep
julia-kafarska May 16, 2026
79c28dd
UI changes - blocks
julia-kafarska May 16, 2026
fccc48f
Merge pull request #1 from light-cloud-com/refactoring
julia-kafarska May 19, 2026
60d706a
Labeling fix and GH actions (#4)
julia-kafarska May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 12 additions & 0 deletions .claude/agents/critic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: critic
description: Reviews the implementer's diff for bugs, regressions, and convention drift before the orchestrator merges. Cites learnings when a finding generalizes; flags stale /docs pages.
---

You are the critic agent for the ICE multi-agent workflow. You receive a diff and a unit description, and you produce a verdict (approve / request changes / reject) with specific findings — file paths, line numbers, and the exact change you'd make.

## State I/O

After review, if findings reveal a class of bug worth remembering, append to `state/learnings.md` and cite the anchor in your verdict (e.g., "see learning `cron-timezone-trap`"). If a finding contradicts something in `/docs/`, flag the doc as stale in your verdict — name the doc path and the line that's wrong so the orchestrator can route a fix.

Never edit existing learnings — append only.
33 changes: 33 additions & 0 deletions .claude/agents/decomposer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
name: decomposer
description: Analyzes one large file and produces a semantic split blueprint — the list of target modules (utils, hooks, components, subcomponents) the implementer should extract. Does not edit code.
---

You are the decomposer agent for the ICE refactoring workflow. You receive one file path from the orchestrator and produce a *split blueprint* the planner can sequence into refactor units.

## State I/O

Before drafting, read `state/learnings.md` (prior splits in the same package), `state/shared-modules.md` (existing utils that may already cover a responsibility), and skim the file's `__tests__/` to understand the behaviors that must be preserved. You do not edit code, run tests, or write to state files. Your output is a blueprint document handed back to the orchestrator.

## Output format

For each proposed module:

- `target_path` — where the new module should live.
- `kind` — `util` (pure function) | `hook` (React state/effect) | `component` | `subcomponent` | `service-helper`.
- `exports` — named exports + signatures.
- `deps_in` — modules this depends on.
- `deps_out` — current call sites whose imports change.
- `est_LOC` — rough line count.
- `source_lines` — line range in the original file.

Close with a *dependency DAG* (leaves first) so the planner can order extraction units.

## Rules of decomposition

- Pure logic → `utils/`, stateful React → `hooks/`, side-effecting service code → `services/`, render → `components/`. One responsibility per file.
- Named exports by default; default export only at React component file root.
- No barrel `index.ts` re-exports inside packages.
- Don't propose container/presentational splits unless the seam is clean.
- Don't propose extracting < ~30 LOC unless it removes a duplicate.
- Code-shape only — no behavior changes. Bugfixes are separate units.
22 changes: 22 additions & 0 deletions .claude/agents/implementer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: implementer
description: Implements one unit from the planner's plan. Edits code in the ICE repo, runs the relevant tests, and records non-obvious gotchas to learnings.md.
---

You are the implementer agent for the ICE multi-agent workflow. You receive a single unit from the planner and execute it: edits, tests, and a brief report back to the orchestrator.

## State I/O

Before editing, read `state/learnings.md` and grep for terms relevant to your unit. Also check `/docs/` for any promoted documentation on the package you're touching. After done, if you hit a non-obvious gotcha worth remembering, append a new `##` anchor to `state/learnings.md` with today's date, your agent name, and the unit id.

Format for a new learning:

```
## <kebab-case-anchor>

_Discovered: YYYY-MM-DD by implementer in <unit-id>_

<one paragraph: what the gotcha is, why it surprised you, and what to do next time>
```

Never edit existing entries — append only.
22 changes: 22 additions & 0 deletions .claude/agents/planner.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: planner
description: Plans non-trivial changes for the ICE codebase. Reads the brief, surveys the relevant code paths, and produces a unit-by-unit implementation plan informed by past decisions and learnings.
---

You are the planner agent for the ICE multi-agent workflow. Your role is to take a brief from the orchestrator, understand the relevant code paths, and produce a plan broken into discrete units that an implementer can execute one at a time.

## State I/O

Before planning, read `state/decisions.md`, `state/learnings.md`, and skim `/docs/agents.md` for any promoted patterns relevant to the brief. After planning, if the plan implies an architectural choice, append a dated entry to `decisions.md` using the format:

```
## YYYY-MM-DD — title

**Context.** ...
**Decision.** ...
**Alternatives considered.** ...
**Consequences.** ...
**Related.** ...
```

Never edit existing entries in `decisions.md` — supersede with a new dated entry that references the old one under "Related".
24 changes: 24 additions & 0 deletions .claude/agents/test-author.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: test-author
description: Writes tests for an extracted module to a 90% statement and 90% branch target, then runs vitest --coverage and reports the delta. Documents structural exceptions in learnings.md.
---

You are the test-author agent for the ICE refactoring workflow. You receive an extracted module from the implementer and bring it to ≥90% statement and ≥90% branch coverage.

## State I/O

Read `state/learnings.md` before writing tests — past coverage exceptions and module-specific test conventions live there. After the run, if the module can't reach the 90% target for a structural reason (thin IPC bridge, hardware-coupled boundary), append a learning anchor with `_Discovered: YYYY-MM-DD by test-author in <unit-id>_` documenting why. Never edit existing learnings — append only.

## Workflow

1. Move existing tests for the extracted code from the original file's `__tests__/` to the new module's `__tests__/` *first*. Don't also add new tests in the same step — moves and adds are separate.
2. Add tests for any uncovered branches and statements.
3. Run `vitest run --coverage <new-module-path>` and capture the report.
4. Hand back: pre-coverage, post-coverage, list of branches/statements still uncovered with reasons.

## Rules

- Test descriptions describe behavior, not implementation: `it('returns 0 for an empty range')`, not `it('parseCostRange handles empty')`.
- No `expect(true).toBe(true)`; no assertion-free tests; no test-only public methods.
- Branch coverage matters more than statement coverage. Don't celebrate 100% statements with 60% branches.
- Don't change the code being tested. If a branch is unreachable, that's a finding for the critic, not a test refactor.
26 changes: 26 additions & 0 deletions .claude/agents/util-broker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: util-broker
description: Owns the shared-modules registry. Validates the decomposer's blueprint against existing utils, hooks and helpers across the workspace and flags duplicates before they land.
---

You are the util-broker agent for the ICE refactoring workflow. Your job is to keep `state/shared-modules.md` accurate and to short-circuit duplication: when the decomposer proposes a new module, you check whether something equivalent already exists.

## State I/O

You own `state/shared-modules.md` (append-only). Each entry has a kebab-case `##` anchor, a `_Indexed: YYYY-MM-DD by util-broker_` line, the module's signature, its path, and a one-line purpose. Never edit past entries.

Before reviewing a blueprint, rescan the workspace for new exports under `packages/*/src/**/utils/`, `packages/*/src/**/hooks/`, `packages/shared/src/**`, `packages/core/src/**`, `services/*/src/**`. Append any unindexed exports.

## Broker report

Output to the orchestrator after each review:

- `replacements` — proposed-module → existing-module mappings (use the existing one, don't create a new one).
- `new_entries` — proposed modules that genuinely don't exist yet (the registry is updated when the implementer lands them).
- `conflicts` — same name, different signature; needs a planner decision (rename or merge).

## Rules

- "Same module" means same signature + same intent, not just same name. A `slug(input)` that strips diacritics and a `slug(input)` that just lowercases are different modules.
- Don't promote a duplicate just because it's "close enough" — flag it as a conflict and let the planner decide.
- Cross-package duplicates that already exist today (before any refactor) are also recorded so the planner can schedule dedup units.
20 changes: 20 additions & 0 deletions .claude/agents/ux-tester.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: ux-tester
description: Drives the UI for any user-facing change in ICE. Validates the golden path and the relevant edge cases, then reports UX patterns worth keeping or avoiding.
---

You are the ux-tester agent for the ICE multi-agent workflow. You receive a unit summary plus the URL or step-through to drive, and you exercise the change in a real browser. Report what worked, what felt wrong, and any regressions you noticed in adjacent features.

## State I/O

After the run, append UX patterns worth keeping or avoiding to `state/learnings.md` under a `ux-<topic>` anchor. Use the standard format:

```
## ux-<topic>

_Discovered: YYYY-MM-DD by ux-tester in <unit-id>_

<one paragraph>
```

Never edit existing learnings — append only.
1 change: 1 addition & 0 deletions .claude/scheduled_tasks.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"sessionId":"a39cde89-ac48-4033-a845-601da77a34c4","pid":3648,"procStart":"Thu May 14 16:40:16 2026","acquiredAt":1778777428084}
49 changes: 31 additions & 18 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,23 +1,36 @@
# ICE Community Edition — Environment Variables
# ICE Community Edition — Optional overrides
#
# Copy this file to .env and adjust values as needed.
# Only DATABASE_URL, JWT_SECRET, and CREDENTIAL_ENCRYPTION_KEY are required.

# ─── Database (required) ─────────────────────────────────────────────────────
DATABASE_URL=postgresql://ice:icedev@localhost:5557/ice_community
# Community Edition needs ZERO env vars to run. Just `pnpm install && pnpm dev:all`.
#
# Secrets (JWT_SECRET, CREDENTIAL_ENCRYPTION_KEY) are auto-generated on first
# boot and persisted per-user (~/Library/Application Support/ice/secrets.json on
# macOS, ~/.config/ice/secrets.json on Linux, %APPDATA%\ice\secrets.json on Windows).
# Cloud provider credentials (GCP key, AWS keys, Azure SP) are entered in-app
# under Settings → Providers and stored encrypted in the workspace DB.
#
# The AI assistant currently reads ANTHROPIC_API_KEY from this file (or your
# shell). An in-app settings flow is on the roadmap.
#
# The values below are escape hatches for contributors who want to override
# defaults during development. Uncomment only the ones you need.

# ─── Redis (optional — used for deploy job queue) ────────────────────────────
REDIS_URL=redis://localhost:6380
# ─── AI assistant (optional — enables the chat panel) ──────────────────────
# Get a key at https://console.anthropic.com/settings/keys
# ANTHROPIC_API_KEY=sk-ant-...
# Or point at any OpenAI-compatible backend (Ollama, LM Studio, vLLM, etc.):
# ICE_AI_URL=http://localhost:11434/v1
# ICE_AI_MODEL=llama3

# ─── Security (required) ─────────────────────────────────────────────────────
JWT_SECRET=change-me-to-a-random-string
CREDENTIAL_ENCRYPTION_KEY=change-me-32-characters-exactly!!
# ─── Dev overrides ─────────────────────────────────────────────────────────
# DATABASE_URL=file:../../.desktop-dev.db
# PORT=15173
# FRONTEND_URL=http://localhost:5174
# NODE_ENV=development

# ─── Server ──────────────────────────────────────────────────────────────────
FRONTEND_URL=http://localhost:5174
PORT=5002
NODE_ENV=development
# ─── Database seed (used only by `pnpm seed`) ──────────────────────────────
# ICE_SEED_EMAIL=dev@example.local
# ICE_SEED_PASSWORD= # leave empty for an auto-generated password

# ─── AI Assistant (optional — enables AI chat panel) ─────────────────────────
# Get a key at https://console.anthropic.com/settings/keys
# ANTHROPIC_API_KEY=sk-ant-...
# ─── E2E / integration tests ───────────────────────────────────────────────
# These are read only by `pnpm test:gcp` / `pnpm test:scenarios`. See
# `docs/testing.md` for setup. End users never need these.
32 changes: 32 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# CODEOWNERS for ICE
#
# Every PR auto-requests review from the listed owners for the matching paths.
# The LAST matching pattern wins, so put the most specific patterns at the bottom.
#
# Replace @light-cloud-com/maintainers with your GitHub handle (e.g. @JuliaKafarska)
# if you'd rather route reviews through a single account instead of a team.

# Default — every file in the repo
* @light-cloud-com/maintainers

# Workflows, CI, release infrastructure — usually the most sensitive
/.github/ @light-cloud-com/maintainers
/scripts/ @light-cloud-com/maintainers
/run-e2e.sh @light-cloud-com/maintainers

# Licensing and policy docs — only maintainers should edit
/LICENSE @light-cloud-com/maintainers
/NOTICE @light-cloud-com/maintainers
/SECURITY.md @light-cloud-com/maintainers
/CODE_OF_CONDUCT.md @light-cloud-com/maintainers
/COMMUNITY_PLEDGE.md @light-cloud-com/maintainers

# Deploy plane and cloud providers — high-blast-radius code
/packages/providers/ @light-cloud-com/maintainers
/services/deploy/ @light-cloud-com/maintainers
/services/credentials/ @light-cloud-com/maintainers

# Auth + crypto + Electron security model
/packages/shared/src/auth/ @light-cloud-com/maintainers
/packages/shared/src/crypto.ts @light-cloud-com/maintainers
/apps/desktop/ @light-cloud-com/maintainers
15 changes: 15 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Sponsor button shown on the repo homepage and on every issue/PR.
# Uncomment and fill in the channels you actually have set up. Removing
# this file (or leaving everything commented) hides the Sponsor button.

# github: [light-cloud-com] # GitHub Sponsors username or org
# patreon: # patreon.com/<username>
# open_collective: # opencollective.com/<slug>
# ko_fi: # ko-fi.com/<username>
# tidelift: # platform-name/package-name
# community_bridge: # CommunityBridge project name
# liberapay: # liberapay.com/<username>
# issuehunt: # issuehunt.io/r/<owner>/<repo>
# otechie: # otechie.com/<username>
# lfx_crowdfunding: # LFX Crowdfunding project name
custom: ['https://light-cloud.com']
75 changes: 75 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Bug report
description: Something broken, wrong, or misleading in ICE
title: "[bug] "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for filing a bug. Please fill in what you can — the more we have, the faster we can reproduce and fix.
Security issues: please **do not** open a public issue. See [SECURITY.md](../../SECURITY.md) instead.

- type: textarea
id: what-happened
attributes:
label: What happened
description: A clear, concrete description of the bug. Include what you expected.
placeholder: |
I clicked Deploy on a canvas with one Static Site block and the deploy hung at "planning…" for 60s then errored.
I expected a plan or a useful error within a few seconds.
validations:
required: true

- type: textarea
id: repro
attributes:
label: Steps to reproduce
description: Minimal steps. A canvas export or a short script is ideal.
placeholder: |
1. Fresh `pnpm install && pnpm dev:all`.
2. Drag a Static Site block to the canvas.
3. Click Deploy.
validations:
required: true

- type: input
id: version
attributes:
label: ICE version
description: Root `package.json` → `version`.
placeholder: "0.1.50"
validations:
required: true

- type: dropdown
id: mode
attributes:
label: How were you running ICE?
options:
- Web (pnpm dev:all)
- Desktop (Electron)
- Self-hosted server
- Other / not sure
validations:
required: true

- type: input
id: env
attributes:
label: OS and Node version
placeholder: "macOS 14.4, Node 22.3.0, pnpm 10.2.0"
validations:
required: true

- type: textarea
id: logs
attributes:
label: Logs / stack trace / screenshots
description: Paste the relevant gateway or renderer output. Redact secrets.
render: shell

- type: textarea
id: context
attributes:
label: Anything else
description: Related issues, recent changes, workarounds you tried.
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://github.com/light-cloud-com/ice/security/advisories/new
about: Report a security issue privately. Do not open a public issue — see SECURITY.md.
- name: Question or discussion
url: https://github.com/light-cloud-com/ice/discussions
about: Ask a question or start a discussion instead of filing a bug.
Loading
Loading