kotonoha 0.4.0 → 0.4.1
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.
- package/CHANGELOG.md +19 -0
- package/README-ja.md +26 -4
- package/README.md +39 -5
- package/package.json +5 -3
- package/skills/japanese-prose/scripts/invariants.py +24 -6
- package/skills/obsidian-vault/SKILL.md +106 -0
- package/skills/obsidian-vault/references/execution-contract.json +479 -0
- package/skills/obsidian-vault/references/workflow.md +151 -0
- package/skills/obsidian-vault/scripts/test_vault.py +493 -0
- package/skills/obsidian-vault/scripts/test_vault.py.lock +143 -0
- package/skills/obsidian-vault/scripts/vault.py +1316 -0
- package/skills/obsidian-vault/scripts/vault.py.lock +143 -0
- package/skills/tech-writer/SKILL.md +16 -7
- package/skills/tech-writer/assets/templates/obsidian.md +37 -0
- package/skills/tech-writer/references/doctypes/obsidian.md +106 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
revision = 5
|
|
3
|
+
requires-python = "==3.12.*"
|
|
4
|
+
|
|
5
|
+
[manifest]
|
|
6
|
+
requirements = [
|
|
7
|
+
{ name = "jsonschema", specifier = ">=4,<5" },
|
|
8
|
+
{ name = "markdown-it-py", specifier = ">=3,<5" },
|
|
9
|
+
{ name = "pyyaml", specifier = ">=6,<7" },
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
[[package]]
|
|
13
|
+
name = "attrs"
|
|
14
|
+
version = "26.1.0"
|
|
15
|
+
source = { registry = "https://pypi.org/simple" }
|
|
16
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" }
|
|
17
|
+
wheels = [
|
|
18
|
+
{ url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[[package]]
|
|
22
|
+
name = "jsonschema"
|
|
23
|
+
version = "4.26.0"
|
|
24
|
+
source = { registry = "https://pypi.org/simple" }
|
|
25
|
+
dependencies = [
|
|
26
|
+
{ name = "attrs" },
|
|
27
|
+
{ name = "jsonschema-specifications" },
|
|
28
|
+
{ name = "referencing" },
|
|
29
|
+
{ name = "rpds-py" },
|
|
30
|
+
]
|
|
31
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" }
|
|
32
|
+
wheels = [
|
|
33
|
+
{ url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" },
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[[package]]
|
|
37
|
+
name = "jsonschema-specifications"
|
|
38
|
+
version = "2025.9.1"
|
|
39
|
+
source = { registry = "https://pypi.org/simple" }
|
|
40
|
+
dependencies = [
|
|
41
|
+
{ name = "referencing" },
|
|
42
|
+
]
|
|
43
|
+
sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" }
|
|
44
|
+
wheels = [
|
|
45
|
+
{ url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" },
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
[[package]]
|
|
49
|
+
name = "markdown-it-py"
|
|
50
|
+
version = "4.2.0"
|
|
51
|
+
source = { registry = "https://pypi.org/simple" }
|
|
52
|
+
dependencies = [
|
|
53
|
+
{ name = "mdurl" },
|
|
54
|
+
]
|
|
55
|
+
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
|
56
|
+
wheels = [
|
|
57
|
+
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[[package]]
|
|
61
|
+
name = "mdurl"
|
|
62
|
+
version = "0.1.2"
|
|
63
|
+
source = { registry = "https://pypi.org/simple" }
|
|
64
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
|
65
|
+
wheels = [
|
|
66
|
+
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
[[package]]
|
|
70
|
+
name = "pyyaml"
|
|
71
|
+
version = "6.0.3"
|
|
72
|
+
source = { registry = "https://pypi.org/simple" }
|
|
73
|
+
sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
|
|
74
|
+
wheels = [
|
|
75
|
+
{ url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" },
|
|
76
|
+
{ url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" },
|
|
77
|
+
{ url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" },
|
|
78
|
+
{ url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" },
|
|
79
|
+
{ url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" },
|
|
80
|
+
{ url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" },
|
|
81
|
+
{ url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" },
|
|
82
|
+
{ url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" },
|
|
83
|
+
{ url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" },
|
|
84
|
+
{ url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
[[package]]
|
|
88
|
+
name = "referencing"
|
|
89
|
+
version = "0.37.0"
|
|
90
|
+
source = { registry = "https://pypi.org/simple" }
|
|
91
|
+
dependencies = [
|
|
92
|
+
{ name = "attrs" },
|
|
93
|
+
{ name = "rpds-py" },
|
|
94
|
+
{ name = "typing-extensions" },
|
|
95
|
+
]
|
|
96
|
+
sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" }
|
|
97
|
+
wheels = [
|
|
98
|
+
{ url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" },
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
[[package]]
|
|
102
|
+
name = "rpds-py"
|
|
103
|
+
version = "2026.9.1"
|
|
104
|
+
source = { registry = "https://pypi.org/simple" }
|
|
105
|
+
sdist = { url = "https://files.pythonhosted.org/packages/42/68/3bd46b8a5e01d3c2ebdf9c5e9497912e3fe0cde02bac21a7130ca866e403/rpds_py-2026.9.1.tar.gz", hash = "sha256:4793ef7f78268b124b73fa933440f01d258bbae01de9fa53e9080c9ab0425a12", size = 63948, upload-time = "2026-10-04T16:32:36.469Z" }
|
|
106
|
+
wheels = [
|
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/5d/34/a828586ea3329fbb50895b50e9cf98ca3d924a9f41a0b26d443bff1b3794/rpds_py-2026.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:50906f5aea24b5a865cbd0a589698288631d9f3a54c3a937c83aefa95a0d14af", size = 346822, upload-time = "2026-10-04T16:29:16.258Z" },
|
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/90/81/ac6a0d064982251856ce009c9e1dd51a34110b3c055aa7d1aad18b4899a3/rpds_py-2026.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e21c1429e205828ea886a2293a4a2c8e01f4c25d9893ca330e97a6cf73f52e7b", size = 341380, upload-time = "2026-10-04T16:29:17.706Z" },
|
|
109
|
+
{ url = "https://files.pythonhosted.org/packages/42/ff/bf7d54f362748fd6a49277b9d6531c394074110fedf50ad791ec59133fbb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693b2728bbcc48d09a981a356954b0c47c53ff25b545856f28a889ea619f69a", size = 373053, upload-time = "2026-10-04T16:29:19.063Z" },
|
|
110
|
+
{ url = "https://files.pythonhosted.org/packages/60/de/74b0ccdbbd28687b9b5fdb34c1cabed88352182facaced9d6f5486b8b9ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8601470267d938bcb7f3ab1a336100af51a4fd5b6ed030ef52461bb3ef5e7e07", size = 377742, upload-time = "2026-10-04T16:29:20.543Z" },
|
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/c2/6d/b979775a3057b2a5c26d75ecbff60a20a24ef081db6dd76836fca3f20247/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3890a6aa36e6baa53d5258a2a25d3ef8b37ad165a6ab27a892d7c3e3a432cd69", size = 487289, upload-time = "2026-10-04T16:29:21.958Z" },
|
|
112
|
+
{ url = "https://files.pythonhosted.org/packages/1d/5d/7c34734ce3ece943d9d6ee0122a74a21bbc75b47acb5b7053c83f6efb1ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b5b393eda5ea42cca1c1a6665f2a4882b4fd5d1777e41ce0545a107fb008c9d", size = 390710, upload-time = "2026-10-04T16:29:23.378Z" },
|
|
113
|
+
{ url = "https://files.pythonhosted.org/packages/1d/6d/b26eb1e75395925b3a142ed351cbed2ec8212f5c9d937aee3df32c701baa/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addeda51556dac7c1a2f14cda62db8b621cd12afba3091d03a96c72932387eab", size = 371261, upload-time = "2026-10-04T16:29:25.1Z" },
|
|
114
|
+
{ url = "https://files.pythonhosted.org/packages/7c/98/b2fdfe10301a9e27af21e634337fbba7baac0bc17fe44619a17c26bba2cb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d9edf30457d74eebfd76b045535e36f1cd89062566a128a0db2145ca042d787e", size = 376075, upload-time = "2026-10-04T16:29:26.748Z" },
|
|
115
|
+
{ url = "https://files.pythonhosted.org/packages/c5/b1/c4b8d954e49c3c69cf8063c0c9e0919c99f3d2cecc46311606a1cbe835dc/rpds_py-2026.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815d26356930846a40c7bc1366e7b1b0320ab8a063e66c11298a208bed0fd237", size = 399358, upload-time = "2026-10-04T16:29:28.282Z" },
|
|
116
|
+
{ url = "https://files.pythonhosted.org/packages/b3/59/9559a7293c97dff0cbb293efffbd36644103883ecc27741af8ef90c84ca8/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b5a6f40f0a1486b4b36c888123afc67acdbd9f33235927acf5ff295429a0ba3", size = 550267, upload-time = "2026-10-04T16:29:29.851Z" },
|
|
117
|
+
{ url = "https://files.pythonhosted.org/packages/6c/9d/6dc60e49511de4c8b00e74f9c1d43aed4d27f712cdb1ade92f2c199cbf64/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5b8b0753718d258fd454283fbd57e14545d3b40583fa672e27cb4f987626bcc", size = 614018, upload-time = "2026-10-04T16:29:31.54Z" },
|
|
118
|
+
{ url = "https://files.pythonhosted.org/packages/fb/bc/92a4ecf27301b886232a413360f6b348a81d55ffef654f2ebda5970ebc3d/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:46d80bc76b51a6c24f9944368c28d38b8bcbcea1da4f2f8d3ebc31a67e8c6ec6", size = 578509, upload-time = "2026-10-04T16:29:33.01Z" },
|
|
119
|
+
{ url = "https://files.pythonhosted.org/packages/08/53/efb97f2e6589b7ab8394385a73870e0b2ab2a195281c117b21fd6d7d4855/rpds_py-2026.9.1-cp312-cp312-win32.whl", hash = "sha256:befc2d6a953e563f8a7bfd87a42c22ebf8a3e980dcb7b6a4d17b70b0e914e8a3", size = 205401, upload-time = "2026-10-04T16:29:34.451Z" },
|
|
120
|
+
{ url = "https://files.pythonhosted.org/packages/1c/84/1700cc748d0eaa747486e4e82882d2575224e6e9a3148df583058850c629/rpds_py-2026.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ce8943f79c2210f7abcc28e86367b03b28d95027fd01c46d2472373ae70c86f", size = 222923, upload-time = "2026-10-04T16:29:35.709Z" },
|
|
121
|
+
{ url = "https://files.pythonhosted.org/packages/c3/89/0302215373c2f8b4408b0fdfee955368cc378a98ff59508d47a7e0dc2dbf/rpds_py-2026.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:501909f2e4a1e2dee528ef766fe3c469060ebc17e54a8383d404ba07a81a6f02", size = 218415, upload-time = "2026-10-04T16:29:37.263Z" },
|
|
122
|
+
{ url = "https://files.pythonhosted.org/packages/a3/90/a9ba81408369d34c1aca73319c15adc91ed45c1d21e9e8ee4832ffb7fe0b/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdc537c8633d7fd92a82e2e0d2ab74320a3f63d5e59fb9cf08711e08fe151c4", size = 381109, upload-time = "2026-10-04T16:32:08.994Z" },
|
|
123
|
+
{ url = "https://files.pythonhosted.org/packages/b3/44/5192a0bed94cec86bd2a5e1cc5a1bb8f7eec3aec907eacd2deb13e87e326/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10e208f2425d973938afcd56e28a7c4be32e27b6a60b5d381f49fb9d8acf9759", size = 388222, upload-time = "2026-10-04T16:32:11.321Z" },
|
|
124
|
+
{ url = "https://files.pythonhosted.org/packages/92/cd/5356549711448f18b52f7a11ffbe90f1228774996fbf3c6cd1b18d22abaf/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c0dbbcc19735fe5f8b0a54c07659d154a9e69f47e15d0a6ab7299215daf62cb", size = 500384, upload-time = "2026-10-04T16:32:13.478Z" },
|
|
125
|
+
{ url = "https://files.pythonhosted.org/packages/7a/88/ddda9d28adfe33119c75b2e733d4ba7e326f41d7e1b1093951771768ca48/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684fd492fff4fead00587544e059be2bbcb6f93454f21fa2a91b66fc7508be82", size = 401661, upload-time = "2026-10-04T16:32:15.653Z" },
|
|
126
|
+
{ url = "https://files.pythonhosted.org/packages/32/c3/bb59ba16a6b4a57995d15b8c04c00f28df3b938c4dcdde48fbe0f73edb0c/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1028417bb44037eb3069c1009bd7b7277212876cda22fbe565b0bca9fab6d2c", size = 380748, upload-time = "2026-10-04T16:32:17.727Z" },
|
|
127
|
+
{ url = "https://files.pythonhosted.org/packages/f5/b8/0580faa1c5a32ddc160130dd7ae54d2d007272a89a40a6b5db3e50f9f585/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:492e5e428cbe126221611f47e068f01660352feec4ad18bc0f5ea9b2ae88fb14", size = 385731, upload-time = "2026-10-04T16:32:19.855Z" },
|
|
128
|
+
{ url = "https://files.pythonhosted.org/packages/bf/70/f73564642bbe3322c7eeef2c2f258cf040b71c41a430b532e59d04a1b838/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88b5268892fde430d5531f95bc560b6efbbd67c929662c586afd729a96e7461c", size = 412131, upload-time = "2026-10-04T16:32:22.285Z" },
|
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/8c/5d/17fff2e1f8f68721a2afb5cb48f7e442c751bb6b4883157c5abaf618cd08/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:01445c8d194aa032a08e944f16567672da1c62dbdbefd8b6d0693032e290cf68", size = 558193, upload-time = "2026-10-04T16:32:24.4Z" },
|
|
130
|
+
{ url = "https://files.pythonhosted.org/packages/2a/d0/869ab6fb08531f97aae4a780b4d61b4190d8aef48fe054ee28bcf7114466/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_i686.whl", hash = "sha256:eef6a03b0b6d08d0835ccfa8ec8d1bc70525e3801387567137b50c557695e6da", size = 622448, upload-time = "2026-10-04T16:32:26.844Z" },
|
|
131
|
+
{ url = "https://files.pythonhosted.org/packages/ba/a5/9672e532fe02cd3b92c78cfd8743abca939d96853006c63835009a1ecb6f/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6b9bf3135b4ad5981df9a73d71a35272d650a2985ae9c2746357b24d59de2448", size = 591126, upload-time = "2026-10-04T16:32:29.274Z" },
|
|
132
|
+
{ url = "https://files.pythonhosted.org/packages/80/ef/3a9f8e4279c7920af561deed4cb7ebebed2794a8f608cf404d5eef14a105/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_10_12_x86_64.whl", hash = "sha256:56c6952a9b15047466d0c2347c446a761d4527f89976156341e68f0ce5cc08b0", size = 357108, upload-time = "2026-10-04T16:32:31.641Z" },
|
|
133
|
+
{ url = "https://files.pythonhosted.org/packages/b7/55/4b2fa381a583760aea5c92841e4e928a358e1c6511b129219e9c2826a226/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_11_0_arm64.whl", hash = "sha256:b242c27c8f836305a4a72df9cdd564386ac57b807bd252a063223331c9316b37", size = 346877, upload-time = "2026-10-04T16:32:34.061Z" },
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
[[package]]
|
|
137
|
+
name = "typing-extensions"
|
|
138
|
+
version = "4.16.0"
|
|
139
|
+
source = { registry = "https://pypi.org/simple" }
|
|
140
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
|
141
|
+
wheels = [
|
|
142
|
+
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
|
143
|
+
]
|
|
@@ -6,15 +6,16 @@ description: >-
|
|
|
6
6
|
notes/CHANGELOG, user manuals/how-to guides, code comments/docstrings,
|
|
7
7
|
requirements definitions, system designs, test plans, operations runbooks,
|
|
8
8
|
migration plans, security designs/threat models, technical proposals,
|
|
9
|
-
Blueprints, White Papers, RFI/RFP procurement documents,
|
|
10
|
-
articles. Use for requests
|
|
9
|
+
Blueprints, White Papers, RFI/RFP procurement documents, Obsidian notes
|
|
10
|
+
and templates, and Qiita/Zenn articles. Use for requests
|
|
11
11
|
like "write a README", "draft a design doc", "define system requirements",
|
|
12
12
|
"write a system design", "create a test plan", "write an operations
|
|
13
13
|
runbook", "plan a migration", "create a threat model", "write a technical
|
|
14
14
|
proposal", "create a Blueprint", "write a White Paper", "draft an RFI",
|
|
15
15
|
"create an RFP", "write this PR description", "clean up my commit
|
|
16
16
|
message", "make this how-to guide clearer", "write API docs", "summarize
|
|
17
|
-
the release notes", "
|
|
17
|
+
the release notes", "create an Obsidian note", "write a Zenn article",
|
|
18
|
+
"write this up for Qiita", as
|
|
18
19
|
well as
|
|
19
20
|
Japanese-language equivalents (「READMEを書いて」「設計ドキュメントを作って」
|
|
20
21
|
「要件定義書を作って」「システム設計書を書いて」「テスト計画書を作って」
|
|
@@ -23,6 +24,7 @@ description: >-
|
|
|
23
24
|
「RFIを作って」「RFPを作って」「PRの説明文を書いて」
|
|
24
25
|
「コミットメッセージを整えて」「手順書を分かりやすくして」
|
|
25
26
|
「APIドキュメントを整備して」「リリースノートをまとめて」
|
|
27
|
+
「Obsidian用のノートを作って」「Obsidianのテンプレートを作って」
|
|
26
28
|
「Zennの記事を書いて」「Qiitaに投稿する記事を書いて」). Especially useful when
|
|
27
29
|
the request is a bare goal without enough context to start (e.g. "I want
|
|
28
30
|
to write a README" / "○○を書きたい"), since this skill drives a one
|
|
@@ -44,7 +46,8 @@ descriptions/commit messages/issue reports, release notes/CHANGELOG, user
|
|
|
44
46
|
manuals/how-to guides, code comments/docstrings, requirements definitions,
|
|
45
47
|
system designs, test plans, operations runbooks, migration plans, security
|
|
46
48
|
designs/threat models, technical proposals, Blueprints, White Papers,
|
|
47
|
-
RFI/RFP procurement documents, and Qiita/Zenn
|
|
49
|
+
RFI/RFP procurement documents, Obsidian notes and templates, and Qiita/Zenn
|
|
50
|
+
articles.
|
|
48
51
|
|
|
49
52
|
Default format: Markdown for every doctype in this skill, except a git
|
|
50
53
|
commit message body (plain text by convention — light "-" bullets are
|
|
@@ -52,7 +55,12 @@ fine, but don't add Markdown headings or fenced code there) and code
|
|
|
52
55
|
comments/docstrings (the target programming language's own comment/
|
|
53
56
|
docstring syntax). Qiita and Zenn use Markdown with a platform-specific
|
|
54
57
|
YAML frontmatter and a few platform extensions on top — see their doctype
|
|
55
|
-
reference files.
|
|
58
|
+
reference files. Obsidian uses YAML properties, wikilinks, and callouts;
|
|
59
|
+
see `references/doctypes/obsidian.md` for core Templates compatibility.
|
|
60
|
+
For an existing Vault's conventions, related-note suggestions, link diagnosis,
|
|
61
|
+
or approval-gated saves, use the sibling `obsidian-vault` skill when available.
|
|
62
|
+
Tech-writer still owns document structure and the reusable template; it must
|
|
63
|
+
not bypass that skill's scope checks or save directly into the Vault.
|
|
56
64
|
|
|
57
65
|
## Division of labor
|
|
58
66
|
|
|
@@ -194,6 +202,7 @@ hand the user a checklist to fill in. Instead:
|
|
|
194
202
|
| White Paper / ホワイトペーパー | white-paper | `references/doctypes/white-paper.md` |
|
|
195
203
|
| Request for information / RFI | rfi | `references/doctypes/rfi.md` |
|
|
196
204
|
| Request for proposal / RFP | rfp | `references/doctypes/rfp.md` |
|
|
205
|
+
| Obsidian note / vault template | obsidian | `references/doctypes/obsidian.md` |
|
|
197
206
|
| Zenn article | zenn | `references/doctypes/zenn.md` |
|
|
198
207
|
| Qiita article | qiita | `references/doctypes/qiita.md` |
|
|
199
208
|
|
|
@@ -237,7 +246,7 @@ document and needs the outline step below.
|
|
|
237
246
|
For living, multi-section documents (README, design doc, API reference,
|
|
238
247
|
release notes, user manual, requirements definition, system design, test
|
|
239
248
|
plan, operations runbook, migration plan, security design, technical
|
|
240
|
-
proposal, Blueprint, White Paper, RFI/RFP, Zenn/Qiita article), write under
|
|
249
|
+
proposal, Blueprint, White Paper, RFI/RFP, Obsidian note, Zenn/Qiita article), write under
|
|
241
250
|
the 8 rules
|
|
242
251
|
in `references/style-constitution.md`. Summary: state "what this is" and
|
|
243
252
|
"the outcome for the reader" in the first three lines; make headings
|
|
@@ -408,7 +417,7 @@ See each reference file for detail. The items below are for living,
|
|
|
408
417
|
multi-section documents (README, design doc, API reference, release notes,
|
|
409
418
|
user manual, requirements definition, system design, test plan, operations
|
|
410
419
|
runbook, migration plan, security design, technical proposal, Blueprint,
|
|
411
|
-
White Paper, RFI/RFP, Zenn/Qiita article). Atomic
|
|
420
|
+
White Paper, RFI/RFP, Obsidian note, Zenn/Qiita article). Atomic
|
|
412
421
|
artifacts (commit message, PR
|
|
413
422
|
description, issue report, code comment/docstring, a single appended
|
|
414
423
|
release-notes entry) are already covered by their own doctype checklist
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
aliases: []
|
|
3
|
+
tags: []
|
|
4
|
+
created: "{{date:YYYY-MM-DD}}"
|
|
5
|
+
type: note
|
|
6
|
+
status: draft
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# {{title}}
|
|
10
|
+
|
|
11
|
+
<誰が、どの場面で参照し、何を判断・実行するためのノートかを1文で記載する。>
|
|
12
|
+
|
|
13
|
+
## 結論と要点
|
|
14
|
+
|
|
15
|
+
> [!summary] このノートの要点
|
|
16
|
+
> <最も伝えたい結論と、その結論が成り立つ条件を記載する。>
|
|
17
|
+
|
|
18
|
+
## 根拠と具体例
|
|
19
|
+
|
|
20
|
+
<確認した事実と自分の解釈を分け、出典を添えて記載する。手順を含む場合は前提条件を先に示す。>
|
|
21
|
+
|
|
22
|
+
## 適用条件と未確認事項
|
|
23
|
+
|
|
24
|
+
<対象の環境・バージョン、適用できない条件、未検証の仮説を記載する。>
|
|
25
|
+
|
|
26
|
+
## 関連ノート
|
|
27
|
+
|
|
28
|
+
- [[関連ノート名|このノートとの関係が分かる表示名]]
|
|
29
|
+
- [[関連ノート名#見出し名]]
|
|
30
|
+
|
|
31
|
+
## 次に確認すること
|
|
32
|
+
|
|
33
|
+
- [ ] <確認する内容と、完了を判断できる条件を記載する。>
|
|
34
|
+
|
|
35
|
+
## 出典
|
|
36
|
+
|
|
37
|
+
- [<資料名>](<URL>) — <著者・発行元、公開日または参照日、根拠にした箇所>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Obsidian note type
|
|
2
|
+
|
|
3
|
+
Create a reusable Markdown knowledge note for an Obsidian vault. Start from
|
|
4
|
+
`assets/templates/obsidian.md`; community plugins are not required.
|
|
5
|
+
|
|
6
|
+
## Target reader
|
|
7
|
+
|
|
8
|
+
A vault owner or collaborator who needs to retrieve a technical conclusion,
|
|
9
|
+
understand its evidence and limits, and navigate to related notes later.
|
|
10
|
+
|
|
11
|
+
## Settle before writing
|
|
12
|
+
|
|
13
|
+
- The note's reader and one-sentence retrieval or action goal.
|
|
14
|
+
- The destination vault, folder, and naming conventions, if known.
|
|
15
|
+
- Whether the deliverable is a reusable Templates file or a completed note.
|
|
16
|
+
- Existing property names/types, tags, aliases, and related note paths.
|
|
17
|
+
|
|
18
|
+
Use the normal one-question-at-a-time intake for missing information. If the
|
|
19
|
+
vault is unavailable, state that link resolution has not been checked; do
|
|
20
|
+
not invent existing notes or claim that example links resolve.
|
|
21
|
+
|
|
22
|
+
## Format and properties
|
|
23
|
+
|
|
24
|
+
Use UTF-8 Markdown with YAML properties at the very beginning, one H1 title,
|
|
25
|
+
and H2 body sections. Keep properties flat and property names unique.
|
|
26
|
+
`aliases` and `tags` are lists; the template leaves them empty rather than
|
|
27
|
+
inventing a classification. Add tags without a leading `#`. The custom
|
|
28
|
+
`type` and `status` fields are editable text, not built-in workflow automation.
|
|
29
|
+
Match the destination vault's property types instead of changing them.
|
|
30
|
+
|
|
31
|
+
The template uses only core Templates variables:
|
|
32
|
+
|
|
33
|
+
- `{{title}}` inserts the active note's title into the H1.
|
|
34
|
+
- `{{date:YYYY-MM-DD}}` records the insertion date in `created`.
|
|
35
|
+
|
|
36
|
+
Keep date variables quoted in YAML. Edit the reusable template in Source
|
|
37
|
+
mode so the Properties editor does not replace unresolved variables.
|
|
38
|
+
`created` is not automatically refreshed or guaranteed to be a file's actual
|
|
39
|
+
creation date. Do not add an `updated` field and imply that core Templates
|
|
40
|
+
tracks later modifications.
|
|
41
|
+
|
|
42
|
+
For a completed note generated directly by an agent, replace the variables
|
|
43
|
+
with the intended note title and known date; do not leave template tokens
|
|
44
|
+
behind. Use the intended vault filename as the title, not the template
|
|
45
|
+
filename. Keep tokens intact when delivering a reusable template.
|
|
46
|
+
|
|
47
|
+
## Install and use the reusable template
|
|
48
|
+
|
|
49
|
+
1. Copy `assets/templates/obsidian.md` into a template folder inside the
|
|
50
|
+
destination vault, for example `Templates/obsidian.md`. Do not overwrite
|
|
51
|
+
an existing file without approval.
|
|
52
|
+
2. Enable the core Templates plugin in Obsidian's settings.
|
|
53
|
+
3. Set **Settings → Templates → Template folder location** to that folder.
|
|
54
|
+
4. Create and name an empty destination note, then run
|
|
55
|
+
**Templates: Insert template** with the cursor in the note body.
|
|
56
|
+
5. Fill the prose placeholders, choose tags and aliases, and replace or
|
|
57
|
+
remove the example links and task before treating the note as complete.
|
|
58
|
+
|
|
59
|
+
Kotonoha installs the skill assets, not an Obsidian vault configuration.
|
|
60
|
+
It does not enable plugins or set the template folder automatically.
|
|
61
|
+
This template does not require Templater, Dataview, or custom scripts.
|
|
62
|
+
|
|
63
|
+
## Recommended skeleton and links
|
|
64
|
+
|
|
65
|
+
The H1 and lead paragraph establish what the note is for. Follow with the
|
|
66
|
+
conclusion, evidence and examples, applicability and uncertainty, related
|
|
67
|
+
notes, next checks, and sources. Remove optional empty sections when creating
|
|
68
|
+
a final note unless the caller has frozen its structure.
|
|
69
|
+
|
|
70
|
+
Use `[[Note name|Display text]]` for related notes and
|
|
71
|
+
`[[Note name#Heading]]` for specific sections. Include a vault-relative path
|
|
72
|
+
when note names are ambiguous. Quote the entire wikilink if placing one in
|
|
73
|
+
YAML, for example `related: "[[Projects/Architecture]]"`.
|
|
74
|
+
|
|
75
|
+
The `> [!summary]` block is an Obsidian callout, and `- [ ]` is an unchecked
|
|
76
|
+
task. Backlinks are computed by Obsidian; do not fill a fake backlinks
|
|
77
|
+
section. Embeds such as `![[Note name]]` are optional and require an actual
|
|
78
|
+
target; do not add an unresolved embed by default.
|
|
79
|
+
|
|
80
|
+
Wikilinks and callouts may not render equivalently outside Obsidian. Use
|
|
81
|
+
ordinary Markdown links and blockquotes if portability is the priority.
|
|
82
|
+
Kotonoha's Markdown diagnostics do not validate vault link targets or
|
|
83
|
+
Obsidian rendering. Preserve wikilink destinations, heading fragments,
|
|
84
|
+
display aliases, embeds, and callout markers during prose optimization;
|
|
85
|
+
pass complete protected link strings through `--protect` where the generic
|
|
86
|
+
invariant checker does not recognize Obsidian syntax.
|
|
87
|
+
|
|
88
|
+
## Checklist
|
|
89
|
+
|
|
90
|
+
- [ ] Is the result explicitly a reusable template or a completed note?
|
|
91
|
+
- [ ] Are properties flat, unique, and compatible with the vault's types?
|
|
92
|
+
- [ ] Are YAML date variables and YAML wikilinks quoted?
|
|
93
|
+
- [ ] Are core variables retained only in reusable templates, with no
|
|
94
|
+
unrequested community-plugin dependency?
|
|
95
|
+
- [ ] Do the title and lead identify the reader's retrieval or action goal?
|
|
96
|
+
- [ ] Are conclusions separated from evidence, interpretation, and unknowns?
|
|
97
|
+
- [ ] Are example links/tasks replaced or removed in a completed note, and
|
|
98
|
+
are unchecked link targets reported honestly?
|
|
99
|
+
- [ ] Are template installation and date-update limitations clear?
|
|
100
|
+
|
|
101
|
+
## Official references
|
|
102
|
+
|
|
103
|
+
- [Templates](https://help.obsidian.md/plugins/templates)
|
|
104
|
+
- [Properties](https://help.obsidian.md/properties)
|
|
105
|
+
- [Internal links](https://help.obsidian.md/links)
|
|
106
|
+
- [Callouts](https://help.obsidian.md/callouts)
|