diff --git a/.agents/harness.lock.json b/.agents/harness.lock.json index 94108a35..5e26242c 100644 --- a/.agents/harness.lock.json +++ b/.agents/harness.lock.json @@ -1,67 +1,95 @@ { "files": { - ".agents/skills/techcon-alert-export/SKILL.md": "7ea5336cdaa143a1f76748aed8bcc173ac81cdaeaff4bb22ed52d338e124b03b", - ".agents/skills/techcon-architecture-boundaries-template/SKILL.md": "0475acba542d3c3f77d9a3d29315716ad27d0e093cc81944bc56c5fb2d560f05", - ".agents/skills/techcon-billing-protocol/SKILL.md": "560987820ac7b44d1c6c95d65397a981e378de182c50bf1703bfab10ab9f3a05", - ".agents/skills/techcon-business-document-system/SKILL.md": "54e92f54ecf86bf7c58d7d2bd04d01a53dd7c78b3d002374da1743c8cfe2dcb3", - ".agents/skills/techcon-claude-code-review-intake/SKILL.md": "a9f5904775a0a148647b2ca73ac256aa3239ab806cb006c82890fe4fecd7db33", - ".agents/skills/techcon-claude-code-review-request/SKILL.md": "c20d8b8a7695bcd9e4ccf26a93571b4d84e7be305e237d3e03838ed7e24d9ede", - ".agents/skills/techcon-claude-handoff-preparation/SKILL.md": "29bb44c2c8c0ea7f0fa2ad3d9f0c50cf358d38770516ba1f6ae6b08c09f2da49", - ".agents/skills/techcon-contract-auditor/SKILL.md": "21fe9319a29cf3b7b5aa5a6ab74d92f6276b48e2c10d305bc097c5224f71e53f", - ".agents/skills/techcon-cross-service-tester/SKILL.md": "1a99c129b9ee5e0a1c28bf636ddfc6eb17ccec9a2ea0354e1ac77f29fe4070e3", - ".agents/skills/techcon-external-report-authoring/SKILL.md": "40d83c0ea6e04e81d09472ad002c7e66dc84af9c37703dbf61c63fa9a5466def", - ".agents/skills/techcon-fact-verification/SKILL.md": "d6bb3f62a669f39c03224ae45f3cd31eb83900f77481501fe5b7c192e3e7f8f5", - ".agents/skills/techcon-grafana-monitoring-access/SKILL.md": "1d68aaf42e77522303aaec6919216a9cecb85aa3f593f546017a4b30853a8093", - ".agents/skills/techcon-infra-access-map/SKILL.md": "832582499d1e6f45d870e67ba182cb72fc8e66669bd69871b15e731fbd4234fb", - ".agents/skills/techcon-infra-access/SKILL.md": "01584ece79b2cfe10c4183c9f4d45e5e6ff34eba6ee71443ee8a8088c36c84bb", - ".agents/skills/techcon-knowledge-system/SKILL.md": "15c237223298544876bdcf97b71623b0bdc799fa6c118d63c9fd0b09fe39f2ab", - ".agents/skills/techcon-large-session/SKILL.md": "2109efd5edb02ea4f1ca9fa9b89c533060c2b674bdbfed1d8d02e59d675cdc82", - ".agents/skills/techcon-linear-governance/SKILL.md": "20740546a4d3aed5f3cda18871139050127b5013256ee55384da1687f9a162f3", - ".agents/skills/techcon-markdown-docx-export/SKILL.md": "47e23677374a97f578f815371a743351bd031007b5b2c8caf1fd801d7b6aca09", - ".agents/skills/techcon-pre-implementation-contracts/SKILL.md": "d4476580f43741238c0e6226dffcfbb0929794f1888f5c1b88ed23728d481981", - ".agents/skills/techcon-production-safety/SKILL.md": "57c4f72c749a2a7bff6b53bf50afb0ba1672cf52fb30624098db964d8c11f8af", - ".agents/skills/techcon-report-synthesis-merge/SKILL.md": "4dd35228484577a00d4c7696ec82ba8f9e0f83632d3bf090ee82d3ac9cda76d9", - ".agents/skills/techcon-research-first/SKILL.md": "1731a44966a55567b70cae0bd3863bd9340be3c4618a0e3daa936a096df8a968", - ".agents/skills/techcon-session-handoff/SKILL.md": "055864a05b77940765108f8eef5477d2776821dc999af785ddfab2eb8c74f6c3", - ".agents/skills/techcon-tz-authoring/SKILL.md": "c89ca405f9d802de49b4e9b1e7dde0ac9d79b38cc50180a053573fb45ff2971a", - ".agents/skills/techcon-web-research-safety/SKILL.md": "6c2660a66bac456d6cc2642b9e3f597becd412b1834733c2969319b69e048499", - ".agents/skills/techcon-yc-cli/SKILL.md": "ffedde087e29cf03482b3c6345ca9b950e4c15d132f8f2a402bc2be3339122f5", + ".agents/skills/techcon-alert-export/SKILL.md": "a8e3130531c9f02c61ffd2bfb2f2d27e7ea3de382b5148c034b9dfd66739d42e", + ".agents/skills/techcon-architecture-boundaries-template/SKILL.md": "6972bb65f79040b38a222c1c30ae2e43e948051f8780e86ae24e6f4fc75c6b33", + ".agents/skills/techcon-billing-protocol/SKILL.md": "a0b13649ef9e178c4eb75ad93885725e3e5fe03c2c2c4e4619d0107ca53417c8", + ".agents/skills/techcon-business-document-system/SKILL.md": "2691cd2991715824f6e99393f05bb763ba325018bcfd3b94fd77b53b8cc829af", + ".agents/skills/techcon-claude-code-review-intake/SKILL.md": "3ce804bae51d8d7ed74fdb3b5babcde5de0938c08749652a8dd0968b4acd2a9b", + ".agents/skills/techcon-claude-code-review-request/SKILL.md": "a5a043a18f59faa78a285d98c6d8aa715c029055b6af74119cdfce16c64c3e6b", + ".agents/skills/techcon-claude-handoff-preparation/SKILL.md": "ab13ee008ade0d9a2bb7beebf7c8ab48f11dd6c5417d4e3c3d18f300db6ec0fc", + ".agents/skills/techcon-contract-auditor/SKILL.md": "82676ef24473f29d33a9a95426bdac12aa48a7d7817fa947d0ae8f2be4fd4031", + ".agents/skills/techcon-cross-reference-integrity/SKILL.md": "6dd2026ab060a1c4fb5253fec431fe1477aee0b2f70e1198147f822f1fb73e21", + ".agents/skills/techcon-cross-service-tester/SKILL.md": "f514078671b62d3fdb48976b0aa61efad55f04a4732f5095ec3d16f199c39045", + ".agents/skills/techcon-docs-language/SKILL.md": "8055580f5d6cb148e255133ed7056563ff7bb6521913a1021b8073cdaa6fa4a7", + ".agents/skills/techcon-docs-language/references/api-docs.md": "13cc51bec41aa04c54669c18471b5b69117a2fc05b982f54c811e404cb8baf62", + ".agents/skills/techcon-docs-language/references/dictionary.md": "4b2c1962969383af49c69d8024c1218d1c710c47d179956725070079d1622a39", + ".agents/skills/techcon-external-report-authoring/SKILL.md": "60e577e9f9c6e6e52a2a414d15514f23a45cea41badedc91f31237c0432b822e", + ".agents/skills/techcon-fact-verification/SKILL.md": "ec78acfb4ff970bac6783d9b8f5fe2de82b8c2701bf72822c8e3da19d68e7cf8", + ".agents/skills/techcon-grafana-monitoring-access/SKILL.md": "cd8d87b3cf8767ec015539eb144df656c00f2de23b4be9cfbccacec0339b7a36", + ".agents/skills/techcon-infra-access-map/SKILL.md": "94028fcc629f058bb9e67d0361055991903e2ffb1032ad67e2869b22977c0baa", + ".agents/skills/techcon-infra-access/SKILL.md": "bc3a4cdddbd2dd8aec8ad447b7b36cfd3cbccad7b67cddeff0e1310865831672", + ".agents/skills/techcon-knowledge-system/SKILL.md": "786c84b608d1a66b8cca79409056aa93b35dc6cda0c61962e79d797380789937", + ".agents/skills/techcon-large-session/SKILL.md": "362d63ebdd4a672ab16bbe06b3f9bb620012f5e7c49ea799d95356ab4475e5eb", + ".agents/skills/techcon-linear-governance/SKILL.md": "e0094b0ef5aed7effd687a633ce0ba0f2c9a24c663abe5b76af597e860227380", + ".agents/skills/techcon-markdown-docx-export/SKILL.md": "dc726e92f110b0eec98bced8d1fea66e5d05431de104fc4ef63885177b619e15", + ".agents/skills/techcon-pre-implementation-contracts/SKILL.md": "29a7991d8b29d419aecd5cd2ec5fe3172f3d70682a331ac16d9fc3ff7dcb3853", + ".agents/skills/techcon-production-safety/SKILL.md": "ac23f376aed725e050bf203a1e9404b8c50dcbf1bdaeafb954960b379452818f", + ".agents/skills/techcon-project-dashboard/SKILL.md": "fc3f621bab17e3c630e762f75d89daedd0286fe183ea618f7b65ff4d2dcb09a2", + ".agents/skills/techcon-project-dashboard/references/01-vzglyad-rukovoditelya.md": "102a017163b26cb86aeb0953545ec4fd26514f5e2c55960ce6d3c2f2016e87f7", + ".agents/skills/techcon-project-dashboard/references/02-vyorstka-i-vypusk.md": "85a9b7622d24652be3d69118f4bbaa1adc3bd81f96a7eaa629bcab612e671944", + ".agents/skills/techcon-public-surfaces/SKILL.md": "bdd73bec455cca3a81b74a40834ac7498543d559c152900a3f13bac9dceca505", + ".agents/skills/techcon-report-synthesis-merge/SKILL.md": "3f8166fabcd75b9f47a23938e2cdfca0862edd65f8e93037dde538e853d29783", + ".agents/skills/techcon-research-first/SKILL.md": "e2d4df09e9c6d527897ad3404f4488f60a9416faaf4df187e3e2a6ff3dd8f310", + ".agents/skills/techcon-self-critique/SKILL.md": "54c9d615ab2ef099dcd31620ad451b2379ab6cfe7abc9f271b629eba0ff85db1", + ".agents/skills/techcon-session-digest/SKILL.md": "052337a85266a9cba16a7f603f81280d918355cad80c2869f0103a5af500fe31", + ".agents/skills/techcon-session-digest/references/razbor-zhurnalov.md": "e3d62d6ed670507cd719c263ee310fc05accbcdeaa7628e59676b795f846fd59", + ".agents/skills/techcon-session-digest/references/razvernutyj-itog.md": "d2661e3342334bde0da729a574e815dfe2fba6ffe2562b7bfd12fc37f1809d57", + ".agents/skills/techcon-session-handoff/SKILL.md": "35ece0b62a9a8775acbb8baab829a1326129b9a7b9019615001de241e55e6f7e", + ".agents/skills/techcon-skill-improvement/SKILL.md": "5e8055d2a012109632b02b2ae2152fd41178fd723ae0997a44d8b8674e657cec", + ".agents/skills/techcon-surface-sync-audit/SKILL.md": "cdfb65358090c50f3a2436f78fe08bd53335de83c8434650173c1caeebb4c53f", + ".agents/skills/techcon-tz-authoring/SKILL.md": "8f0c3ed541c73c3b44484c60f658a7fde8d2f7d8a06a30107f91eeff8d55db14", + ".agents/skills/techcon-web-research-safety/SKILL.md": "799718e712ec0045cb3d3b73d7c823f6ad42083c04a2c8c65c582c8952f19477", + ".agents/skills/techcon-yc-cli/SKILL.md": "155f489343cc5e641507b23b0d61b7d1417197fcc2b5a24b403037aea4641581", ".claude/agents/techcon-builder.md": "029787fa71dfa92908efb9214c8a9f228b11130f096dc0b553e237a98d50690a", ".claude/agents/techcon-fixer.md": "e70bf54460528c552962a599d9999183f6050111ec29f9fe6d782d0375529023", ".claude/agents/techcon-planner-reviewer.md": "4b73012442f83f2ef77ae2742f57808a3d6406c57361cab5fb88265dd8b9ba17", ".claude/agents/techcon-scout.md": "1af6534c2685880ad193dbc0c2782ec763b7c25035b429507d2894a17afccad1", ".claude/agents/techcon-solver.md": "876f2b6fa287d9be5c661c89922c49c52dac2f4046cc96582a09c075dabb641b", - ".claude/skills/techcon-alert-export/SKILL.md": "7ea5336cdaa143a1f76748aed8bcc173ac81cdaeaff4bb22ed52d338e124b03b", - ".claude/skills/techcon-architecture-boundaries-template/SKILL.md": "0475acba542d3c3f77d9a3d29315716ad27d0e093cc81944bc56c5fb2d560f05", - ".claude/skills/techcon-billing-protocol/SKILL.md": "560987820ac7b44d1c6c95d65397a981e378de182c50bf1703bfab10ab9f3a05", - ".claude/skills/techcon-business-document-system/SKILL.md": "54e92f54ecf86bf7c58d7d2bd04d01a53dd7c78b3d002374da1743c8cfe2dcb3", - ".claude/skills/techcon-claude-code-review-intake/SKILL.md": "a9f5904775a0a148647b2ca73ac256aa3239ab806cb006c82890fe4fecd7db33", - ".claude/skills/techcon-claude-code-review-request/SKILL.md": "c20d8b8a7695bcd9e4ccf26a93571b4d84e7be305e237d3e03838ed7e24d9ede", - ".claude/skills/techcon-claude-handoff-preparation/SKILL.md": "29bb44c2c8c0ea7f0fa2ad3d9f0c50cf358d38770516ba1f6ae6b08c09f2da49", - ".claude/skills/techcon-contract-auditor/SKILL.md": "21fe9319a29cf3b7b5aa5a6ab74d92f6276b48e2c10d305bc097c5224f71e53f", - ".claude/skills/techcon-cross-service-tester/SKILL.md": "1a99c129b9ee5e0a1c28bf636ddfc6eb17ccec9a2ea0354e1ac77f29fe4070e3", - ".claude/skills/techcon-external-report-authoring/SKILL.md": "40d83c0ea6e04e81d09472ad002c7e66dc84af9c37703dbf61c63fa9a5466def", - ".claude/skills/techcon-fact-verification/SKILL.md": "d6bb3f62a669f39c03224ae45f3cd31eb83900f77481501fe5b7c192e3e7f8f5", - ".claude/skills/techcon-grafana-monitoring-access/SKILL.md": "1d68aaf42e77522303aaec6919216a9cecb85aa3f593f546017a4b30853a8093", - ".claude/skills/techcon-infra-access-map/SKILL.md": "832582499d1e6f45d870e67ba182cb72fc8e66669bd69871b15e731fbd4234fb", - ".claude/skills/techcon-infra-access/SKILL.md": "01584ece79b2cfe10c4183c9f4d45e5e6ff34eba6ee71443ee8a8088c36c84bb", - ".claude/skills/techcon-knowledge-system/SKILL.md": "15c237223298544876bdcf97b71623b0bdc799fa6c118d63c9fd0b09fe39f2ab", - ".claude/skills/techcon-large-session/SKILL.md": "2109efd5edb02ea4f1ca9fa9b89c533060c2b674bdbfed1d8d02e59d675cdc82", - ".claude/skills/techcon-linear-governance/SKILL.md": "20740546a4d3aed5f3cda18871139050127b5013256ee55384da1687f9a162f3", - ".claude/skills/techcon-markdown-docx-export/SKILL.md": "47e23677374a97f578f815371a743351bd031007b5b2c8caf1fd801d7b6aca09", - ".claude/skills/techcon-pre-implementation-contracts/SKILL.md": "d4476580f43741238c0e6226dffcfbb0929794f1888f5c1b88ed23728d481981", - ".claude/skills/techcon-production-safety/SKILL.md": "57c4f72c749a2a7bff6b53bf50afb0ba1672cf52fb30624098db964d8c11f8af", - ".claude/skills/techcon-report-synthesis-merge/SKILL.md": "4dd35228484577a00d4c7696ec82ba8f9e0f83632d3bf090ee82d3ac9cda76d9", - ".claude/skills/techcon-research-first/SKILL.md": "1731a44966a55567b70cae0bd3863bd9340be3c4618a0e3daa936a096df8a968", - ".claude/skills/techcon-session-handoff/SKILL.md": "055864a05b77940765108f8eef5477d2776821dc999af785ddfab2eb8c74f6c3", - ".claude/skills/techcon-tz-authoring/SKILL.md": "c89ca405f9d802de49b4e9b1e7dde0ac9d79b38cc50180a053573fb45ff2971a", - ".claude/skills/techcon-web-research-safety/SKILL.md": "6c2660a66bac456d6cc2642b9e3f597becd412b1834733c2969319b69e048499", - ".claude/skills/techcon-yc-cli/SKILL.md": "ffedde087e29cf03482b3c6345ca9b950e4c15d132f8f2a402bc2be3339122f5", - ".gitignore": "90aa4dd5ed329ce5d43cbd5f018b4a4d43719a0736c1def8f277082192ee5bd7", - "AGENTS.md": "bae4abd61c0247184e804d5f1c82ee2f2b3f5a34d555f4f3457091ca70eb2ebf", + ".claude/skills/techcon-alert-export/SKILL.md": "a8e3130531c9f02c61ffd2bfb2f2d27e7ea3de382b5148c034b9dfd66739d42e", + ".claude/skills/techcon-architecture-boundaries-template/SKILL.md": "6972bb65f79040b38a222c1c30ae2e43e948051f8780e86ae24e6f4fc75c6b33", + ".claude/skills/techcon-billing-protocol/SKILL.md": "a0b13649ef9e178c4eb75ad93885725e3e5fe03c2c2c4e4619d0107ca53417c8", + ".claude/skills/techcon-business-document-system/SKILL.md": "2691cd2991715824f6e99393f05bb763ba325018bcfd3b94fd77b53b8cc829af", + ".claude/skills/techcon-claude-code-review-intake/SKILL.md": "3ce804bae51d8d7ed74fdb3b5babcde5de0938c08749652a8dd0968b4acd2a9b", + ".claude/skills/techcon-claude-code-review-request/SKILL.md": "a5a043a18f59faa78a285d98c6d8aa715c029055b6af74119cdfce16c64c3e6b", + ".claude/skills/techcon-claude-handoff-preparation/SKILL.md": "ab13ee008ade0d9a2bb7beebf7c8ab48f11dd6c5417d4e3c3d18f300db6ec0fc", + ".claude/skills/techcon-contract-auditor/SKILL.md": "82676ef24473f29d33a9a95426bdac12aa48a7d7817fa947d0ae8f2be4fd4031", + ".claude/skills/techcon-cross-reference-integrity/SKILL.md": "6dd2026ab060a1c4fb5253fec431fe1477aee0b2f70e1198147f822f1fb73e21", + ".claude/skills/techcon-cross-service-tester/SKILL.md": "f514078671b62d3fdb48976b0aa61efad55f04a4732f5095ec3d16f199c39045", + ".claude/skills/techcon-docs-language/SKILL.md": "8055580f5d6cb148e255133ed7056563ff7bb6521913a1021b8073cdaa6fa4a7", + ".claude/skills/techcon-docs-language/references/api-docs.md": "13cc51bec41aa04c54669c18471b5b69117a2fc05b982f54c811e404cb8baf62", + ".claude/skills/techcon-docs-language/references/dictionary.md": "4b2c1962969383af49c69d8024c1218d1c710c47d179956725070079d1622a39", + ".claude/skills/techcon-external-report-authoring/SKILL.md": "60e577e9f9c6e6e52a2a414d15514f23a45cea41badedc91f31237c0432b822e", + ".claude/skills/techcon-fact-verification/SKILL.md": "ec78acfb4ff970bac6783d9b8f5fe2de82b8c2701bf72822c8e3da19d68e7cf8", + ".claude/skills/techcon-grafana-monitoring-access/SKILL.md": "cd8d87b3cf8767ec015539eb144df656c00f2de23b4be9cfbccacec0339b7a36", + ".claude/skills/techcon-infra-access-map/SKILL.md": "94028fcc629f058bb9e67d0361055991903e2ffb1032ad67e2869b22977c0baa", + ".claude/skills/techcon-infra-access/SKILL.md": "bc3a4cdddbd2dd8aec8ad447b7b36cfd3cbccad7b67cddeff0e1310865831672", + ".claude/skills/techcon-knowledge-system/SKILL.md": "786c84b608d1a66b8cca79409056aa93b35dc6cda0c61962e79d797380789937", + ".claude/skills/techcon-large-session/SKILL.md": "362d63ebdd4a672ab16bbe06b3f9bb620012f5e7c49ea799d95356ab4475e5eb", + ".claude/skills/techcon-linear-governance/SKILL.md": "e0094b0ef5aed7effd687a633ce0ba0f2c9a24c663abe5b76af597e860227380", + ".claude/skills/techcon-markdown-docx-export/SKILL.md": "dc726e92f110b0eec98bced8d1fea66e5d05431de104fc4ef63885177b619e15", + ".claude/skills/techcon-pre-implementation-contracts/SKILL.md": "29a7991d8b29d419aecd5cd2ec5fe3172f3d70682a331ac16d9fc3ff7dcb3853", + ".claude/skills/techcon-production-safety/SKILL.md": "ac23f376aed725e050bf203a1e9404b8c50dcbf1bdaeafb954960b379452818f", + ".claude/skills/techcon-project-dashboard/SKILL.md": "fc3f621bab17e3c630e762f75d89daedd0286fe183ea618f7b65ff4d2dcb09a2", + ".claude/skills/techcon-project-dashboard/references/01-vzglyad-rukovoditelya.md": "102a017163b26cb86aeb0953545ec4fd26514f5e2c55960ce6d3c2f2016e87f7", + ".claude/skills/techcon-project-dashboard/references/02-vyorstka-i-vypusk.md": "85a9b7622d24652be3d69118f4bbaa1adc3bd81f96a7eaa629bcab612e671944", + ".claude/skills/techcon-public-surfaces/SKILL.md": "bdd73bec455cca3a81b74a40834ac7498543d559c152900a3f13bac9dceca505", + ".claude/skills/techcon-report-synthesis-merge/SKILL.md": "3f8166fabcd75b9f47a23938e2cdfca0862edd65f8e93037dde538e853d29783", + ".claude/skills/techcon-research-first/SKILL.md": "e2d4df09e9c6d527897ad3404f4488f60a9416faaf4df187e3e2a6ff3dd8f310", + ".claude/skills/techcon-self-critique/SKILL.md": "54c9d615ab2ef099dcd31620ad451b2379ab6cfe7abc9f271b629eba0ff85db1", + ".claude/skills/techcon-session-digest/SKILL.md": "052337a85266a9cba16a7f603f81280d918355cad80c2869f0103a5af500fe31", + ".claude/skills/techcon-session-digest/references/razbor-zhurnalov.md": "e3d62d6ed670507cd719c263ee310fc05accbcdeaa7628e59676b795f846fd59", + ".claude/skills/techcon-session-digest/references/razvernutyj-itog.md": "d2661e3342334bde0da729a574e815dfe2fba6ffe2562b7bfd12fc37f1809d57", + ".claude/skills/techcon-session-handoff/SKILL.md": "35ece0b62a9a8775acbb8baab829a1326129b9a7b9019615001de241e55e6f7e", + ".claude/skills/techcon-skill-improvement/SKILL.md": "5e8055d2a012109632b02b2ae2152fd41178fd723ae0997a44d8b8674e657cec", + ".claude/skills/techcon-surface-sync-audit/SKILL.md": "cdfb65358090c50f3a2436f78fe08bd53335de83c8434650173c1caeebb4c53f", + ".claude/skills/techcon-tz-authoring/SKILL.md": "8f0c3ed541c73c3b44484c60f658a7fde8d2f7d8a06a30107f91eeff8d55db14", + ".claude/skills/techcon-web-research-safety/SKILL.md": "799718e712ec0045cb3d3b73d7c823f6ad42083c04a2c8c65c582c8952f19477", + ".claude/skills/techcon-yc-cli/SKILL.md": "155f489343cc5e641507b23b0d61b7d1417197fcc2b5a24b403037aea4641581", + ".gitignore": "ecf095b60524cb6afd8eb9f23c2a27ca72dedfc33a0750770b01844f584b2515", + "AGENTS.md": "6f3568bb6f26c25f5665e964a8460544d9262e2d8816fbda4be26374be78249e", "CLAUDE.md": "336cc4fbf19beaada7ccf9986414fa91851a8d7a07dfb3ccbe800a69eed0ab49" }, - "harness_sha": "56a6fcf9f3cd846d7238a9233b40f00eed7f22b0", + "harness_sha": "2645047b3c77da9c18ed8019ff02fa4acb7c2d6b", "repo": "techcon_activity_graph", "schema_version": "1.0.0", "skills": { @@ -73,7 +101,9 @@ "techcon-claude-code-review-request": "1f8f0ce447c8a57aa2b6efb1da9e4efa33f9ae1d88875e686c0834e860638ffb", "techcon-claude-handoff-preparation": "55d7cfc812c5ba2ded68830feb710cd4c63c1464bca9fb8acb6528786a3e7976", "techcon-contract-auditor": "d8d8eadf0448065a5476971044f6738b1cd64f167e53167748ce5ee9d9801c08", + "techcon-cross-reference-integrity": "f5ba4a86d5e3954a5e319b174c400e24b2c75e4aff33cce45834000dc2254573", "techcon-cross-service-tester": "d9910ee55820c254405e65496740520898a5f5a74250e8e4e76e66e046af4a69", + "techcon-docs-language": "0b00f99ad0d6ab061a2625852a111360198d7c20211acdb24661ac927ea4ce15", "techcon-external-report-authoring": "bc99b1d241faaac7cf3ee39a5c858d5f600bba3b03eed3eb13eff57192756855", "techcon-fact-verification": "a60d6bd491e38d5f23701263219f0eed8e864674a75fd5d768e3a3c2c365c0e8", "techcon-grafana-monitoring-access": "db0250155ea7af2e6be9ba19fa4c15a9dd889af4ca6b0d2edbb9f45233ec3c2b", @@ -85,9 +115,15 @@ "techcon-markdown-docx-export": "e7ce41b3f916acc91aca00274ebd5c1f28da09abef2a3e52de5aa073c5242f69", "techcon-pre-implementation-contracts": "8a04631191754f6d8abe4de83c446967bf6a043a3d31d08f13c9af4ccfba780e", "techcon-production-safety": "bc1a6130855894fcc5ed17734d29bce610537f470547b2184e8269b4b85062a4", + "techcon-project-dashboard": "2b8082c04167c40e2c3beff22502b442dcf3c458375e04ab84374f555c0e60ea", + "techcon-public-surfaces": "45fe31ed85aee8de3e0a638795fc471ed3554275de096bbae450e45c6bb772fc", "techcon-report-synthesis-merge": "f4229c48764f0baa87d2cc53da87dc24dd52ba5a7a40c31064cac3ac7e877fd9", "techcon-research-first": "f3573c35a98d39b15e187cec3b38177da872c64e2d681144a80cf7e372e109e6", + "techcon-self-critique": "31a15cf4c52021de651ee8556608b38ae3540f77186d665cac8a15e0dd8c0147", + "techcon-session-digest": "7bf5d22a4dad8789ffc1125294c90420fbd8760eb94f11d4af3c962c06c8b0b2", "techcon-session-handoff": "63f2632765abe8ca1a6b8f3c416e13e1aa8cd3ec0d7743eacf32ac2038eee611", + "techcon-skill-improvement": "6fb2d9ce4ad30058006554601c1e76d0224299c64f301c2b2acee741c41524ea", + "techcon-surface-sync-audit": "abc934d3968a1214ab4a6ca905189b775afa48bd33d1989f7835edb7bae45283", "techcon-tz-authoring": "767fde98e2028be0196466b81ee6a2aa0303868c2f27c70f600cacaf140f38e1", "techcon-web-research-safety": "1ec49c66d46ad5c8ca9898027402c21cedb1ee8ecdb2c697b877725a1a5f05a7", "techcon-yc-cli": "f0235bd60b93d6001a731dd2d3c1873f6d9e24a88d1485df46178dcf57321dfe" @@ -97,8 +133,8 @@ "policy/ask.yaml": "46af1e1ee51be02c61c725a3aaef703855ce59a598cecda86961b27f2c3388a8", "policy/deny.yaml": "3226d91dba6960b35ef3660690efdf92e612fedd1e03b330a2492cb5af52e316", "policy/exec-profile.yaml": "509be446ef5a521068f7ba46f9a6d1f9763e8dee2cd3d8a27d0f86bd56f7cd48", - "policy/prompt.yaml": "6281ecd4837a3e2e8f843230b51d5b30ebe7119a50f560d2a4de38ec2b2e0832", - "policy/sandbox.yaml": "2bc653b92d341db06c726be56640815aa373de839efdcd8d3cf6ecff940338b5", + "policy/prompt.yaml": "717233c946de7adba1807afef2ddff53e9dd5d5f1bfb151d2ad4e4b9208dfe6e", + "policy/sandbox.yaml": "70004d6a8c9e8ed6bca08356b6749151a4f0ed74075586f8682e258ad7a4e67e", "roles/builder.yaml": "6de9aab8f20c1f3f3049760d43d86dd90191bf8944ddaaf5034d6a1e7803ae14", "roles/fixer.yaml": "c6215a1ef4f5ee5b27e39be7f908f82126f1b2a1b77c3a01943a121ead559cee", "roles/planner-reviewer.yaml": "da3d2a74f97dde94b14aa05117fac0705f7ce5942ba6c430d411f998e939fb37", diff --git a/.agents/skills/techcon-alert-export/SKILL.md b/.agents/skills/techcon-alert-export/SKILL.md index 0e85cef9..c4c1f8e3 100644 --- a/.agents/skills/techcon-alert-export/SKILL.md +++ b/.agents/skills/techcon-alert-export/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-alert-export description: Используй для выгрузки последних алертов мониторинга TechCon (статус, время, детали) — диагностика инцидента, сводка за период, проверка «замолчал ли алерт». -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Выгрузка алертов мониторинга diff --git a/.agents/skills/techcon-architecture-boundaries-template/SKILL.md b/.agents/skills/techcon-architecture-boundaries-template/SKILL.md index c2aa191c..d7a04416 100644 --- a/.agents/skills/techcon-architecture-boundaries-template/SKILL.md +++ b/.agents/skills/techcon-architecture-boundaries-template/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-architecture-boundaries-template description: Настрой arch-lint для репозитория со слоистой структурой (domain/infra, core/adapters): детект слоёв, запрет обратных зависимостей и циклов. Применяй при онбординге нового репозитория или по прямой просьбе проверить архитектурные границы. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Шаблон архитектурных границ diff --git a/.agents/skills/techcon-billing-protocol/SKILL.md b/.agents/skills/techcon-billing-protocol/SKILL.md index 7ac6898a..eabb5ddc 100644 --- a/.agents/skills/techcon-billing-protocol/SKILL.md +++ b/.agents/skills/techcon-billing-protocol/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-billing-protocol description: Используй для воспроизводимого снятия затрат Yandex Cloud любого репозитория TechCon — baseline-расчёт, прогноз бюджета, сверка свежести или сводка расходов. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Протокол снятия затрат TechCon diff --git a/.agents/skills/techcon-business-document-system/SKILL.md b/.agents/skills/techcon-business-document-system/SKILL.md index 9c5a7ca5..2c4001fe 100644 --- a/.agents/skills/techcon-business-document-system/SKILL.md +++ b/.agents/skills/techcon-business-document-system/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-business-document-system description: Используй при создании, правке или синхронизации бизнес-документов (стратегии, отчёты для стейкхолдеров, презентации), чтобы не смешивать их с инженерной документацией репозитория и не терять источник правды. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Business document system diff --git a/.agents/skills/techcon-claude-code-review-intake/SKILL.md b/.agents/skills/techcon-claude-code-review-intake/SKILL.md index aa2437f6..13db33eb 100644 --- a/.agents/skills/techcon-claude-code-review-intake/SKILL.md +++ b/.agents/skills/techcon-claude-code-review-intake/SKILL.md @@ -2,7 +2,7 @@ name: techcon-claude-code-review-intake description: Читает файл-результат ревью (frontmatter c полем verdict) после того как ревью помечено готовым, и продолжает работу по типу verdict — approved/changes-requested/needs-discussion/critique. allowed-tools: Read, Edit, Grep, Glob -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Intake результата ревью diff --git a/.agents/skills/techcon-claude-code-review-request/SKILL.md b/.agents/skills/techcon-claude-code-review-request/SKILL.md index 95b2c679..4ce8959b 100644 --- a/.agents/skills/techcon-claude-code-review-request/SKILL.md +++ b/.agents/skills/techcon-claude-code-review-request/SKILL.md @@ -2,7 +2,7 @@ name: techcon-claude-code-review-request description: Запрос активного ревью у другого агента/ревьюера — создаёт brief с файлами, endpoint'ами, командами и требованиями к доступу. Применять перед архитектурными изменениями, миграциями или по прямому запросу критики. allowed-tools: Read, Write, Grep, Glob -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Запрос активного ревью diff --git a/.agents/skills/techcon-claude-handoff-preparation/SKILL.md b/.agents/skills/techcon-claude-handoff-preparation/SKILL.md index 2feb0349..6ce79229 100644 --- a/.agents/skills/techcon-claude-handoff-preparation/SKILL.md +++ b/.agents/skills/techcon-claude-handoff-preparation/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-claude-handoff-preparation description: Используй, когда задача лучше подходит для Claude: фронтенд, дизайн, HTML, презентации, дашборды, упаковка идей, бизнес- и продуктовое планирование. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Подготовка пакета передачи в Claude diff --git a/.agents/skills/techcon-contract-auditor/SKILL.md b/.agents/skills/techcon-contract-auditor/SKILL.md index 4c9f4f15..adf85515 100644 --- a/.agents/skills/techcon-contract-auditor/SKILL.md +++ b/.agents/skills/techcon-contract-auditor/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-contract-auditor description: Найди рассинхроны контрактов между сервисами TechCon — polling-роуты, envelope ответа, коды ошибок, имена очередей/стримов, auth, /health. Применяй при аудите интеграции 2+ сервисов или подозрении на несовместимость. Выдаёт diff-таблицу с severity. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Аудитор межсервисных контрактов diff --git a/.agents/skills/techcon-cross-reference-integrity/SKILL.md b/.agents/skills/techcon-cross-reference-integrity/SKILL.md new file mode 100644 index 00000000..b31c7123 --- /dev/null +++ b/.agents/skills/techcon-cross-reference-integrity/SKILL.md @@ -0,0 +1,77 @@ +--- +name: techcon-cross-reference-integrity +description: Используй после правки, которая меняет утверждение о системе (правило, файл, флаг, число, хост, имя, путь) — найди все места, где оно упомянуто, и добейся согласованности. Исправление, дошедшее до одного места из восьми, не завершено. +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b +--- +# Согласованность ссылок — исправление, которое не разошлось по всем местам, не исправление + +## Когда + +Сразу после любой правки, меняющей утверждение, на которое могут ссылаться в другом месте: +переименован или перенесён файл, изменено правило, флаг, число, имя хоста, идентификатор, +путь. Также перед закрытием задачи, если в ней что-то отмечено устаревшим, отозванным или +перенесённым. + +## Зачем + +Самый частый класс поломок в документации и конфигурации — не ошибка в одном месте, а +верная правка, дошедшая до одного места из нескольких. Типичные случаи: + +- правило помечено «отозвано» в шапке документа и осталось «готовым к копированию» в конце + того же файла; +- документ помечен устаревшим, но остаётся заявленным источником для десятка других; +- уборка перенесла тестовые данные в архив — тесты покраснели и молчали неизвестно сколько; +- файл убрали в архив, а код продолжал его воссоздавать при каждом запуске; +- документ убрали, а конфигурация проверки секретов продолжала на него ссылаться. + +Во всех случаях правка была верной. Ошибкой было считать её законченной. + +## Шаги + +1. **Собрать поисковые термины.** Не только имя файла: идентификатор правила, имя хоста, + имя флага, имя функции, число, старый и новый путь, прежнее название. +2. **Искать во всех контурах.** Документация одного каталога — недостаточно: упоминания + живут в конфигурации CI, в скриптах, в тестах, в соседних репозиториях. + + ```bash + grep -rn "<термин>" docs/ *.md .github/workflows/ scripts/ tests/ + grep -rn "<термин>" <каталог-с-репозиториями> --include='*.md' --include='*.py' --include='*.yml' + ``` +3. **Отнести каждое попадание ровно к одному классу.** Четвёртого нет. + + | Класс | Что делать | + |---|---| + | согласовано | ничего | + | противоречит | починить сейчас: это часть текущей работы, а не отдельная задача | + | требует решения владельца | завести запись в трекере или реестре открытых проблем с доказательством | + +4. **Прогнать машинную проверку ссылок**, если она есть в репозитории (проверка битых + ссылок, линтер документации, тест на пути). Условие закрытия: ноль новых нарушений. + Зафиксированный заранее долг не растёт; его рост — регрессия, а не «так было». + +## Запреты + +- «Замечено, разберёмся позже» без записи — запрещено. Именно так теряются случаи выше: + расхождение видели, но нигде не зафиксировали. +- Не считать поиск по одному контуру достаточным. +- Не заменять слово автоматически по всему тексту без разбора мест: автозамена однажды + превратила заголовок документа в путь к самому себе. +- Не дописывать пометку «(архив)» скриптом в конец строки: на перенесённом тексте маркер + окажется посреди предложения. Пометку ставят разбором места, путь заменяют автоматически. +- Не чинить ссылки внутри самого архива: архив вправе цитировать архив. + +## Ловушки + +- **Абсолютные пути важнее относительных.** Если в корпусе преобладает абсолютная форма, + правка только относительной чинит меньшинство: в реальном случае 13 ссылок из 52. +- **Голое имя переживает переезд файла, путь — нет.** Проверка, сопоставляющая по имени + файла, не заметит перемещения; ломаются только ссылки с путём. Ищите именно их. +- **Заголовок — не ссылка.** Убедитесь, что меняете ссылку, а не название. +- **Число, продублированное рядом со ссылкой на источник, протухает так же, как копия + текста.** Ищите и числа: количество скиллов, гейтов, репозиториев. + +## Результат + +Короткая запись в отчёте или журнале работы: сколько попаданий найдено, сколько починено, +сколько превращено в записи для владельца, что показала машинная проверка. Если поиск шёл +не во всех контурах, сказать какие пропущены и почему. diff --git a/.agents/skills/techcon-cross-service-tester/SKILL.md b/.agents/skills/techcon-cross-service-tester/SKILL.md index c634af56..f321c5c0 100644 --- a/.agents/skills/techcon-cross-service-tester/SKILL.md +++ b/.agents/skills/techcon-cross-service-tester/SKILL.md @@ -2,7 +2,7 @@ name: techcon-cross-service-tester description: Пишет и валидирует кросс-сервисные E2E интеграционные тесты между сервисами TechCon-экосистемы (upload -> classify -> detect -> search -> render). Применяй, когда нужно найти конкретный сломанный контракт между двумя сервисами, а не просто зафиксировать что тест упал. allowed-tools: Bash(pytest:*), Bash(httpx:*) -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Кросс-сервисный тестировщик TechCon diff --git a/.agents/skills/techcon-docs-language/SKILL.md b/.agents/skills/techcon-docs-language/SKILL.md new file mode 100644 index 00000000..015e9b87 --- /dev/null +++ b/.agents/skills/techcon-docs-language/SKILL.md @@ -0,0 +1,185 @@ +--- +name: techcon-docs-language +description: Используй при написании или правке README, документации, справочника API, витрин, текстов интерфейса, задач и отчётов, диаграмм и комментариев кода — язык по аудитории, словарь замен, запреты, диаграммы D2, светлая тема. +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b +--- +# Документация и язык по стандартам Техкона + +## Когда + +Любой текст, который прочтёт человек: README, `docs/`, справочник API, витрина, текст +интерфейса, описание задачи, отчёт, подпись диаграммы, комментарий в коде. Сначала +определи читателя, потом пиши: одна и та же фраза годится для разработчика и запрещена +для пользователя. + +## Шаг 1. Определи аудиторию + +| аудитория | поверхности | запрещено | +|---|---|---| +| пользователь | витрины, тексты интерфейса | адреса и имена машин, пути к файлам, хеши, имена очередей; вся лексика уровня `translate`; транслитерация | +| интегратор | справочник API (`docs/PUBLIC_API.md`), спецификация OpenAPI | внутренние поля (`fence_token`, `worker_id`), ключи Redis, имена хостов; лексика `translate`; допустимы устоявшиеся термины вроде «эндпоинт» | +| разработчик | `AGENTS.md`, `docs/`, код, runbook | лексика `translate`; описательный текст только по-русски; `transliterate_ok` разрешена | +| менеджмент | задачи трекера, отчёты | пути, хеши, номера запросов на слияние; переводится вся лексика словаря, включая `transliterate_ok` | + +Внутрянка распознаётся образцом, а не смыслом: IP-адрес, имя хоста, путь вида +путь в домашний каталог, хеш из 7 и более шестнадцатеричных знаков, имя очереди. Нашёл образец в +тексте для пользователя или менеджмента — убери или замени эффектом для читателя. + +## Шаг 2. Словарь: два уровня + +- `translate` — переводится всегда, кроме технического слоя (код, runbook, справочник + для разработчика). +- `transliterate_ok` — транслитерация допустима только в техническом слое; у + пользователя и менеджмента переводится. + +Кратко, полный список — `references/dictionary.md`: + +| плохо | хорошо | уровень | +|---|---|---| +| деплой, задеплоить | выкатка, выкатить | translate | +| роллбэк | откат | translate | +| фикс, пофиксить | исправление, исправить | translate | +| тикет, ишью | задача | translate | +| мерж, смёржить | слияние, слить | translate | +| билд, релиз | сборка, выпуск | translate | +| бэкап | резервная копия | translate | +| ретрай | повтор | translate | +| пейлоад | тело запроса | translate | +| воркер | обработчик | transliterate_ok | +| таймаут | превышение времени ожидания | transliterate_ok | +| эндпоинт | эндпоинт | transliterate_ok | + +Не переводим: имена полей JSON, HTTP-методы, идентификаторы в коде, названия технологий +(Docker, Redis, FastAPI), имена команд. Всё это — в обратных кавычках, правила языка +такой фрагмент не судят. + +Если слова нет в словаре, а русский эквивалент есть и понятен — бери русский. Если +эквивалента нет и термин устоялся (`webhook`, `health-check`) — оставляй в техническом +слое и не тащи в пользовательский. + +## Шаг 3. Общие запреты + +1. **Mermaid.** Диаграммы только на D2 (шаг 5). +2. **Эмодзи в заголовках.** Заголовки строчные, без значков и без «Заголовка Каждого + Слова С Большой Буквы». +3. **IP-адреса и имена машин** в тексте для пользователя, менеджмента и интегратора. + Адрес и роль машины — в главном файле инфраструктуры, а не в памяти и не в + документации. +4. **Внешние `src`, `href`, `@import`** в `.html`: страница автономна, при открытии не + ходит в сеть. Явные ссылки для чтения (DOI, статья) разрешены. +5. **Пустые обороты («нейрослоп»).** Не пиши: `комплексный`, `бесшовный`, `мощный`, + `robust`, `seamless`, `в современном мире`, `стоит отметить`, `играет ключевую роль`, + `широкий спектр`, `революционный`. Слово из списка почти всегда заменяется числом, + именем или удаляется целиком — см. примеры ниже. +6. **Секреты и домашние пути** в любом файле репозитория. Только `${ПЕРЕМЕННАЯ}`. + +## Шаг 4. Справочник API (интегратор) + +Формат и правила — `references/api-docs.md`. Главное: + +- русский язык; `message` ошибок, `title`, `summary`, `description`, `Field(description=...)` + и примеры — по-русски; `code` ошибки — `SCREAMING_SNAKE_CASE`; +- обязательны: версия `X.Y.Z`, таблица сред, матрица защиты (даже без аутентификации), + формат ответов, коды ошибок, сквозной сценарий в конце; +- примеры — `curl` и Python `httpx`, пригодные для копирования как есть; +- пример ответа совпадает с реальным контрактом, а не с надеждами; +- никаких деталей реализации: очереди, владелец и токен захвата, идентификаторы + обработчиков, модель видеокарты, экономика инфраструктуры. Называй только то, что + меняется для читателя; +- страница-переходник или портал не становится вторым полным справочником, а + ссылается на точный документ. + +## Шаг 5. Диаграммы: только D2 + +- файлы `docs/diagrams/*.d2`, в каждом репозитории минимум `architecture.d2`; + рендер в `.svg` через Kroki; +- подписи узлов и стрелок по-русски, заголовок строчный; +- начало файла: `vars: { d2-config: { theme-id: 200 } }` для тёмных диаграмм разработчика; + цвета для тёмной диаграммы: фон `#1A1722`, граница `#3D3654`, акцент `#8075FF`, + текст `#E8E6F0`, внешние системы `#2A2640`; +- UML-последовательности — PlantUML, схема БД — DBML; Mermaid не использовать нигде. + +```d2 +direction: right +service: { + label: "Сервис паспортов" + api: "HTTP-интерфейс" + worker: "Обработчик задач" +} +клиент -> service.api: "запрос по HTTPS" +service.api -> service.worker: "очередь задач" +``` + +## Шаг 6. Интерфейс: светлая тема и токены + +Правило одно: сервис для клиента — светлая тема; инструмент для разработчика и +эксплуатации — тёмная. + +Токены светлой темы (клиентский слой): + +| элемент | значение | +|---|---| +| фон страницы | `#FFFFFF` | +| текст | `#1E1B24`; вторичный `#4B4453`; приглушённый `#7A7286` | +| ссылки | `#8075FF` (обязательно; `#AEB8FE` на белом нечитаем) | +| поверхность карточки | `#F4F4F6`, граница `#E0DDE6` | +| основная кнопка | фон `#8075FF`, текст `#FFFFFF` | +| панель навигации | остаётся тёмной: `#4B4453`, нижняя линия `2px solid #8075FF` | +| метка успеха / предупреждения / ошибки (текст) | `#16A34A` / `#D97706` / `#DC2626` | + +Цвета берём токенами (`var(--...)`), а не разбросанными шестнадцатеричными значениями. +Шрифт — Inter. `#D9ED92` — подсветка бренда, а не цвет предупреждения. Статус +передаётся текстом, а не только цветом; интерфейс работает с клавиатуры. + +## Шаг 7. Задачи и отчёты (менеджмент) + +Тело задачи — четыре блока целиком, читатель без доступа к репозиторию понимает суть: + +``` +## Что происходит — наблюдаемый факт, 1–2 предложения, без причин и решений +## Почему это важно — чей труд, деньги или риск; что будет, если не делать +## Что сделать — конкретное действие, не «изучить» и не «оптимизировать» +## Как поймём, что готово — один проверяемый признак: команда, число, наблюдение +``` + +Ссылка на файл репозитория допустима отдельной строкой «Ссылка:» внизу, но не вместо +текста. Внешних людей называй ролями, а не именами. + +Ответ при закрытии — один комментарий до 600 знаков, три строки: +`Сделал.` — что изменено; `Проверил.` — что предъявлено (команда, число; не «работает»); +`Осталось.` — «ничего» или один хвост. + +## Шаг 8. Комментарии в коде + +Комментарий отвечает на вопрос «почему», а не «что»: ограничение, неочевидный выбор, +ловушка. Не пиши историю ревью («по замечанию ревьюера», «исправлено в раунде 3», +«раньше было иначе») — она живёт в истории коммитов и в `docs/history/`. Комментарий, +пересказывающий следующую строку, удаляй. + +## Примеры «плохо → хорошо» + +| плохо | хорошо | +|---|---| +| `## 🚀 Быстрый старт` | `## быстрый старт` | +| Комплексное и бесшовное решение для мощной обработки документов. | Сервис разбирает паспорт за 4 секунды и возвращает 12 полей. | +| Стоит отметить, что после деплоя воркер на машине с адресом из внутренней сети подхватывает задачу. | После выкатки обработчик берёт задачу из очереди; от вас действий не нужно. (для интегратора: без адреса и без описания очереди) | +| Пофиксили ретрай, релиз в пятницу. | Исправили повтор запроса, выпуск в пятницу. (менеджмент) | +| `flowchart LR` в блоке Mermaid | файл `architecture.d2` | +| `# нужно для ревью №2: Иван просил добавить` | `# ключ читаем дважды: первый ответ бывает пустым при холодном старте` | +| «Работает, проверено.» | «Проверил. `curl /health` вернул 200 и версию 1.4.2.» | + +## Запреты + +- Не правь текст под гейт, не поняв читателя: обход образца (адрес разбит точкой, слово + латиницей) — тот же дефект, только скрытый. +- Не копируй справочник API в портал и в README: одна каноническая страница, остальное + ссылки. +- Не подтверждай факт документом: адреса и роли машин, статус слияния — только живой + замер (см. `techcon-fact-verification`). + +## Результат + +Текст соответствует аудитории; в нём нет Mermaid, эмодзи в заголовках, IP-адресов, +слов уровня `translate` вне технического слоя и пустых оборотов; диаграммы — D2; +интерфейс клиента светлый; комментарии кода объясняют «почему». Перед сдачей перечитай +текст глазами читателя из шага 1. diff --git a/.agents/skills/techcon-docs-language/references/api-docs.md b/.agents/skills/techcon-docs-language/references/api-docs.md new file mode 100644 index 00000000..535696bc --- /dev/null +++ b/.agents/skills/techcon-docs-language/references/api-docs.md @@ -0,0 +1,35 @@ +# справочник API — структура + +``` +# <Название сервиса> — справочник API +## общая информация версия X.Y.Z, ссылки на ReDoc и openapi.json +## среды прод, дев-стенд, локальная +## аутентификация метод + матрица защиты (эндпоинт, метод, нужен ли токен) +## общие ограничения нагрузка (число или «без ограничений»), размер запроса, время ожидания +## формат ответов бизнес-ответ, ошибка, проверка состояния, статус асинхронной задачи +### коды ошибок код, HTTP, описание +## эндпоинты описание, аутентификация, таблица полей, пример ответа, ошибки +## сквозной сценарий curl и Python httpx +``` + +Правила: + +1. Бизнес-ответ: `{"ok": true, "data": {...}}`; ошибка: `{"ok": false, "error": {"code", "message", "detail"}}`, + `detail` есть всегда (объект или `null`), `message` по-русски. +2. Без обёртки: `GET /health`, `GET /ready`, статус асинхронной задачи, бинарные файлы, + HTML, SSE, `204`. +3. Статус существующей задачи всегда `200`, состояние в поле `status`; нет задачи — `404`. +4. Основной читаемый источник — ReDoc на `/docs`; `openapi.json` — машинный источник. +5. Ограничения (`401/404/422/429/503`, конечные статусы, срок хранения, роль webhook) + совпадают в справочнике, живой спецификации и портале. Расхождение — дефект. +6. Примеры запросов синтаксически верны и работают при копировании; заглушка, не + проходящая контракт, считается дефектом. +7. Тесты документации закрепляют коды, маршруты, поля и сроки, а не английские фразы. + +Проверка качества (пять критериев): минимум англицизмов; ноль внутренней кухни (имена +контейнеров, переменные окружения, внутренние хосты и порты, ссылки на процесс выкатки); +соответствие живой спецификации один к одному; рабочие примеры; лаконичность. + +Плохо: «дождитесь, пока обработчик на внутреннем хосте подхватит задачу; подставьте +`REDIS_URL` в compose». Хорошо: «обработка асинхронная; опрашивайте статус задачи каждые +2 секунды». diff --git a/.agents/skills/techcon-docs-language/references/dictionary.md b/.agents/skills/techcon-docs-language/references/dictionary.md new file mode 100644 index 00000000..6565a14a --- /dev/null +++ b/.agents/skills/techcon-docs-language/references/dictionary.md @@ -0,0 +1,41 @@ +# словарь замен (полный) + +Уровень `translate` — переводить везде, кроме технического слоя. Уровень `transliterate_ok` — +допустимо в коде, runbook и документации разработчика, запрещено у пользователя и в +управленческом тексте. + +| плохо | хорошо | уровень | +|---|---|---| +| деплой, задеплоить, деплоить | выкатка, выкатить | translate | +| роллбэк, откатить деплой | откат, вернуть прежнюю версию | translate | +| фикс, пофиксить, зафиксить | исправление, исправить | translate | +| ишью, тикет | задача | translate | +| мерж, смёржить, замержить | слияние, слить | translate | +| пул-реквест | запрос на слияние | translate | +| релиз | выпуск | translate | +| билд | сборка | translate | +| автоскейлинг | автоматическое добавление машин | translate | +| хелсчек | проверка живости | translate | +| дрейф | расхождение | translate | +| ретрай | повтор | translate | +| бэкап | резервная копия | translate | +| секрет (пароль, ключ) | ключ доступа | translate | +| митигация | временная мера | translate | +| рут-кауз | первопричина | translate | +| постмортем | разбор | translate | +| перформанс | быстродействие | translate | +| легаси | устаревший код | translate | +| пейлоад | тело запроса | translate | +| воркер | обработчик | transliterate_ok | +| таймаут | превышение времени ожидания | transliterate_ok | +| эндпоинт | эндпоинт | transliterate_ok | + +Слово «драйв» в значении «вести, управлять» не путать с «дрейф». + +Калькам вне словаря тоже давай русскую замену: имплементировать → реализовать, инстанс → +экземпляр, кастомный → настраиваемый, апрувить → согласовывать, дебажить → отлаживать, +хендлить → обрабатывать, коннект → соединение, рендерить → отрисовывать. + +Не трогать (устоялись): API, JSON, webhook, HTTP(S), URL, ID, токен, SDK, CLI, UUID, cron. + +Код и литералы в обратных кавычках проверка языка не судит. diff --git a/.agents/skills/techcon-external-report-authoring/SKILL.md b/.agents/skills/techcon-external-report-authoring/SKILL.md index f9eeb246..9f1ea5bd 100644 --- a/.agents/skills/techcon-external-report-authoring/SKILL.md +++ b/.agents/skills/techcon-external-report-authoring/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-external-report-authoring description: Используй при подготовке внешнего отчёта — Markdown для менеджмента или HTML-дашборд для руководства — по организации, проекту или группе проектов. Числа берутся только из готового файла с посчитанными фактами, никогда не придумываются агентом. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Авторство внешних отчётов (менеджмент/руководство) diff --git a/.agents/skills/techcon-fact-verification/SKILL.md b/.agents/skills/techcon-fact-verification/SKILL.md index 37595a79..6b9e2406 100644 --- a/.agents/skills/techcon-fact-verification/SKILL.md +++ b/.agents/skills/techcon-fact-verification/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-fact-verification description: Используй перед тем как утверждать факт о состоянии системы (статус PR, значение конфига, состояние ВМ/сервиса, содержимое ветки) — сверяй с живым источником (git/gh/ssh/API), а не с документом или памятью. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Факт-проверка — документ никогда не источник факта о мире diff --git a/.agents/skills/techcon-grafana-monitoring-access/SKILL.md b/.agents/skills/techcon-grafana-monitoring-access/SKILL.md index 6867de75..bd6d5ed8 100644 --- a/.agents/skills/techcon-grafana-monitoring-access/SKILL.md +++ b/.agents/skills/techcon-grafana-monitoring-access/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-grafana-monitoring-access description: Используй при проверке живого состояния мониторинга (Grafana, Alertmanager, Homer, Gatus, GlitchTip) — когда нужно отделить живую истину дашбордов от документов, найти дубли и устаревшие поверхности, подготовить вывод, готовый для оператора. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Доступ к мониторингу Grafana diff --git a/.agents/skills/techcon-infra-access-map/SKILL.md b/.agents/skills/techcon-infra-access-map/SKILL.md index 4a8a005a..13a65e08 100644 --- a/.agents/skills/techcon-infra-access-map/SKILL.md +++ b/.agents/skills/techcon-infra-access-map/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-infra-access-map description: Карта доступов к инфраструктуре TechCon — SSH/VM, GitHub, GitLab, YC CLI, Linear — и разделение read-only/operator-gated команд. Применяй в начале любой задачи, трогающей инфраструктуру, чтобы не гадать креды и адреса по памяти. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Инфраструктурный доступ TechCon diff --git a/.agents/skills/techcon-infra-access/SKILL.md b/.agents/skills/techcon-infra-access/SKILL.md index 6c31678d..1f9080d8 100644 --- a/.agents/skills/techcon-infra-access/SKILL.md +++ b/.agents/skills/techcon-infra-access/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-infra-access description: Используй, когда задача касается SSH, cloud CLI, бастионов, ProxyJump, VPN, приватных ВМ или учётных данных оператора в любом репозитории TechCon. Держит истину о доступах без секретов в тексте, приоритет — локальный держатель секрета, чувствительные действия — только с подтверждением человека. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Доступ к инфраструктуре diff --git a/.agents/skills/techcon-knowledge-system/SKILL.md b/.agents/skills/techcon-knowledge-system/SKILL.md index 0dc94c30..a5b44fec 100644 --- a/.agents/skills/techcon-knowledge-system/SKILL.md +++ b/.agents/skills/techcon-knowledge-system/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-knowledge-system description: Перед сохранением любого артефакта, заметки или документа в репозитории — прочитай этот скилл. Описывает, куда какое знание кладётся и как оно потом находится агентом. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Knowledge System — куда кладём знания в репозитории diff --git a/.agents/skills/techcon-large-session/SKILL.md b/.agents/skills/techcon-large-session/SKILL.md index 64629848..d7460d74 100644 --- a/.agents/skills/techcon-large-session/SKILL.md +++ b/.agents/skills/techcon-large-session/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-large-session description: Используй, когда задача имеет ≥4 независимых частей (адверсарная критика, параллельное исследование, широкий аудит репозитория) — реши, нужен ли Claude Workflow / Codex techcon-fanout, а не цепочка одиночных вызовов агента. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Большие сессии: Workflow / techcon-fanout вместо цепочки агентов diff --git a/.agents/skills/techcon-linear-governance/SKILL.md b/.agents/skills/techcon-linear-governance/SKILL.md index b5b3d876..42b48671 100644 --- a/.agents/skills/techcon-linear-governance/SKILL.md +++ b/.agents/skills/techcon-linear-governance/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-linear-governance description: Используй при любой правке Linear (issue, статус, проект, комментарий) — сначала объясни что и зачем меняешь, дождись согласия и только после этого мутируй. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Linear governance — explain-then-mutate diff --git a/.agents/skills/techcon-markdown-docx-export/SKILL.md b/.agents/skills/techcon-markdown-docx-export/SKILL.md index 60cf6239..f1b693d4 100644 --- a/.agents/skills/techcon-markdown-docx-export/SKILL.md +++ b/.agents/skills/techcon-markdown-docx-export/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-markdown-docx-export description: Используй, когда Markdown-документ нужно опубликовать как читаемый .docx для коллег или руководства — .docx всегда производный артефакт, не редактируемый источник. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Markdown → DocX export diff --git a/.agents/skills/techcon-pre-implementation-contracts/SKILL.md b/.agents/skills/techcon-pre-implementation-contracts/SKILL.md index 6df09811..9efe15e0 100644 --- a/.agents/skills/techcon-pre-implementation-contracts/SKILL.md +++ b/.agents/skills/techcon-pre-implementation-contracts/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-pre-implementation-contracts description: Перед написанием кода зафиксируй применимые контракты (проблема, источник истины, возможности, тесты, миграция, деплой, наблюдаемость). Применяй перед реализацией любой нетривиальной фичи, бага или изменения инфраструктуры — до первой строки кода. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Pre-Implementation Contracts — контракты перед реализацией diff --git a/.agents/skills/techcon-production-safety/SKILL.md b/.agents/skills/techcon-production-safety/SKILL.md index 4db5b042..a1da86f8 100644 --- a/.agents/skills/techcon-production-safety/SKILL.md +++ b/.agents/skills/techcon-production-safety/SKILL.md @@ -1,7 +1,7 @@ --- name: techcon-production-safety description: Используй, когда задача касается прода, деплоя, БД, миграций, облака, Kubernetes, Terraform, Yandex Cloud, релизов или любых деструктивных операций. -harness: org@56a6fcf9f3cd846d7238a9233b40f00eed7f22b0 +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b --- # Production safety diff --git a/.agents/skills/techcon-project-dashboard/SKILL.md b/.agents/skills/techcon-project-dashboard/SKILL.md new file mode 100644 index 00000000..23a84f1d --- /dev/null +++ b/.agents/skills/techcon-project-dashboard/SKILL.md @@ -0,0 +1,93 @@ +--- +name: techcon-project-dashboard +description: Используй при сборке или правке версионируемого дашборда проекта (HTML/данные) для руководства и команды — у каждого числа источник, дата, единица, знаменатель; конфликт источников виден; «нет данных» не ноль. +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b +--- +# Дашборд проекта: числа с происхождением, новая версия — новый файл + +## Когда + +Ты собираешь или меняешь дашборд, срез или сводку статуса проекта, где читатель принимает +решения по числам. К исходным данным проекта (замерам, отчётам, записям) скилл не относится: +их не правят ради красивого дашборда, дашборд только читает их. + +## Шаги + +1. **Найди первичный источник каждого числа** до вёрстки. Производный файл (HTML, сводный + JSON) руками не правится: правится источник или сборщик, потом файл пересобирается. +2. **Опиши число записью** в файле данных, отдельно от вёрстки. Обязательные поля: + значение, единица, знаменатель («из скольких»), источник (файл, команда, запрос), + дата среза. Нет любого поля — числа на дашборде нет. +3. **Отметь отсутствие данных явно**: значение `null` и причина («не замерялось», «источник + недоступен»). Ноль — это замер, который дал ноль. На странице «нет данных» выглядит иначе, + чем «0»: другой текст, полый маркер, пунктир на графике. +4. **Покажи конфликт источников**, а не выбирай победителя молча: обе величины, их источники, + кто отвечает за разбор и следующее действие. Победитель выбирается только по основанию, + которое записано рядом (например, «замер свежее», «источник первичный»). +5. **Не смешивай оси**: рубли с процентами, штуки с долями, разные периоды в одной шкале. + Разные знаменатели рядом — только с подписью каждого. Ось не с нуля — только с явной + пометкой «шкала начинается с N». +6. **Собери одной командой** из файла данных. Сборка детерминирована: без текущего времени в + тексте, без случайного порядка, с сортировкой ключей. Дата среза берётся из данных. +7. **Проверь детерминированность**: собери дважды, сравни результат побайтно. Различие — дефект + сборщика, а не «допустимая погрешность». +8. **Выпусти новую версию новым файлом** с датой или номером в имени. Писать её нужно с нуля + из данных, а не правкой предыдущей: правка накапливает хвосты отвергнутых решений. Прежние + версии не трогаются, не переименовываются и не удаляются. +9. **Прогони проверки** (раздел ниже) и только потом показывай владельцу или читателям. + +## Два слоя читателя + +Дашборд читают двое, и это два разных текста. + +- **Пользователь** (руководитель, коллега из производства): простыми словами, без имён + внутренних систем, без идентификаторов задач и коммитов, заголовок — сделанное, а не + признание промаха. Только то, что помогает решить. +- **Разработчик**: источники, команды пересборки, идентификаторы, схема данных, журнал + конфликтов. Живёт в отдельном блоке или отдельном файле рядом с версией. + +Пользовательский слой не ссылается на разработческий («см. файл X») вместо объяснения: он +самодостаточен. Разработческий слой не подменяет числа пользовательского — он их +обосновывает. Подробности и проверки — `references/01-vzglyad-rukovoditelya.md`. + +## Проверки перед выпуском + +- у каждого числа заполнены все пять полей записи (значение, единица, знаменатель, источник, дата); +- нигде «нет данных» не превратилось в 0 (поиск `null`-значений по итоговому тексту); +- метрика имеет смысл: если базовая доля явления близка к 0 или 100 %, процент вводит в + заблуждение — такой показатель не публикуется; +- итоги пересчитаны сборщиком, а не набраны в тексте; +- повторная сборка даёт тот же файл; +- слова пользовательского слоя проверены по словарю языка (перевод везде, кроме кода и имён + команд); нет пустых оборотов; +- в файле нет секретов, адресов машин и домашних путей; +- кодировка UTF-8, `` первым в `
`; числа с неразрывным пробелом + U+00A0 (узкий U+202F на части телефонов рисуется квадратом); +- вёрстка: светлая и тёмная темы, широкие графики в контейнере с горизонтальной прокруткой, + страница не прокручивается вбок; каждая графическая ячейка подписана и имеет подсказку. + +Подробный порядок вёрстки и выпуска — `references/02-vyorstka-i-vypusk.md`. + +## Запреты + +- Править производный файл вручную вместо источника или сборщика. +- Показывать число без источника и даты «потому что все и так знают». +- Заполнять пропуск нулём, средним или значением предыдущей недели без пометки. +- Сглаживать конфликт источников до одной цифры. +- Оставлять на графике плато или тренд там, где нет замеров: пропуск рисуется как пропуск. +- Переписывать старую версию, «чтобы ссылки не ломались»: ссылки ведут на старое имя, новое + — новый файл. +- Хранить отвергнутый компонент «на будущее»: убирай его вместе со стилями в той же версии, + где он перестал использоваться. +- Выносить внутреннюю кухню (как собран срез, чей это отчёт, номера задач) в пользовательский слой. + +## Результат + +Новый файл версии, файл данных с записями чисел, команда пересборки, результат +повторной сборки (идентична) и короткий перечень проверок с отметками. Если хоть одна +проверка не пройдена, в отчёте скилла это первая строка, а не сноска. + +## Чего скилл не закрывает + +Достоверность самих замеров. Дашборд честно показывает то, что лежит в источнике; проверка, +что источник соответствует миру, — `techcon-fact-verification`. diff --git a/.agents/skills/techcon-project-dashboard/references/01-vzglyad-rukovoditelya.md b/.agents/skills/techcon-project-dashboard/references/01-vzglyad-rukovoditelya.md new file mode 100644 index 00000000..eca3c099 --- /dev/null +++ b/.agents/skills/techcon-project-dashboard/references/01-vzglyad-rukovoditelya.md @@ -0,0 +1,52 @@ +# Взгляд руководителя: что показывать и как + +Дашборд — самостоятельная сводка для решения, а не витрина. Читатель не знает, как работает +проект изнутри, и не должен догадываться. + +## Что показывать + +- Состояние: что сделано, что в работе, что заблокировано, у каждого пункта дата среза. +- Динамика: главная линия отдельно от прочих слоёв. Если общий расход или объём вырос из-за + нового направления, скажи это рядом с графиком, а не оставляй читателю угадывать. +- Неопределённость: где данных нет или они расходятся — отдельным заметным блоком, не мелким + шрифтом. +- Итоговую сумму подводи в конце, после состава: цифра без состава создаёт впечатление до + того, как читатель увидел, из чего она сложена. + +## Чего не показывать + +- Разделы «дальше», «решения», «рекомендации» в отчёте о текущем состоянии: это план, а не срез. + Если план нужен, он отдельный документ. +- Метрики, чья логика подсчёта не отражает заявленное. Пример: доля коммитов «в соавторстве + с ИИ» по трейлеру, когда почти все коммиты недели такие: показатель систематически врёт. + Лучше не иметь показателя, чем иметь вводящий в заблуждение. +- Повтор неизменного факта как новости недели. +- Оправдательные подписи у расчётных или гипотетических цифр. +- Резкий разрыв «было/стало», подтянутый выбором шкалы: он подрывает доверие к честным + соседним цифрам. +- Доли `n/n` в кольцах, цепочки точек прогресса и две крупные цифры рядом без графики: + на практике дают наложение подписей и выглядят как украшение. + +## Язык + +Пользовательский слой: простые слова вместо внутренних терминов («внешний доступ узлов», а не +имя сетевого механизма; «резервные копии дисков», а не «снимки»). Заголовки без цифр и без +оценок. Слова «заказчик» и «владелец» — только если читатель действительно внешний. + +## Динамика и отсутствие замеров + +- Точка без замера: полый маркер и пунктир; до первого замера — заштрихованная зона. +- Ось не с нуля допустима, если с нуля разницу не видно, и подписана. +- Потолок (физический предел значения) рисуется пунктиром. Слово «плато» — только когда + следующие замеры его подтвердили. +- Много событий: нумерованные отметки на графике, расшифровка под ним, ниже журнал по + периодам с меткой у записи. + +## Два слоя: что куда + +| Содержание | Пользователь | Разработчик | +|---|---|---| +| результат и его смысл | да | нет | +| источник, команда, схема | нет | да | +| идентификаторы задач и коммитов | нет | да | +| журнал конфликтов источников | итог: «данные расходятся», кто разбирает | полностью | diff --git a/.agents/skills/techcon-project-dashboard/references/02-vyorstka-i-vypusk.md b/.agents/skills/techcon-project-dashboard/references/02-vyorstka-i-vypusk.md new file mode 100644 index 00000000..1bd1bf70 --- /dev/null +++ b/.agents/skills/techcon-project-dashboard/references/02-vyorstka-i-vypusk.md @@ -0,0 +1,42 @@ +# Вёрстка и выпуск + +## Данные и сборщик + +- Файл данных лежит рядом с версией, с записями чисел (значение, единица, знаменатель, + источник, дата среза). Схема данных проверяется сборщиком; запись без поля — ошибка сборки, + а не пустая ячейка. +- Сборщик читает только файл данных. Чтение живых систем — отдельный шаг до сборки, его + результат сохраняется в файл данных с датой замера. +- Детерминированность: сортировка ключей, фиксированные локаль и часовой пояс, дата из + данных, никакого `now()` в тексте. + +## Версии + +- Имя: `<название>-<дата>.html` (и при нескольких за день — номер). Файл данных — с тем же + суффиксом. +- Новая версия строится с нуля из файла данных. Что было отвергнуто читателем, в новую версию + не переносится и не оставляется мёртвым кодом. +- Принятая версия и её файл чисел сохраняются вместе. Квартальные и годовые сводки собираются + из этих файлов: прошлые версии не удаляются и не переименовываются. + +## Вёрстка + +- Кодировка UTF-8; `` первым в ``. +- Числа в одном шрифте; декоративный шрифт только в заголовках, а заголовки без цифр: часть + начертаний рисует цифры иначе. +- Неразрывный пробел в числах — U+00A0. +- Графики — векторные, с `viewBox`; широкие лежат в контейнере с горизонтальной прокруткой. +- Каждая ячейка карты или столбец графика: номер, имя или значение; номер совпадает с номером + в списке под графиком. Подсказка при наведении и при касании: имя, значение, доля. +- Светлая и тёмная темы через переменные цвета; фон страницы задан явно. +- Ширина телефона: боковые поля 16 пикселей, страница не прокручивается вбок. +- Доступность: цвет не единственный носитель смысла (пунктир, форма маркера, подпись). + +## Выпуск + +1. Пересобрать штатной командой. +2. Повторная сборка, побайтное сравнение. +3. Проверки из `SKILL.md`. +4. Независимая проверка содержательного выпуска: другой человек или агент со свежим + контекстом получает точный набор файлов и данные, а не пересказ. +5. Только после этого версия показывается читателям. diff --git a/.agents/skills/techcon-public-surfaces/SKILL.md b/.agents/skills/techcon-public-surfaces/SKILL.md new file mode 100644 index 00000000..98c818e1 --- /dev/null +++ b/.agents/skills/techcon-public-surfaces/SKILL.md @@ -0,0 +1,70 @@ +--- +name: techcon-public-surfaces +description: Используй при создании или изменении любой читательской поверхности (README, отчёт, HTML-страница, сводка, интерфейс разметки) и перед её публикацией — проверка по реестру, автономность, клавиатура, статус текстом, независимая рецензия. +harness: org@2645047b3c77da9c18ed8019ff02fa4acb7c2d6b +--- +# Читательские поверхности — проверка перед публикацией + +## Когда + +Любое изменение того, что читает человек, не участвуя в разработке: README, отчёт, HTML-страница +для коллеги или клиента, сводка показателей, интерфейс ручной разметки. Не применять к +неизменяемым исходным артефактам (сырые выгрузки, замороженные снимки): их байты не правят +ради стиля, см. шаг 6. + +## Зачем + +Поверхность видна снаружи автору, и по ней читатель судит обо всей работе. Типичные сбои: +страница тянет шрифт или скрипт из сети и не открывается без интернета; статус передан только +цветом; в сводке число без знаменателя; поверхность есть, но никто не знает, кто за неё отвечает. +Ни один из них не ловят тесты кода. + +## Шаги + +1. **Определить поверхность по реестру.** Реестр поверхностей — один файл в репозитории + (путь, назначение, владелец, кто читает, чем порождается). Если пути в реестре нет — сначала + добавить строку, потом править. Публичный адрес без владельца и роли (основной, зеркало, + устаревший псевдоним) не допускается. +2. **Менять первичный источник и генератор, затем производный HTML.** Правка готовой страницы + руками исчезнет при следующей сборке. +3. **Числа.** Каждое число несёт источник, знаменатель, единицу и состояние неопределённости. + Отсутствие данных не записывать нулём: пишется «нет данных». +4. **Технические требования к странице:** + - светлая тема, русский текст; + - автономность: файл открывается без сети, нет внешних шрифтов, скриптов, счётчиков и + запросов при загрузке (обычные ссылки на литературу и источники разрешены — они не грузятся + сами); + - вся работа с клавиатуры: видимый фокус, логичный порядок Tab, нет действий только по мыши; + - статус передаётся словом («выполнено», «ошибка», «ждёт»), цвет только дополняет; + - контраст текста не ниже 4,5 к 1; ссылки на светлом фоне в тёмном оттенке, не в бледном. +5. **Различать в тексте** стадию конвейера, готовность данных и силу вывода, исполнение и + независимую проверку, решение владельца и внешнюю зависимость. Смешение — ошибка поверхности, + даже если каждая фраза верна. +6. **Неизменяемый исходник.** Не менять его байты. Рядом кладётся отдельный паспорт или + производное представление с хешем SHA-256 оригинала. +7. **Интерфейс разметки** не показывает эталонные ответы, ответы модели, происхождение объекта и + ответы другого разметчика. Варианты «не видно» и «неопределённо» допустимы и не блокируют. +8. **Секреты и адреса.** В поверхность не попадают ключи, внутренние адреса, домашние пути и + имена сотрудников без нужды. Служебные машинные пути сервиса (метрики, схема API, страница + документации) анонимно не отдаются, если владелец не принял обратное решение явно. +9. **Проверка перед сдачей:** прогнать проверку реестра и сборку поверхности; открыть файл + с отключённой сетью; пройти страницу только клавишей Tab; поискать в файле `http` и + `