mulmoterminal 8.0.0 → 8.2.0
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/blueprints/adopt/manifest.json +15 -1
- package/blueprints/adopt/templates/chaff.yml +1 -1
- package/blueprints/ask/manifest.json +1 -0
- package/blueprints/ask/presets/kyuka/kitei.md +17 -0
- package/blueprints/ask/presets/kyuka/tebiki.md +13 -0
- package/blueprints/ask/presets.json +11 -0
- package/blueprints/compare/manifest.json +1 -0
- package/blueprints/compare/presets/ryohi-kaitei/kyu.txt +22 -0
- package/blueprints/compare/presets/ryohi-kaitei/shin.txt +22 -0
- package/blueprints/compare/presets.json +16 -1
- package/blueprints/docs/checks/chaff.sh +1 -1
- package/blueprints/docs/skills/workspace/SKILL.md +1 -1
- package/blueprints/from-collection/checks/actions.sh +10 -1
- package/blueprints/from-collection/skills/actions/SKILL.md +2 -1
- package/blueprints/from-collection/skills/actions-cloudflare/SKILL.md +2 -1
- package/blueprints/from-collection/skills/actions-firebase/SKILL.md +2 -1
- package/blueprints/from-collection/skills/actions-supabase/SKILL.md +2 -1
- package/blueprints/glossary/manifest.json +14 -1
- package/blueprints/glossary/skills/apply/SKILL.md +12 -0
- package/blueprints/polish/checks/kind.d.mts +4 -0
- package/blueprints/polish/checks/kind.mjs +17 -1
- package/blueprints/polish/checks/targets.mjs +6 -5
- package/blueprints/polish/hearing.json +21 -2
- package/blueprints/polish/manifest.json +1 -0
- package/blueprints/polish/presets/english-blog/post.md +19 -0
- package/blueprints/polish/presets/shayo/kitei.md +26 -0
- package/blueprints/polish/presets.json +26 -0
- package/blueprints/polish/skills/polish/SKILL.md +2 -1
- package/blueprints/polish/skills/report/SKILL.md +9 -1
- package/blueprints/polish/skills/survey/SKILL.md +6 -2
- package/blueprints/polish/viewpoints.json +18 -1
- package/blueprints/review/manifest.json +1 -0
- package/blueprints/review/presets/riyo-kiyaku/kiyaku.md +37 -0
- package/blueprints/review/presets.json +12 -0
- package/blueprints/style/hearing.json +4 -2
- package/blueprints/style/manifest.json +13 -2
- package/blueprints/style/skills/report/SKILL.md +1 -1
- package/blueprints/summarize/manifest.json +1 -0
- package/blueprints/summarize/presets/chat-kento/kento.md +27 -0
- package/blueprints/summarize/presets.json +18 -1
- package/blueprints/verify/checks/extract.mjs +4 -4
- package/blueprints/verify/checks/facts.d.mts +3 -1
- package/blueprints/verify/checks/facts.mjs +9 -3
- package/blueprints/verify/checks/factsView.mjs +5 -1
- package/blueprints/verify/checks/rules.d.mts +7 -1
- package/blueprints/verify/checks/rules.mjs +45 -2
- package/blueprints/verify/manifest.json +1 -0
- package/blueprints/verify/presets/mitsumori/mitsumori.md +23 -0
- package/blueprints/verify/presets.json +12 -0
- package/blueprints/verify/skills/extract/SKILL.md +8 -0
- package/blueprints/verify/skills/report/SKILL.md +6 -2
- package/blueprints/write/manifest.json +7 -2
- package/common/appActions.ts +1 -0
- package/common/blueprint/executorPolicy.ts +19 -3
- package/common/blueprint/originals.ts +39 -0
- package/common/blueprint/run.ts +2 -0
- package/common/blueprint/stepPrompt.ts +68 -4
- package/common/keymap.ts +1 -0
- package/dist/assets/{abnfDiagram-O67JEVCF-CpHo_PZJ.js → abnfDiagram-O67JEVCF-DpKqOyjt.js} +1 -1
- package/dist/assets/architecture-7GRP2DOG-tqxhXA_W.js +1 -0
- package/dist/assets/{architectureDiagram-NJMV4G6O-D8O_YCc5.js → architectureDiagram-NJMV4G6O-BEf7hi8B.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-BmAXZW-Y.js → blockDiagram-BEXU5L5S-Bs_qxpCN.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-BKGWYynD.js → c4Diagram-YGBWAQC7-Cxvi1yMd.js} +1 -1
- package/dist/assets/channel-B7Hqexxy.js +1 -0
- package/dist/assets/{chunk-3FUC2YCW-B_IdrlcA.js → chunk-3FUC2YCW-CLhlVcbE.js} +1 -1
- package/dist/assets/{chunk-5DYCD2WN-B7_1xZmW.js → chunk-5DYCD2WN-tnBh5bTj.js} +1 -1
- package/dist/assets/{chunk-742MDFTN-D4qUH6PT.js → chunk-742MDFTN-BJTRk8eI.js} +1 -1
- package/dist/assets/{chunk-7INBJB4K-D8CJTq2h.js → chunk-7INBJB4K-Bg39tnTn.js} +1 -1
- package/dist/assets/{chunk-7M6MHVWA-BzOZvK1S.js → chunk-7M6MHVWA-Dy7p4wXp.js} +1 -1
- package/dist/assets/{chunk-7PRAP22T-Dde-X1de.js → chunk-7PRAP22T-hw-m893g.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-BisCzBN2.js → chunk-GTNCS2PH-COevsxgA.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-iu0yn8To.js → chunk-GWA4HPMP-GF0g7kkY.js} +1 -1
- package/dist/assets/{chunk-MBY4JIJT-DFF6e2Ko.js → chunk-MBY4JIJT-CUUZjNcR.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-CMxBns45.js → chunk-NETBCI7D-ClVuU0EM.js} +1 -1
- package/dist/assets/{chunk-O7XYJQB3-DmVEmVoY.js → chunk-O7XYJQB3-Gutmfs0i.js} +1 -1
- package/dist/assets/{chunk-UA2S7LBM-Yl2q4Lki.js → chunk-UA2S7LBM-jOPSo4_W.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-C8nY9xst.js → chunk-WEXAMYUT-ZT-XWGQ1.js} +1 -1
- package/dist/assets/{chunk-Z7XXMR3K-mnRYFb5B.js → chunk-Z7XXMR3K-9viSdvia.js} +1 -1
- package/dist/assets/{chunk-ZIGJFQKS-BtOX-Fj1.js → chunk-ZIGJFQKS-DK3D9aN6.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-DBRiOW2Z.js → classDiagram-v2-NBCMYWYE-Cdjo_Ous.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-CiJWfOK7.js → cynefin-OW5HDTMX-D-a3gV2N.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-C0ZcEImU.js → cynefinDiagram-VND7K2PF-DO5Mg4b5.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-DKM8AbPc.js → dagre-6A5THRUB-DDZdk1F_.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-DK06OHgR.js → diagram-22UHCM2B-_jTbmIND.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-U9bAFIJ2.js → diagram-3UASUU5V-OPNBnJk-.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-DIvQNl6W.js → diagram-ATOU4E4O-DTibMEtZ.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-D1eAUsVC.js → diagram-CDSNMT55-DqnZQTDC.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-CC57iz8g.js → diagram-MLGK6HIB-C8RWNVVB.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-COqJROu_.js → diagram-MPIPVDR6-Bm7W9_aY.js} +1 -1
- package/dist/assets/{dist-vES5R3jF.js → dist-Bt6Uoh1p.js} +1 -1
- package/dist/assets/{dist-Bs7ZI9qa.js → dist-CCEafgGi.js} +1 -1
- package/dist/assets/{dist-BVV-jeSu.js → dist-CVg47SZ2.js} +1 -1
- package/dist/assets/{dist-7EayQbvC.js → dist-D4AUpaJv.js} +1 -1
- package/dist/assets/{dist-DS1ADNp0.js → dist-X9VE8etg.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-COhiAOcD.js → ebnfDiagram-ZINNZB2B-CcP60K5m.js} +1 -1
- package/dist/assets/{elk-276RUBZZ--k9tt4Y8.js → elk-276RUBZZ-DQdydmIq.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-DogDOlr1.js → erDiagram-OPXOYQCR-D3C2QS7R.js} +1 -1
- package/dist/assets/eventmodeling-NTZA5JFV-DFoSe9CC.js +1 -0
- package/dist/assets/flowDiagram-KWPJA3E3-B5HJ88J1.js +1 -0
- package/dist/assets/{ganttDiagram-FUAMR5RP-DWPN-w10.js → ganttDiagram-FUAMR5RP-IZaW5VgA.js} +1 -1
- package/dist/assets/{gitGraph-4MIJSDKK-IowsEDei.js → gitGraph-4MIJSDKK-D3sAiw0g.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-D8IVl7sG.js → gitGraphDiagram-X574FWY7-BKQ33CxX.js} +1 -1
- package/dist/assets/{index-dQa3y9DP.js → index-DjO9W8uQ.js} +340 -340
- package/dist/assets/index-ct_vF1PW.css +1 -0
- package/dist/assets/{info-A6RAGUB7-DBswxtIl.js → info-A6RAGUB7-CGT6OwbO.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-Csc0WhdQ.js → infoDiagram-VRGFBTTK-f8idGmV5.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-bAOsB3x8.js → ishikawaDiagram-OU5B5YK6-C3q9XWHW.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-b6lwXh_m.js → journeyDiagram-ZHPQQLJL-DZeP_NQJ.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-CZ_njTrU.js → kanban-definition-PNTS6WVX-Be2RPtgv.js} +1 -1
- package/dist/assets/{line-8Qcg4j_D.js → line--V9C2ujH.js} +1 -1
- package/dist/assets/{mermaid-parser.core-w0jOWYGi.js → mermaid-parser.core-CA27Zh_E.js} +3 -3
- package/dist/assets/{mermaid.core-Dfy6e17u.js → mermaid.core-oKSvAMmn.js} +4 -4
- package/dist/assets/{mindmap-definition-NLK3R4M7-8OEbk66B.js → mindmap-definition-NLK3R4M7-Ds2mxwxS.js} +1 -1
- package/dist/assets/{packet-AYTQ26CC-DvA-gSZ5.js → packet-AYTQ26CC-BQS2MXBT.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-C2yGysK8.js → pegDiagram-GJSIUBJH-05ZfyxXE.js} +1 -1
- package/dist/assets/{pie-WAS4IAKB-ZI_ZCGoe.js → pie-WAS4IAKB-BZzyas2W.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-13lEAnZe.js → pieDiagram-5QR66LMP-Dbp7Nolp.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-DFsiAdxS.js → quadrantDiagram-O4NWA36T-Cbqaez9d.js} +1 -1
- package/dist/assets/{radar-RG4KPBEZ-CN_2Awtd.js → radar-RG4KPBEZ-EXcR8Xp9.js} +1 -1
- package/dist/assets/{railroad-74A4TZTK-UQIrDMbW.js → railroad-74A4TZTK-CDJiZrju.js} +1 -1
- package/dist/assets/railroad-abnf-HS5TGJTU-CjbPm8FI.js +1 -0
- package/dist/assets/railroad-ebnf-LZEXJU2U-BLPi2vqK.js +1 -0
- package/dist/assets/railroad-peg-WCYAUIDC-Bs_vw0dm.js +1 -0
- package/dist/assets/{railroadDiagram-XR7U4H2S-CZUBwfVD.js → railroadDiagram-XR7U4H2S-CsAiR60R.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-Bn-ojhJX.js → requirementDiagram-PLB6GJNP-CdQreqtO.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-SBz95QpG.js → sankeyDiagram-IPEJSGJF-BPGpWJ6l.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-CUN_wu-k.js → sequenceDiagram-PO4LG4MO-CYfCqmWa.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-C8vRpILT.js → stateDiagram-v2-GCMORJYK-BYmaqGf3.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-D3Zm60vq.js → swimlanes-2SLR337P-D5eV_i9B.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-Bm--zlh6.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-Dwie9VJr.js → timeline-definition-EJHVYXUP-FCIIPMQE.js} +1 -1
- package/dist/assets/{treeView-Q6P3EWNA-CEApPye8.js → treeView-Q6P3EWNA-DjyFz21S.js} +1 -1
- package/dist/assets/{treemap-WGGIJYW6-B5jqGfsY.js → treemap-WGGIJYW6-C04a3IWf.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-BTWYJn_V.js → usecaseDiagram-POWQR4AR-DjWtJ5rd.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-BJ9uRuyh.js → vennDiagram-UO4OBE2U-CaGYKlrU.js} +1 -1
- package/dist/assets/{wardley-WFR3VGLG-BF7f7pw5.js → wardley-WFR3VGLG-lC7L7qz7.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-D_XPrKWr.js → wardleyDiagram-VNRHLVJA-BwSYaW09.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-CccCedmI.js → xychartDiagram-PMCCYNJV-C1KTMmj3.js} +1 -1
- package/dist/index.html +2 -2
- package/docs/guide/en/v8.1.0.md +77 -0
- package/docs/guide/en/v8.2.0.md +85 -0
- package/docs/guide/ja/v8.1.0.md +74 -0
- package/docs/guide/ja/v8.2.0.md +74 -0
- package/package.json +8 -8
- package/plugins/plugins.json +1 -1
- package/server/backends/openPath.ts +1 -1
- package/server/backends/presentPathRoot.ts +1 -1
- package/server/backends/shapescript.ts +2 -2
- package/server/blueprint/executor.ts +68 -12
- package/server/blueprint/originals.ts +52 -0
- package/server/blueprint/routes.ts +15 -1
- package/server/infra/host-tools.ts +2 -2
- package/server/infra/shapescript-manage-tool.ts +3 -3
- package/server/infra/shapescript-render-tool.ts +3 -3
- package/server/infra/shapescript-usdz-tool.ts +2 -2
- package/server/skills/mulmoterminal-header/SKILL.md +1 -1
- package/server/skills/mulmoterminal-keys/SKILL.md +3 -1
- package/server/skills/mulmoterminal-shared-app/SKILL.md +13 -4
- package/server/skills/mulmoterminal-shared-app/templates/class-seats.md +413 -0
- package/server/skills/mulmoterminal-shared-app/templates/meeting-room.md +3 -2
- package/server/skills/mulmoterminal-shared-app/templates/schedule-poll.md +424 -0
- package/dist/assets/architecture-7GRP2DOG-DHGWVJ2h.js +0 -1
- package/dist/assets/channel-CdJOmIUD.js +0 -1
- package/dist/assets/eventmodeling-NTZA5JFV-g5Dqr_4m.js +0 -1
- package/dist/assets/flowDiagram-KWPJA3E3-DeQqcwdr.js +0 -1
- package/dist/assets/index-BcxXAO6O.css +0 -1
- package/dist/assets/railroad-abnf-HS5TGJTU-BRTRcWzf.js +0 -1
- package/dist/assets/railroad-ebnf-LZEXJU2U-XIH-PVQC.js +0 -1
- package/dist/assets/railroad-peg-WCYAUIDC-k-3lDxXn.js +0 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-D2g-orla.js +0 -8
|
@@ -3,7 +3,21 @@
|
|
|
3
3
|
"kind": "usecase",
|
|
4
4
|
"title": "文書のフォルダに chaff を入れる(今ある指摘は棚に上げて)",
|
|
5
5
|
"version": "0.1.0",
|
|
6
|
+
"order": 100,
|
|
6
7
|
"description": "既にある文書のフォルダに chaff を入れる。文書の種類に合わせた chaff.yaml を置き、今ある指摘は chaff baseline で棚に上げて、新しい指摘だけが出るようにする。望めば、GitHub の PR の行に指摘が出るワークフローも作る。原本は変えない。",
|
|
7
8
|
"bases": ["docs"],
|
|
8
|
-
"report": ".blueprint/adopt-report.md"
|
|
9
|
+
"report": ".blueprint/adopt-report.md",
|
|
10
|
+
"next": [
|
|
11
|
+
{
|
|
12
|
+
"usecase": "polish",
|
|
13
|
+
"answers": {
|
|
14
|
+
"style": "このフォルダの規約(STYLE.md と chaff.yaml)",
|
|
15
|
+
"scope": "chaff が指摘した所だけ",
|
|
16
|
+
"shelved": "棚上げした指摘も直す"
|
|
17
|
+
},
|
|
18
|
+
"carry": {
|
|
19
|
+
"targets": "places"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
]
|
|
9
23
|
}
|
|
@@ -21,7 +21,7 @@ jobs:
|
|
|
21
21
|
- uses: actions/setup-node@v7
|
|
22
22
|
with:
|
|
23
23
|
node-version: 24
|
|
24
|
-
- run: npx -y chaffjs@0.
|
|
24
|
+
- run: npx -y chaffjs@0.18 {{PATHS}} --sarif chaff.sarif
|
|
25
25
|
continue-on-error: true
|
|
26
26
|
- uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
|
27
27
|
with:
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"kind": "usecase",
|
|
4
4
|
"title": "文書に尋ねる(どこに書いてあるかを添えて)",
|
|
5
5
|
"version": "0.1.0",
|
|
6
|
+
"order": 40,
|
|
6
7
|
"description": "込み入ったマニュアル・規程・契約書に質問すると、文書のどこに書いてあるかを原文の引用で示して答える。書いていないことは「書いていない」と答える。引用は chaff cite で原文にあることを確かめる。答えは、人が読んでから FAQ.md に残せる。",
|
|
7
8
|
"bases": ["docs"],
|
|
8
9
|
"report": ".blueprint/replies.md"
|
|
@@ -10,6 +10,17 @@
|
|
|
10
10
|
"questions": "申請の期限はいつまで?\n領収書をなくしたときはどうする?\n海外出張の日当はいくら?",
|
|
11
11
|
"keep": "このフォルダの FAQ.md に書き足す"
|
|
12
12
|
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "kyuka",
|
|
16
|
+
"title": "休暇の規程と手引きに尋ねる",
|
|
17
|
+
"description": "見本の休暇規程(kitei.md)と手引き(tebiki.md)に 3 つの質問をする。申請の期限は規程と手引きで違うので、両方を引用して食い違いを示す。半日の休みは手引きの引用で答え、どちらにも無い夏季休暇には「書いていない」と答える。答えはフォルダに残さない。",
|
|
18
|
+
"base": "docs",
|
|
19
|
+
"answers": {
|
|
20
|
+
"documents": "kitei.md\ntebiki.md",
|
|
21
|
+
"questions": "有給休暇は何日前までに申請すればいい?\n半日だけ休める?\n夏季休暇は何日ある?",
|
|
22
|
+
"keep": "残さない(.blueprint の中だけ)"
|
|
23
|
+
}
|
|
13
24
|
}
|
|
14
25
|
]
|
|
15
26
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"kind": "usecase",
|
|
4
4
|
"title": "版を比べる(新旧対照表をつくる)",
|
|
5
5
|
"version": "0.1.0",
|
|
6
|
+
"order": 60,
|
|
6
7
|
"description": "契約書や規程の旧版と新版を条ごとに対応づけ、何が変わり、何が足され、何が消えたかを新旧対照表にする。変わったかどうかは条の本文を機械で比べて決めるので、変わっていない条を「変わった」と書く誤り、その逆は通らない。原本は変えない。",
|
|
7
8
|
"bases": ["docs"],
|
|
8
9
|
"report": ".blueprint/compare-report.md"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
出張旅費規程
|
|
2
|
+
|
|
3
|
+
第1条(目的)
|
|
4
|
+
この規程は、社員が業務のために出張するときの旅費の支給について定める。
|
|
5
|
+
|
|
6
|
+
第2条(出張の命令)
|
|
7
|
+
出張は、所属長の命令によって行う。
|
|
8
|
+
|
|
9
|
+
第3条(交通費)
|
|
10
|
+
交通費は、最も経済的な通常の経路と方法によって計算した実費を支給する。
|
|
11
|
+
|
|
12
|
+
第4条(日当)
|
|
13
|
+
日当は、出張一日につき2,000円を支給する。
|
|
14
|
+
|
|
15
|
+
第5条(宿泊費)
|
|
16
|
+
宿泊費は、一泊につき9,000円を上限として実費を支給する。
|
|
17
|
+
|
|
18
|
+
第6条(回数券の購入)
|
|
19
|
+
同じ区間を月に四度以上往復するときは、回数券を購入しなければならない。
|
|
20
|
+
|
|
21
|
+
第7条(精算)
|
|
22
|
+
出張から戻った者は、戻った日から14日以内に、第3条から第5条までの旅費を精算しなければならない。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
出張旅費規程
|
|
2
|
+
|
|
3
|
+
第1条(目的)
|
|
4
|
+
この規程は、社員が業務のために出張するときの旅費の支給について定める。
|
|
5
|
+
|
|
6
|
+
第2条(出張の命令)
|
|
7
|
+
出張は、所属長の命令によって行う。ただし、オンライン会議で目的を果たせるときは、出張を命じない。
|
|
8
|
+
|
|
9
|
+
第3条(交通費)
|
|
10
|
+
交通費は、最も経済的な通常の経路と方法によって計算した実費を支給する。
|
|
11
|
+
|
|
12
|
+
第4条(日当)
|
|
13
|
+
日当は、出張一日につき2,500円を支給する。
|
|
14
|
+
|
|
15
|
+
第5条(宿泊費)
|
|
16
|
+
宿泊費は、一泊につき12,000円を上限として実費を支給する。
|
|
17
|
+
|
|
18
|
+
第6条(精算)
|
|
19
|
+
出張から戻った者は、戻った日から10日以内に、第3条から第5条までの旅費を精算しなければならない。
|
|
20
|
+
|
|
21
|
+
第7条(施行)
|
|
22
|
+
この規程は、2027年4月1日から施行する。
|
|
@@ -5,7 +5,22 @@
|
|
|
5
5
|
"title": "業務委託契約書の改定を比べる",
|
|
6
6
|
"description": "見本の業務委託契約書の旧版(kyu.txt)と改定版(shin.txt)を条ごとに対応づけ、委託料や報告の回数が変わったこと、報告の条が足され、成果物の条が消えて契約期間の条が繰り上がったことを新旧対照表にする。原本は変えない。",
|
|
7
7
|
"base": "docs",
|
|
8
|
-
"answers": {
|
|
8
|
+
"answers": {
|
|
9
|
+
"old": "kyu.txt",
|
|
10
|
+
"new": "shin.txt",
|
|
11
|
+
"focus": ""
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "ryohi-kaitei",
|
|
16
|
+
"title": "出張旅費規程の改定を比べる",
|
|
17
|
+
"description": "見本の出張旅費規程の旧版(kyu.txt)と改定版(shin.txt)を条ごとに対応づけ、日当と宿泊費の上限が上がったこと、出張を命じない場合がただし書きで足されたこと、回数券の条が消えて精算の条が繰り上がり期限が短くなったこと、施行の条が足されたことを新旧対照表にする。原本は変えない。",
|
|
18
|
+
"base": "docs",
|
|
19
|
+
"answers": {
|
|
20
|
+
"old": "kyu.txt",
|
|
21
|
+
"new": "shin.txt",
|
|
22
|
+
"focus": ""
|
|
23
|
+
}
|
|
9
24
|
}
|
|
10
25
|
]
|
|
11
26
|
}
|
|
@@ -12,7 +12,7 @@ repository, `.git/info/exclude`) until the person has approved the models.
|
|
|
12
12
|
1. `.blueprint/` already exists (the build created it). Everything this build records goes there.
|
|
13
13
|
2. Run chaff once through the base pack's wrapper, so its first download happens now and not in the
|
|
14
14
|
middle of a later step: `sh <base pack>/checks/chaff.sh rules --json > /dev/null`. The wrapper runs the
|
|
15
|
-
pinned chaff (`npx -y chaffjs@0.
|
|
15
|
+
pinned chaff (`npx -y chaffjs@0.18`) unless `CHAFF_BIN` names another. If it fails, show the person the
|
|
16
16
|
error and stop — do not work around it.
|
|
17
17
|
3. If the folder is a git repository, add `.blueprint/` to `.git/info/exclude`. That keeps the build's
|
|
18
18
|
working files out of commits without touching `.gitignore`, which belongs to the person.
|
|
@@ -44,7 +44,16 @@ const problems = entries.flatMap(({ name, decision }) => {
|
|
|
44
44
|
if (decision === "manual" && !inHeading(name)) return [`${name} is left to a person, and README.md has no heading naming it`];
|
|
45
45
|
return [];
|
|
46
46
|
});
|
|
47
|
-
|
|
47
|
+
// Said with the titles it read and the rule it reads them by, so the one fixing it sees what is missing rather than guessing.
|
|
48
|
+
const untested = entries.some(({ name, decision }) => decision === "feature" && !inTestTitle(name));
|
|
49
|
+
const hint = untested
|
|
50
|
+
? [
|
|
51
|
+
"",
|
|
52
|
+
`The test titles ${tests} declares, as this check reads them: ${titles.length === 0 ? "(none)" : titles.map((title) => JSON.stringify(title)).join(", ")}.`,
|
|
53
|
+
"Only the title of a test counts: the first argument, written as a plain string, of it(...) or test(...) imported from \"vitest\" in that file. A describe(...) name does not count, so put the whole name in each test title.",
|
|
54
|
+
]
|
|
55
|
+
: [];
|
|
56
|
+
if (problems.length > 0) { console.error([...problems, ...hint].join("\n")); process.exit(1); }
|
|
48
57
|
process.stdout.write(String(entries.filter((entry) => entry.decision === "feature").length));
|
|
49
58
|
' "$file" "$tests" "$titles")
|
|
50
59
|
[ "$features" -gt 0 ] || exit 0
|
|
@@ -27,7 +27,8 @@ check it against its entry and give it its test here instead of building it a se
|
|
|
27
27
|
|
|
28
28
|
Tests in `test/actions.test.ts`, one per `feature`, each with the entry's `name` in the title of its `it(…)` / `test(…)`
|
|
29
29
|
(`it("books.actions.tidy: summarises", …)`) — with `it` / `test` imported from `vitest` in that file (`import { it } from "vitest"`); the check reads titles only from
|
|
30
|
-
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count
|
|
30
|
+
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count, and neither does a `describe(…)` name (`it("tidy")` inside
|
|
31
|
+
`describe("books.actions")` is not titled `books.actions.tidy`: write the whole name in every test's own title):
|
|
31
32
|
walk the real flow against a temporary database and read back what changed. Never call the network in a test: a model
|
|
32
33
|
call goes through a client the test replaces with a stand-in, and an ingest reads a fixture file kept under
|
|
33
34
|
`test/fixtures/`. The tests must pass with no API key set.
|
|
@@ -31,7 +31,8 @@ check it against its entry and give it its test here instead of building it a se
|
|
|
31
31
|
|
|
32
32
|
Tests in `test/actions.test.ts`, one per `feature`, each with the entry's `name` in the title of its `it(…)` / `test(…)`
|
|
33
33
|
(`it("books.actions.tidy: summarises", …)`) — with `it` / `test` imported from `vitest` in that file (`import { it } from "vitest"`); the check reads titles only from
|
|
34
|
-
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count
|
|
34
|
+
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count, and neither does a `describe(…)` name (`it("tidy")` inside
|
|
35
|
+
`describe("books.actions")` is not titled `books.actions.tidy`: write the whole name in every test's own title):
|
|
35
36
|
walk the real flow through the Worker on the test D1 and read back what changed. Never call the network in a test: a
|
|
36
37
|
model call goes through a client the test replaces with a stand-in, and an ingest job takes the fetch it uses as an
|
|
37
38
|
argument, so the test hands it a fixture instead. The tests must pass with no API key set.
|
|
@@ -27,7 +27,8 @@ check it against its entry and give it its test here instead of building it a se
|
|
|
27
27
|
|
|
28
28
|
Tests in `test/blueprint/actions.spec.ts`, one per `feature`, each with the entry's `name` in the title of its `it(…)` /
|
|
29
29
|
`test(…)` (`it("books.actions.tidy: summarises", …)`) — with `it` / `test` imported from `vitest` in that file (`import { it } from "vitest"`); the check reads titles only from
|
|
30
|
-
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count
|
|
30
|
+
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count, and neither does a `describe(…)` name (`it("tidy")` inside
|
|
31
|
+
`describe("books.actions")` is not titled `books.actions.tidy`: write the whole name in every test's own title) —
|
|
31
32
|
against the emulators: do the action as a signed-in user and read back what changed, and check that someone who must not
|
|
32
33
|
do it is refused. Never call the network in a test: the model call and the fetch go through clients the test replaces
|
|
33
34
|
with stand-ins.
|
|
@@ -30,7 +30,8 @@ check it against its entry and give it its test here instead of building it a se
|
|
|
30
30
|
|
|
31
31
|
Tests in `test/actions.test.ts`, one per `feature`, each with the entry's `name` in the title of its `it(…)` / `test(…)`
|
|
32
32
|
(`it("books.actions.tidy: summarises", …)`) — with `it` / `test` imported from `vitest` in that file (`import { it } from "vitest"`); the check reads titles only from
|
|
33
|
-
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count
|
|
33
|
+
calls to those imports, so a global `it`, a helper of the same name, a comment or a title built at run time does not count, and neither does a `describe(…)` name (`it("tidy")` inside
|
|
34
|
+
`describe("books.actions")` is not titled `books.actions.tidy`: write the whole name in every test's own title):
|
|
34
35
|
walk the real flow against the local stack and read back what changed. Never call the network in a test: a model call
|
|
35
36
|
goes through a client the test replaces with a stand-in, and an ingest job takes the fetch it uses as an argument, so
|
|
36
37
|
the test hands it a fixture instead. The tests must pass with no API key set.
|
|
@@ -3,7 +3,20 @@
|
|
|
3
3
|
"kind": "usecase",
|
|
4
4
|
"title": "用語をそろえる(用語集をつくって chaff に入れる)",
|
|
5
5
|
"version": "0.1.0",
|
|
6
|
+
"order": 90,
|
|
6
7
|
"description": "文書から、定義された語と、同じ語の二重定義や表記ゆれを集めて用語集にする。定義と書き方にはすべて原文の引用を付け、文書が定義する語を落としていないことを機械で確かめる。望めば、使う書き方と社内の言葉をフォルダの chaff.yaml に入れ、以後は chaff が揺れを指摘する。原本は変えない。",
|
|
7
8
|
"bases": ["docs"],
|
|
8
|
-
"report": ".blueprint/glossary-report.md"
|
|
9
|
+
"report": ".blueprint/glossary-report.md",
|
|
10
|
+
"next": [
|
|
11
|
+
{
|
|
12
|
+
"usecase": "polish",
|
|
13
|
+
"answers": {
|
|
14
|
+
"style": "このフォルダの規約(STYLE.md と chaff.yaml)",
|
|
15
|
+
"scope": "chaff が指摘した所だけ"
|
|
16
|
+
},
|
|
17
|
+
"carry": {
|
|
18
|
+
"targets": "documents"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
]
|
|
9
22
|
}
|
|
@@ -25,6 +25,18 @@ rules:
|
|
|
25
25
|
- One `prefer` line for every spelling of a term other than its `preferred`.
|
|
26
26
|
- `jargon` lists every term marked `jargon: true`.
|
|
27
27
|
- `preferred-term` is experimental: it runs only when named under `rules`.
|
|
28
|
+
- **Creating the file for documents of different kinds** (a policy and its guide), give each kind its genre: the
|
|
29
|
+
kind most documents are goes in `genre`, and each other document gets its own under `by_path`, so a guide is not
|
|
30
|
+
measured as a policy:
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
genre: legal/statute
|
|
34
|
+
by_path:
|
|
35
|
+
- files: ["tebiki.md"]
|
|
36
|
+
genre: docs/manual
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`files` are globs relative to `chaff.yaml`. An existing file's `genre` and `by_path` are the person's: keep them.
|
|
28
40
|
- **Keep everything the file already had.** Add to its `prefer`, `jargon` and `rules` rather than replacing them;
|
|
29
41
|
the check refuses a line of the old file that is gone.
|
|
30
42
|
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
export type Kind = { readonly option: string; readonly genre: string | null };
|
|
3
3
|
|
|
4
4
|
export declare const CHAFF_DEFAULT_STYLE: string;
|
|
5
|
+
export declare const FOLDER_STYLE: string;
|
|
6
|
+
export declare const FIX_SHELVED: string;
|
|
7
|
+
export declare const shelvedArgs: (answers: unknown) => string[];
|
|
8
|
+
export declare const measureArgs: () => string[];
|
|
5
9
|
export declare const genreOf: (answers: unknown, kinds: readonly Kind[]) => string | null;
|
|
6
10
|
export declare const genreArgs: (genre: string | null) => string[];
|
|
7
11
|
export declare const readKinds: (usecaseDir: string) => Kind[];
|
|
@@ -4,6 +4,8 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
|
|
6
6
|
export const CHAFF_DEFAULT_STYLE = "chaff の既定のまま";
|
|
7
|
+
export const FOLDER_STYLE = "このフォルダの規約(STYLE.md と chaff.yaml)";
|
|
8
|
+
export const FIX_SHELVED = "棚上げした指摘も直す";
|
|
7
9
|
|
|
8
10
|
/** The genre for the answers' `kind`, from `kinds` ({ option, genre }[]); null when none applies. */
|
|
9
11
|
export const genreOf = (answers, kinds) => {
|
|
@@ -20,8 +22,22 @@ const ANSWERS = ".blueprint/answers.json";
|
|
|
20
22
|
/** The kinds in the pack at `usecaseDir`. */
|
|
21
23
|
export const readKinds = (usecaseDir) => JSON.parse(readFileSync(join(usecaseDir, "kinds.json"), "utf8")).kinds;
|
|
22
24
|
|
|
25
|
+
/**
|
|
26
|
+
* The arguments that show the findings the folder's baseline shelved, when the person asked to fix those too. Only
|
|
27
|
+
* with the folder's style: the baseline is the folder's, and chaff's own style has none to show.
|
|
28
|
+
*/
|
|
29
|
+
export const shelvedArgs = (answers) => (answers?.style === FOLDER_STYLE && answers?.shelved === FIX_SHELVED ? ["--show-baseline"] : []);
|
|
30
|
+
|
|
31
|
+
const readAnswers = () => (existsSync(ANSWERS) ? JSON.parse(readFileSync(ANSWERS, "utf8")) : null);
|
|
32
|
+
|
|
23
33
|
/** This build's genre, from the folder's answers (BLUEPRINT_USECASE is the pack); null when its kind has none. */
|
|
24
|
-
export const kindGenre = () =>
|
|
34
|
+
export const kindGenre = () => {
|
|
35
|
+
const answers = readAnswers();
|
|
36
|
+
return answers === null ? null : genreOf(answers, readKinds(process.env.BLUEPRINT_USECASE));
|
|
37
|
+
};
|
|
25
38
|
|
|
26
39
|
/** The arguments every chaff run of this build takes for its kind. */
|
|
27
40
|
export const kindArgs = () => genreArgs(kindGenre());
|
|
41
|
+
|
|
42
|
+
/** The arguments every chaff run that measures this build's documents takes: its kind, and the shelved findings when asked. */
|
|
43
|
+
export const measureArgs = () => [...kindArgs(), ...shelvedArgs(readAnswers())];
|
|
@@ -14,7 +14,7 @@ import { existsSync, lstatSync, readFileSync, readdirSync, rmSync, writeFileSync
|
|
|
14
14
|
import { isAbsolute, join, normalize } from "node:path";
|
|
15
15
|
import { fromBase } from "./base.mjs";
|
|
16
16
|
import { targetsText } from "./targetsView.mjs";
|
|
17
|
-
import {
|
|
17
|
+
import { kindGenre, measureArgs } from "./kind.mjs";
|
|
18
18
|
import { readCatalog, readRecord, viewpointProblems, viewpointsFor } from "./viewpoints.mjs";
|
|
19
19
|
import { insidePath, namedTextFiles, TEXT_FILE } from "./named.mjs";
|
|
20
20
|
const { actionable, fail, findingsIn, readJson, runChaff } = await import(fromBase("chaff.mjs"));
|
|
@@ -60,14 +60,15 @@ const readList = () => {
|
|
|
60
60
|
return { targets: list.targets, avoided: list.avoided ?? [] };
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
// The kind of document the person named decides chaff's genre, when the style is chaff's own
|
|
63
|
+
// The kind of document the person named decides chaff's genre, when the style is chaff's own; with the folder's
|
|
64
|
+
// style, the person may ask for the findings its baseline shelved as well.
|
|
64
65
|
const genre = kindGenre();
|
|
65
|
-
const
|
|
66
|
+
const measuring = measureArgs();
|
|
66
67
|
// The kind's viewpoints: what a polished file is read for beyond chaff's findings.
|
|
67
68
|
const catalog = readCatalog(process.env.BLUEPRINT_USECASE);
|
|
68
69
|
const viewpointIds = viewpointsFor(catalog, genre);
|
|
69
70
|
|
|
70
|
-
const findingsNow = (file) => findingsIn(file,
|
|
71
|
+
const findingsNow = (file) => findingsIn(file, measuring).filter(actionable).length;
|
|
71
72
|
|
|
72
73
|
/** The addresses of chaff's tree (articles, sections, items) — what a reference to this document points at. */
|
|
73
74
|
const addressesOf = (file) => {
|
|
@@ -86,7 +87,7 @@ const polishedProblems = (target) => {
|
|
|
86
87
|
const [wasTree, nowTree] = [addressesOf(original), addressesOf(target.file)];
|
|
87
88
|
const treeChanged = JSON.stringify(wasTree) === JSON.stringify(nowTree) ? [] : [`${target.file}: the addresses in chaff's tree changed`];
|
|
88
89
|
// A finding set aside with a reason (dismissals.mjs) does not count; one that no longer exists is a stale dismissal.
|
|
89
|
-
const reported = findingsIn(target.file,
|
|
90
|
+
const reported = findingsIn(target.file, measuring).filter(actionable);
|
|
90
91
|
const dismissals = dismissalProblems(target.file, target.dismissed, reported);
|
|
91
92
|
const left = withoutDismissed(reported, target.dismissed).length;
|
|
92
93
|
const findings = left === 0 ? [] : [`${target.file}: ${left} chaff finding(s) remain under the style`];
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
"why": "このフォルダに「規約をつくる」で作った STYLE.md と chaff.yaml があれば、それに合わせる",
|
|
15
15
|
"kind": "select",
|
|
16
16
|
"options": ["このフォルダの規約(STYLE.md と chaff.yaml)", "chaff の既定のまま"],
|
|
17
|
-
"needsPath": {
|
|
17
|
+
"needsPath": {
|
|
18
|
+
"このフォルダの規約(STYLE.md と chaff.yaml)": "chaff.yaml"
|
|
19
|
+
}
|
|
18
20
|
},
|
|
19
21
|
{
|
|
20
22
|
"id": "kind",
|
|
@@ -49,7 +51,24 @@
|
|
|
49
51
|
"why": "機械が見つけた所だけか、手引きの決まり(語調・表記など)にも合わせるか",
|
|
50
52
|
"kind": "select",
|
|
51
53
|
"options": ["chaff が指摘した所だけ", "手引き(STYLE.md)の決まりにも合わせる"],
|
|
52
|
-
"needsPath": {
|
|
54
|
+
"needsPath": {
|
|
55
|
+
"手引き(STYLE.md)の決まりにも合わせる": "STYLE.md"
|
|
56
|
+
},
|
|
57
|
+
"showIf": {
|
|
58
|
+
"id": "style",
|
|
59
|
+
"equals": "このフォルダの規約(STYLE.md と chaff.yaml)"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "shelved",
|
|
64
|
+
"label": "棚上げした指摘も直しますか",
|
|
65
|
+
"why": "「既存の文書に chaff を入れる」で棚上げした指摘は、ふだん chaff が黙っている。直すと、残りが少しずつ減る",
|
|
66
|
+
"kind": "select",
|
|
67
|
+
"options": ["新しい指摘だけ", "棚上げした指摘も直す"],
|
|
68
|
+
"default": "新しい指摘だけ",
|
|
69
|
+
"needsPath": {
|
|
70
|
+
"棚上げした指摘も直す": ".chaff-baseline.json"
|
|
71
|
+
},
|
|
53
72
|
"showIf": {
|
|
54
73
|
"id": "style",
|
|
55
74
|
"equals": "このフォルダの規約(STYLE.md と chaff.yaml)"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"kind": "usecase",
|
|
4
4
|
"title": "文書を整える(書いてあることは変えずに)",
|
|
5
5
|
"version": "0.1.0",
|
|
6
|
+
"order": 10,
|
|
6
7
|
"description": "リポジトリやフォルダにある既存の文書を、規約(STYLE.md と chaff.yaml)に合わせて一つずつ整える。書いてあることは変えない: 見出し、条や節の番地、コードブロック、リンク先が変わっていないことを機械で確かめ、直す前の原本を残す。",
|
|
7
8
|
"bases": ["docs"],
|
|
8
9
|
"report": ".blueprint/polish-report.md"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Speeding Up Our CI by Caching Dependencies
|
|
2
|
+
|
|
3
|
+
In today's fast-paced world of software development, speed is more important than ever, and every team is looking for ways to ship faster.
|
|
4
|
+
|
|
5
|
+
## The problem
|
|
6
|
+
|
|
7
|
+
Our pull request checks took about 14 minutes. Almost 6 of those minutes went to installing the same dependencies on every run, even when the lockfile had not changed at all since the previous run on the same branch, which meant that most of that time was simply wasted work that the runner repeated again and again.
|
|
8
|
+
|
|
9
|
+
## What we changed
|
|
10
|
+
|
|
11
|
+
We added a cache step keyed on the hash of the lockfile. When the lockfile is unchanged, the runner restores the installed packages from the cache instead of downloading them.
|
|
12
|
+
|
|
13
|
+
## The result
|
|
14
|
+
|
|
15
|
+
The install step now takes about 40 seconds when the cache is warm, and the whole check finishes in about 9 minutes.
|
|
16
|
+
|
|
17
|
+
## Conclusion
|
|
18
|
+
|
|
19
|
+
In conclusion, caching is a powerful technique that can dramatically improve your workflow. I hope this was helpful!
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 社用車利用規程
|
|
2
|
+
|
|
3
|
+
## 第1条(目的)
|
|
4
|
+
|
|
5
|
+
社用車の事故は社員の命と会社の信用に関わるため、安全に使うことが非常に重要である。この規程は、会社が持つ自動車(以下「社用車」という。)を安全に使い、その費用を正しく管理するために、社用車の予約、利用、報告の手続きを定める。
|
|
6
|
+
|
|
7
|
+
## 第2条(予約)
|
|
8
|
+
|
|
9
|
+
社用車を使う者(以下「利用者」という。)は、使う日の前日までに、総務部の予約表に使う時間と行き先を書き入れなければならない。
|
|
10
|
+
|
|
11
|
+
## 第3条(利用)
|
|
12
|
+
|
|
13
|
+
1. 利用者は、社用車を業務のためだけに使い、私用で使ってはならない。
|
|
14
|
+
2. 利用者は、運転の前に、運転免許証を持っていること、ガソリンが半分以上残っていること、車体に傷が無いことを確かめ、傷を見つけたときはその場で写真を撮って総務部に知らせたうえで、傷の場所と大きさを予約表の備考の欄に書いてから出発しなければならない。
|
|
15
|
+
|
|
16
|
+
## 第4条(報告)
|
|
17
|
+
|
|
18
|
+
利用者は、使い終わったあと、走った距離とガソリンを入れた量を総務部に報告しなければならない。
|
|
19
|
+
|
|
20
|
+
## 第5条(鍵の管理)
|
|
21
|
+
|
|
22
|
+
社用車の鍵は総務部が管理し、利用者は使い終わったら鍵を総務部の鍵箱に戻す。
|
|
23
|
+
|
|
24
|
+
## 第6条(災害のとき)
|
|
25
|
+
|
|
26
|
+
大きな災害が起きたときは、社員とその家族を助けるために、社用車を使うことができる。
|
|
@@ -51,6 +51,32 @@
|
|
|
51
51
|
"maxFiles": 1,
|
|
52
52
|
"avoid": ""
|
|
53
53
|
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "shayo",
|
|
57
|
+
"title": "規程を規程として整える",
|
|
58
|
+
"description": "見本の社内規程(kitei.md)を「規程・社内規則」として読む。中身の無い強調は、書いてあることは変えずに直す。誰に当てはまるか、義務に期限があるか、守らなかったときどうなるか、例外が決まりのそばにあるかを見て、書き足しが要るところは直さずに、書いた人への質問として報告に並べる。直す前の原本は残す。",
|
|
59
|
+
"base": "docs",
|
|
60
|
+
"answers": {
|
|
61
|
+
"targets": "kitei.md",
|
|
62
|
+
"style": "chaff の既定のまま",
|
|
63
|
+
"kind": "規程・社内規則",
|
|
64
|
+
"maxFiles": 1,
|
|
65
|
+
"avoid": ""
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "english-blog",
|
|
70
|
+
"title": "英語のブログ記事を整える",
|
|
71
|
+
"description": "見本の英語の技術ブログ(post.md)を「ブログ(技術記事)」として読む。文書は英語のまま、長すぎる文を分け、どの記事にも当てはまる書き出しや結びの決まり文句は削る。要約だけの結びなど、書き足しが要るところは直さずに、書いた人への質問として報告に並べる。報告は画面の言語で返る。直す前の原本は残す。",
|
|
72
|
+
"base": "docs",
|
|
73
|
+
"answers": {
|
|
74
|
+
"targets": "post.md",
|
|
75
|
+
"style": "chaff の既定のまま",
|
|
76
|
+
"kind": "ブログ(技術記事)",
|
|
77
|
+
"maxFiles": 1,
|
|
78
|
+
"avoid": ""
|
|
79
|
+
}
|
|
54
80
|
}
|
|
55
81
|
]
|
|
56
82
|
}
|
|
@@ -33,7 +33,8 @@ Follow `STYLE.md` when the answer `scope` includes the guide; otherwise, and whe
|
|
|
33
33
|
## Check it
|
|
34
34
|
|
|
35
35
|
`sh <base pack>/checks/chaff.sh <the file>` — with the same `--genre` as the survey when the answer `kind`
|
|
36
|
-
gives one (see `<usecase pack>/kinds.json`)
|
|
36
|
+
gives one (see `<usecase pack>/kinds.json`), and `--show-baseline` when the answer `shelved` asks for the shelved
|
|
37
|
+
findings too — must report no warning or error, except the ones you set aside.
|
|
37
38
|
Set a finding aside — never change the meaning to satisfy a rule — in one of two cases, by adding it to the
|
|
38
39
|
file's entry in `.blueprint/polish.json`:
|
|
39
40
|
|
|
@@ -21,8 +21,16 @@ Write `.blueprint/polish-report.md` for the person, in their language and in pla
|
|
|
21
21
|
line per dismissal with its rule, line number and `why`); files over the agreed number, for another
|
|
22
22
|
run.
|
|
23
23
|
|
|
24
|
+
When the answer `shelved` asked for the shelved findings too, say under `## 整えたもの` / `## What was polished`
|
|
25
|
+
that the counts include them. Their entries stay in `.chaff-baseline.json`; a fixed sentence no longer matches one,
|
|
26
|
+
so there is nothing to clean up.
|
|
27
|
+
|
|
28
|
+
With the folder's style, the style is its `chaff.yaml`. `STYLE.md` belongs to the answer `scope` only, so when
|
|
29
|
+
`scope` did not ask for the guide, a folder without `STYLE.md` lacks nothing: do not mention it.
|
|
30
|
+
|
|
24
31
|
When `.blueprint/viewpoints.json` records a `writer` verdict for a polished file, add
|
|
25
|
-
`## 書いた人に確かめてほしいこと` / `## For the writer
|
|
32
|
+
`## 書いた人に確かめてほしいこと` / `## For the writer` **right after** `## 整えたもの` / `## What was polished` — it is
|
|
33
|
+
the part the person has to act on, so it comes before what was checked and what was left: one item per verdict, giving the file, what was read
|
|
26
34
|
for (the viewpoint's `title` in `<usecase pack>/viewpoints.json`), the `quote` word for word, and the `note` as
|
|
27
35
|
the question. The check looks for every quotation. Under `## 整えたもの` / `## What was polished`, name the
|
|
28
36
|
viewpoints you fixed in the same way as the other changes.
|
|
@@ -16,8 +16,12 @@ any file is touched.
|
|
|
16
16
|
|
|
17
17
|
Run chaff through the base pack's wrapper, from the folder: `sh <base pack>/checks/chaff.sh <file>`
|
|
18
18
|
(add `--compact` for one line per finding). The folder's `chaff.yaml` applies when the answer `style` is
|
|
19
|
-
the folder's style; if it is and there is no `chaff.yaml`, stop and say the style has to be made first.
|
|
20
|
-
|
|
19
|
+
the folder's style; if it is and there is no `chaff.yaml`, stop and say the style has to be made first. The
|
|
20
|
+
folder's style is its `chaff.yaml`: `STYLE.md` is read only when `scope` asks to follow the guide, so when it
|
|
21
|
+
does not, a folder without one lacks nothing, and the report does not say it does. When `scope` asks for the
|
|
22
|
+
guide and there is no `STYLE.md`, stop and say the guide is missing.
|
|
23
|
+
When the answer `shelved` is 「棚上げした指摘も直す」, add `--show-baseline` to every chaff run as well: the findings
|
|
24
|
+
the folder's `.chaff-baseline.json` shelved are then measured and polished like any other. With chaff's own style, the answer `kind` says what kind of document this is: measure it as that kind by
|
|
21
25
|
adding `--genre <genre>` to every chaff run, taking the genre for the answer from `<usecase pack>/kinds.json`
|
|
22
26
|
(a kind whose genre is `null` adds nothing). The checks measure the same way, so a count taken without it
|
|
23
27
|
will not match.
|
|
@@ -109,6 +109,21 @@
|
|
|
109
109
|
"title": "うまくいったことの確かめ方があるか",
|
|
110
110
|
"look": "The procedure says what the reader sees when it worked (a screen, a message, a result), at its end or after a step where it matters. Quote the last step when it does not; adding it is the writer's.",
|
|
111
111
|
"fix": "writer"
|
|
112
|
+
},
|
|
113
|
+
"measurable-requirement": {
|
|
114
|
+
"title": "満たしたかどうかを確かめられる要件か",
|
|
115
|
+
"look": "Each requirement says something that can be checked: a number, a limit, a named behaviour. Words that cannot be measured (適切に, 速やかに, 十分な, 高速に, appropriately, promptly, sufficient, fast) leave the reader unable to tell whether it is met. Quote the requirement; the figure or the behaviour is the writer's to supply.",
|
|
116
|
+
"fix": "writer"
|
|
117
|
+
},
|
|
118
|
+
"failure-behaviour": {
|
|
119
|
+
"title": "失敗や不正な入力のときにどうなるかが書かれているか",
|
|
120
|
+
"look": "A function, an interface or an operation says what happens when it fails or is given something it cannot take: the message, the code, what is kept or undone. Quote the part that describes only the normal case; the failure behaviour is the writer's to decide.",
|
|
121
|
+
"fix": "writer"
|
|
122
|
+
},
|
|
123
|
+
"first-run": {
|
|
124
|
+
"title": "最初に動かすまでの手順があるか",
|
|
125
|
+
"look": "A reader who has just found the project can get it running from the document alone: how to install it and the first command to run, in order, with each command written out. Quote where the reader is left to guess; the missing step is the writer's to supply.",
|
|
126
|
+
"fix": "writer"
|
|
112
127
|
}
|
|
113
128
|
},
|
|
114
129
|
"genres": {
|
|
@@ -122,6 +137,8 @@
|
|
|
122
137
|
"blog/owned-media": ["padded-intro", "closing-cliche", "empty-conclusion", "title-body-alignment", "thin-section", "unqualified-superlative"],
|
|
123
138
|
"docs/manual": ["prerequisites-stated", "steps-one-action", "result-check"],
|
|
124
139
|
"legal/contract": ["duty-owner-deadline", "breach-consequence", "exception-with-rule"],
|
|
125
|
-
"legal/statute": ["scope-stated", "duty-owner-deadline", "breach-consequence", "exception-with-rule"]
|
|
140
|
+
"legal/statute": ["scope-stated", "duty-owner-deadline", "breach-consequence", "exception-with-rule"],
|
|
141
|
+
"technical/spec": ["measurable-requirement", "failure-behaviour"],
|
|
142
|
+
"technical/readme": ["prerequisites-stated", "first-run", "result-check"]
|
|
126
143
|
}
|
|
127
144
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"kind": "usecase",
|
|
4
4
|
"title": "文書を読み解く(矛盾と不備を見つけて直し方を出す)",
|
|
5
5
|
"version": "0.1.0",
|
|
6
|
+
"order": 20,
|
|
6
7
|
"description": "長い契約書・規程・仕様書を読み、存在しない条への参照、番号の抜け、同じ語の二重定義、義務や期限の食い違いを見つける。指摘には必ず番地と原文の引用を付け、引用が原文にあることを機械で確かめる。直し方は原本を変えずに別のファイルに書く。",
|
|
7
8
|
"bases": ["docs"],
|
|
8
9
|
"report": ".blueprint/review-report.md"
|