@qijenchen/design-system 0.1.0-beta.10 → 0.1.0-beta.13
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/CLAUDE.md +201 -0
- package/README.md +7 -15
- package/cli-init.mjs +90 -0
- package/ds-canonical/commands/README.md +26 -0
- package/ds-canonical/commands/gov-status.md +79 -0
- package/ds-canonical/hooks/README.md +145 -0
- package/ds-canonical/hooks/_log-fire.sh +44 -0
- package/ds-canonical/hooks/block_prototype_imports.py +111 -0
- package/ds-canonical/hooks/check_app_shell_primary_header_consistency.sh +68 -0
- package/ds-canonical/hooks/check_audit_post_report_validator.sh +88 -0
- package/ds-canonical/hooks/check_audit_sample_escape.sh +73 -0
- package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
- package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
- package/ds-canonical/hooks/check_chrome_header_handcraft.sh +70 -0
- package/ds-canonical/hooks/check_codex_brief_invariants.sh +83 -0
- package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
- package/ds-canonical/hooks/check_datatable_invariants.sh +117 -0
- package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
- package/ds-canonical/hooks/check_field_controls_contracts.sh +110 -0
- package/ds-canonical/hooks/check_field_family_invariants.sh +205 -0
- package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
- package/ds-canonical/hooks/check_header_with_tabs_border.sh +87 -0
- package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
- package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
- package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
- package/ds-canonical/hooks/check_pattern_invariants.sh +194 -0
- package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
- package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
- package/ds-canonical/hooks/check_propose_plain_chinese.sh +74 -0
- package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
- package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
- package/ds-canonical/hooks/check_solo_workflow.sh +258 -0
- package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
- package/ds-canonical/hooks/check_story_invariants.sh +612 -0
- package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +105 -0
- package/ds-canonical/hooks/check_tab_lg_chrome_header_equal.sh +66 -0
- package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
- package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
- package/ds-canonical/hooks/inject_pending_self_audit.sh +204 -0
- package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
- package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
- package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
- package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
- package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
- package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
- package/ds-canonical/hooks/lib/_overlay_handcraft.sh +141 -0
- package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
- package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
- package/ds-canonical/hooks/lib/_token_hygiene.sh +95 -0
- package/ds-canonical/hooks/log_governance_fires.sh +50 -0
- package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
- package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
- package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
- package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
- package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
- package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
- package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
- package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
- package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
- package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
- package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
- package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
- package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
- package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
- package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
- package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
- package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
- package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
- package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
- package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
- package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
- package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
- package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
- package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
- package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
- package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
- package/ds-canonical/hooks/session_start_governance_check.sh +263 -0
- package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
- package/ds-canonical/hooks/stop_self_audit.sh +450 -0
- package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
- package/ds-canonical/hooks/tests/run-all.sh +76 -0
- package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
- package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +140 -0
- package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +115 -0
- package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
- package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
- package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
- package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +123 -0
- package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
- package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
- package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
- package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
- package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
- package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
- package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +194 -0
- package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
- package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
- package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
- package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
- package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
- package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
- package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
- package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
- package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
- package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
- package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
- package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
- package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +126 -0
- package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
- package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
- package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
- package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
- package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
- package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
- package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
- package/ds-canonical/hooks/tests/test_check_story_invariants.sh +209 -0
- package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
- package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
- package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
- package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +138 -0
- package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
- package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
- package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
- package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
- package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
- package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
- package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
- package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +143 -0
- package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
- package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
- package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
- package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
- package/ds-canonical/hooks/tests/test_stop_self_audit.sh +76 -0
- package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
- package/ds-canonical/references/README.md +43 -0
- package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
- package/ds-canonical/references/build-ui-canonicals.md +69 -0
- package/ds-canonical/references/cva-patterns.md +41 -0
- package/ds-canonical/references/drag-canonical.md +331 -0
- package/ds-canonical/references/item-anatomy-recipe.md +225 -0
- package/ds-canonical/references/naming-conventions.md +56 -0
- package/ds-canonical/references/principle-dim-map.json +515 -0
- package/ds-canonical/references/props-naming.md +45 -0
- package/ds-canonical/references/spec-rules.md +58 -0
- package/ds-canonical/references/ssot-consultation.md +63 -0
- package/ds-canonical/references/ssot-index.md +40 -0
- package/ds-canonical/references/story-baseline-registry.json +79 -0
- package/ds-canonical/references/structural-token-retention.md +42 -0
- package/ds-canonical/references/tailwind-gotchas.md +87 -0
- package/ds-canonical/references/ui-dev-rules.md +60 -0
- package/ds-canonical/rules/README.md +34 -0
- package/ds-canonical/rules/meta-patterns.md +87 -0
- package/ds-canonical/rules/self-verify.md +53 -0
- package/ds-canonical/rules/spec-rules.md +25 -0
- package/ds-canonical/rules/story-rules.md +56 -0
- package/ds-canonical/rules/ui-development.md +87 -0
- package/ds-canonical/skills/README.md +88 -0
- package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
- package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
- package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
- package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
- package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
- package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
- package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
- package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
- package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
- package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +247 -0
- package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
- package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +165 -0
- package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +91 -0
- package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
- package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
- package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
- package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
- package/ds-canonical/skills/design-system-audit/SKILL.md +343 -0
- package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1260 -0
- package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
- package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
- package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +364 -0
- package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
- package/ds-canonical/skills/design-system-audit/references/spec-template.md +66 -0
- package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
- package/ds-canonical/skills/governance-health/SKILL.md +146 -0
- package/ds-canonical/skills/knowledge-prune/SKILL.md +303 -0
- package/ds-canonical/skills/new-component/SKILL.md +170 -0
- package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
- package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
- package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
- package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
- package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
- package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
- package/ds-canonical/skills/propose-options/SKILL.md +177 -0
- package/ds-canonical/skills/prototype/SKILL.md +244 -0
- package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
- package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
- package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
- package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
- package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
- package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
- package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
- package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
- package/ds-canonical/skills/story-writing/SKILL.md +122 -0
- package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
- package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
- package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
- package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
- package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
- package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
- package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
- package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
- package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
- package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
- package/package.json +9 -5
- package/src/components/Accordion/accordion.spec.md +114 -0
- package/src/components/Alert/alert.spec.md +197 -0
- package/src/components/AppShell/app-shell.spec.md +331 -0
- package/src/components/AspectRatio/aspect-ratio.spec.md +134 -0
- package/src/components/Avatar/avatar.spec.md +329 -0
- package/src/components/Badge/badge.spec.md +380 -0
- package/src/components/Breadcrumb/breadcrumb.spec.md +257 -0
- package/src/components/BulkActionBar/bulk-action-bar.spec.md +210 -0
- package/src/components/Button/button.spec.md +460 -0
- package/src/components/Calendar/calendar.spec.md +242 -0
- package/src/components/Carousel/carousel.spec.md +253 -0
- package/src/components/Chart/chart.spec.md +155 -0
- package/src/components/Checkbox/checkbox.spec.md +344 -0
- package/src/components/Chip/chip.spec.md +237 -0
- package/src/components/CircularProgress/circular-progress.spec.md +268 -0
- package/src/components/Coachmark/coachmark.spec.md +230 -0
- package/src/components/Combobox/combobox.spec.md +180 -0
- package/src/components/Command/command.spec.md +171 -0
- package/src/components/DataTable/data-table.spec.md +525 -0
- package/src/components/DateGrid/date-grid.spec.md +215 -0
- package/src/components/DatePicker/date-picker.spec.md +334 -0
- package/src/components/DescriptionList/description-list.spec.md +214 -0
- package/src/components/Dialog/dialog.spec.md +202 -0
- package/src/components/DropdownMenu/dropdown-menu.spec.md +250 -0
- package/src/components/Empty/empty.spec.md +214 -0
- package/src/components/Field/field-controls.spec.md +338 -0
- package/src/components/Field/field.spec.md +438 -0
- package/src/components/Field/form-validation.spec.md +152 -0
- package/src/components/FieldControlGroup/field-control-group.spec.md +176 -0
- package/src/components/FileItem/file-item.spec.md +467 -0
- package/src/components/FileUpload/file-upload.spec.md +123 -0
- package/src/components/FileViewer/file-viewer.spec.md +373 -0
- package/src/components/HoverCard/hover-card.spec.md +157 -0
- package/src/components/Input/input.spec.md +193 -0
- package/src/components/LinkInput/link-input.spec.md +130 -0
- package/src/components/Menu/menu-item.spec.md +290 -0
- package/src/components/NameCard/name-card.spec.md +171 -0
- package/src/components/Notice/notice.spec.md +149 -0
- package/src/components/NumberInput/number-input.spec.md +126 -0
- package/src/components/OverflowIndicator/overflow-indicator.spec.md +120 -0
- package/src/components/PeoplePicker/people-picker.spec.md +263 -0
- package/src/components/Popover/popover.spec.md +198 -0
- package/src/components/ProgressBar/progress-bar.spec.md +232 -0
- package/src/components/RadioGroup/radio-group.spec.md +141 -0
- package/src/components/Rating/rating.spec.md +208 -0
- package/src/components/ScrollArea/scroll-area.spec.md +145 -0
- package/src/components/SegmentedControl/segmented-control.spec.md +295 -0
- package/src/components/Select/select.spec.md +299 -0
- package/src/components/SelectMenu/select-menu.spec.md +220 -0
- package/src/components/SelectionControl/selection-item.spec.md +128 -0
- package/src/components/Separator/separator.spec.md +109 -0
- package/src/components/Sheet/sheet.spec.md +148 -0
- package/src/components/Sidebar/sidebar.spec.md +713 -0
- package/src/components/Skeleton/skeleton.spec.md +104 -0
- package/src/components/Slider/slider.spec.md +353 -0
- package/src/components/Steps/steps.spec.md +465 -0
- package/src/components/Switch/switch.spec.md +215 -0
- package/src/components/Tabs/tabs.spec.md +314 -0
- package/src/components/Tag/tag.spec.md +282 -0
- package/src/components/Textarea/textarea.spec.md +151 -0
- package/src/components/TimePicker/time-picker.spec.md +279 -0
- package/src/components/Toast/toast.spec.md +177 -0
- package/src/components/Tooltip/tooltip.spec.md +139 -0
- package/src/components/TreeView/tree-view.spec.md +374 -0
- package/src/patterns/action-bar/action-bar.spec.md +458 -0
- package/src/patterns/element-anatomy/element-anatomy.spec.md +215 -0
- package/src/patterns/element-anatomy/inline-action.spec.md +315 -0
- package/src/patterns/element-anatomy/item-anatomy.spec.md +1042 -0
- package/src/patterns/header-canonical/header-canonical.spec.md +285 -0
- package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +191 -0
- package/src/patterns/overlay-surface/overlay-surface.spec.md +428 -0
- package/src/patterns/resize-handle/resize-handle.spec.md +109 -0
- package/src/tokens/color/color.spec.md +804 -0
- package/src/tokens/density/density.spec.md +127 -0
- package/src/tokens/elevation/elevation.spec.md +81 -0
- package/src/tokens/layoutSpace/layoutSpace.spec.md +314 -0
- package/src/tokens/motion/motion.spec.md +97 -0
- package/src/tokens/opacity/opacity.spec.md +78 -0
- package/src/tokens/orphan-tokens.spec.md +117 -0
- package/src/tokens/radius/radius.spec.md +123 -0
- package/src/tokens/typography/typography.spec.md +202 -0
- package/src/tokens/uiSize/uiSize.spec.md +438 -0
- package/src/styles/preset.css +0 -31
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codex-collab
|
|
3
|
+
description: Codex dual-track collab for visual/SSOT/canonical decisions. Claude own → codex own → 比稿 synthesize(永遠 3-step,不 pass-through)。Local `codex exec` 為主 transport(地端);GitHub PR comment 為 fallback。Queue SSOT `.claude/memory/codex-brief-queue.jsonl`。Invoke when user asks「跟 codex 討論 / 比稿 / 確認」.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Codex Collaboration Workflow
|
|
7
|
+
|
|
8
|
+
**生態位**:Claude(本 agent)在 DS canonical / 視覺 SSOT 決策上**容易忽略既有原則**(M14/M20 累積 evidence)。Codex 作 **第二把關 AI**,以**討論模式**(非 commit handoff)介入,讓兩個 model 互相 cross-check,降低單一 model bias。
|
|
9
|
+
|
|
10
|
+
**Claude vs Codex 分工**:
|
|
11
|
+
| 角色 | Claude (我) | Codex (@codex on GitHub) |
|
|
12
|
+
|------|------------|---------------------------|
|
|
13
|
+
| 主要職責 | synthesizer + implementer | reviewer + second opinion |
|
|
14
|
+
| 寫 code | YES(在 user approve 後) | NO(本 workflow 禁止 commit,純討論) |
|
|
15
|
+
| 跑 hook / skill | YES(本 repo CLAUDE.md / hook / skill 全載入) | NO(在 GitHub sandbox 看不到 hook) |
|
|
16
|
+
| 對 user 負責 | YES(最終結論由我 report) | NO(透過我轉述) |
|
|
17
|
+
| Benchmark cite | M22 mandate | 也須 cite source(我 enforce) |
|
|
18
|
+
|
|
19
|
+
**核心原則**:Codex 不直接 commit。所有結論由 Claude 收斂、跑完 M1-M31 自檢、user approve 後由我落地。
|
|
20
|
+
|
|
21
|
+
## ⚠️ Step 0 入口 gate(2026-05-10 加,fix auto-fire anti-pattern)
|
|
22
|
+
|
|
23
|
+
**啟 codex collab 前 explicit check 兩條件,缺一就不 fire**:
|
|
24
|
+
|
|
25
|
+
(a) **Claude 自試完仍卡**:跑完 grep / read source / DS canonical cite / WebFetch 外部 source 後,仍**無法**確定 root cause 或 design tradeoff
|
|
26
|
+
(b) **User 明確 keyword**:「跟 codex 討論 / 比稿 / 找他確認 / 跟他辯論 / dual-track」
|
|
27
|
+
|
|
28
|
+
**任一通過即可 fire;兩個都不滿足 = 不 fire**(per M31 Step 0 + 本 SKILL L50 主原則)。
|
|
29
|
+
|
|
30
|
+
**Anti-pattern 錨**(2026-05-10):Phase A Breadcrumb commit `5ab31ce` 我已 grep + read spec + 有 cite 充分仍 auto-fire codex,user 抓「沒主動叫你也會自動觸發?」+ 撤回 unnecessary collab。本 anti-pattern codified for 反向 reference。
|
|
31
|
+
|
|
32
|
+
## ⚠️ Step 0.4 — Transport discovery(2026-05-17 P0,fix「找 codex 找錯位置」amnesia)
|
|
33
|
+
|
|
34
|
+
**Rule**:啟 codex 前必跑 3-test,**順序固定**:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
ls -la node_modules/.bin/codex && node_modules/.bin/codex --version # 1 Local CLI(primary)
|
|
38
|
+
which codex 2>/dev/null && codex --version 2>/dev/null # 2 Global(罕見)
|
|
39
|
+
ls -la ~/.codex/auth.json # 3 Auth(sanity)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Decision**:1 ✅ → local CLI(canonical per `references/transport.md:36-40`)/ 1 ❌ + 2 ✅ → global / 1+2 ❌ + 3 ✅ → `npm install`(`@openai/codex` 已 npm dep)/ 全 ❌ → 報 user。**禁 fallback Explore agent 當 codex**(M31 違反:Explore 同模型,不滿足 dual-track 第 2 bias)。
|
|
43
|
+
|
|
44
|
+
**Anti-pattern**:`which codex` 失敗就斷言 unreachable → 嘗試 sudo install / 繞 M28 開 PR / Explore 替身。詳 `.claude/memory/feedback_codex_local_transport_node_modules.md`。
|
|
45
|
+
|
|
46
|
+
**Hook 機械強制**:`stop_self_audit.sh` 偵測「codex/dual-track/比稿 keyword + 無 `node_modules/.bin/codex` cmd trace」→ BLOCKER。
|
|
47
|
+
|
|
48
|
+
## ⚠️ Step 0.05 — User-verbatim faithful relay invariant(2026-05-15 P0)
|
|
49
|
+
|
|
50
|
+
**Rule**:Brief 必含 **3 block**:(1) `## User 原話` verbatim quote(不 paraphrase / 中英 / 標點 / 圖文 ref 全保)(2) `## Claude 理解 + 脈絡` paraphrase + file:line + 已驗 source + 自試 hypothesis + 不確定點(3) `## 請獨立解讀 user 原話` codex 不被 §2 框架限。**禁** 只送 paraphrase。
|
|
51
|
+
|
|
52
|
+
**User 原話 SSOT**(2026-05-15):「也要告訴他我的原話,讓他也能有機會解讀我的原話 ... 說不定codex在解讀別人的問題比你還有慧根 ... 請你在infra上避免你下次又在局限codex發現問題的能力」
|
|
53
|
+
|
|
54
|
+
**Why**:Paraphrase 過濾 user 細節 / 加 Claude 偏見 / frame 問題 → codex 只能在 Claude 框架答 surgical fix → root cause 沒抓到。錨例 2026-05-15:I1 placeholder ellipsis + I3 overflow 兩 bug user 提 2-3 次,每次送 paraphrase → 冰山修。Hook TBD `check_codex_brief_verbatim.sh`(grep `## User 原話` heading missing → warn)。
|
|
55
|
+
|
|
56
|
+
## ⚠️ M31 Universal 5-step canonical(2026-05-10 user directive)
|
|
57
|
+
|
|
58
|
+
「你跟 codex 都要各自驗證過並視覺稽核過,最後你整合出完美完整的版本」+「據理力爭但要有依據,各自熟讀所有檔案,infra 強迫整合前有此 mindset,避免被 codex 錯誤解法牽著走」。
|
|
59
|
+
|
|
60
|
+
**每次 codex collab 必走 5-step,不論 agree 或 disagree(不只 disagree 才啟動)**:
|
|
61
|
+
|
|
62
|
+
| Step | Claude | Codex | 共通 invariant |
|
|
63
|
+
|---|---|---|---|
|
|
64
|
+
| **1 各自熟讀** | grep / read spec.md / canonical / source 真讀 | `exec -s read-only` grep / git show / read source | 憑印象 propose = M31 違反 |
|
|
65
|
+
| **2 各自驗證** | `npx tsc -b` + invariant + audit script | `exec` 跑 grep / git show 證據 | 任一方未跑真 verify 撤回 propose |
|
|
66
|
+
| **3 各自視覺稽核** | playwright screenshot + DOM + pixel audit | code-read + diff + grep visual path | 只 code 跳 visual 違反 user directive |
|
|
67
|
+
| **4 各自 cite-based propose** | 3-column:`spec.md path:line / 引文 / reasoning` | 同上獨立出 | hand-wave 無 cite 撤回 |
|
|
68
|
+
| **5 整合完美版本**(NOT pass-through)| Agree → synthesize 補對方缺漏;Disagree → cite battle verify 對方 cite + counter-cite | 同上雙向 | **絕禁** Claude pass-through codex / 只一方驗證跳整合 |
|
|
69
|
+
|
|
70
|
+
**Hook 機械強制**(P1 soft):`check_codex_collab_5step.sh` 攔 git commit message 含 codex/Layer A/B keyword 必同含 spec.md cite + verify keyword + verdict keyword。缺任一 → stderr 警告。
|
|
71
|
+
|
|
72
|
+
**Anti-pattern 錨例**:
|
|
73
|
+
- **Issue 8 cell border**(2026-05-10):codex 「Field edit border 透明」→ Claude pass-through ship → user 「白癡 被 codex 牽著走」→ cite battle 修正(field-controls.spec.md Field state machine SSOT 反駁)→ 落地雙 owner。**違反 Step 1-3-5**。
|
|
74
|
+
- **Issue 11 controller retire**(2026-05-10):codex disagree(RFC Contract 3/6 cite)→ Claude 完整 5-step counter-cite(grep zero consumer + Phase 7 commit `c5eb054` 證據)→ codex round 2 grep 確認 → synthesize retire+RFC backfill。**M31 正確 pattern 參考錨**。
|
|
75
|
+
|
|
76
|
+
**Transport: Cloud vs Local(2026-05-08)**:Step 0.5 / 4.5 / 4.6 / 5 dual-track invariants 不分 transport — 換 channel 不換 discipline。詳 `references/transport.md`。簡述:雲端 Claude Code → cloud(`@codex` GitHub);地端 Claude Code → local(`codex` CLI,須 `codex login` 一次)。Default cloud(留 PR trail);敏議題 / 同 session 急 round-trip / cloud 失敗 fallback → local。
|
|
77
|
+
|
|
78
|
+
**Codex 輸出全來源 invariant(2026-05-07 user 拍板)**:
|
|
79
|
+
任何 codex 輸出 — **DISCUSS-ONLY 深 reply / bot 自動 PR review(`chatgpt-codex-connector[bot]`)/ PR comment / inline review thread** — 統一視為 **2nd-opinion 輸入,非 directive**。任何來源都必過完整 Step 4.5 verify + Step 5 比稿 才動 code。**禁止「bot review = 直接修」短路**。歷史錨例:2026-05-07 commit `775d879` 我把 codex bot 兩條 P2 直接修沒做 own-version + 比稿,user 糾正 → commit `f24998f` 補上完整 own-version + 比稿 documentation。本 invariant 永久 codified。
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## When to invoke
|
|
84
|
+
|
|
85
|
+
**主原則(2026-05-07 user directive)**:**Claude 自己先嘗試解**,確認自己解不好 / 不確定 root cause 時才 invoke codex。**禁止**「user 提了新 bug → 自動丟 codex」,user 沒明確說「跟 codex 討論」就不塞給他。
|
|
86
|
+
|
|
87
|
+
明確 trigger(滿足任一才 invoke):
|
|
88
|
+
1. **User 明確要求**:「跟 codex 討論 X」/「與 codex 確認」/「let's get codex's take on X」
|
|
89
|
+
2. **Claude 自認 stuck**:investigate root cause 後仍不確定 / 多 hypothesis 沒 evidence 收斂 / 跨 framework 不熟悉(eg. Windows-specific bug 但本地是 Linux)
|
|
90
|
+
3. **Deep audit (`/design-system-audit --deep`)**:Phase 4.5 second-pass(audit 是 explicit benchmark 場景)
|
|
91
|
+
4. **Cross-component canonical 訂立**(M8 benchmark 後)需獨立 reviewer
|
|
92
|
+
|
|
93
|
+
**禁止 invoke**:
|
|
94
|
+
- 單純 typo / 機械 lint
|
|
95
|
+
- User 已給明確指示的 implementation
|
|
96
|
+
- User 提新 bug 但沒說「跟 codex 討論」(預設 Claude 自己處理)
|
|
97
|
+
- Claude 還沒做 grep / read source 就丟 codex(等於把工作外包,違反主原則)
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Discussion mode workflow(7 步)
|
|
102
|
+
|
|
103
|
+
### Step 0:user 觸發
|
|
104
|
+
|
|
105
|
+
User 說「跟 codex 討論 X」或本 skill 自動 trigger condition 滿足。
|
|
106
|
+
|
|
107
|
+
### Step 0.1:**DS Anchor Preflight**(M29 mandatory,2026-05-08)
|
|
108
|
+
|
|
109
|
+
Brief 前必查 `.claude/references/ssot-index.md` + grep `*.spec.md` 找 anchor canonical,brief 內含 **3-column owner table**(`Candidate owner spec` / `Canonical sentence` / `Conflicting code/comment`)。**若 spec ≠ code → STOP 寫 RFC**(`.claude/planning/<topic>-rfc.md`),等 user 拍板才進 Step 0.5。詳 `.claude/memory/feedback_ds_anchor_preflight.md`。
|
|
110
|
+
|
|
111
|
+
### Step 0.5:**Claude own-version v1 + dimension matrix**(合併原 Step 0.5+0.6,anti-pass-through)
|
|
112
|
+
|
|
113
|
+
**User directive(2026-05-07)**:「我跑一版 → codex 跑一版 → 我比稿 → 取優棄劣 → final 最佳方案」+「品質 100% 不打折 + Claude = synthesizer not dispatcher」。
|
|
114
|
+
|
|
115
|
+
**強制(寫 brief 前必跑)**:(1) 我自己跑完整分析(audit + WebFetch ≥3 source)(2) Brief 內**先寫「我 v1 = X 因為 Y」+ dimension matrix**(禁只列 options 求 codex pick = round 7 trap)(3) 列具體 hypothesis + recommendation。Codex reply 必獨立寫他 v1 + per-axis 比稿,不可「pick best option」。違 = pass-through。
|
|
116
|
+
|
|
117
|
+
### Step 1:Claude 草擬 Discussion Brief(以 Step 0.5 own-version 為基礎)
|
|
118
|
+
|
|
119
|
+
**Brief format + 6-section template + 歷史錨點** → `references/brief-template.md`(SSOT 收錄)。
|
|
120
|
+
|
|
121
|
+
核心禁忌(永久 ban):Brief ≤220 字 / Reply ≤200 字 / 3-line 模板 / 為 cloud 速度 truncate。深度 invariant 不分 transport。
|
|
122
|
+
|
|
123
|
+
### Step 2:Post to PR via mcp__github__add_issue_comment
|
|
124
|
+
|
|
125
|
+
target PR:當前 working branch 的 PR(`mcp__github__list_pull_requests` 找到 head=current branch)。
|
|
126
|
+
|
|
127
|
+
**投遞成功率 invariant(2026-05-07 codex 自診斷,絕對遵守)**:
|
|
128
|
+
|
|
129
|
+
歷史錨點:同日我送 5 條 brief 連發 → codex Cloud queue dedup skip 4 條(只回 1 條)。Codex 自己診斷 root cause = **interval too short**(短時間連送 → 後端 dedup)。
|
|
130
|
+
|
|
131
|
+
**強制規則(2026-05-08 user-tuned interval + serial gating)**:
|
|
132
|
+
- ✅ **Brief 間隔 ≥ 3 min**(2026-05-08 改;前 5 min 過保守,user 拍板對齊 codex 原建議 2-3 min 中位)。trade-off:dedup window 風險微增,由下一條 serial gating 補強。
|
|
133
|
+
- ✅ **Serial gating — 同時最多 1 brief in-flight**:有 pending(未 reply / 未 exhausted)brief 時,**禁止送新 brief**;其他排隊到 queue file,前一條 reply / exhausted 才送下一條。避免 codex queue 兩條混淆 / dedup window 撞。
|
|
134
|
+
- ✅ **Auto-followup 10 min**(前 15 min):pending brief 過 10 min 無 reply → 自動 new comment `@codex follow-up to brief <id>`。第 2 次 followup 再 +10 min(20 min mark)。第 3 次 +10 min(30 min mark)。3 次 followup 仍無 reply → mark `exhausted`,user-handoff,不再自動送。
|
|
135
|
+
- ✅ **每條 brief 用新 `add_issue_comment`,不要 edit 既有 comment**(webhook 不把 edit 當新 task)
|
|
136
|
+
- ✅ **Opener canonical**:`@codex DISCUSS-ONLY` 或 `@codex IMPLEMENT`(明確 mode signal)
|
|
137
|
+
- ✅ Brief content **保留 deep format**(unchanged, per L1 Step 1 invariant)— interval rule 跟 depth invariant 不衝突
|
|
138
|
+
- ✅ 漏接補救:**新 comment** with `@codex follow-up to brief <id> ...`(不要只「請看上面」)
|
|
139
|
+
|
|
140
|
+
**Queue 跨 session 持久化(2026-05-08 user 拍板)**:
|
|
141
|
+
- SSOT:`.claude/memory/codex-brief-queue.jsonl`,JSONL 一行一 brief
|
|
142
|
+
- Schema:`{ id, url, topic, sentAt, status, followupCount, lastFollowupAt?, repliedAt?, deferredAt?, deferReason?, planRef?, queuedAfter? }` — status ∈ `pending` (active 等 reply 可 auto-followup) / `deferred` (user 明示「之後再/晚點/先放著」**不 auto-followup**,等 explicit re-invoke 轉 pending)/ `replied` / `exhausted`
|
|
143
|
+
- **每 session start 必讀**(本 SKILL invariant — 載入掃 queue 找 pending resume tracking;`deferred` 不送 followup)
|
|
144
|
+
- 事件:send brief = append;reply 來 = `replied` + repliedAt + unblock queued;followup auto = ++count + lastFollowupAt;3 round 無 reply = `exhausted` + handoff prompt;user defer trigger = `deferred` + deferredAt + deferReason + planRef
|
|
145
|
+
- TodoWrite 仍用(session-scoped 視覺呈現),但 ground truth 在此 file
|
|
146
|
+
|
|
147
|
+
**Quality-fail re-mention**:reply 來但有 commit / doc 沒 push / Missing Q / M22 無 cite URL / Off-topic / 短 format truncate 任一 → 自動 new comment「previous reply quality issue,需要 X」(逐條列 fail + 重申 deep / cite ≥3 / Q1-QN)。
|
|
148
|
+
|
|
149
|
+
**禁止**:Send brief 後 forget(queue file 是 SSOT)/ Edit 既有 comment 期待重 trigger / 為投遞率 truncate 深度。
|
|
150
|
+
|
|
151
|
+
### Step 3:Subscribe + wait
|
|
152
|
+
|
|
153
|
+
`mcp__github__subscribe_pr_activity` → 等 webhook event,**不 poll**(Anthropic best-practice,等推送)。
|
|
154
|
+
|
|
155
|
+
### Step 4:Codex 回覆 → Claude 自檢(M22/M23/M27/M8)
|
|
156
|
+
|
|
157
|
+
收到 codex reply 必跑 4 題自檢(避免 codex 也犯 M1/M22 錯):
|
|
158
|
+
1. **M22 cite check**:codex 引的 benchmark 有 inline source?無 → reply 要求補
|
|
159
|
+
2. **M23 DS-first**:codex 建議是否覆蓋 DS 既有 canonical?有 → 我手動驗 DS spec/token
|
|
160
|
+
3. **M27 namespace**:codex 建議 prop name 是否撞 DS 既有?
|
|
161
|
+
4. **M8 ≥3 source**:codex 只引 1 家 → reply 要求補到 3 家
|
|
162
|
+
|
|
163
|
+
任一題失敗 → Step 4.5 仍要跑(自檢結果記下),Step 5 一併 report。
|
|
164
|
+
|
|
165
|
+
### Step 4.5:**獨立 verify codex 具體 claim**(不可省 — anti-pass-through)
|
|
166
|
+
|
|
167
|
+
**Why**:Step 4 只 check 表面 cite,不 verify codex 結論。錨 2026-05-07 `775d879` pass-through + 2026-05-19 6+ 條讀前 N 行就斷 truncated(SSOT `memory/codex_collab_backfill_2026-05-19.md`)。
|
|
168
|
+
**強制動作**(逐條 claim):
|
|
169
|
+
0. **Last-verdict gate**(MUST 先跑):`tail -n 240 reply.md` grep `Verdict|tokens used|採納` 必命中;Read `--offset=$((total-240)) --limit=240`。禁讀前 N 行就斷 truncated。
|
|
170
|
+
1. **Grep DS-internal**:codex 指的 file/token/pattern 真存在?`grep -rn` 確認
|
|
171
|
+
2. **WebFetch external**:codex cite world-class URL → fetch 真內容(high-stakes 必跑)
|
|
172
|
+
3. **Run script**:codex 給數字(「28→16」)→ 跑腳本核對
|
|
173
|
+
4. **Counter-example scan**:codex 說「X anti-pattern」→ grep DS 是否已用且 work
|
|
174
|
+
5. **記錄**:每 claim 標 `✅ verified` / `❌ FALSE` / `⚠️ partial`
|
|
175
|
+
**禁止**:跳 Step 4.5 直接列 A/B/C = pass-through;跳 step 0 讀前 N 行斷 truncated。
|
|
176
|
+
|
|
177
|
+
### Step 4.6:**Regression / 連動 scan on 我自己 proposed fix**(2026-05-08 user 拍板,絕對禁省)
|
|
178
|
+
|
|
179
|
+
**Why this exists**:Step 4.5 只 verify codex 的 claim 真不真;不 verify **我自己 propose 的 fix 是否會造成連動非預期錯誤**。歷史:2026-05-07 commit `775d879` 我把 `tableRoot` 改 optional + document fallback,自以為 backward-compatible 但**沒 grep callers** + 沒想 future caller 不傳會仍 cross-instance — codex round 2 抓出來才修成 strict required(`f24998f`)。Step 4.6 強制 regression scan 阻 anti-pattern。
|
|
180
|
+
|
|
181
|
+
**強制動作**(逐條 propose 動 code 前必過):
|
|
182
|
+
1. **Grep all callers / consumers**:動 API / symbol / token / hook / variant → grep DS-wide 找所有 consumer,每個 consumer 行為變化?有 break case?
|
|
183
|
+
2. **Type contract impact**:optional → required 是 breaking;default value 改 是 breaking;param order 改 是 breaking;return type 縮窄 是 breaking — 列出每條 breaking change 的 mitigation
|
|
184
|
+
3. **Edge cases**:boundary conditions / null path / empty input / race / concurrent state / a11y(keyboard / screen-reader) / dark mode / density / RWD viewport — 至少跑 5 條
|
|
185
|
+
4. **Cross-component impact**:這 fix 動的東西其他 sibling component / pattern / token 有間接消費?(SSOT chain 反向)
|
|
186
|
+
5. **Run existing tests**:`npx tsc -b` + `node scripts/data-table-invariants.mjs`(若動 DataTable)+ 相關 stories 互動驗
|
|
187
|
+
6. **記錄 scan result**:每項標 ✅ safe / ⚠️ partial / ❌ break + 證據;任一 ❌ → re-design 不 commit
|
|
188
|
+
|
|
189
|
+
**禁止**:propose fix 後直接 Edit / Write / commit 沒跑 4.6;靠「應該沒問題」直覺 ship — 違反 = anti-pattern。
|
|
190
|
+
|
|
191
|
+
### Step 5:**比稿 my own-version vs codex-version → final synthesized 方案**
|
|
192
|
+
|
|
193
|
+
**Anti-pattern**:把 codex reply 整段 paste 給 user 然後問「拍 A/B/C?」。這是 pass-through,不是 collab。
|
|
194
|
+
|
|
195
|
+
**User directive(2026-05-07)**:「**比稿** — 取優點去缺點 → final 最佳方案。確保品質 100% 不打折」。
|
|
196
|
+
|
|
197
|
+
**強制比稿過程**:
|
|
198
|
+
1. 把 Step 0.5 own-version + Step 4.5 verified codex-version 並列成 matrix
|
|
199
|
+
2. 逐條決定:
|
|
200
|
+
- **接受 codex**(我沒想到 + verified 對)
|
|
201
|
+
- **接受我自己**(codex 漏掉 / 過度激進 / verified FALSE)
|
|
202
|
+
- **修正(取兩邊優點)**(eg. codex 提 -12 hooks,我 verify 只 -5 reachable → final -8 兼顧 codex aggressive 跟我 conservative)
|
|
203
|
+
- **重啟**(兩邊都不對 → 重新做)
|
|
204
|
+
3. 列 final 方案,不再列 A/B/C 給 user 拍 unless 真歧義
|
|
205
|
+
|
|
206
|
+
**強制 reply format**:Step 4 self-check(M22/M23/M27/M8)+ 4.5 verify 表 + 4.6 regression scan 表 + 5 接受/拒絕/修正 + final action(僅真歧義列 options)。錨例 `029b647` `f24998f` `775d879`。
|
|
207
|
+
|
|
208
|
+
### Step 6:User approve → Claude 實作
|
|
209
|
+
|
|
210
|
+
由我(非 codex)實作,跑完整 stop hook (`stop_meta_self_audit.sh`)+ M14 5-layer pipeline。
|
|
211
|
+
|
|
212
|
+
**Joint test case planning(D-class architectural change 必走,2026-05-07 user 拍板)**:
|
|
213
|
+
|
|
214
|
+
當實作屬「architectural change 加新 primitive / 動 layer 系統 / 動 SSOT owner」(eg. P1 D 路徑 `<CellInteractiveOverlay>`),Step 6 升級成 **dual-track 實作** + **joint test case planning**:
|
|
215
|
+
|
|
216
|
+
> 「到時候要做的時候你跟 codex 一起協作實作,然後兩者同時一起列 test case 確保所有情境都能被驗證無誤」
|
|
217
|
+
|
|
218
|
+
**強制流程**:
|
|
219
|
+
1. **Implementation dual-track**:Claude 寫 v1 + codex 寫 v1 → 比稿 final
|
|
220
|
+
2. **Test case 同時列**(joint planning,**非依序**):
|
|
221
|
+
- Claude 列 Q1-QN test scenarios
|
|
222
|
+
- Codex 列 Q1-QN test scenarios(獨立)
|
|
223
|
+
- 比稿合併 → final test plan(union — 防漏單邊)
|
|
224
|
+
3. **Min coverage 框架**(per architectural change scope):
|
|
225
|
+
- 4 大 stories regression(virtual / autoRow / inline / pinned)若觸 DataTable
|
|
226
|
+
- State combinations(size × mode × pinned 狀態)
|
|
227
|
+
- Visual pixel-level Playwright probe
|
|
228
|
+
- Hit test(pointer-events 不破 click chain)
|
|
229
|
+
- Z-index / portal context(DragOverlay / HoverCard popup 不破)
|
|
230
|
+
|
|
231
|
+
**禁止**:
|
|
232
|
+
- ❌ 只 Claude 列 test case(防漏)
|
|
233
|
+
- ❌ 只 codex 列 test case(防 codex bias)
|
|
234
|
+
- ❌ 依序列 test(必須兩邊獨立 → 比稿 union)
|
|
235
|
+
- ❌ skip joint planning 直接 implement(architectural change 規模需要 test case 全 coverage)
|
|
236
|
+
|
|
237
|
+
### Step 7:Implementation 完 → 回 codex 結案
|
|
238
|
+
|
|
239
|
+
PR comment:`@codex 結論已 land at <commit>. 感謝 review.`
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Guardrails
|
|
244
|
+
|
|
245
|
+
沿用既有 hook(`check_benchmark_citation.sh` / `stop_meta_self_audit.sh`),codex reply 不入 commit,hook 對 final commit 強制。**禁止**:codex commit 直接 push / 跳過 Step 4 送 user 原文 / 把 codex reply 當 ground truth。**M20 self-improvement**:codex 抓的 M-rule violation → 加 `.claude/memory/codex-caught-violations.md`。**Auto-codify(2026-05-07)**:任何 collab 新發現 → 立刻 5-layer(SKILL + memory + CLAUDE.md + planning),trigger「確保記錄起來」「不需要再對你耳提面命」「自然就知道」。
|
|
246
|
+
|
|
247
|
+
## Deep Audit 整合 + Cross-session persistence
|
|
248
|
+
|
|
249
|
+
`/design-system-audit --deep` Phase 4.5 自動 invoke 本 skill(brief「review Phase 1-4 findings,有 systemic issue 嗎?」→ Codex reply 進 Phase 5,M14 chain)。新 session user 說「跟 codex 討論」→ 必查本 SKILL.md 按 Step 0-7 走;CLAUDE.md 任務導航表已 anchor;**禁憑記憶簡化流程**。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Codex DISCUSS-ONLY Brief Template
|
|
2
|
+
|
|
3
|
+
Brief format invariant(2026-05-07 user 拍板,禁短 format)。
|
|
4
|
+
**禁**:Brief ≤ 220 字 / Reply ≤ 200 字 / 「結論→原因→下一步」3-line / 為 cloud 速度 truncate。
|
|
5
|
+
**強制**:不限字 + Q1-QN multi-question + ≥3 world-class source cite per Q + counter-proposal request。
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
@codex DISCUSS-ONLY (no commit) — <topic>
|
|
9
|
+
|
|
10
|
+
## User 原話(verbatim,Step 0.05)
|
|
11
|
+
<不 paraphrase / 標點 / 圖文 ref 全保>
|
|
12
|
+
|
|
13
|
+
## 請獨立解讀 user 原話(Step 0.05)
|
|
14
|
+
<不被下面 Claude 框架限制,自己解讀>
|
|
15
|
+
|
|
16
|
+
## Claude 理解 + own-version v1(Step 0.5)
|
|
17
|
+
<paraphrase + file:line + 已驗 source + hypothesis + 不確定點>
|
|
18
|
+
**我 v1 = X 因為 Y**(Step 0.6:禁只列 options 求 codex pick)
|
|
19
|
+
|
|
20
|
+
## Benchmark Cited (M22/M26, ≥3)
|
|
21
|
+
- <DS source 1 + URL/path>
|
|
22
|
+
- <DS source 2 + URL/path>
|
|
23
|
+
- <DS source 3 + URL/path>
|
|
24
|
+
|
|
25
|
+
## DS Internal Canonical Consulted (M23)
|
|
26
|
+
- <既有 token / variant / spec.md path>
|
|
27
|
+
|
|
28
|
+
## Specific Questions for Codex(Q1-QN)
|
|
29
|
+
1. <root cause 對嗎?還有 alternative?>
|
|
30
|
+
2. <benchmark 是否漏掉 world-class case?>
|
|
31
|
+
N. <SSOT 是否該抽到更上層 primitive?>
|
|
32
|
+
|
|
33
|
+
## Constraints
|
|
34
|
+
- DS 原則 M1-M32 全適用(31 active;M27/M33/M34/M35 retired,折入 M20/M7/M23(c)(d);尤其 M8 / M17 / M22 / M23)
|
|
35
|
+
- 不可 commit,純文字討論
|
|
36
|
+
- 程式碼建議須 cite world-class DS source
|
|
37
|
+
- Counter-proposal request:挑戰我的 hypothesis,提第 4 條路
|
|
38
|
+
- 必產 3-column cite table(claim / path:line / reasoning)
|
|
39
|
+
|
|
40
|
+
## 🚨 三 invariant — 2026-05-23 user 永久 directive(缺一 = brief 不合格)
|
|
41
|
+
1. **全盤閱讀全部 source**(CLAUDE.md / 31 active M-rules / 5 rules/*.md / 56 audit dims SKILL.md / 全 82 spec.md / 全 196 stories / 全 62 components / tokens / patterns / hooks / 20 memory files / planning),**禁憑記憶**
|
|
42
|
+
2. **Triple-verify per finding**:(a) grep DS-wide 確認 pattern 存在 (b) Read 對應 spec.md / tsx 確認 problem 真存在 (c) 對照既有 canonical 確認非 documented exception。任一 NO → 自動撤回,**禁無病呻吟**
|
|
43
|
+
3. **禁抽樣** — DS-wide ALL files 全掃,context 不夠拆 stage 全跑完;sub-agent admission「I sampled / spot-check / representative」= audit incomplete reject
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 歷史錨點
|
|
47
|
+
|
|
48
|
+
2026-05-07 我嘗試「短 format 加速 codex」(brief ≤220 字 / reply ≤200 字),user 糾正:「我要 codex 完全深度評估給完整 2nd opinion,即使慢」。撤回短 format,本 SKILL 永久禁。
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Codex transport — Cloud vs Local
|
|
2
|
+
|
|
3
|
+
> SKILL Step 0.5 / 4.5 / 4.6 / 5 dual-track invariants are **transport-agnostic**。本 reference 只說 transport 怎麼選 + 怎麼跑。
|
|
4
|
+
|
|
5
|
+
## 兩條 transport(不合而為一,環境決定)
|
|
6
|
+
|
|
7
|
+
| 屬性 | Cloud(`@codex` GitHub mention)| Local(`codex` CLI) |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 執行環境 | 雲端 Claude Code(remote sandbox)| 地端 Claude Code(本機 macOS)|
|
|
10
|
+
| 通道 | `mcp__github__add_issue_comment` → `@codex` mention → GitHub webhook → codex sandbox → reply comment | `npx codex exec "<brief>"` 同步 stdout |
|
|
11
|
+
| Latency | 15-30 min wait per reply | 1-3 min per reply |
|
|
12
|
+
| Dedup risk | YES(短時間連送 → backend dedup,故 3 min interval + 1 in-flight serial)| NO(每次 fresh process)|
|
|
13
|
+
| Persistence | PR comment thread 永久保留 | stdout 需手動存 → 寫入 `.claude/memory/codex-brief-queue.jsonl` 加 `transport:"local"` 欄位 |
|
|
14
|
+
| Cost | 不收 token(GitHub 那端)| 收 OpenAI API token(本機帳號)|
|
|
15
|
+
| Auth | GitHub login(harness 已 set)| `codex login`(user 跑一次,本機 `~/.codex/auth.json`)|
|
|
16
|
+
| 適合場景 | (1) PR-attached deep audit(留 trail)(2) cross-session async wait OK(3) 雲端 sandbox 唯一可用 channel | (1) 同 session 快速 round-trip(2) 私下技術討論(不污染 PR 歷史)(3) Step 4.5/4.6 在同 terminal 連跑 |
|
|
17
|
+
| 不適合 | 即時討論 / 同 session 多 round | 需要 PR-thread audit trail / 雲端 environment 沒地端 channel |
|
|
18
|
+
|
|
19
|
+
## Cloud transport(既有 SKILL Step 1-7 完整流程不變)
|
|
20
|
+
|
|
21
|
+
按 SKILL.md Step 1-7 走。Queue SSOT `.claude/memory/codex-brief-queue.jsonl` schema 加 `transport:"cloud"`(default)。
|
|
22
|
+
|
|
23
|
+
## Local transport(新增)
|
|
24
|
+
|
|
25
|
+
### Prerequisites(一次性)
|
|
26
|
+
1. `npm install`(已含 `@openai/codex@^0.128.0`)
|
|
27
|
+
2. `npx codex login`(interactive,user 親跑;harness sandbox 跑不了 stdin)
|
|
28
|
+
3. 確認 `~/.codex/auth.json` 存在
|
|
29
|
+
|
|
30
|
+
### 流程(沿用 cloud Step 0-7,只換 transport)
|
|
31
|
+
|
|
32
|
+
**Step 0**:user trigger 同 cloud。
|
|
33
|
+
**Step 0.5**:own-version 完整跑(同 cloud 不變)。
|
|
34
|
+
**Step 1**:寫 deep brief(同 cloud format 不變)。Brief content 寫 `.claude/tmp/codex-brief-<topic>.md`(暫存,不入 git)。
|
|
35
|
+
**Step 2 transport-swap**:
|
|
36
|
+
```bash
|
|
37
|
+
# 不是 mcp__github__add_issue_comment;改:
|
|
38
|
+
node_modules/.bin/codex exec --output-last-message /tmp/codex-reply-<topic>.md \
|
|
39
|
+
"$(cat .claude/tmp/codex-brief-<topic>.md)"
|
|
40
|
+
```
|
|
41
|
+
- `--output-last-message` 把 codex final reply 存檔(避免 stdout 亂入)
|
|
42
|
+
- 同步 block 到 codex 回完
|
|
43
|
+
- Reply file 進 Step 3(取代 webhook subscribe)
|
|
44
|
+
|
|
45
|
+
**Step 3**:Read `/tmp/codex-reply-<topic>.md`,append 進 `.claude/memory/codex-brief-queue.jsonl` `{transport:"local",replyFile:"/tmp/...",repliedAt:...}`。
|
|
46
|
+
**Step 4 / 4.5 / 4.6 / 5**:完全同 cloud(self-check / verify / regression / 比稿 — invariant 不分 transport)。
|
|
47
|
+
**Step 6 / 7**:implement → optionally PR comment 通知 cloud codex「結論」(若 cloud 也參與過)。
|
|
48
|
+
|
|
49
|
+
### 警示
|
|
50
|
+
- ❌ Local 別跳 Step 0.5(我先 own-version)/ 4.5(verify codex claim)/ 4.6(regression scan)/ 5(比稿)— SKILL invariant 不分 transport,違 = 退化 pass-through
|
|
51
|
+
- ❌ Local 不留 audit trail → user 後追溯靠 `.claude/memory/codex-brief-queue.jsonl` + `replyFile`,不可省
|
|
52
|
+
- ❌ 不為了 local 速度 truncate brief 或 reply(深度 invariant 同 cloud,不打折)
|
|
53
|
+
- ✅ Local 跑完 → reply 摘要存 PR comment(若有對應 PR),保 cross-session discoverability
|
|
54
|
+
|
|
55
|
+
### 雙 transport 同題場景
|
|
56
|
+
- 主 channel 失敗(eg. cloud 3 round followup 仍無 reply)→ fallback local
|
|
57
|
+
- 高敏議題(eg. 涉及尚未公開 commit / 私下技術討論)→ default local
|
|
58
|
+
- 一般 audit / canonical / cross-component decision → default cloud(留 PR trail)
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codify-corrections
|
|
3
|
+
description: Process .claude/logs/user-corrections.jsonl — the Stop-hook-harvested signals of user corrections ("不是" / "不對" / "應該" / "糾正" etc.). Dedup by session + keyword, cluster by topic, propose edits to the right home(CLAUDE.md M-row / memory feedback file / skill reference / spec.md rationale). Each cluster is a Checkpoint — user approves before edit. After codification archive processed entries. Invoke when user-corrections.jsonl > 20 entries(session_start soft reminder)or > 40 entries(hard threshold), OR quarterly. This skill closes the loop between mindset #6 "user tell me once, not twice" and actual governance text changes — without it, corrections die in logs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Codify Corrections — 把 user 糾正 log 落到 governance 文件
|
|
7
|
+
|
|
8
|
+
**目的**:`.claude/logs/user-corrections.jsonl` 是 `stop_harvest_corrections.sh` 從每 session transcript 抓到的「不是 / 不對 / 應該 / 糾正」訊號。骨架存在,但從 log 到實際 CLAUDE.md / memory / spec edit 原本全靠人工讀 + 決定寫哪,實務上堆積 = 骨架失靈。本 skill 把這條 loop 合上。
|
|
9
|
+
|
|
10
|
+
**對齊 CLAUDE.md**:
|
|
11
|
+
- 資訊治理 canonical L2(per-commit)下游
|
|
12
|
+
- mindset #6「user tell me once,我不該要 tell me twice」執行面
|
|
13
|
+
- M14 AUTO integrate pipeline 第 7 層(memory / CLAUDE.md 落地)
|
|
14
|
+
- 稽核 vs 執行 分權:動 canonical substantive → STOP Checkpoint(本 skill 內建)
|
|
15
|
+
|
|
16
|
+
## When to run
|
|
17
|
+
|
|
18
|
+
- User 明言「處理 correction / codify / 看一下 log」
|
|
19
|
+
- `session_start_governance_check.sh` soft reminder(> 20 corrections)或 hard blocker(> 40)
|
|
20
|
+
- 季度(跟 `/knowledge-prune` 同期)
|
|
21
|
+
- `/knowledge-prune` Phase 0.5 external signal 可 chain 本 skill
|
|
22
|
+
|
|
23
|
+
## Non-goals
|
|
24
|
+
|
|
25
|
+
- 不改 code(`.tsx` / `.css`)— 只動 governance 文件
|
|
26
|
+
- 不自動 write 任何 M-row(新 Meta-Pattern 必 Checkpoint 3 — 動 canonical substantive)
|
|
27
|
+
- 不刪 jsonl 歷史 — 處理後 append 到 `.processed.jsonl`,raw log 保留 grep evidence
|
|
28
|
+
- 不重跑 harvest — harvest 是 stop_harvest_corrections.sh 的責任
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Workflow(5 phases)
|
|
33
|
+
|
|
34
|
+
### Phase 0 — Scan + dedup
|
|
35
|
+
|
|
36
|
+
讀 `.claude/logs/user-corrections.jsonl`。每行格式:
|
|
37
|
+
```json
|
|
38
|
+
{"ts":"...", "session":"...", "count":N, "sample":"unescaped correction text"}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**dedup 規則**:
|
|
42
|
+
- 同 session 多行 → 只保留 count 最大那行(log 已 per-session dedup,但防萬一)
|
|
43
|
+
- 跨 session 同 `sample` 內容 > 80% similar(levenshtein / token ratio)→ merge
|
|
44
|
+
|
|
45
|
+
**output**:`.claude/logs/corrections-pending.md`(session-local 不 commit),每條 entry:
|
|
46
|
+
```
|
|
47
|
+
- [2026-04-22 session:abc123] sample: "不是 X,是 Y" — occurrences: 3
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Phase 1 — Cluster by topic(AI judgement)
|
|
51
|
+
|
|
52
|
+
每條 entry 判斷 topic + 應落 home:
|
|
53
|
+
|
|
54
|
+
| Topic pattern | 應落 home |
|
|
55
|
+
|--------------|----------|
|
|
56
|
+
| 個人偏好 / 工作節奏 / 「我喜歡 X」| `~/.claude/.../memory/feedback_*.md` |
|
|
57
|
+
| 設計 canonical / 元件行為 / prop API | `packages/design-system/src/**/spec.md`(rationale 段) |
|
|
58
|
+
| 跨元件 meta 規則(「凡 overlay 都必 X」)| CLAUDE.md Meta-Pattern M-row(**必 Checkpoint 3**)|
|
|
59
|
+
| Audit protocol / skill workflow | `.claude/skills/*/references/` |
|
|
60
|
+
| Tool / hook 使用方式 | hook docblock or `.claude/hooks/*.sh` 修行為 |
|
|
61
|
+
|
|
62
|
+
**判斷原則**:先看 sample 是否已有 home — 若 memory 已有相似 entry → 更新既有;無 → 新建。
|
|
63
|
+
|
|
64
|
+
**output**:`phase1-clusters.md`,每 cluster 含:proposed home / proposed edit text / which jsonl entries subsumed
|
|
65
|
+
|
|
66
|
+
### ⚠️ Checkpoint 1 — Phase 1 triage
|
|
67
|
+
|
|
68
|
+
向 user present:
|
|
69
|
+
```
|
|
70
|
+
Phase 0 scan 找到 N 條 pending corrections(dedup 後 M 條)。
|
|
71
|
+
Phase 1 cluster:
|
|
72
|
+
- P0(auto-apply)AUTO fixes to memory 現有 entry / spec rationale:X 條
|
|
73
|
+
- P1(review + apply)新建 memory file / spec rationale 新段:Y 條
|
|
74
|
+
- P2(STOP)新 M-row / 動 CLAUDE.md canonical substantive:Z 條(需 Checkpoint 3)
|
|
75
|
+
|
|
76
|
+
Proceed P0 auto?然後逐一 review P1?P2 分開討論?
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Do NOT skip**:P2 動 canonical meaning,per 稽核 vs 執行 分權 必 user sign-off。
|
|
80
|
+
|
|
81
|
+
### Phase 2 — Apply P0 + P1
|
|
82
|
+
|
|
83
|
+
**P0**(明確 home + 明確 edit):AUTO edit,commit 前最後 show diff 給 user 一次過目。
|
|
84
|
+
|
|
85
|
+
**P1**(新建 memory / spec 新段):one-by-one present → user approve → edit。
|
|
86
|
+
|
|
87
|
+
每次 Edit 後 tsc / lint 無需跑(純 governance 文件),但 MEMORY.md index 若有更新必包含。
|
|
88
|
+
|
|
89
|
+
### ⚠️ Checkpoint 2 — 新 memory 命名 3-test
|
|
90
|
+
|
|
91
|
+
每個新 memory file 過 CLAUDE.md `## 命名必過三重 test`:
|
|
92
|
+
1. 既有命名 pattern?
|
|
93
|
+
2. ≥ 2 家 world-class DS idiom?
|
|
94
|
+
3. 跨元件認知衝突?
|
|
95
|
+
|
|
96
|
+
Fail 任一 → 重名或拆分。
|
|
97
|
+
|
|
98
|
+
### ⚠️ Checkpoint 3 — P2 新 M-row(動 canonical substantive)
|
|
99
|
+
|
|
100
|
+
**STOP**。present 完整 proposal:
|
|
101
|
+
- Correction cluster 原始 samples
|
|
102
|
+
- Proposed M-row 文字
|
|
103
|
+
- World-class benchmark(≥ 3 家 DS,M8 強制)
|
|
104
|
+
- 被吸收的下游 M-row / specific bug / memory entries 清單(M10 下游刪)
|
|
105
|
+
|
|
106
|
+
User approve 後才 edit CLAUDE.md。
|
|
107
|
+
|
|
108
|
+
### Phase 3 — Archive processed entries
|
|
109
|
+
|
|
110
|
+
處理完畢:
|
|
111
|
+
```bash
|
|
112
|
+
# Append processed entries to .processed.jsonl(保留歷史 grep)
|
|
113
|
+
cat user-corrections.jsonl >> user-corrections.processed.jsonl
|
|
114
|
+
# Truncate main log
|
|
115
|
+
: > user-corrections.jsonl
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Phase 4 — Final report + metric snapshot
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
## Codify corrections report(N 日期)
|
|
122
|
+
|
|
123
|
+
### Processed
|
|
124
|
+
- Total entries scanned:N
|
|
125
|
+
- After dedup:M
|
|
126
|
+
- Clustered:K
|
|
127
|
+
|
|
128
|
+
### Applied
|
|
129
|
+
- P0 auto:X edits to {file list}
|
|
130
|
+
- P1 review:Y edits
|
|
131
|
+
- P2 new M-row:Z(詳列)
|
|
132
|
+
|
|
133
|
+
### Subsumed downstream(M10 上游加下游減)
|
|
134
|
+
- {list of specific bugs / memory entries / M-row 可刪}
|
|
135
|
+
|
|
136
|
+
### Still deferred
|
|
137
|
+
- {entries 不適合 codify:過度零散 / scope 不清 / user 已撤回}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Update `.claude/logs/metric-snapshots.jsonl`:
|
|
141
|
+
```json
|
|
142
|
+
{"ts":"...","tag":"codify-corrections-run","processed":N,"p0":X,"p1":Y,"p2":Z}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Self-improvement capture
|
|
146
|
+
|
|
147
|
+
```markdown
|
|
148
|
+
## Self-improvement capture
|
|
149
|
+
- 新發現 pattern:{某 topic 反覆出現 → 該抽 meta}OR "無"
|
|
150
|
+
- Harvest miss:{stop_harvest_corrections.sh 沒抓到但該抓的 keyword}OR "無"
|
|
151
|
+
- Codify-to-home 公式漂移:{有 topic 判斷多次走錯 home → 更新 Phase 1 判斷表}OR "無"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 與其他 skill 分工
|
|
157
|
+
|
|
158
|
+
| Skill | Scope |
|
|
159
|
+
|-------|-------|
|
|
160
|
+
| `stop_harvest_corrections.sh`(hook)| 抓 log — 不 codify |
|
|
161
|
+
| **本 skill**(`/codify-corrections`) | log → governance 文件 edit |
|
|
162
|
+
| `/knowledge-prune` | governance 文件 prune — 不處理新 correction |
|
|
163
|
+
| `/design-system-audit --deep` Phase 4.5 | chain `/knowledge-prune`;未來可 chain 本 skill |
|
|
164
|
+
|
|
165
|
+
**跟 `/knowledge-prune` 差異**:prune 是「砍冗贅」(retire),本 skill 是「吸收新訊號」(add / update)。兩者對稱,時序:先 codify(加 new)再 prune(砍 old)。
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 世界級對照
|
|
170
|
+
|
|
171
|
+
- GitHub CODEOWNERS diff → assignment:本 skill 類似「correction ownership assignment」
|
|
172
|
+
- Linux kernel `Documentation/process/howto.rst`:upstream patches go through maintainers — 我們 correction 也有「送到對的 home」的流程化
|
|
173
|
+
- RFCs / ADRs workflow:新 canonical 走 Checkpoint 3 等同提 ADR
|
|
174
|
+
|
|
175
|
+
本 skill 是本 DS 原創,因為 Claude Code 生態沒有同層級的「session log → governance codify」pipeline。
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Non-goals 重申
|
|
180
|
+
|
|
181
|
+
- 不改 code
|
|
182
|
+
- 不自動寫新 M-row
|
|
183
|
+
- 不刪歷史 log
|
|
184
|
+
- 不跑 harvest(是 hook 責任)
|