@litfamily/lithermes 1.0.3 → 1.0.5

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.
Files changed (58) hide show
  1. package/README.md +101 -85
  2. package/README_Ko-KR.md +109 -95
  3. package/assets/lithermes-plugin/README.md +46 -30
  4. package/assets/lithermes-plugin/__init__.py +5 -1
  5. package/assets/lithermes-plugin/core_contexts.py +19 -5
  6. package/assets/lithermes-plugin/core_contract.py +2 -2
  7. package/assets/lithermes-plugin/core_routing.py +2 -0
  8. package/assets/lithermes-plugin/diagnostics.py +48 -16
  9. package/assets/lithermes-plugin/handoff.py +3 -3
  10. package/assets/lithermes-plugin/lit_mark.py +57 -8
  11. package/assets/lithermes-plugin/payload-version.json +112 -20
  12. package/assets/lithermes-plugin/plugin.yaml +1 -1
  13. package/assets/lithermes-plugin/scientific_visualization.py +3 -3
  14. package/assets/lithermes-plugin/skills/frontend-ui-ux/SKILL.md +11 -12
  15. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +24 -13
  16. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/default-editorial-pixel.json +18 -0
  17. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/operating-lanes.md +1 -1
  18. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/product-direction.md +1 -1
  19. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/production.md +13 -0
  20. package/assets/lithermes-plugin/skills/lit-handoff/SKILL.md +4 -3
  21. package/assets/lithermes-plugin/skills/lit-scientific-visualization/SKILL.md +4 -3
  22. package/assets/lithermes-plugin/skills/litwork/SKILL.md +4 -3
  23. package/assets/lithermes-plugin/skills/readme-studio/SKILL.md +73 -0
  24. package/assets/lithermes-plugin/skills/readme-studio/references/decoration-patterns.md +36 -0
  25. package/assets/lithermes-plugin/skills/readme-studio/references/facts.md +11 -0
  26. package/assets/lithermes-plugin/skills/readme-studio/references/motion.md +34 -0
  27. package/assets/lithermes-plugin/skills/readme-studio/references/production-interview.md +15 -0
  28. package/assets/lithermes-plugin/skills/readme-studio/references/type-and-images.md +17 -0
  29. package/assets/lithermes-plugin/skills/readme-studio/scripts/check_facts.py +103 -0
  30. package/assets/lithermes-plugin/skills/readme-studio/templates/cover-section.md +63 -0
  31. package/assets/lithermes-plugin/skills/readme-studio/templates/cover-settings.json +11 -0
  32. package/assets/lithermes-plugin/skills/readme-studio/templates/cover-source.json +12 -0
  33. package/assets/lithermes-plugin/skills/readme-studio/templates/facts.json +1 -0
  34. package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/index.html +54 -0
  35. package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/index.motion.json +1 -0
  36. package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/package-lock.json +1843 -0
  37. package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/package.json +6 -0
  38. package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/package-lock.json +3783 -0
  39. package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/package.json +7 -0
  40. package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/src/index.tsx +34 -0
  41. package/assets/lithermes-plugin/skills/readme-studio/templates/typography/outline.mjs +79 -0
  42. package/assets/lithermes-plugin/skills/readme-studio/templates/typography/package-lock.json +133 -0
  43. package/assets/lithermes-plugin/skills/readme-studio/templates/typography/package.json +6 -0
  44. package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +3 -3
  45. package/package.json +1 -1
  46. package/readme-assets/Lucide-LICENSE.txt +43 -0
  47. package/readme-assets/ascii-readme.svg +5 -0
  48. package/readme-assets/badge-version.svg +1 -1
  49. package/readme-assets/cover-motion-still.webp +0 -0
  50. package/readme-assets/cover-motion.webp +0 -0
  51. package/readme-assets/ignition-film.mp4 +0 -0
  52. package/readme-assets/lucide-book-open.svg +14 -0
  53. package/readme-assets/lucide-play.svg +13 -0
  54. package/readme-assets/lucide-shield-check.svg +14 -0
  55. package/src/lib/install.js +2 -1
  56. package/src/lib/modelConfig.js +11 -7
  57. package/src/lib/modelRoutePolicy.js +94 -51
  58. package/src/lib/skillPayload.js +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
- "syncedAt": "2026-09-19T14:26:09.162Z",
2
+ "syncedAt": "2026-09-23T12:56:08.744Z",
3
3
  "source": "bundled-payload",
4
- "sourceHash": "c766ec41c74ada8eac60e76c76714227e97bd360836f4021be6787e61835b7ce",
4
+ "sourceHash": "e7ac8bd0623eb0ef78d7d97e76daa0bb3d5cd7aab909da0f0e2f3af19f08964b",
5
5
  "files": [
6
6
  {
7
7
  "path": "NOTICE.md",
@@ -9,11 +9,11 @@
9
9
  },
10
10
  {
11
11
  "path": "README.md",
12
- "sha256": "6a6683e64720af0990dddca268dca3669f60a7e85a1f0d1c8600b03a4ca1af1c"
12
+ "sha256": "8e0eee0e8ff8b8c6fd8b38c1d5c4925730db97fe2ceb5cce1a54e501acc27d57"
13
13
  },
14
14
  {
15
15
  "path": "__init__.py",
16
- "sha256": "259f4e91d9517ae0c5d0dc9a58264c5f2f39af3555d7a6e06985fda2fe0fd999"
16
+ "sha256": "bf8627a5d951dbb294c3dd2bff36a839ca26dbe5047af0462852eeeb2fde6aea"
17
17
  },
18
18
  {
19
19
  "path": "auto_update.py",
@@ -37,11 +37,11 @@
37
37
  },
38
38
  {
39
39
  "path": "core_contexts.py",
40
- "sha256": "7aaa738c94451e40d8b59f58080d705628cdc7b968386a7edd9fdf21fae8804b"
40
+ "sha256": "0bb379b099bfedb9ce51141cae0f7c11a827fe35487249a9ca7fe6dfd345b257"
41
41
  },
42
42
  {
43
43
  "path": "core_contract.py",
44
- "sha256": "9e9311ed2e83087d7ac84f1f470f987abdc30b1f6d59708cc98770ec76d7f1c9"
44
+ "sha256": "a9d356758b69ca988a069cda7347554b470856a6c4863808544b2ec53f737035"
45
45
  },
46
46
  {
47
47
  "path": "core_plans.py",
@@ -65,7 +65,7 @@
65
65
  },
66
66
  {
67
67
  "path": "core_routing.py",
68
- "sha256": "7f1c7a5c5c004c90e5356aeef8da0099ed5b9e8f764299f57a64843226fa265f"
68
+ "sha256": "415d43988b05543ab6f95c73baab246f3b40ed1e3f3e7940ede4171efb48e62f"
69
69
  },
70
70
  {
71
71
  "path": "core_runs.py",
@@ -85,11 +85,11 @@
85
85
  },
86
86
  {
87
87
  "path": "diagnostics.py",
88
- "sha256": "5ee1242f357dc164a6ab663baf3d658a13d53f437240e33b8bb1c5cffa4d9ed2"
88
+ "sha256": "8d8196c1c50a6dfa44a68f8681a22b3c84428776bc7b0af1847d80d30346f0d0"
89
89
  },
90
90
  {
91
91
  "path": "handoff.py",
92
- "sha256": "e17948be31a35272fbd99fccd034bff7c6018e65e566e0d60e287ff6d38d0ecf"
92
+ "sha256": "0e364d64981b84e50b437326c34965121928ef826e231d3822fbbfdb4009f6aa"
93
93
  },
94
94
  {
95
95
  "path": "knowledge.py",
@@ -101,7 +101,7 @@
101
101
  },
102
102
  {
103
103
  "path": "lit_mark.py",
104
- "sha256": "d2cdd5fe8547b5b63c7441bc3ae4cbd395521e890cfb5330f58c22f5896ef658"
104
+ "sha256": "21c16155de0ec77f2aecf43ca0b0446db754673794cee596d2e9c4c43338c91b"
105
105
  },
106
106
  {
107
107
  "path": "lit_mark_rows.json",
@@ -157,7 +157,7 @@
157
157
  },
158
158
  {
159
159
  "path": "plugin.yaml",
160
- "sha256": "c56a952d591bed8c796b3ce4f96ec8ff64700583e359d5ee8c510c46f61882e4"
160
+ "sha256": "6a3baf875b758fdf6d7973d5f9ef1a5727702452cd4b4a6f4a8268f130b32341"
161
161
  },
162
162
  {
163
163
  "path": "provider_metrics.py",
@@ -205,7 +205,7 @@
205
205
  },
206
206
  {
207
207
  "path": "scientific_visualization.py",
208
- "sha256": "ad81c02b3004cb54101f2321f8103c6c29ab9e5c676aac3a73032f8e78a8e3d8"
208
+ "sha256": "3b5ea47e70f5a93ad5050945d5a54693a6dcf432c404369ffd468694bb32da35"
209
209
  },
210
210
  {
211
211
  "path": "session_context.py",
@@ -545,7 +545,7 @@
545
545
  },
546
546
  {
547
547
  "path": "skills/frontend-ui-ux/SKILL.md",
548
- "sha256": "ed5255edd20a5e0ac3b93f2a3e45a6199180b1dd19ffb22cd2daa5b0f9b3795e"
548
+ "sha256": "9a33479d6a5e1f04afb19fb151175e56d406ab38c4c6b4ec6f8fbb97d7e92e64"
549
549
  },
550
550
  {
551
551
  "path": "skills/frontend-ui-ux/references/_canonical-corpus/.gitattributes",
@@ -1245,7 +1245,7 @@
1245
1245
  },
1246
1246
  {
1247
1247
  "path": "skills/frontend-ui-ux/references/complete-contract.md",
1248
- "sha256": "87eeb3250f05763acf04a1262b4e1f9f3f352feb36d7e01870f1fa2b4c9c4214"
1248
+ "sha256": "7aff009df5222d5cfbcdcc505f651104a7e8145c3b8477246c098a9f9b295f6f"
1249
1249
  },
1250
1250
  {
1251
1251
  "path": "skills/frontend-ui-ux/references/composition.md",
@@ -1255,6 +1255,10 @@
1255
1255
  "path": "skills/frontend-ui-ux/references/creative-directions.md",
1256
1256
  "sha256": "c7e9df8e86b51ed36761099bf29fbc8981e1762e4fbbdcce1ec0e4562cd2ae33"
1257
1257
  },
1258
+ {
1259
+ "path": "skills/frontend-ui-ux/references/default-editorial-pixel.json",
1260
+ "sha256": "27788d347cafd23305b5d3d30f3721b6574210f6718781bfb78e56a31a16280d"
1261
+ },
1258
1262
  {
1259
1263
  "path": "skills/frontend-ui-ux/references/evidence-review.md",
1260
1264
  "sha256": "1dac4581ee32b39164f6d5eed97682944969072b30441d45ddf54835ad6a4c50"
@@ -1273,7 +1277,7 @@
1273
1277
  },
1274
1278
  {
1275
1279
  "path": "skills/frontend-ui-ux/references/operating-lanes.md",
1276
- "sha256": "2df66c3ad89b602458610941bd855bf252591b6c11f46fe78673414678b5ab50"
1280
+ "sha256": "5c3ea0e5a0e1c3e055bcb1e56598b166152bfcbd2408c4b197c25a823afa8b02"
1277
1281
  },
1278
1282
  {
1279
1283
  "path": "skills/frontend-ui-ux/references/performance-delivery.md",
@@ -1281,7 +1285,11 @@
1281
1285
  },
1282
1286
  {
1283
1287
  "path": "skills/frontend-ui-ux/references/product-direction.md",
1284
- "sha256": "fb843c12ddeafefedde47c39bfa1839d95e36253c2ced6a9f50424882b6ce682"
1288
+ "sha256": "97a7ac17af9dd50026a4625bd24afd0f05f468c4c5823758f6e307507ccebe46"
1289
+ },
1290
+ {
1291
+ "path": "skills/frontend-ui-ux/references/production.md",
1292
+ "sha256": "af5d4483340c2410572488c3c6239b0624e83fb24eabda0cc49398d091e85312"
1285
1293
  },
1286
1294
  {
1287
1295
  "path": "skills/frontend-ui-ux/references/redesign-playbook.md",
@@ -1689,7 +1697,7 @@
1689
1697
  },
1690
1698
  {
1691
1699
  "path": "skills/lit-handoff/SKILL.md",
1692
- "sha256": "34bc5551ae333ab1da409c3bc196ce1ac8d54c3327df94679d4174b978b855ee"
1700
+ "sha256": "c50767e13d4d062d2677d1d8b43891b2dfdb704b6ba557b427ffd6ddecfa8edd"
1693
1701
  },
1694
1702
  {
1695
1703
  "path": "skills/lit-init/SKILL.md",
@@ -1721,7 +1729,7 @@
1721
1729
  },
1722
1730
  {
1723
1731
  "path": "skills/lit-scientific-visualization/SKILL.md",
1724
- "sha256": "77b7b899f4dc0c81830eacb031c3a494339ce45e6435fec57752c404a8e3a8c7"
1732
+ "sha256": "61d4b08b4b3fe91511ff4412aa93aecc45ba6380b7b282da26b56f2ae831bc09"
1725
1733
  },
1726
1734
  {
1727
1735
  "path": "skills/litgoal/.gitkeep",
@@ -1741,7 +1749,7 @@
1741
1749
  },
1742
1750
  {
1743
1751
  "path": "skills/litwork/SKILL.md",
1744
- "sha256": "d6bb7863c4fab2f47e54357f9d8dd4038351e4a97870fa066b225202072d20f1"
1752
+ "sha256": "9cbfbae48c0b0284bf2d36af0a3d97164f8d6d2fc8895ec6d19ac929dd360116"
1745
1753
  },
1746
1754
  {
1747
1755
  "path": "skills/lsp/SKILL.md",
@@ -1847,6 +1855,90 @@
1847
1855
  "path": "skills/lsp-setup/scripts/verify-lsp.ts",
1848
1856
  "sha256": "33c6c22236234ed5f4db7b0deae560b9b5e0c8c018be4ded1a6c1179792655fe"
1849
1857
  },
1858
+ {
1859
+ "path": "skills/readme-studio/SKILL.md",
1860
+ "sha256": "40b9ed081c86db22386fd586903b6457248cbc1185b3a283c007f6bac0e98be4"
1861
+ },
1862
+ {
1863
+ "path": "skills/readme-studio/references/decoration-patterns.md",
1864
+ "sha256": "be96f61a63fd445cf29d3fa606cc239c76218b4b69e6d84cd47e1b4563b0494c"
1865
+ },
1866
+ {
1867
+ "path": "skills/readme-studio/references/facts.md",
1868
+ "sha256": "649d2e532864c16f3010cdbc89a045956a308d7d1f20ec137ff29d67b2dfd10a"
1869
+ },
1870
+ {
1871
+ "path": "skills/readme-studio/references/motion.md",
1872
+ "sha256": "570c0bd7c32e32db71038d446f4c7a6c9ad07b389a9f7414cf739734ba254baa"
1873
+ },
1874
+ {
1875
+ "path": "skills/readme-studio/references/production-interview.md",
1876
+ "sha256": "be6169bff980aef9813e86e6670763d92166efbdbaaa9fa1cc98b733f00224e4"
1877
+ },
1878
+ {
1879
+ "path": "skills/readme-studio/references/type-and-images.md",
1880
+ "sha256": "029027269e3766ef2e8749bd7e78e80aff343bf4c290d2a8c7086680b050b800"
1881
+ },
1882
+ {
1883
+ "path": "skills/readme-studio/scripts/check_facts.py",
1884
+ "sha256": "2b3de706c553ef0616e8d4e012cc547bc63103222f2943e3d1b6c414edb3b3be"
1885
+ },
1886
+ {
1887
+ "path": "skills/readme-studio/templates/cover-section.md",
1888
+ "sha256": "345c4d8d1cbddde35af02715e52bab45763d2d9a11de88a9f9eae2ec5910adb0"
1889
+ },
1890
+ {
1891
+ "path": "skills/readme-studio/templates/cover-settings.json",
1892
+ "sha256": "d3696c1ba05f6fe8ab6824f1b89bd7c8c9ea242d966a20e60decd9dad93289f9"
1893
+ },
1894
+ {
1895
+ "path": "skills/readme-studio/templates/cover-source.json",
1896
+ "sha256": "3d72d6f05d2941f0c6273d85353271f1c76438199eb0599f938ec53e54562d47"
1897
+ },
1898
+ {
1899
+ "path": "skills/readme-studio/templates/facts.json",
1900
+ "sha256": "6cbb9fc3ee132bc2dfdeb4b1b803320bcd0aa561613880cec0ead352d18dc836"
1901
+ },
1902
+ {
1903
+ "path": "skills/readme-studio/templates/hyperframes/index.html",
1904
+ "sha256": "13e01dd37f74542f9f20295121b69a2baf44aab1009d49094c94a683b162b4f9"
1905
+ },
1906
+ {
1907
+ "path": "skills/readme-studio/templates/hyperframes/index.motion.json",
1908
+ "sha256": "bef879ce5abe7810d73cc733ab635884ec807eccd7bc5e1c9bc9900049187249"
1909
+ },
1910
+ {
1911
+ "path": "skills/readme-studio/templates/hyperframes/package-lock.json",
1912
+ "sha256": "0e0e2b1826133e71eb031d33d8071638d27dc91a4d904c13a5527096b9512324"
1913
+ },
1914
+ {
1915
+ "path": "skills/readme-studio/templates/hyperframes/package.json",
1916
+ "sha256": "5e5612bbd32ef12b388cac17bc21a73c75c85e1afa88dcd4c333c627aea7ac9a"
1917
+ },
1918
+ {
1919
+ "path": "skills/readme-studio/templates/remotion/package-lock.json",
1920
+ "sha256": "2dd475a00975edccf6a6399f3fa728b4e69d8d7c8229416edf2c702fd9d47bba"
1921
+ },
1922
+ {
1923
+ "path": "skills/readme-studio/templates/remotion/package.json",
1924
+ "sha256": "2cb155200ddbcf5d60066500f1bf2dd0b4951b862e8417c17eae186e333c4cbb"
1925
+ },
1926
+ {
1927
+ "path": "skills/readme-studio/templates/remotion/src/index.tsx",
1928
+ "sha256": "40e4b5dc43eb01ac1930011533a591ce83c814f1d98b2746b5cd54c9153336f7"
1929
+ },
1930
+ {
1931
+ "path": "skills/readme-studio/templates/typography/outline.mjs",
1932
+ "sha256": "e19797f18ae29021be6191263a4fc65e190cb9690ee88fd67902e306595f0216"
1933
+ },
1934
+ {
1935
+ "path": "skills/readme-studio/templates/typography/package-lock.json",
1936
+ "sha256": "d930544aa8f87bc0d459fa102754197f995042e112becd38163d85edcea375aa"
1937
+ },
1938
+ {
1939
+ "path": "skills/readme-studio/templates/typography/package.json",
1940
+ "sha256": "02844a9de92102aec99f0e8e07a07517feac5692171f60bb28c64af633f5293f"
1941
+ },
1850
1942
  {
1851
1943
  "path": "skills/refactor/SKILL.md",
1852
1944
  "sha256": "69c88d150705f1a2bd7003096f9137fe76c2e1a3c5f67284f90a43fc72039e8a"
@@ -1877,7 +1969,7 @@
1877
1969
  },
1878
1970
  {
1879
1971
  "path": "skills/visual-qa/references/complete-contract.md",
1880
- "sha256": "9ad356bb98cf82afe002f6b8929ecb8f3e203020a568fb3782638b56093cb88b"
1972
+ "sha256": "c3008c41017bc548982cc424a3ec90bd338c2d5c2d49bebb5385a640531aabff"
1881
1973
  },
1882
1974
  {
1883
1975
  "path": "skills/visual-qa/schemas/evidence-manifest-v1alpha1.schema.json",
@@ -1,5 +1,5 @@
1
1
  name: lithermes
2
- version: 1.0.3
2
+ version: 1.0.5
3
3
  description: "Hermes-native workflow toolkit: litgoal durable runtime, 5-lane review orchestrator, Litwork commands, skills, and prompt steering."
4
4
  author: "LitHermes contributors"
5
5
  kind: standalone
@@ -9,18 +9,18 @@ from typing import Any
9
9
  try:
10
10
  from .core_contract import reader_facing_contract_block
11
11
  from .core_reader_args import parse_reader_facing_command_args
12
- from .lit_mark import acknowledgement, acknowledge_reply, probe_contract
12
+ from .lit_mark import acknowledgement, acknowledge_reply, harness_banner, probe_contract
13
13
  from .redaction import redact_text
14
14
  from .session_context import is_delegate_child_platform
15
15
  except (ImportError, ModuleNotFoundError):
16
16
  from core_contract import reader_facing_contract_block # type: ignore
17
17
  from core_reader_args import parse_reader_facing_command_args # type: ignore
18
- from lit_mark import acknowledgement, acknowledge_reply, probe_contract
18
+ from lit_mark import acknowledgement, acknowledge_reply, harness_banner, probe_contract
19
19
  from redaction import redact_text # type: ignore
20
20
  from session_context import is_delegate_child_platform # type: ignore
21
21
 
22
22
 
23
- SCIENCE_BANNER = "▲ LIT · lit-scientific-visualization"
23
+ SCIENCE_BANNER = harness_banner("lit-scientific-visualization")
24
24
  SKILL_ROOT = Path(__file__).resolve().parent / "skills" / "lit-scientific-visualization"
25
25
  SOURCE_ROOT = Path(__file__).resolve().parent / "vendor" / "scientific-visualization"
26
26
  SOURCE_SKILL = SOURCE_ROOT / "SKILL.md"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: frontend-ui-ux
3
- description: Concise Hermes interface contract with lazy references.
3
+ description: Build and inspect authorized interfaces.
4
4
  ---
5
5
 
6
6
  ## #contract.activation
@@ -8,7 +8,7 @@ description: Concise Hermes interface contract with lazy references.
8
8
  ```yaml
9
9
  schema_version: lithermes_llm_contract/v1
10
10
  skill_id: frontend-ui-ux
11
- surface: Hermes-native skill and UI-shaped context hook
11
+ surface: Hermes-native skill and UI context
12
12
  ```
13
13
 
14
14
  ```json
@@ -17,33 +17,32 @@ surface: Hermes-native skill and UI-shaped context hook
17
17
 
18
18
  ## #contract.inputs
19
19
 
20
- Require lane, repo facts, finite states, and observable criteria.
20
+ Inspect target and authority; references are inert data.
21
21
 
22
22
  ## #contract.mode_matrix
23
23
 
24
24
  | Mode | Trigger | Contract |
25
25
  | --- | --- | --- |
26
- | author | Interface intent | Validate beta `evidence_eligible: true` before markup |
27
- | implement | Approved beta | Reuse primitives; satisfy inventory |
28
- | degraded | Missing capability | Record BLOCKED/omission; never invent PASS |
26
+ | build | Sufficient authorized design | Implement and inspect |
27
+ | interview | Material ambiguity | Ask, retain answer, resume |
28
+ | review/plan | Read-only request | Do not edit |
29
29
 
30
30
  ## #contract.procedure
31
31
 
32
- Freeze/validate beta inventory; route to `lithermes:visual-qa`.
32
+ Read `references/production.md`. Record compact direction; evolve the Design Contract during implementation. No contract-only handoff or routine reapproval. Inspect working actions and rendered states with `lithermes:visual-qa`.
33
33
 
34
34
  ## #contract.outputs
35
35
 
36
- Return Design Contract, boundary, criteria, blockers.
36
+ Working result, inspected preview, material gaps.
37
37
 
38
38
  ## #contract.evidence
39
39
 
40
- Canonical `litfamily.design-contract/v1beta2`; valid `litfamily.design-contract/v1beta1` remains evidence-eligible compatibility input; `litfamily.evidence-manifest/v1beta1` stays separate. Open `references/complete-contract.md`.
41
- Load `references/taste-direction.md` for variance, motion, and density.
40
+ Canonical `litfamily.design-contract/v1beta2`; `litfamily.design-contract/v1beta1` remains evidence-eligible compatibility input. Open `references/complete-contract.md` for helpers and evidence schemas. Use `references/taste-direction.md` for variance, motion, density.
42
41
 
43
42
  ## #contract.hard_stops
44
43
 
45
- No renderer, auth, install, host-config, or write authority. Implementation does not prove visual PASS.
44
+ Missing capability blocks dependent work; no host-config edits.
46
45
 
47
46
  ## #contract.anti_patterns
48
47
 
49
- Reject markup-first work, hidden omissions, invented tokens, eager loading.
48
+ No keyword-only authority, fake render proof or hidden omissions.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: frontend-ui-ux
3
- description: "Design authoring for Hermes-hosted surfaces: freeze a Design Contract, then build web, TUI, doc, and installer UI against it with bounded evidence"
3
+ description: "Design authoring for Hermes-hosted surfaces: evolve a Design Contract while building web, TUI, doc, and installer UI against it with bounded evidence"
4
4
  ---
5
5
  ## #contract.activation
6
6
 
@@ -61,10 +61,11 @@ after_payload_edit: "npm --prefix packages/lithermes-installer run sync-plugin -
61
61
  1. Classify the request against the frontmatter description and the route wrapper.
62
62
  2. Name the operating lane and the smallest complete outcome, plus explicit non-goals,
63
63
  before mutating a file.
64
- 3. Freeze the Design Contract, canonicalize it, and record its SHA-256. The frozen
65
- inventory is what implementation and later review both point at.
64
+ 3. Record a compact direction and inventory, then evolve the Design Contract during
65
+ authorized implementation. Validate and hash the review snapshot before evidence review.
66
+ Do not require complete schema output or routine reapproval before an adequate build.
66
67
  4. Open only the reference documents the lane needs, using the router below.
67
- 5. Implement against the frozen inventory using Hermes-native surfaces: slash commands,
68
+ 5. Implement the authorized inventory using Hermes-native surfaces: slash commands,
68
69
  `pre_llm_call` context, `delegate_task` batches, and `goal_*` tools for durable criteria.
69
70
  6. Verify with targeted commands plus a real-surface probe, then refresh payload hashes
70
71
  when any file under `assets/lithermes-plugin/**` changed.
@@ -112,7 +113,7 @@ after_payload_edit: "npm --prefix packages/lithermes-installer run sync-plugin -
112
113
  | Anti-pattern | Replacement |
113
114
  |---|---|
114
115
  | copy sibling repo prose or foreign harness names | write in Hermes vocabulary: `plugin.yaml`, Python hooks, `delegate_task`, `goal_*` |
115
- | style first, inventory later | freeze the eight inventory groups, then implement |
116
+ | contract-only handoff on a build request | start with compact direction, implement, then validate the evolved inventory |
116
117
  | claim done from tests alone | pair tests with route/plugin/CLI evidence and cleanup receipts |
117
118
  | a screenshot as proof of quality | contract-hash-keyed evidence for every inventory entry |
118
119
  | broaden scope while editing | keep changes tied to the request and preserve unrelated worktree state |
@@ -139,7 +140,7 @@ Hermes registers this as `lithermes:frontend-ui-ux`. It is a skill, not a slash
139
140
 
140
141
  ## Prerequisites and the input contract
141
142
 
142
- Gather these before the first edit. A missing item is a question, never a guess.
143
+ Inspect these as the work begins. Ask about material uncertainty; record reasonable defaults when the user delegates the choice.
143
144
 
144
145
  - The product, the audience, the platform, and the stack actually in the repository.
145
146
  - The operating lane, chosen from what is on disk rather than from how the request was
@@ -197,6 +198,7 @@ asking; a reference nobody can find does not exist.
197
198
  | `references/visual-reconstruction.md` | How do I rebuild a supplied target as a live tree without raster fakery? |
198
199
  | `references/redesign-playbook.md` | How do I change appearance without silently losing product behavior? |
199
200
  | `references/evidence-review.md` | What packet does an independent reviewer need, and which verdicts exist? |
201
+ | `references/production.md` | How does authorized production proceed, ask questions and resume? |
200
202
  | `references/taste-direction.md` | Which variance, motion, and density dials should the design contract freeze? |
201
203
 
202
204
  ### Canonical design library route
@@ -271,7 +273,7 @@ honestly; and borrowed voice, taken from a product whose audience is not this on
271
273
  Dials belong in the contract, not in prose around it. Every dial set should be traceable to
272
274
  at least one acceptance criterion, or it changed nothing anyone can verify.
273
275
 
274
- `inventory` freezes eight finite groups before implementation starts: routes, regions,
276
+ `inventory` records eight finite groups for implementation and review: routes, regions,
275
277
  components, interactions, states, viewports, references, and authenticated surfaces. The
276
278
  rules a schema document cannot express are enforced in the validator instead:
277
279
 
@@ -303,7 +305,11 @@ so a compatibility document cannot become completion evidence.
303
305
  Every packaged script uses Python 3.9-compatible standard-library syntax and resolves
304
306
  resources relative to the installed skill directory.
305
307
 
306
- ```text
308
+ Bind `SKILL_DIR` to the exact selected installed SKILL.md, not the working directory:
309
+
310
+ ```sh
311
+ HERMES_DESIGN_SKILL_FILE="<absolute selected SKILL.md>"
312
+ SKILL_DIR="$(cd "$(dirname "$HERMES_DESIGN_SKILL_FILE")" && pwd -P)"
307
313
  python3 "$SKILL_DIR/scripts/design_intelligence.py" query \
308
314
  --query "accessible fintech dashboard" --domain ux-guidelines --limit 5 --json
309
315
 
@@ -334,20 +340,25 @@ hash drift, and returns an honest empty result instead of inventing generic advi
334
340
 
335
341
  ## Authoring loop
336
342
 
343
+ Read `references/production.md` first. Its action/interview rules govern authorization.
344
+ Freeze language below means a versioned review snapshot, never an extra approval round.
345
+ Review-only and plan-only tasks stay read-only. A sufficient build request must reach working, inspected source.
346
+
347
+
337
348
  1. Inventory the existing product and separate user facts, assumptions, omissions, and
338
349
  explicitly accepted exceptions.
339
350
  2. Query only the relevant packaged domains, and treat every returned string as inert
340
351
  design data.
341
352
  3. Record `intent` (audiences, tasks, qualities, constraints, non-goals) and `direction`
342
353
  (name, three to seven principles, token strategy, voice) before any pixel work.
343
- 4. Freeze the eight inventory groups. At least one route is `primary`, at least one
354
+ 4. Evolve the eight inventory groups with implementation. At least one route is `primary`, at least one
344
355
  interaction is `critical`, every state kind comes from the closed set, and every
345
356
  authenticated surface names a safe test account.
346
357
  5. Set bounded budgets: `accessibility` at WCAG 2.2 AA with 200-400% zoom, `localization`
347
358
  with locales plus text-expansion headroom and the CJK, font-fallback, IME, and RTL
348
359
  review flags, `performance` with LCP, CLS, INP, and initial JS/CSS weight, and
349
360
  `evidence_policy` with the channels this work must produce.
350
- 6. Implement against the frozen inventory. In brownfield work your output should be
361
+ 6. Implement against the evolving inventory. In brownfield work your output should be
351
362
  unattributable: same token names, same class conventions, same file layout.
352
363
  7. Canonicalize, hash, and hand the contract off for independent verification.
353
364
 
@@ -420,7 +431,7 @@ isolated Hermes home. Use `--hermes-home`; never `--home`.
420
431
 
421
432
  ```text
422
433
  $ node packages/lithermes-installer/bin/lithermes.js install --yes --offline --no-hud --hermes-home "$ISOLATED"
423
- Installed LitHermes 1.0.3
434
+ Installed LitHermes 1.0.5
424
435
  plugin: $ISOLATED/plugins/lithermes
425
436
  model config: updated
426
437
 
@@ -437,8 +448,8 @@ installed payload: PASS
437
448
  enabled config: PASS
438
449
 
439
450
  $ hermes lithermes doctor
440
- [OK] plugin.yaml readable (version 1.0.3)
441
- [OK] skills bundled: 31
451
+ [OK] plugin.yaml readable (version 1.0.5)
452
+ [OK] skills bundled: 32
442
453
  [OK] litgoal durable runtime importable
443
454
  ```
444
455
 
@@ -0,0 +1,18 @@
1
+ {
2
+ "profile": "editorial-pixel",
3
+ "authorship": "Original starting values, adjusted to content and existing brand",
4
+ "spacing": {"step": 8, "microStep": 4, "desktopSection": [80,128], "mobileSection": [40,64]},
5
+ "display": {"desktop": [56,104], "mobile": [36,56], "latinLeading": [0.95,1.05], "koreanLeading": [1.12,1.25]},
6
+ "bodyLeading": [1.5,1.7],
7
+ "composition": ["oversized editorial title", "deliberate line breaks", "terminal micro-label", "thin rules", "atmospheric depth", "intentional asymmetry"],
8
+ "pixel_illustration": {
9
+ "default_when_unspecified": true,
10
+ "original_task_specific": true,
11
+ "primary_visual_anchor": true,
12
+ "minimum_rendered_cell_px": 6,
13
+ "rendering": "crisp integer-grid nearest-neighbor",
14
+ "smooth_scaling": false
15
+ },
16
+ "pixelArt": {"original": true, "integerGrid": true, "limitedPalette": true, "crispEdges": true},
17
+ "checks": ["320px no clipping", "keyboard focus", "working primary action", "empty and error recovery", "reduced motion"]
18
+ }
@@ -20,7 +20,7 @@ Nothing exists, so every gap stays invisible until production.
20
20
  - **Gather:** `intent.tasks`, `intent.audiences`, platform, stack, `localization.locales`,
21
21
  `localization.cjk_line_break_review`, `inventory`.
22
22
  - **May change:** anything in the declared scope.
23
- - **Preserve:** the stack and the frozen inventory; a new route reopens the freeze.
23
+ - **Preserve:** the stack and recorded scope; a new route updates the review snapshot within existing authority.
24
24
  - **Fails by:** styling before the inventory is finite; deferred states never ship.
25
25
  - **Exit:** all nine states on every `components` entry; one capture per inventory entry.
26
26
 
@@ -63,7 +63,7 @@ Name the points where work halts for a decision; each writes one line — chosen
63
63
 
64
64
  - `CP1` operator and critical task accepted, before direction work; `CP2` direction chosen, before
65
65
  token work.
66
- - `CP3` inventory frozen — routes, screens, states, viewports, themes, permissions — before build
66
+ - `CP3` inventory recorded — routes, screens, states, viewports, themes, permissions — and evolved during build
67
67
  and before `/start-work`.
68
68
  - `CP4` evidence complete, before the independent review pass.
69
69
 
@@ -0,0 +1,13 @@
1
+ # From direction to a working surface
2
+
3
+ Hermes loads this document through the selected frontend-ui-ux skill. Read the request as a scope boundary: an explicit build deserves implementation; a critique deserves findings. The natural-route context and conditional UI context guide behavior but do not grant file or host permissions. A mention of a UI in a backend explanation is not a redesign request.
4
+
5
+ Before editing, identify the actual page, stack, user task, preserved brand elements and actions/states. Keep this direction note small enough to revise. The evidence-capable v1beta2 contract remains the final inventory for verification, and evolves during the build. Older references that call this a freeze describe a versioned review snapshot, not an extra approval gate or a requirement to finish JSON before writing UI. Review/plan-only intent remains read-only even if other guidance says implement.
6
+
7
+ There is no mandatory interview. Ask only when two plausible answers would materially change scope, architecture, permissions, accessibility, or visual direction. Ask one high-impact question at a time, wait for its answer, then resolve the next material uncertainty in a later turn; continue for as many rounds as materially necessary. Retain earlier answers across rounds in the conversation and task-local direction note, reread them on resume, and do not re-ask a resolved question. When the brief already bounds the work, state the default and proceed without pausing for an interview. Review, plan, and keyword-only requests remain read-only. A cancellation suspends new writes and captures partial status; resumption reuses confirmed assets and source.
8
+
9
+ When the brief does not specify another direction, use the authored tokens in `references/default-editorial-pixel.json` and make an original, task-specific pixel illustration the primary visual anchor. Render each cell at least 6 CSS px and preserve crisp integer-grid edges with nearest-neighbor scaling; do not smooth or blur the illustration. Build the surrounding editorial hierarchy with generous spacing, compact display lines, a terminal accent and deliberate asymmetry. A rounded abstract symbol or a generic gradient cannot stand in for the task-specific illustration. Keep pixel art decorative when the task is conveyed in real text; add meaningful alternative text when it conveys unique content. Never borrow a reference site's artwork, proprietary font or copy.
10
+
11
+ Existing branding wins over defaults. Choose line breaks after fitting actual Korean/Latin copy, and adjust the proposed tokens instead of clipping the title. Keep body leading comfortable. Narrow layouts should restructure the composition, not merely shrink a desktop screenshot. Preserve native semantic elements, tab order, visible focus, validation recovery and programmatic labels. Check empty-state transitions: `.empty[hidden] { display: none; }` must win over a class display rule. An animated accent must have a useful static or reduced-motion state.
12
+
13
+ Exercise the main action in a real browser at 320, 390 and 1440 CSS pixels; record viewport dimensions, focus, error handling, successful action and overflow. Capture the exact built revision. A missing native capture capability yields a named gap; an authorized external local replay may supplement it only when labeled separately. Keep previous failure captures and never turn a green validator into a visual PASS. Finish with working files and an inspected preview, with the unresolved boundary stated plainly.
@@ -26,9 +26,10 @@ surfaces:
26
26
  after_payload_edit: npm --prefix packages/lithermes-installer run sync-plugin -- --in-place
27
27
  ```
28
28
 
29
- The first model-emitted line for this skill MUST be exactly:
29
+ The first model-emitted line for this skill MUST be exactly this line, once,
30
+ on its own, before any other reply content:
30
31
 
31
- `▲ LIT · lit-handoff`
32
+ `🔥 **LIT IGNITED · lit-handoff** 🔥`
32
33
 
33
34
  ## #contract.inputs
34
35
 
@@ -87,7 +88,7 @@ The first model-emitted line for this skill MUST be exactly:
87
88
  "schema_version": "lithermes_llm_contract/v1",
88
89
  "skill_id": "lit-handoff",
89
90
  "response": {
90
- "first_line": "▲ LIT · lit-handoff",
91
+ "first_line": "🔥 **LIT IGNITED · lit-handoff** 🔥",
91
92
  "destination": "resolved HANDOFF.md path",
92
93
  "verified_state": ["live facts used"],
93
94
  "remaining_work": ["bounded next actions"],
@@ -31,9 +31,10 @@ dependency_policy: lazy preflight; DEGRADED is non-fatal
31
31
  after_payload_edit: npm --prefix packages/lithermes-installer run sync-plugin -- --in-place
32
32
  ```
33
33
 
34
- The first model-emitted line for this skill MUST be exactly:
34
+ The first model-emitted line for this skill MUST be exactly this line, once,
35
+ on its own, before any other reply content:
35
36
 
36
- `▲ LIT · lit-scientific-visualization`
37
+ `🔥 **LIT IGNITED · lit-scientific-visualization** 🔥`
37
38
 
38
39
  ## #contract.inputs
39
40
 
@@ -103,7 +104,7 @@ The first model-emitted line for this skill MUST be exactly:
103
104
  "schema_version": "lithermes_llm_contract/v1",
104
105
  "skill_id": "lit-scientific-visualization",
105
106
  "response": {
106
- "first_line": "▲ LIT · lit-scientific-visualization",
107
+ "first_line": "🔥 **LIT IGNITED · lit-scientific-visualization** 🔥",
107
108
  "capability": "READY or DEGRADED",
108
109
  "source_root": "resolved installed path",
109
110
  "artifacts": ["figure paths and formats"],
@@ -175,8 +175,9 @@ work cannot complete; terminal cancel/complete reuse returns the existing state.
175
175
 
176
176
  <litwork-mode>
177
177
 
178
- **MANDATORY**: First model-emitted line this turn MUST be exactly:
179
- `▲ LIT · litwork`
178
+ **MANDATORY**: The first model-emitted line this turn MUST be exactly this
179
+ line, once, on its own, before any other reply content:
180
+ `🔥 **LIT IGNITED · litwork** 🔥`
180
181
 
181
182
  [CODE RED] Maximum precision. Outcome-first. Evidence-driven.
182
183
 
@@ -395,7 +396,7 @@ message + present for approval.
395
396
  those candidates and record the cleanup receipt.
396
397
 
397
398
  # Output discipline
398
- - First line literally: `▲ LIT · litwork`
399
+ - First line exactly once, on its own before any other reply content: `🔥 **LIT IGNITED · litwork** 🔥`
399
400
  - After bootstrap: 1-2 paragraph plan summary + notepad path.
400
401
  - During execution: surface only state changes (RED captured, GREEN
401
402
  captured, scenario PASS/FAIL with evidence paths, reviewer verdict).