ãã®ææžã¯ãæå®ããIssueã»Groupãäžã€ã®YAMLã®declarationãšããŠååŸããäžæ¬ã§ç»é²ã»ç·šéãããšãã®å¥çŽãå®ãããã³ãã³ãã®å ¥åºå㯠CLIãšè¡šç€ºã®å¥çŽãä¿åå¢çã®æ±ã㯠ä¿åãšçµ±åã®å¥çŽ ã«åŸãã
æå®ããIssueãšãæå®ããGroupããã³ãã®å šåå«ãäžã€ã® declaration ãšããŠååŸããç»é²ã»ä¿®æ£ã§ããããã«ãããäž»ãªçšéã¯äºã€ãããæ°ãã倧ããã®èšç»ãäžæ¬ã§ç»é²ããããšãç»é²åŸã«äžåãèŠã€ãã£ããšãã«èšç»å šäœãååŸã㊠context ã«å ¥ãã圹å²ã»å®äºæ¡ä»¶ã»äŸåã®ççŸãçŽããŠãŸãšããŠåæ ããããšã§ãããIssue åäœã®æäœã ãã§ã¯ããšãŒãžã§ã³ããä»ã® Issue ã®å 容ãèŠèœãšããççŸã«æ°ä»ããªããååŸãã declaration ã¯ãã¡ã€ã«ãšããŠå¥ã®ã¬ãã¥ãŒã«ãæž¡ããã
æºããå®å šæ§ã¯ãèšç»å šäœãšå€æŽå·®åãä¿ååã«æ€æ»ã§ããããšãååŸåŸã«ç·šéã®åæãå€ãã£ãŠãããç«¶åãšããŠæ¢ããããšãéšåé©çšãäœããªãããšãé害åŸã®åå®è¡ã§æ°èŠ Entity ãéè€äœæããªãããšã§ããã
ãã®æ©èœã¯ lifecycleã»å
å«ã»dependencyã»çµäºæ§æã®å¶çŽãè¿åãããéåžžæäœãšåãå
±éã³ã¢ã®æ€æ»ãéããè¡çªäžã® Entity ãæ§é ã®éåãããä¿åå
ã§ã¯ prepareã»checkã»apply ãæåŠãïŒéäžã§æ¢ãŸã£ãåæ ã® åè©Šè¡ ã ãã¯æ®ãã®åæ ã§æ¶ããéåãé€ãïŒãå
ã« axon resolve ãšéåžžæäœã§çŽããéåžžæäœã¯ç¡é¢ä¿ãªéåããã£ãŠãé²ãããäžæ¬åæ ã¯å€æ°ã® Entity ã«è§Šããéåãå¢ãããªãå€å®ã Entity ããšã«èª¬æãã«ãããããéåã®ãªãä¿åå
ã ãã察象ã«ããïŒä¿åãšçµ±åã®å¥çŽïŒãaxon export ã¯éžãã Entity ãåç
§å
ãè¡çªäžãªãæåŠããéåã§ã¯æåŠããªããåæµ®äžæ¡ä»¶ãš Note ã¯æ±ããªããæ¢å Entity ã® lifecycle é·ç§»ãšçš®é¡ã®å€æãæ±ãããaxon accept|start|complete|cancel|reopenã»axon convert ãªã©ã®éåžžã³ãã³ãã«ä»»ããã
axon export ID... ã¯äžã€ä»¥äžã® ID ãåãåããGroup ãªããã® Group ãšå
šåå«ãIssue ãªããã® Issue ãéžã¶ãåŒæ°ã® ID ã¯ä»ã®ã³ãã³ããšåããå®å
š ID ãŸãã¯äžæãª suffix ãåãä»ããããdeclaration å
ã® id ãšåç
§ã¯å®å
š ID ã ãã䜿ããsuffix ã¯æªè§£æ±ºãšããŠæåŠãããè€æ°æå®ã¯åéåãšããéè€ã¯é€ããCompletedã»Cancelled ã®åå«ãå«ãããlifecycle ãèªã¿åãå°çšã§èŠããããåºå®æžã¿ãšåãããé€å€ãããšãèŒããŠããªãã®ã§è§Šããªãããšãçµäºæžã¿ãããã¡ã€ã«äžã§åºå¥ã§ããªãããã§ãããä¿åå
å
šäœãäžæ¬ã§ååŸãã selector ã¯èšããªãã
declaration ã® issues ãš groups ã«èŒã£ãŠãã Entity ã ããç·šééåã§ãããèŒã£ãŠããªã Entity ã¯å€æŽããªããç·šééåãåºããã«ã¯å¯Ÿè±¡ãè¶³ããŠå床axon exportãããæ¢å Entity ã® record ãæã§æžãè¶³ããŠã base ã¯èšç®ã§ãããbase ã null ã® record ã¯æ°èŠ Entity ãšã¿ãªãããŠæ¢å ID ãšã®è¡çªãç«¶åã«ãªãããã¡ã€ã«ãã Entity ãæ¶ãããšã¯ãåé€ãåããããæå±è§£é€ãäŸåè§£é€ã®ããããæå³ããªããGroup ããå€ãã«ã¯ record ã« parent: null ã宣èšããäœæ¥èªäœããããã«ã¯éåžžã®axon cancelã䜿ããç·šééåã®å Entity ã«ã€ããŠã¯ãtitleãdescriptionãlabelã芪ãoutgoing dependency ãå®å
šã«å®£èšããã芪ã®äžåšã¯ parent: nullãoutgoing dependency ã®äžåšã¯ needs: [] ã§è¡šãã
圢åŒã¯ strict YAML ãšããschema label 㯠axon-declaration/v2 ãšãããæ¬¡ã¯æ¢å Group ã® subtree ã«æ°èŠ Issue ãäžä»¶è¿œå ããsubtree å€ã® Issue ãžäŸåã匵ããprepare åã®äŸã§ãããfingerprint ã¯äŸç€ºå€ã§ããã
schema: axon-declaration/v2
groups:
- id: demo-k3m7pq
key: null
base: "blake3:1111111111111111111111111111111111111111111111111111111111111111"
lifecycle: not-started
title: æ€çŽ¢ç»é¢ãå®è£
ãã
description: |-
## ç®ç
æ€çŽ¢ãã©ãŒã ãšçµæè¡šç€ºãæããã
label: feat
parent: null
needs: []
issues:
- id: demo-8bxw2r
key: null
base: "blake3:2222222222222222222222222222222222222222222222222222222222222222"
lifecycle: completed
title: æ€çŽ¢ API ãå®è£
ãã
description: ã¬ã¹ãã³ã¹åœ¢åŒãåºå®ããã
label: feat
parent: { id: demo-k3m7pq }
needs: []
- id: demo-c9d4ts
key: null
base: "blake3:3333333333333333333333333333333333333333333333333333333333333333"
lifecycle: not-started
title: æ€çŽ¢ãã©ãŒã ãäœã
description: ""
label: feat
parent: { id: demo-k3m7pq }
needs:
- { id: demo-8bxw2r }
- id: null
key: results
base: null
lifecycle: not-started
title: æ€çŽ¢çµæã衚瀺ãã
description: ãã©ãŒã ã®éä¿¡çµæãäžèЧã«åºãã
label: feat
parent: { id: demo-k3m7pq }
needs:
- { id: demo-8bxw2r }
- { id: demo-zz01ab }
references:
- id: demo-zz01ab
kind: issue
lifecycle: not-started
title: äžèЧã®å
±éã³ã³ããŒãã³ããäœãroot 㯠schemaãgroupsãissuesãreferences ã® 4 field ã ãããã®é ã§æã€ mapping ãšããããã¹ãŠå¿
é ã§ã空㮠list ã [] ãšããŠæžããGroup ã®äžã«åãå
¥ãåã§æžãåœ¢ã¯æ¡ããªãã
groups[] ãš issues[] ã®èŠçŽ ã¯æ¬¡ã® field ããã®é ã§å¿
ãæã€ãkind ã¯æ ŒçŽããã list ããæ±ºãŸããããèŠçŽ ã«ã¯æžããªãã
| field | å | ç·šéå¯åŠ | å¥çŽ |
|---|---|---|---|
id |
string ãŸã㯠null | identity | æ¢å Entity ãš prepare æžã¿ã®æ°èŠ Entity ã§ã¯å
¬é IDãprepare åã®æ°èŠ Entity ã ã nullãASCII å°æåè±æ°åãšãã€ãã³ä»¥å€ãå«ãå€ã¯æåŠãã |
key |
string ãŸã㯠null | file å ã®ã¿ | file-local ã®å¥åã^[a-z][a-z0-9-]{0,63}$ ã«äžèŽããgroupsã»issues ãéã㊠file å
ã§äžæãä¿åå
ã«ã¯ä¿åããªã |
base |
fingerprint ãŸã㯠null | èªã¿åãå°çš | axon export æç¹ã®å€ã® fingerprintãæªé©çšã®æ°èŠ Entity ã ã null |
lifecycle |
undecided / not-started / in-progress / completed / cancelled |
æ¢åã¯èªã¿åãå°çš | ä¿åããã lifecycleïŒä¿åå€ïŒãGroup ã®å®å¹å€ã¯æžããªããããGroup 㯠in-progress ã«ãªããªããæ°èŠ Entity 㯠undecided ã not-started ã®ã©ã¡ãããæžã |
title |
string | ç·šéå¯ | 空ãŸãã¯ç©ºçœã ãã®å€ãæ¹è¡ãå¶åŸ¡æåãå«ãå€ã200 æåãè¶ ããå€ãæåŠããããã以å€ã¯ä¿åå€ããã®ãŸãŸæ±ã |
description |
string | ç·šéå¯ | Markdown æ¬æã空æåã¯æ¬æãªããtrimã»æ£èŠåãããªã |
label |
string | ç·šéå¯ | label ã®åºå®éåã®å€ã®ã©ããïŒbugã»featã»choreã»docsã»testã»refactorã»spikeïŒãå¿
é ã§ãnullã»ç©ºæåã»éåå€ã®å€ãæåŠãããæ°èŠ Entity ã¯ç»é²æã® label ãæžã |
parent |
åç § ãŸã㯠null | ç·šéå¯ | 芪 GroupãIssue ã芪ã«ããåç §ã¯æåŠãã |
needs |
åç §ã® list | ç·šéå¯ | outgoing dependencyã空ãªã [] |
base ã null ã® record ãæ°èŠ Entityãnon-null ã® record ãæ¢å Entity ãšã¿ãªããid ã null ãªã base ã null ã§ãªããã°ãªããªããæ°èŠ Entity ã® record 㯠key ãæããªããã°ãªãããprepare åŸã« id ãåŸãŠã key ãæ¶ããŠã¯ãªããªããæ¢å Entity ã« key ãä»ããŠå¥åã§åç
§ããŠããããåã Entity ãäºåºŠå®£èšããŠã¯ãªããªããæ¢å Entity ã® kind ã¯axon exportæç¹ã®çŸåšå€ã§ãããkind ã¯axon convertã§å€ããããdeclaration ã¯å€æãæ±ãããrecord ã issues ãš groups ã®éã§ç§»ãããšã¯ kind ã®æžãæããšããŠæåŠãããaxon export ã®åŸã«å€æããã Entity ã¯ä¿åå
ã® kind ãšäžèŽããªãããæåŠãããå床axon exportãå¿
èŠã«ãªãããã®æåŠã¯ record ãç§»ããå Žåãšåã kind ã®äžäžèŽãšããŠèšºæãããä¿åå
åŽã®å€æãšã¯åºå¥ããªããlifecycle ã®ç¶Žãã¯axon list --lifecycleãšåãã«ããããå€ã¯ axon list ã瀺ãå®å¹å€ã§ã¯ãªãä¿åå€ã§ãããäŸã® Group ã¯å®äºæžã¿ã®åãæã€ããå®å¹å€ã InProgress ã§ãaxon list --lifecycle in-progress ã«åœããããdeclaration ã«ã¯ä¿åå€ã® not-started ãæžãã
åç
§ã¯ { id: demo-8bxw2r } ãŸã㯠{ key: results } ã®ã©ã¡ããäžæ¹ã ããæã€ mapping ãšãããäžã€ã®åç
§ mapping ãžã®äž¡æ¹ã®äœµèšãã©ã¡ãããªã mappingãæªè§£æ±ºã® IDã»key ã¯ãšã©ãŒã§ãããçŽ ã®æååã¯äœ¿ããªãã解決åŸã«åã Entity ãæãéè€ãã needs ã¯ãšã©ãŒãšããèªå·±äŸåãæåŠããã
芪㯠child ããdependency 㯠dependent ãææãããrecord ã«æžã parent ãš needs ã¯ãã® Entity ã®ææç©ã ãã§ãããå€éšããç·šééåãžã® incoming ãªå
å«ã»dependency 㯠record ã«çŸããªãããç·šéã§ããªããdeclaration 㯠incoming edge ã衚瀺ããªããå¿
èŠãªãaxon show ID --details --skip-conditionsã§ç¢ºèªããã
references ã«ã¯ãç·šééåã® parentã»needs ãæãç·šééåå€ã® Entity ããidãkindïŒissue / groupïŒãlifecycleãtitle ã®é ã§äžä»¶ãã€èªã¿åãå°çšãšããŠèŒãããdescriptionãlabelãkeyãé¢ä¿ã¯æããªããã¬ãã¥ãŒåŽã subtree å€ã®äŸåå
ã ID ã®çªãåãããªãã«èªããããã«ããããã® context ã§ããã
references 㯠prepare ãš apply åŸã® canonical rewrite ã§ä¿åå
ã®çŸåšå€ããåçæãããcheckã»apply 㯠references ã«ã€ããŠãèŠçŽ ã®éåãç·šééåã® parentã»needs ãæãç·šééåå€ã® Entity ã®éåãšäžèŽããããšãããã³ file ã«æžãããå€ã©ããã®åœ¢åŒãš ID é ã canonical ã§ããããšãæ€æ»ããkind ã¯ä¿åå
ã®çŸåšå€ãšã®äžèŽãèŠæ±ãããäžäžèŽã¯ãfile ã®æžãæããšaxon exportåŸã®ä¿åå
ã§ã®å€æãåºå¥ã§ããªããããåç
§å
ã® kind ãä¿åå
ãšäžèŽããªãããšã察象 ID ãšãšãã«èšºæããŠæåŠããprepare ã§ã®åçæãæ¡å
ãããreferences ã® lifecycle ãä¿åå€ã§ãããtitle ã lifecycle ã®å€ãä¿åå
ã®çŸåšå€ãšäžèŽããããšã¯èŠæ±ããªããéäžè¶³ãããã° prepare ã§åçæãããåç
§å
ã® title ã lifecycle ãaxon exportã®åŸã«å€ãã£ãŠãç«¶åã«ãããåç
§å
ãååšããªãå Žåãkind ãäžèŽããªãå ŽåïŒåç
§å
ãaxon exportã®åŸã«å€æãããå Žåãå«ãïŒãããã³å
±éã³ã¢ãæåŠããç¶æ
ïŒçµäºãã Group ãèŠªã«æå®ãããçææžã¿ã»å®äºæžã¿ã® Entity ããèªèº«ãç¥å
ãæ¡çšæžã¿ã§ãªã Group ã®äžãžç§»ããå€éšãçµç±ããŠåŸªç°ãäœããªã©ïŒã ããæ¢ãããCancelled ã® Entity ãžã®äŸåã¯å
±éã³ã¢ãéåžžæäœã§èš±ããããdeclaration ã§ãæåŠããªããç·šéè
ã¯ãããã®å€ãèŠãŠç·šéããã®ã§ã¯ãªããåç
§å
ã®å€ã®å€åãŸã§ç«¶åã«ãããšã倧ããªèšç»ã»ã©ç¡é¢ä¿ãªå€æŽã§æ¢ãŸãããã§ããã
canonical serializer ã¯æ¬¡ã®èŠåã§åºåããã
- mapping ã® key ã¯ãã®ææžã®è¡šãšäŸã«ç€ºããé åºã§åºããalphabetical ã«ããªãã
groupsã»issuesã®èŠçŽ ã¯ãbaseã non-null ã®èŠçŽ ãä¿åãããäœææ¥æé ïŒåæå»ã¯ ID é ïŒããã®åŸã«baseã null ã®èŠçŽ ã key é ã§äžŠã¹ãããã®ç¯ã® ID é ã»key é ã¯ãã¹ãŠ bytewise UTF-8 æé ãšããlocale ã䜿ããªããaxon listãšåãäžŠã³æ¹ã®èŠåã§ãããä¹±æ° ID é ã«ããªããäœææ¥æã¯ declaration ã«æžããä¿åå ããåããããcanonical 圢ã¯ä¿åå ããèªãã èšé²ã®éåã«å¯ŸããŠå®ãŸããcheckã»applyã¯æ€èšŒã«äœ¿ãã®ãšåãèšé²ã®éåã§ canonical 圢ãå€å®ããreferencesã®èŠçŽ ã¯ file å ã®å€ã®åœ¢åŒãšé åºã ããå€å®ãããäœææ¥æã¯ä¿ååŸã«å€ãããªããneedsã¯è§£æ±ºåŸã® ID é ã«äžŠã¹ãprepareåã§ ID ãæããªãåç §å ã¯ãã®åŸã« key é ã§äžŠã¹ããreferences㯠ID é ã«äžŠã¹ããcanonical èŠåã¯prepareååŸã® fileãapplyåŸã® rewriteãaxon docs declaration --exampleã®åºåã®ãã¹ãŠã«é©çšããã- duplicate 㪠Entityãkeyã解決åŸã®äŸåã¯èš±å¯ãããsort ã§æœ°ããªãã
- block context ã® string ã®ãã¡ãæ¹è¡ãå«ã¿ãæ¹è¡ã LF ã ãã§ãé空è¡ã 1 è¡ä»¥äžãããæ«å°Ÿã®æ¹è¡ã 0 åãŸã㯠1 åãæåã®é空è¡ã空çœã§å§ãŸãããç©ºçœæåã ããããªãè¡ãæ«å°Ÿç©ºçœãå«ãŸãªããã®ã¯ literal block ã§åºããé·ã 0 ã®ç©ºè¡ã¯å«ãã§ãããæ«å°Ÿæ¹è¡ããªããã°
|-ã1 åãªã|ãšãããflow contextïŒåç § mapping ã®äžïŒã§ã¯ literal block ã䜿ããªããæ¹è¡ãå«ãŸãªã string 㯠plain scalar ãšããåºåãã contextïŒblock ã flow ãïŒã§ plain scalar ãšããŠåã string ã«æ»ããªããã®ïŒç©ºæåãnullã»~ã»çåœå€ã»æ°å€ã»æ¥æã«èªããæååãå é ã»æ«å°Ÿã®ç©ºçœãYAML ã®æç€ºåã§å§ãŸãã:ã#ãå«ãæååãflow å ã§ã¯,ãæ¬åŒ§ãå«ãæååãªã©ïŒã¯ double quote ãããäžèšã®ã©ã¡ãã§ãç¡æå€±ã«è¡šããªã stringïŒCR ãå¶åŸ¡æåã2 å以äžã®æ«å°Ÿæ¹è¡ã空çœã§å§ãŸãæåã®é空è¡ãflow context ã®æ¹è¡ãªã©ïŒã¯ escape ä»ãã® double quote ã§åºããä¿åå€ã¯å ±éã³ã¢ãåãå ¥ããä»»æã®æååã§ãããaxon exportãš parse ã®åŸåŸ©ã§äžæåãå€ããªããfingerprint ã¯åžžã« double quote ããã - åç
§ mapping ã¯
{ id: demo-8bxw2r }ã®ããã«äžè¡ã® flow style ã§åºãããã¹ãŠã® field ã§ null ã¯nullã空㮠list ã¯[]ãšç¶Žããåç §å ã® record ãkeyãæãŠã°{ key: ... }ãæããªããã°{ id: ... }ã§åºãã - LF æ¹è¡ã2 space indentãdocument marker ãªããæ«å°Ÿ newline äžã€ãšããã
- comment ã¯æå³ã«å«ãããcanonical rewrite ã§ã¯ä¿æããªãã
parser 㯠strict ãšããunknown fieldãYAML mapping key ã®éè€ãanchorãaliasãmerge keyãç¬èª tagãè€æ° documentãmapping 以å€ã® rootãèŠæ±åãšç°ãªã scalar ãæåŠãããschema label ã axon-declaration/v2 以å€ã® file ã¯å€æããã«æåŠããã蚺æã«ã¯å
¥åããã schema label ãšå¯Ÿå¿ãã schema label ã瀺ãã
fingerprint 㯠blake3: ã«ç¶ã lowercase 64 æ¡ã® hex string ãšãããå Entity ã«ã€ããŠã次㮠token åãé ã« encode ã㊠BLAKE3 ãžæž¡ãã
- schema label
axon-declaration/v2 - kindïŒ
issue/groupïŒ - ID
- lifecycle ã®ç¶Žã
- title
- description
- label ã®ç¶Žã
- parent ã® presenceïŒ
none/someïŒãsomeãªãç¶ããŠè§£æ±ºæžã¿ parent ID - outgoing dependency ã®ä»¶æ°ã笊å·ãªã 64 bit big-endian integer ã§è¡šãã 8 byte
- prerequisite ã®è§£æ±ºæžã¿ ID ã bytewise UTF-8 æé ã«äžŠã¹ãå token
äžã€ã® token ã¯ãUTF-8 byte é·ã笊å·ãªã 64 bit big-endian integer ã§è¡šãã 8 byte ãš token èªäœã® UTF-8 byte ãé£çµã㊠encode ãããä»¶æ°ã ãã¯åºå®é·æŽæ°ãšããŠçŽæ¥ encode ãããbase ã¯axon exportã®æç¹ã§èšç®ããcheckã»apply ã¯ä¿åå
ã®çŸåšå€ããåèšç®ããŠäžèŽãèŠæ±ãããäžäžèŽã¯ãåŸè¿°ã®å詊è¡ã®é©çšæžã¿å€å®ã«è©²åœããªãéãç«¶åãšã㊠file å
šäœãæåŠãã察象 ID ãåæããã
fingerprint ã«ã¯ declaration ãèŠããé
ç®ã ããå«ãããèšé² ID ã§ã¯ãªãå€ããèšç®ãããããaxon export ã®åŸã«å€æŽããå
ã®å€ãžæ»ã£ãå Žåã¯èšé²ãå¢ããŠããŠãç«¶åã«ããªããlifecycle ã¯èªã¿åãå°çšã§ãå«ãããCompleted ã«ãªã£ãŠããã°ç·šéèªäœãäžå¯èœã§ããããç«¶åãšããŠå
ã«ç¥ããããåæµ®äžæ¡ä»¶ãNoteãèšé²è
ãäœææ¥æãå±¥æŽãincoming edgeãreferences ã®å€ã¯å«ããªããç·šéè
ãèŠãŠããªãé
ç®ã®å€æŽã¯ããã®ç·šéã®æå³ãšç¡é¢ä¿ã§ãããç·šéè
ã®æå³ã¯ãã®å€ãèŠãŠäœãããŠãããçŸåšå€ãåããªãé©çšããŠå®å
šã§ããã
axon export ID... ã¯äžè²«ããèšé²ã®éåãã selector ã®åéåãç·šééåãšããŠéžã³ãcanonical YAML ã stdout ãžåºããç·šééåã®å Entity ã¯çŸåšå€ãš base ãæã¡ãkey 㯠null ã«ãªããååŸããçŽåŸã¯ key ã埩å
ã§ããªããããåç
§ã¯ãã¹ãŠ ID åç
§ã«ãªããreferences ã¯ç·šééåå€ã®åç
§å
ããèšç®ãããåç
§å
ãä¿åå
ã«ååšããªãïŒèŠªã®äžåšã»äŸåå
ã®äžåšã®éåïŒå Žåã¯ãã®åç
§ã references ã«èŒããã«åºããprepareã»checkã»apply ã¯ãã®äžåšã蚺æããŠæåŠãããéžãã Group ã®åãè¡çªäžãªãããã®åãå«ããã«åºãã®ã§ã¯ãªãæåŠãããä¿åå
ã倿Žãããåæµ®äžæ¡ä»¶ãå®è¡ããªãã
æ°èŠèšç»ã®é圢ã¯axon docs declaration --exampleã§ååŸãããæ°èŠ Group äžä»¶ããã®å Issue äºä»¶ãå Issue éã® dependency äžæ¬ãå«ãå®å
šãª YAML ã ãã stdout ã«åºããid ãš base 㯠nullãlifecycle 㯠not-started ãšãããaxon docs declaration㯠fieldãæ°èŠãšæ¢åã®éããprepare â check â apply ã®æé ã説æãããäž¡è
ã¯ä¿åå
ãéããã管ç rootããããã¯ãŒã¯ããœãŒã¹ checkout ã«äŸåããªããåŒæ°ãªãã®axon docsã¯ç¶æ
ã¢ãã«ãšåºæ¬ã® workflow ã説æããdeclaration ã®èª¬æãžæ¡å
ããã
ååŸãšé©çšã¯äžã€ã®æ®µéã«åãããID ã apply åã«ç¢ºå®ãããããšããå詊è¡ã§éè€äœæããªãå¯äžã®åçŽãªæ¹æ³ã§ããã
axon import prepare FILE ã¯ä¿åå
ã倿Žãããfile ã ãã眮ãæãããstrict YAML ãšå±æèŠåïŒfieldãkeyãåç
§ã®åœ¢ãéè€ãèªå·±äŸåã芪ã Group ã§ããããšïŒãæ€èšŒããæ¢å Entity ã® record ã® ID ãä¿åå
ã«ååšã kind ãäžèŽããããšãç·šééåå€ã®åç
§å
ãä¿åå
ã«ååšããããšã確èªããid: null ã®å Entity ã«ä¿åå
ãš file ã®äž¡æ¹ã§è¡çªããªãæçµ ID ãå²ãåœãŠããããããã«å€±æããã° file ã倿Žããªããbase: null ã® record ã®å²ãåœãŠæžã¿ ID ãä¿åå
ã«ååšããå Žåã¯åŸè¿°ã®é©çšæžã¿å€å®ãè¡ãã該åœããã°ãã® ID ãä¿æãã該åœããªããã° conflict: ID: new id already exists ãšã㊠file ãšä¿åå
ã倿ŽããæåŠãããé©çšæžã¿ã®å¯èœæ§ããããããå¥ file ãž axon export ID ã§åãçŽããŠç·šéãç§»ããæå³ããŠæ°èŠäœæããå Žåã¯ããã®æ°èŠ record ã« id: null ãæç€ºãããä¿åå
ã§æªäœ¿çšã®å²ãåœãŠæžã¿ ID ã¯ä¿æãããEntity ã®èšé²ããªã Note ã ããæ®ã ID ã¯äºçŽæžã¿ãšããŠåå²ãåœãŠãããkey åç
§ã¯ä¿æãããkey ã¯ãã®ãŸãŸæ®ããbase 㯠null ã®ãŸãŸã«ãããreferences ãçŸåšå€ããåçæããcanonical 圢åŒã§å
ã®å Žæãž atomic ã«çœ®ãæããã眮ãæãã¯èšé² file ã®å
¬éãšåãæé ã«åŸããtemporary ãžã®æžèŸŒãš sync ã®åŸãfile ã® bytes ãèªã¿åãæãšåãã§ããããšãåç
§åããŠãã rename ããdirectory ã sync ãããåç
§ååã®å€±æãš bytes ã®å€å㯠file ã倿Žãããrename åŸã® sync 倱æã¯ file ã®çµæäžæãšããŠå ±åãããåç
§ååŸã®éå調㪠editor æžèŸŒã¯ãèšé² file ã®ä¿åå¥çŽãšåãã察象å€ãšãããNote ã ããæ®ãäºçŽæžã¿ ID ãé€ãããã§ã«å
š ID ãå²ãåœãŠæžã¿ãªãæ°ãã ID ãçºè¡ãããåãå
¥åãžã® prepare ã¯åãå
容ãè¿ããæ¢å Entity ã® base ã®ç«¶åå€å®ã¯ prepare ã®å¯Ÿè±¡ã§ã¯ãªããæåæã¯æ°èŠ record ã® key -> å®å
šID ã®å¯Ÿå¿ãäžè¡ãã€è¡šç€ºããã
prepareã»checkã»apply ã® new id already exists 蚺æã¯ã察象 ID ãšãaxon export ã§ã®åãçŽãã»ç·šéã®ç§»è¡ãããã³æå³ããæ°èŠäœæã«ã¯ id: null ã䜿ã察åŠã瀺ãã
axon import check FILE 㯠file ãšä¿åå
ã倿Žããªããå
š Entity ã« ID ããããfile ã canonical 圢åŒã§ããããšãèŠæ±ããéãã° prepare ãå¿
èŠã§ããããšãå ±åããŠæé»ã«æžãæããªããæ€èšŒã¯æ¬¡ã®é ã«è¡ãã
- strict schemaãidentityãåç
§ã®å±ææ€èšŒãšãæ¢å Entity ã® ID ãä¿åå
ã«ååšã kind ãäžèŽããããšã
referencesã«èšèŒãããå€éš Entity ã®ååšãš kind ã®äžèŽããå詊è¡ã®é©çšæžã¿å€å®ããåã«æ€èšŒãã baseãšä¿åå ã®çŸåšå€ã®ç §åãããã³æ°èŠ Entity ã®å²ãåœãŠæžã¿ ID ãä¿åå ã«ååšããªãããšã®ç¢ºèªãäžäžèŽãŸãã¯ååšãããã°åŸè¿°ã®å詊è¡ã®é©çšæžã¿å€å®ãè¡ãã該åœããã°ä»¥éã®æ€èšŒãçããŠé©çšæžã¿ãšããŠæ±ãã該åœããªããã°ç«¶åãšãããbaseãäžèŽããã®ã« file ã®lifecycleãçŸåšå€ãšç°ãªãã°ãèªã¿åãå°çšé ç®ã®æžãæããšããŠæåŠãã- åç §å ã®ååš
- æ€èšŒã«äœ¿ãèšé²ã®éåãžç·šéãå ±éã³ã¢ã®éåžžæäœãšããŠä»®ã«é©çšããå å«ã»dependencyã»çµäºæ§æã»åºå®ãããæé¢ãš label ã®å¶çŽãéåžžæäœãšåãæå³ã§æ€æ»
- äœæãtitle ã®å€æŽååŸïŒæ¹è¡ã
\nãå¶åŸ¡æåãå¯èŠ escape ãšããäžèЧãšåãäžè¡è¡šç€ºïŒãdescription ã®å€æŽæç¡ãlabel ã®ååŸãparent ã®ååŸãneedsã®å¢æžã Entity ããšã«è¡šç€ºãlabel ã ããç°ãªãå Žåãå·®åãšããŠè¡šç€ºãããå·®åããªããã°ãã®æšã衚瀺 - é©çšåŸã®ç¶æ³æ¬ãä¿åæ å ±ããå°åºã§ããç¯å²ã§è¡šç€º
description ã®å šæå·®å㯠file èªäœã® git diff ã«ä»»ããCLI ã§ã¯å€æŽã®æç¡ã«çãããåæµ®äžæ¡ä»¶ã¯å®è¡ããªããäžä»¶ã§ã error ãããã°é©çšå¯èœãšã¯è¡šç€ºããªãã
axon import apply FILE ã¯ä¿åå
ã®æžã蟌㿠lock ãååŸããããšã« file ã® bytes ãèªãã§ digest ãä¿æãããã®å
å®¹ãšæ°ããèšé²ã®éåã«å¯Ÿã㊠check ãšåãæ€èšŒãåãåªå
é äœã§åå®è¡ããå·®åãå
±éã³ã¢ã®éåžžæäœã®åã«å€æããŠãäžåã® lock ã®äžã§èšé²ãšããŠåæ ãããäžä»¶ã§ãæåŠãããã°å
šä»¶é©çšãããä¿åå
ãå€ããªããä¿åããèšé²ã¯å€æŽã®ãã Entity ããšã«äžã€ã§ãæ°èŠ Entity ã¯æçµå€ãæã€ç»é²ã®èšé²ãæ¢å Entity 㯠titleã»descriptionã»labelã»parentã»needs ã®æçµå€ããŸãšããŠæã€äžã€ã®èšé²ïŒaxon log ã§ã¯ declaration ã®é©çšãšããŠç€ºãïŒãšããæ€èšŒã«äœ¿ã£ãéåžžæäœã®åãåã
ã®èšé²ã«ã¯ããªããèšé²ã¯ 1 ä»¶ 1 file ãªã®ã§ãåæ ã¯æ€èšŒæžã¿ã®å
šèšé²ã®äžæ file ãæžããŠããé ã«å
¬éãã圢ã«ãªããå
¬éã®éäžã§ rename ã倱æããã process ã倱ãããå Žåã ãäžéšã® Entity ã®èšé²ãå
¬éãããç¶æ
ã«ãªããããå
¬éã¯æ°èŠ Entity ã®ç»é²ã芪ãšäŸåå
ãå
ã«ãªãé ã«ã次ãã§æ¢å Entity ã®å€æŽã®é ã«è¡ããEntity ããšã«èšé²ãäžã€ãªã®ã§ãå Entity ã¯æçµå€ãå
ã®å€ã®ã©ã¡ããã«ããããã®å Žåã¯çµæäžæãšããŠæ±ãïŒrename ã®å€±æãªã蚺æã«ç€ºããprocess ã®åªå€±ãªãå©çšè
ãçµæäžæãšããŠæ±ãïŒãåè©Šè¡ ã§æ®ããåæ ãããæäœã®é©çšé ã¯å®è£
ãæ±ºããæå¹ãªæçµç¶æ
ãäžéç¶æ
ã®åŸªç°ãåæäžè¶³ã§åŒŸããªãããã«ããå
¥åã®äžŠã³ã§é©çšçµæãå€ããªããããšãã°èŠªã®è§£é€ãšäŸåã®åé€ã远å ããå
ã«è¡ããæ°èŠ Entity 㯠lifecycle ã瀺ãåæç¶æ
ãš label ã®å€ã§äœæããæ¶ç©ºã®æ¡çšå±¥æŽãäœããªããåæµ®äžæ¡ä»¶ã¯æ¢å Entity ã§ã¯çŸåšå€ãä¿æããæ°èŠ Entity ã§ã¯æªèšå®ãšãããåãå€ã®åæå®ã¯å·®åã§ã¯ãªãæåãã no-op ãšããã
ä¿åæååŸã«åã file ã canonical rewrite ãããæååºåã«ã¯ãbase ã®æŽæ°åã«æ°èŠïŒbase: nullïŒã ã£ã record ã® key -> å®å
šID ã®å¯Ÿå¿ãäžè¡ãã€å«ããããã® apply ãä¿åããèšé²ã®éåãããæ°èŠ Entity ãšæ¢å Entity ã® base ãš lifecycle ã眮ãæããreferences ãåçæããrecord ãš needs ã®äžŠã³ãå«ã canonical 圢ã file å
šäœã«åé©çšãããkey ãš key åç
§ã¯æ®ããlock è§£æŸåŸã«ä¿åå
ãèªã¿çŽããŠä»è
ã®å€æŽã base ã«åã蟌ãŸãªããrewrite 㯠prepare ãšåãæé ã§å
ã®å Žæãžçœ®ãæãããrename ã®çŽåã« file ã® bytes ãèªã¿åãæã® digest ãšäžèŽããããšãåç
§åããå€ãã£ãŠããã° file ã倿Žãããä¿åå
ã«ã¯é©çšæžã¿ã§ declaration ã¯æŽæ°ããŠããªãããšãå ±åãããrename åŸã® sync 倱æã¯ declaration ã®çµæäžæãšããŠå ±åãããä¿åå
ã®å€±æã¯ä¿åå¥çŽã«åŸããèšé² file ã® rename åŸã®åæå€±æã¯çµæäžæãšããŠæ±ããä¿åæååŸã« declaration ã®æŽæ°ã ãã倱æãŸãã¯çµæäžæã«ãªã£ãå Žåã¯ãä¿åå
ãé©çšæžã¿ã§ããããšãæç€ºããã
çµæäžæããŸãã¯ä¿åæååŸã® file æŽæ°å€±æã®ããšã¯ãåã file ãå床 apply ã§ãããcheck ãš apply ã¯ãbase ã®äžäžèŽãæ°èŠ Entity ã®å²ãåœãŠæžã¿ ID ã®ååšãç«¶åãšå€å®ããåã«ãEntity ããšã«é©çšæžã¿å€å®ãè¡ããç·šééåã®å Entity ã«ã€ããŠãä¿åå
ã®çŸåšå€ã declaration ã®æçµå€ïŒtitleãdescriptionãlabelãparentãoutgoing dependencyãkindãlifecycleãæ°èŠ Entity ã¯å²ãåœãŠæžã¿ ID ã§ååšã宣èšããåæ lifecycle ã§ããããšïŒã«å®å
šäžèŽããã°ãã® Entity ã¯é©çšæžã¿ãšããŠæ±ããbase ã«äžèŽããã°ïŒæ°èŠ Entity ãªããã® ID ãååšããªããã°ïŒæªé©çšãšããŠæ®ãã®å·®åãé©çšããã©ã¡ãã§ããªããã°ç«¶åãšã㊠file å
šäœãæåŠãããå
š Entity ãé©çšæžã¿ãªãä¿åå
ã no-op ãšããfile ã® rewrite ã ããå®äºãããå
¬éã®éäžã§ process ã倱ãããå Žåã«äžéšã®èšé²ã ããå
¬éãããŠããŠãããã®å€å®ã§æ®ããåæ ã§ãããéäžã®ç¶æ
ãéåãå«ãããšãããïŒçæ¹ã ãåæ ããã dependency ã®å
¥ãæ¿ããªã©ïŒããããã®å詊è¡ã«éããcheck ãš apply ã¯éåã®ããä¿åå
ã®æåŠãæ®ãã®åæ ã§æ¶ããéåã«ã¯é©çšãããæçµå€ã®åè£ãéåãæããªãããšãåãæ€æ»ã§ç¢ºèªããŠåæ ãããå
š Entity ãé©çšæžã¿ã®å詊è¡ã¯ä¿åå
ã«èšé²ãè¶³ããªããããä»ã® writer ãåŸããäœã£ãéåããã£ãŠãæåŠãããfile ã® rewrite ãå®äºãããprepare ã§ ID ã確å®ããŠãããããåå®è¡ã§åã Entity ãäºåºŠäœãããããšã¯ãªãã
次ã¯ãããã file å šäœãæåŠããéšåé©çšããªãã蚺æã¯åå ã®åé¡ã察象 IDãåºå®ãããŠããé ç®åã瀺ãã
- strict YAML éåãschema label ã®äžäžèŽãunknown fieldãYAML mapping key ã®éè€ãanchorã»aliasã»merge keyã»tagã
labelã®æ¬ èœã»nullã»åºå®éåã®å€ã®å€ - ASCII å°æåè±æ°åãšãã€ãã³ä»¥å€ãå«ã
idãäžã€ã®åç § mapping ã§ã® id ãš key ã®äœµèšãidã null ã§baseã non-null ã® recordãbaseã null ã® record ã®keyæ¬ èœãkeyã®æžåŒéåãšéè€ãæªè§£æ±ºã® IDã»keyãåã Entity ã®äºé宣èšã解決åŸã®éè€ããneedsãèªå·±äŸåãIssue ã芪ã«ããåç §ãæ°èŠ Entity ã®lifecycleãundecidedã»not-startedä»¥å€ - æ¢å Entity ã®
lifecycleã®æžãæããæ¢å Entity ã® record ãissuesãšgroupsã®éã§ç§»ã kind ã®å€æŽ baseã®äžäžèŽããŸãã¯æ°èŠ Entity ã®å²ãåœãŠæžã¿ ID ãä¿åå ã«ååšããããšïŒå詊è¡ã® Entity ããšã®é©çšæžã¿å€å®ã«è©²åœããå Žåãé€ãïŒãä¿åå ã®å€æŽãšå ¥ååŽã®baseã®æ¹å€ã»null åã¯åºå¥ãããããããç«¶åãšããŠæ±ãCompletedã»Cancelledã® titleã»descriptionã»label ã®å·®åãCompletedã®needsã®å·®åãçµäºãã Group ã®æ§æãå€ããæå±å€æŽãçµäºãã Group ã芪ã«ããäœæã»æå±å€æŽãå®å¹å€ãInProgressãCompletedã® Entity ããç§»åå ã® Group èªèº«ããã®ç¥å ã«æ¡çšæžã¿ã§ãªããã®ãããå Žåã«ããã®äžãžç§»ã倿Žãå å«ã®åŸªç°ãdependency ã®åŸªç°ãªã©ãå ±éã³ã¢ãéåžžæäœã§ãæåŠãã倿Žãæ°èŠäœæã®èŠªã¯çµäºããŠããªã Group ã§ããã°ãããæ¡çšæžã¿ãçææžã¿ã§ããå¿ èŠã¯ãªã
key ã®æžåŒéåãšéè€ã¯å¥ã®èšºæã«ããã©ã¡ããå
¥åããã key ã®å€ãåŒçšããŠç€ºããæžåŒéåã®èšºæã«ã¯ key ã®æžåŒã瀺ãã
èªã¿åãå°çšé
ç®ã®æžãæããš base ã®äžäžèŽã®èšºæã¯ã察象 ID ã«å ããŠä»£ããã«è¡ãæäœã瀺ããåãçŽãã瀺ãå Žåã¯ãfile å
šäœã® record ãaxon exportã§å¥ file ãžåãçŽããŠç·šéãç§»ããã瀺ãã察象㮠record ã ããåãçŽããšãå
ã® file ã«ã¯äžèŽããªã base ãæ®ãããã§ããã
- æ¢å Entity ã®
lifecycleã®æžãæãã¯ãæžãæãããã¹ãŠã® Entity ã«ã€ããŠãfile ã®å€ãä¿åå€ãžæ»ãããšã瀺ããä¿åå€ãã宣èšå€ãžäžã€ã®éåžžã³ãã³ãïŒaxon accept|withdraw|start|release|complete|cancel|reconsider|reopenïŒã§é·ç§»ã§ããå Žåã¯ãã®ã³ãã³ãã瀺ããä¿åå€ãçµäºããŠããªããã°axon import applyã®åŸã«å®è¡ãããã瀺ããåã record ã®ä»ã®é ç®ãç·šéããŠãããšãåã«å®è¡ããã°baseãäžèŽããªããªãããã§ãããä¿åå€ãCompletedã»Cancelledãªã titleã»descriptionã»label ã®ç·šéãæåŠããããããå ã«å®è¡ããŠããåãçŽããã瀺ããä»ã«å€æŽããªããã°æ»ããŠå®è¡ããã ãã§è¶³ããããšã瀺ããäžã€ã®ã³ãã³ãã§é·ç§»ã§ããªããã°ãã®æšã瀺ããGroup ã®in-progressã«ã¯ä¿åãããªãå®å¹å€ã§ããããšã瀺ããã³ãã³ãã®åæïŒäŸåå ã®å®äºãªã©ïŒããä»ã®ç·šéãé·ç§»åŸã«ã ãéãããšïŒæ¡çšåã® Group ã®äžãžã®ç§»åãªã©ïŒã¯å€å®ããªãããã瀺ããæé ããããã§æåŠãããããšã¯ãã - æ¢å Entity ã® kind ã®äžäžèŽã¯ãrecord ãç§»ãããªãå
ã® list ãžæ»ãããšãçš®é¡ãå€ãããªã
axon convertã䜿ãããšã倿ã®åŸããŸãã¯axon exportã®åŸã«ä¿åå ã§å€æãããŠããå Žåã¯åãçŽãããšã瀺ããrecord ã®ç§»åãšä¿åå ã§ã®å€æã¯åºå¥ã§ããªããããäž¡æ¹ã瀺ããGroup ã® record ãissuesãžç§»ããšåã®èŠªã Issue ãæããŠå±æèŠåã®æ€èšŒã«å€±æããããç§»ãã record ãå ã® list ãžæ»ãã°ãã®æ€èšŒãéãå Žåã¯ãkind ã®äžäžèŽãšããŠèšºæãã referencesã® kind ã®äžäžèŽã¯ãaxon import prepare FILEã§ã®åçæã瀺ããprepareã»checkã»applyã®å±æèŠåïŒèŠªã Group ã§ããããšïŒã¯ãç·šééåå€ã®èŠªããreferencesã® kind ãšä¿åå ã®çŸåšå€ã®ã©ã¡ããã Group ãªãéãããã®ãããparentã«æå®ããåç §å ãaxon exportã®åŸã« Group ãžå€æãããŠããcheckã»applyã¯ãã®äžäžèŽãšããŠèšºæããprepareã¯referencesãåçæãããéã« Issue ãžå€æãããåç §å ã芪ã«ããå Žåã¯ãcheckã»applyã¯ãã®äžäžèŽãšããŠèšºæããprepareã¯åçæãã kind ã§ã®æ€èšŒã§èŠªã Group ã§ãªããšããŠæåŠããbaseã®äžäžèŽã¯ãä¿åå ã® Entity ãbaseãšäžèŽããªãããšïŒaxon exportã®åŸã®å€æŽãbaseã®æ¹å€ã§ãäž¡è ã¯åºå¥ããªãïŒãšãåãçŽãã瀺ããprepareã¯æ¢å Entity ã®baseãæŽæ°ããªãããããã®ç«¶åãè§£æ¶ããªã
çµäºãã Entity ãå¥ã®èªã¿åãå°çšã»ã¯ã·ã§ã³ã«åããªããå
±éã³ã¢ã¯Cancelledã® dependency ç·šéãèš±ããçµäºããŠããªã Group ã®éã§ã®çµäº Entity ã®æå±å€æŽãèš±ãïŒCompleted ã® Entity ã®ç§»åå
ã¯ãæå±ãªãããèªèº«ãšå
šç¥å
ãæ¡çšæžã¿ã® Group ã«éãïŒãããçµäº Entity ã«ãç·šéã§ããé
ç®ãæ®ããåã list ã«çœ®ããé
ç®åäœã§æåŠããã
ä¿åå¢çã®å€±æã¯ CLIãšè¡šç€ºã®å¥çŽ ãšåãã AppliedãNot appliedãResult unknown ãåºå¥ãããåç §å ã®ååšããªã ID ã¯ä¿åå ã®äžååšãšããŠãfile å ã§æªè§£æ±ºã® key ãšã¯å¥ã®èšºæã«ããã
CLI ã¯åœ¢åŒã®æ€èšŒãç«¶åæ€ç¥ãå
±éã³ã¢ã«ããå¶çŽæ€æ»ãååçãªä¿åãå詊è¡ã®å€å®ãæ
ããskill ã¯äœãå€ãããã®å€æãdeclaration ã®ç·šéãcheck çµæã®èªã¿åããapply ã®å®è¡å€æãæ
ããskill ã¯ä¿å file ãçŽæ¥ç·šéãããäžæ¬æäœã鿬¡ã®éåžž CLI ã§ä»£çšããªããfile äœæã»ã¬ãã¥ãŒã ãã®äŸé Œãä¿åæžã¿ Entity ã®å€æŽãžåºãããapply ã®çŽåã§åãæš©éãå確èªããªããå人 workflow ã®å€æå¢çã¯èšèšå€æã«çœ®ãã