This repository was archived by the owner on Jun 26, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathclaude-progress.txt
More file actions
238 lines (224 loc) · 14.5 KB
/
Copy pathclaude-progress.txt
File metadata and controls
238 lines (224 loc) · 14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# Claude Progress Log
# Newest entries first. Agents: append your entry at the top after the header.
---
## 2026-04-28 | Session: Function Edit Page
Worked on: Full Function Edit Page feature (plan 016)
Completed:
- Function Edit Page with FileTreeView file browser and SDK CodeEditor
- FileTreeView component: loading spinner state, empty placeholder, directories-before-files sorting, dirty dot indicators, fixed width with horizontal scroll
- SDK CodeEditor with empty state (code icon, "Start editing"), language label, auto-selected handler file based on func.yaml runtime
- EditToolbar with Back link (unsaved changes modal), Save & Deploy (success alert with 2s auto-dismiss, danger alert on error)
- SourceControlService: fetch(repo) via git.getTree recursive + blob fetches, updateRepo(repo) with local commit SHA cache for GitHub's eventual consistency
- Decomposed push() into push() (initial commits) and updateRepo() (subsequent commits)
- Migrated test runner from Jest to Vitest with MSW 2.x for GitHub API mocking
- Merged RepoInfo + SourceRepo into single RepoMetadata type
- Extracted parseNamespaceAndRuntime, getLanguageFromPath, handlerMap into shared utils
- Added CSP connect-src for GitHub API in dev mode (start-console.sh)
- Removed navigation state passing between pages (each page loads own data from URL params)
- Added CSS, co-location, React performance rules to style guide and architecture docs
- Added communication rules and draft PR step to workflow docs
- 12 test suites, 89 tests, all passing, zero lint errors
Left off: PR #16 ready for review. Missing test coverage for dirty tracking, save error alert, modal interactions, file selection.
Blockers: None
---
## 2026-04-28 | Session: Runtime PAT entry and user avatar
Worked on: Replace compile-time PAT injection with runtime modal entry, add user avatar to page headers
Completed:
- Runtime PAT entry via PatModal (PF6 Modal, password input, validation, error alert, small variant)
- UserAvatar component in ListPageHeader on all pages (list: clickable, create/edit: disabled)
- PatModal and useUserAvatar consolidated into UserAvatar as private internals, usePatModal hook extracted
- ForgeConnectionProvider context for cross-component PAT state sharing
- GithubService refactored: lazy auth via cached Octokit getter, fetchUserInfo on SourceControlService interface
- ForgeUser type (forge-agnostic naming), PAT and user stored in sessionStorage
- EmptyState simplified to single isCreateDisabled prop (PAT hint text internal, no Tooltip)
- FunctionsListPage wired: autoOpen modal, disabled Create when unauthenticated, skip API call when no PAT
- FunctionCreatePage protected against unauthenticated URL access (warning alert, form hidden)
- Removed DefinePlugin for __GITHUB_PAT__ from webpack.config.ts, deleted src/globals.d.ts
- Extracted errorMessage utility (src/utils/errorMessage.ts)
- Cancel and modal close disabled while validating
- 9 suites, 55 tests, all passing, zero lint errors
Left off: Squash and merge PR #15.
Blockers: None
---
## 2026-04-20 | Session: CI/CD pipeline and ESLint fixes
Worked on: GitHub Actions CI/CD pipeline, ESLint config fixes, README restructure
Completed:
- Single CI workflow (ci.yml) with three jobs: checks (lint + test), build-image (multi-arch Docker build, no push), publish (build + push to GHCR, master only)
- Multi-arch builds (amd64, arm64, ppc64le, s390x) via docker/setup-qemu-action + docker/setup-buildx-action, required for OCP
- Build attestation signing via actions/attest-build-provenance, required for OCP
- OCI annotations on image index (description, source, vendor, url), following knative/func patterns
- Docker layer caching via GHA cache (build-image writes, publish reads)
- Follows knative/func patterns: top-level permissions (id-token, contents, packages, attestations), concurrency groups, cancel-in-progress for PRs
- Fixed ESLint config: removed redundant rule spreads in src/** block that re-enabled base no-unused-vars over @typescript-eslint/no-unused-vars (all 194 lint errors were config issues, not code issues)
- Added Jest globals block for test files
- Downgraded @console/pluginAPI shared dep to >=4.19.0
- Restructured README: deployment section moved to top with OCP 4.19 prerequisite, GHCR registry link, separate prerequisites for deployment and development
- Added hack/next-plan-number.sh for deterministic plan/branch numbering based on remote PR count
- Updated WORKFLOW.md branching convention to use the helper script
- 8 suites, 34 tests, all passing, zero lint errors
Left off: PR #10 merged. Pipeline runs successfully on master. GitHub Pages deployed. Branch protection rule set.
Blockers: None
---
## 2026-04-17 | Session: FaaS route rename and nav restructure
Worked on: Rename routes from /functions to /faas, restructure nav for both perspectives
Completed:
- Renamed all routes from /functions/* to /faas/* (list, create, edit)
- Updated all internal links and navigation calls (5 locations)
- Updated tests to use /faas routes (2 test files)
- Dev perspective: flattened section+href into single top-level FaaS nav item
- Admin perspective: added separator + FaaS nav item under Workloads section
- Added FaaS i18n key
- Created potential-features.json, referenced in AGENTS.md
- Added perspective-aware namespace scoping as a potential feature
- Moved 002 plan to completed
- 8 suites, 34 tests, all passing
Left off: Branch ready for PR. Manual browser test skipped (sandboxed).
Blockers: None
---
## 2026-04-16 | Session: PR #5 review cleanup
Worked on: Consolidate duplicate GitHub services, fix naming conventions, extract hooks per architecture guidelines
Completed:
- Merged src/services/github/ push logic into src/services/source-control/GithubService
- Added push() method to SourceControlService interface
- Deleted src/services/github/ directory entirely
- Renamed BackendFunctionService → FunctionBackendService
- Renamed useSourceControl → useSourceControlService
- Extracted useCreateFunctionForm hook from CreateFunctionForm (single fields state object + setField helper)
- Extracted useFunctionCreatePage hook from FunctionCreatePage (rendering-only component)
- Removed duplicate @octokit/rest from devDependencies
- Updated design doc with all renames and FileEntry[] signatures
- Code review: added missing error alert test, fixed quote style, cleaned up GeneratedFiles refs
- Added missing feature entries to features.json (PAT Avatar, namespace listing, PR #5 cleanup)
- 10 suites, 41 tests, all passing
Left off: Branch ready for PR. Manual browser test skipped (no browser in sandbox).
Blockers: None
---
## 2026-04-02 | Session: Function Create Page
Worked on: Full-stack Function Create Page feature (plan 003)
Completed:
- Go backend `POST /api/function/create` endpoint using `knative.dev/func` + CI workflow generation via `knative.dev/func/cmd/ci`
- Input validation: name (DNS-label regex), runtime (whitelist), branch (git-ref regex), namespace (k8s regex), 1 MB body limit
- FunctionService interface + BackendFunctionService using `consoleFetchJSON` through OCP console proxy
- GitHubService interface + OctokitGitHubService creating single initial commit (no parents, no base_tree)
- CreateFunctionForm PF6 component with GitHub settings + Function settings sections
- FunctionCreatePage view orchestrating generate → push → navigate
- Dev environment: `start_backend`/`stop_backend` in init.sh, `BRIDGE_PLUGIN_PROXY` in start-console.sh
- In-cluster proxy in consoleplugin.yaml
- 17 tests across 6 suites, all passing
- Security review: fixed path traversal, added input validation, body size limit
- Code review: fixed singleton hooks, runtime typing, form onSubmit, exact route, json.Encode error handling
- Design doc updated: FileEntry mirrors Octokit git tree entry structure
Left off: PR
Blockers: None
---
## 2026-04-01 | Session: Nono sandbox Playwright fix + docs consolidation
Worked on: Resolved Playwright browser blocker in nono sandbox, consolidated commit message docs, added planning guide and architecture rules
Completed:
- Fixed Playwright MCP in nono sandbox (added /proc, /etc/fonts, /opt/google/chrome read; $HOME/.npm allow; npx allowed_command)
- Resolved agent-struggles.json Playwright blocker entry
- Added session-commit step to migrate blockers from progress log to agent-struggles.json
- Consolidated commit message docs: single source of truth in commit-message-guide.md, slimmed commit-user.md and session-commit.md, deleted commit-message-agent-readme.md
- Created planning-guide.md (plans outline test cases, not full code)
- Added page/component/hook rules to ARCHITECTURE.md
- Clarified TDD approach in TESTING.md (one test at a time)
- Simplified 002-function-list-table.md plan (removed all code, kept test case outlines)
Left off: Execute function list table plan. Nono Landlock inode issue with .claude.json (concurrent sessions cause EACCES)
Blockers: Concurrent Claude sessions break nono sandbox — Landlock inode grants invalidated when external session atomically writes .claude.json
---
## 2026-03-31 | Session: Function list table design + nono sandbox setup
Worked on: Designed function list table feature, set up nono sandbox for autonomous development
Completed:
- Brainstormed and finalized feature design (table with name, runtime, status, url, replicas, actions columns)
- Designed useFunctionsList merging hook (repos + deployments → FunctionListItem[])
- Updated features.json with refined feature steps
- Updated design doc with merging hook pattern and raw deployer PoC note
- Created implementation plan (docs/plans/active/002-feat-function-list-table.md)
- Captured real K8s deployment response (.tmp/k8s-deployment-response.json)
- Captured real GitHub search response (.tmp/gh-search-response.json)
- Created fine-grained GitHub PAT scoped to func-console (read + PR write)
- Set up nono sandbox profile (claude-code-func-console) with credential injection
- Verified: gh api, yarn test, plugin loading all work in sandbox
- Verified: destructive commands blocked (rm, oc, sudo, ssh keys)
Left off: Playwright browser access not working in sandbox (needs investigation). Ready to execute plan.
Blockers: Playwright plugin can't execute browser inside nono sandbox — needs either npm cache fix or browser binary permission
---
## 2026-03-30 | Session: Replace nginx with Go backend
Worked on: Replaced nginx reverse proxy with custom Go backend server
Completed:
- Go backend serving static files with embed.FS
- Multi-stage Dockerfile (Node build → Go build → ubi9-micro runtime)
- TLS support with automatic fallback to HTTP-only
- Removed nginx ConfigMap from Helm chart
Left off: Function list page with data entries
Blockers: None
---
## 2026-03-30 | Session: Empty state feature and docs restructure
Worked on: Implemented function list empty state, restructured docs, added init.sh
Completed:
- FunctionsEmptyState component with PatternFly 6 (TDD)
- FunctionsListPage view rendering empty state (TDD)
- Wired /functions route and dev perspective nav item
- Set up Jest + React Testing Library (v12 for React 17 compat)
- Fixed route matching (removed exact:true) and i18n namespace
- Added PR template and branching convention
- Extracted workflow, session rules, branching, PRs into docs/WORKFLOW.md
- Moved features.json and claude-progress.txt formats into docs/references/
- Slimmed AGENTS.md to project overview + knowledge base
- Created init.sh with start/stop and port readiness checks
- Updated init-session command to cover startup steps 1-6
Left off: List view with data entries
Blockers: None
---
## 2026-03-27 | Session: OCP console plugin scaffolding (user-driven)
Worked on: User bootstrapped the OCP console plugin project
Completed:
- Merged OpenShift console plugin template as project foundation (6f10934)
- Customized .gitignore, removed template AGENTS file, expanded style guide
- Added OCP plugin reference doc and Claude commands (init-session, scrutinise)
- Renamed plugin from "console-plugin-template" to "console-functions-plugin" (c9554fe)
- Updated package.json, README, i18n namespace, and start-console.sh
Left off: Second feature implementation
Blockers: None
---
## 2026-03-26 | Session: Docs restructure and feature list
Worked on: Split docs into dedicated files, populated features.json, updated design doc, added slash commands
Completed:
- Extracted code style from ARCHITECTURE.md into new docs/STYLEGUIDE.md
- Created docs/TESTING.md with testing strategy and conventions
- Populated features.json with 4 initial features (2 technical, 2 functional)
- Updated AGENTS.md — added STYLEGUIDE/TESTING references, expanded Plan step, fixed typo
- Updated design doc — WASM section reflects completed spike, checked off design TODOs
- Updated commit-user.md to also perform the commit
- Created session-commit.md slash command for end-of-session cleanup
Left off: First feature implementation (plugin scaffolding)
Blockers: None
---
## 2026-03-25 | Session: Design finalization — user flow revision
Worked on: Completed remaining design items and revised user flow
Completed:
- Editor routing — by function name, RepoInfo passed via React Router navigation state
- Revised user flow — create redirects to list, background deploy with progressive status
- Edit flow — two buttons: Save (stay in editor) and Save & Deploy (redirect to list)
- DeployedFunction type updated with url field and new statuses (CreatingRepo, Pushing, PushedToGitHub)
- Updated all affected design doc sections for new flow
- Oriented to new harness engineering setup (AGENTS.md, ARCHITECTURE.md, features.json)
Left off: Testing strategy definition (TDD, vitest, Cypress, MSW). Then final spec review, populate features.json.
Blockers: None
---
## 2026-03-25 | Session: Harness engineering setup
Worked on: Designed and implemented harness engineering setup for func-console
Completed:
- Harness design doc (docs/design/2026-03-25-harness-engineering-design.md)
- AGENTS.md at repo root with startup sequence, feature development sequence, session rules
- CLAUDE.md at repo root pointing to AGENTS.md
- docs/ARCHITECTURE.md (layered architecture, code style, dependency rules)
- docs/features.json (empty, to populate together)
- docs/claude-progress.txt (this file)
- docs/agent-struggles.json (empty) + docs/references/agent-struggles-readme.md
- docs/references/commit-message-agent-readme.md (agent commit guide)
- .claude/commands/commit-user.md (interactive commit slash command)
- Moved .claude/plans/ content to docs/design/ and docs/references/
- Created docs/plans/active/ and docs/plans/completed/
- Feature development sequence: plan → implement → review → manual test → complete → stop
Left off: Need to populate features.json with PoC feature list (25-50 features).
Blockers: None