toga-ai 1.0.584 → 1.0.585

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
  | [ClickUp Sprint Dashboard (tools /clickup/react)](features/clickup-sprint-dashboard.md) | A native **ClickUp sprint dashboard** in the 1.0 `tools` app at route `/clickup/react`, built for a wall-mounted **TV display** ("TOGa IQ" internal sprint metri | tools/_/app/clickup/sprint.php, tools/v2/sprints/tile/index.php, tools/v2/sprints/current/index.php, tools/v2/sprints/status-breakdown/index.php, tools/v2/sprints/worktype-breakdown/index.php, tools/v2/sprints/points-by-dev/index.php, tools/v2/sprints/burndown/index.php, tools/assets/clickup/sprint-dashboard.html, tools/mvc/clickup/react/get.php, tools/mvc/login/get.php, tools/_/app/nav.php |
7
7
  | [CloudFront Client Setup](features/cloudfront-client-setup.md) | An SSO-gated admin tool at **`/devops/cloudfront-clients`** in the Tools 1.0 app that onboards a client onto **CloudFront + Route 53 across multiple AWS account | tools/_/app/devops/cloudfront.php, tools/mvc/devops/cloudfront-clients/get.php, tools/mvc/devops/cloudfront-clients/post.php, tools/assets/js/cloudfront-clients.js, tools/assets/css/cloudfront-clients.css, tools/_/app/nav.php, tools/_/app/frameworkindex.php, tools/config.production.ini |
8
8
  | [Design Demo Admin](features/design-demo-admin.md) | A self-serve admin UI at **`/design`** in the SSO-protected **Tools** app that lets the design team publish self-contained "Claude Design" HTML exports as **ver | tools/_/app/design/github.php, tools/mvc/design/get.php, tools/mvc/design/post.php, tools/assets/css/design.css, tools/assets/js/design.js, tools/_/app/frameworkindex.php, tools/_/app/nav.php, tools/composer.json |
9
- | [Tools — Developers Folder (UUID & Password Generators)](features/developer-tools.md) | The first two tools shipped in the Tools app, both under the **Developers** folder and gated to personas **Development Team** / **TOGa Technology**. | tools/mvc/developers/uuid/get.php, tools/mvc/developers/password/get.php |
9
+ | [Tools — Developers Folder (UUID & Password Generators)](features/developer-tools.md) | The first two tools shipped in the Tools app, both under the **Developers** folder and gated to personas **Development Team** / **TOGa Technology**. | tools/mvc/developers/uuid/get.php, tools/mvc/developers/password/get.php, tools/mvc/developers/password/post.php |
10
10
  | [/errors Curation Console (Tools → shared Core Logs DB)](features/errors-curation-console.md) | Internal-only triage/curation screen for the 2.0 Issue/Event error-reporting pipeline, built as a 1.0 Tools MVC page reading the **shared Core Logs DB** through | tools/mvc/errors/get.php, tools/mvc/errors/post.php, tools/mvc/errors/issue/get.php, tools/assets/css/style.css, tools/_/app/nav.php, tools/config.production.ini |
11
11
  | [Legacy Email Notifier (tools /email-migration/notify)](features/legacy-email-notifier.md) | An SSO-gated admin tool at **`/email-migration/notify`** (nav group **Email Migration** > **Legacy Notifier**, personas `['TOGa Technology','Development Team']` | tools/mvc/email-migration/notify/get.php, tools/mvc/email-migration/notify/post.php, tools/_/app/nav.php |
12
12
  | [Tools MVC — Routing, CSRF & App_Database Access Patterns](features/mvc-data-access-patterns.md) | The load-bearing 1.0 (`App_`) framework conventions a developer needs when adding a page to the Tools app — URL routing, CSRF, and DB access through `App_Databa | tools/_/app/nav.php, tools/mvc/get.php, library/app/error.php, library/app/database.php |
@@ -6,14 +6,16 @@ project: Tools
6
6
  client: shared
7
7
  type: feature
8
8
  status: active
9
- updated: 2026-06-25
9
+ updated: 2026-08-14
10
10
  owners: [jcardinal]
11
11
  files:
12
12
  - tools/mvc/developers/uuid/get.php
13
13
  - tools/mvc/developers/password/get.php
14
+ - tools/mvc/developers/password/post.php
14
15
  related:
15
16
  - ../architecture.md
16
17
  - ./persona-gated-navigation.md
18
+ - ./mvc-data-access-patterns.md
17
19
  ---
18
20
 
19
21
  ## Summary
@@ -28,10 +30,28 @@ personas **Development Team** / **TOGa Technology**. They are the reference exam
28
30
  - Server generates an RFC 4122 **v4** UUID via `random_bytes(16)` with version/variant bits set.
29
31
  - UI is click-to-copy, then instant **client-side** regenerate using `crypto.getRandomValues`.
30
32
 
31
- ### Generate Password (`mvc/developers/password/get.php`)
32
- - Reproduces the standalone `test/team/generate_password.php` script.
33
- - `App_String::generateSupportCode(8)` produces the password; `App_String::passwordHash()`
34
- produces the bcrypt hash. The page shows **both** the password and the hash, each copyable.
33
+ ### Generate Password (`mvc/developers/password/get.php` + `post.php`)
34
+ - **Random support-code card (default, on page load):** reproduces the standalone
35
+ `test/team/generate_password.php` script. `App_String::generateSupportCode(8)` produces the
36
+ password; `App_String::passwordHash()` produces the bcrypt hash. The page shows **both** the
37
+ password and the hash, each copyable. Unchanged.
38
+ - **Hash-your-own-password card:** the user types a password and gets its bcrypt hash without a
39
+ full page reload. bcrypt cannot run client-side, so the UI `fetch`es a sibling
40
+ `post.php` — the framework routes any non-GET for `/developers/password` to
41
+ `mvc/developers/password/post.php` (folder == route 1:1). `post.php` exposes one JSON action
42
+ `hash`, guarded with the standard tools pair `App_Auth::requireAuth()` then
43
+ `App_Page::validateCrossSiteRequestForgery()`. That CSRF check is **Origin/Referer-based, not
44
+ a token**, so a same-origin `fetch` passes with no embedded token (see
45
+ [mvc-data-access-patterns](./mvc-data-access-patterns.md)).
46
+ - **Security discipline:** the clear-text password is **never logged or persisted**. A
47
+ `MAX_PASSWORD_BYTES = 4096` guard bounds input, and the endpoint returns a `truncated` flag
48
+ because bcrypt only consumes the first 72 bytes — the UI shows a note when that is exceeded.
49
+
50
+ ## Gotcha — bcrypt's 72-byte limit
51
+ `password_hash`/`App_String::passwordHash()` silently ignores everything past the first **72
52
+ bytes** of the input. The hash-your-own card surfaces this to the user (`truncated` flag + UI
53
+ note) rather than letting a longer password appear to "work" while extra characters are dead.
35
54
 
36
55
  ## Change history
56
+ - 2026-08-14 — Added a "hash your own password" card to the Generate Password tool: a new sibling `mvc/developers/password/post.php` exposes one JSON `hash` action (requireAuth + Origin/Referer CSRF), so the UI bcrypt-hashes user-typed input via `fetch` without a page reload; clear-text is never logged/persisted, `MAX_PASSWORD_BYTES=4096` guard, and a `truncated` flag surfaces bcrypt's 72-byte limit. Also fixed missing inter-card spacing by adding a `tool--password` wrapper modifier + `.tool--password .card { margin-bottom }` (mirroring `.tool--errors`; note style.scss is dead — edit style.css directly). (jcardinal)
37
57
  - 2026-06-25 — Built the first two Developers tools: RFC 4122 v4 UUID generator and a password+bcrypt-hash generator (ported from test/team/generate_password.php), both gated to Development Team / TOGa Technology personas (jcardinal)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.584",
3
+ "version": "1.0.585",
4
4
  "description": "TOGA Technology Team Claude Knowledge System — shared AI coding harness with skills, knowledge base CLI, and project installer for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",