App shell with sidebar and theme switch; attribute-set management; project rename; new pages for projects, runbooks and activity
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 5s
Work Records / validate (push) Successful in 12s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 295952@bnt-lap001
Assistant-Session: e93f64ad-516c-46eb-9666-aad8d300c477
This commit is contained in:
tegwick 2026-09-29 17:38:06 +02:00
parent a6ee6a0a6e
commit 6579618737
9 changed files with 663 additions and 13 deletions

View file

@ -120,6 +120,12 @@ def project_page(app, pid: str, msg: str = "") -> bytes | None:
out.append(f"<p>{e(d['description'])}</p>")
if d.get("goal"):
out.append(f"<p><b>Goal:</b> {e(d['goal'])}</p>")
out.append(f"<details class=override><summary>Edit name, description and goal</summary>"
f"<form method=post action='/project/{e(pid)}/edit'>{app.hidden()}"
f"<p><label>Project name<br><input name=title value='{e(d['title'])}' required minlength=3 class=grow style='width:100%'></label></p>"
f"<p><label>Description<br><textarea name=description rows=2 style='width:100%'>{e(d.get('description', ''))}</textarea></label></p>"
f"<p><label>Goal<br><input name=goal value='{e(d.get('goal', ''))}' class=grow style='width:100%'></label></p>"
"<p class=note>The project id and its template stay as they are. Never enter secrets.</p><button>Save</button></form></details>")
# what is still needed
needs: dict[str, list[str]] = {}
for n in st["needs"]: