aircana 4.0.0.rc1 → 4.0.0.rc2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6de2ad9e6dc6f408717510b86c678f3e68b4ad34c5109550907e1d9b9c0db312
4
- data.tar.gz: 90b5c1f7d81dfab0c0f738a804da2581b1ffebc1568b6ab62d65fcbb8d2e17a3
3
+ metadata.gz: f829f4f8d1e1b56fa8eb2b4ce504ec225ed05d1238c424f77b80587ee5b654f7
4
+ data.tar.gz: 6d45e7d8b36e1e7dee02c851e81e98dbb05bf90cd0e8c669bd38ddfd1ea77d3a
5
5
  SHA512:
6
- metadata.gz: dc637bc4bb240b377a365f8e2624d867864b4193863113b6d251ec61d6f9c6eacef5ea6221ecbb3bda7fc3cc1d47cd4a22694a2a43d9ce7d77f37b7ae0361f57
7
- data.tar.gz: a2ae1bcd6375ea53ee7f1ab8529f57385f256e94a77abecd01bd9eb43297a3e918531eaee1fb8a3c430611d473d29c1d47ee9d64fb40d79e0ab82b96b7de0c9e
6
+ metadata.gz: 968c9c435398b1a186a189d0f45a66042c6b452ee7c9a69c3d25f18c3481bb8d05514413bf10f832f865764dc69a79df4c563faef4d9ee7e4d537c78debb3e02
7
+ data.tar.gz: 733031e63e262cbd4a41b03657a7ac88efeb08de05a6eaaa40a03a7f30b9c319cdbb6f3cf8c8d95199474bb39fa96aee7998fc74ba3f8d70412079c81bf22872
data/.rspec_status CHANGED
@@ -1,208 +1,208 @@
1
1
  example_id | status | run_time |
2
2
  ----------------------------------------------------------------- | ------ | --------------- |
3
- ./spec/aircana/cli/commands/hooks_spec.rb[1:1:1:1] | passed | 0.01017 seconds |
4
- ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:1:1] | passed | 0.00078 seconds |
5
- ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:2:1] | passed | 0.00125 seconds |
6
- ./spec/aircana/cli/commands/hooks_spec.rb[1:2:1:1] | passed | 0.00066 seconds |
7
- ./spec/aircana/cli/commands/hooks_spec.rb[1:2:2:1] | passed | 0.00073 seconds |
8
- ./spec/aircana/cli/commands/hooks_spec.rb[1:3:1:1] | passed | 0.0006 seconds |
9
- ./spec/aircana/cli/commands/hooks_spec.rb[1:3:2:1] | passed | 0.00125 seconds |
10
- ./spec/aircana/cli/commands/hooks_spec.rb[1:4:1] | passed | 0.00154 seconds |
11
- ./spec/aircana/cli/commands/hooks_spec.rb[1:4:2:1] | passed | 0.00124 seconds |
12
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:1:1] | passed | 0.00063 seconds |
13
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:2:1] | passed | 0.00076 seconds |
14
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:3:1] | passed | 0.00078 seconds |
15
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:4:1] | passed | 0.00078 seconds |
16
- ./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.0008 seconds |
17
- ./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.00168 seconds |
18
- ./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.00057 seconds |
19
- ./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.00275 seconds |
20
- ./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.00274 seconds |
21
- ./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.00416 seconds |
22
- ./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.00327 seconds |
23
- ./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.00306 seconds |
24
- ./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.00342 seconds |
25
- ./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.00338 seconds |
26
- ./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.0015 seconds |
27
- ./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.00151 seconds |
28
- ./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.00363 seconds |
29
- ./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.00192 seconds |
30
- ./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.00148 seconds |
31
- ./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.0034 seconds |
32
- ./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.0048 seconds |
33
- ./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.00417 seconds |
34
- ./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.00428 seconds |
35
- ./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.00044 seconds |
36
- ./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.00156 seconds |
37
- ./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.00112 seconds |
38
- ./spec/aircana/cli/commands/kb_spec.rb[1:2:2] | passed | 0.00167 seconds |
39
- ./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.00182 seconds |
40
- ./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.00148 seconds |
41
- ./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.00032 seconds |
42
- ./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.0015 seconds |
43
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.0007 seconds |
44
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.0003 seconds |
45
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.00027 seconds |
46
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.00108 seconds |
47
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.00108 seconds |
3
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:1:1:1] | passed | 0.00637 seconds |
4
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:1:1] | passed | 0.00079 seconds |
5
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:2:1] | passed | 0.00112 seconds |
6
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:2:1:1] | passed | 0.00062 seconds |
7
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:2:2:1] | passed | 0.00068 seconds |
8
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:3:1:1] | passed | 0.00056 seconds |
9
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:3:2:1] | passed | 0.00109 seconds |
10
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:4:1] | passed | 0.00139 seconds |
11
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:4:2:1] | passed | 0.0011 seconds |
12
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:1:1] | passed | 0.00056 seconds |
13
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:2:1] | passed | 0.00083 seconds |
14
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:3:1] | passed | 0.00091 seconds |
15
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:4:1] | passed | 0.00073 seconds |
16
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.00078 seconds |
17
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.00159 seconds |
18
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.00053 seconds |
19
+ ./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.00519 seconds |
20
+ ./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.00312 seconds |
21
+ ./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.00411 seconds |
22
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.00256 seconds |
23
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.00225 seconds |
24
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.00267 seconds |
25
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.0028 seconds |
26
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.00159 seconds |
27
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.00141 seconds |
28
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.00128 seconds |
29
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.0013 seconds |
30
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.00131 seconds |
31
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.003 seconds |
32
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.0061 seconds |
33
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.00455 seconds |
34
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.00371 seconds |
35
+ ./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.00047 seconds |
36
+ ./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.00185 seconds |
37
+ ./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.00111 seconds |
38
+ ./spec/aircana/cli/commands/kb_spec.rb[1:2:2] | passed | 0.0017 seconds |
39
+ ./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.00179 seconds |
40
+ ./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.00133 seconds |
41
+ ./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.00029 seconds |
42
+ ./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.00145 seconds |
43
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.00071 seconds |
44
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.0002 seconds |
45
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.00021 seconds |
46
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.00089 seconds |
47
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.00094 seconds |
48
48
  ./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00017 seconds |
49
49
  ./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00007 seconds |
50
50
  ./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.00007 seconds |
51
- ./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.0001 seconds |
52
- ./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00009 seconds |
53
- ./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.00008 seconds |
54
- ./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.00009 seconds |
55
- ./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.00025 seconds |
56
- ./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.0002 seconds |
57
- ./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.00021 seconds |
58
- ./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.0001 seconds |
59
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00221 seconds |
60
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.00051 seconds |
61
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.00122 seconds |
62
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00024 seconds |
63
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.00019 seconds |
64
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.0002 seconds |
65
- ./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00038 seconds |
66
- ./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.00041 seconds |
67
- ./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00054 seconds |
68
- ./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00032 seconds |
69
- ./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00029 seconds |
70
- ./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00028 seconds |
71
- ./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.00031 seconds |
72
- ./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00034 seconds |
51
+ ./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00007 seconds |
52
+ ./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00006 seconds |
53
+ ./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.00007 seconds |
54
+ ./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.00006 seconds |
55
+ ./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.00023 seconds |
56
+ ./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.00019 seconds |
57
+ ./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.00018 seconds |
58
+ ./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.00008 seconds |
59
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00236 seconds |
60
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.00054 seconds |
61
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.00113 seconds |
62
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00026 seconds |
63
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.0002 seconds |
64
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00019 seconds |
65
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00045 seconds |
66
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.00044 seconds |
67
+ ./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00052 seconds |
68
+ ./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00034 seconds |
69
+ ./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00033 seconds |
70
+ ./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00032 seconds |
71
+ ./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.0003 seconds |
72
+ ./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00032 seconds |
73
73
  ./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00045 seconds |
74
- ./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00043 seconds |
75
- ./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.0011 seconds |
76
- ./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00108 seconds |
77
- ./spec/aircana/contexts/manifest_spec.rb[1:1:3] | passed | 0.00123 seconds |
78
- ./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.00137 seconds |
79
- ./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.0011 seconds |
80
- ./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00111 seconds |
81
- ./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00024 seconds |
82
- ./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00118 seconds |
83
- ./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00364 seconds |
84
- ./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00107 seconds |
85
- ./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.00027 seconds |
86
- ./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.00094 seconds |
74
+ ./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00058 seconds |
75
+ ./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.00342 seconds |
76
+ ./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00107 seconds |
77
+ ./spec/aircana/contexts/manifest_spec.rb[1:1:3] | passed | 0.0012 seconds |
78
+ ./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.00122 seconds |
79
+ ./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00109 seconds |
80
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00096 seconds |
81
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00022 seconds |
82
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00109 seconds |
83
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00089 seconds |
84
+ ./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00114 seconds |
85
+ ./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.00021 seconds |
86
+ ./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.00083 seconds |
87
87
  ./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.00022 seconds |
88
- ./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.0002 seconds |
89
- ./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00019 seconds |
90
- ./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.0002 seconds |
88
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.00022 seconds |
89
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00021 seconds |
90
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.00018 seconds |
91
91
  ./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.00019 seconds |
92
- ./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00022 seconds |
93
- ./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.0002 seconds |
94
- ./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.00019 seconds |
95
- ./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.00056 seconds |
96
- ./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.0002 seconds |
97
- ./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.00018 seconds |
98
- ./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.00089 seconds |
99
- ./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.00094 seconds |
100
- ./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00021 seconds |
101
- ./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.0002 seconds |
102
- ./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.00012 seconds |
103
- ./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.00011 seconds |
92
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00018 seconds |
93
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.00019 seconds |
94
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.0002 seconds |
95
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.00022 seconds |
96
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.00021 seconds |
97
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.0002 seconds |
98
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.0009 seconds |
99
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.0008 seconds |
100
+ ./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00032 seconds |
101
+ ./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.00019 seconds |
102
+ ./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.00015 seconds |
103
+ ./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.00012 seconds |
104
104
  ./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.00011 seconds |
105
- ./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.00034 seconds |
106
- ./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.00011 seconds |
105
+ ./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.00015 seconds |
106
+ ./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.00021 seconds |
107
107
  ./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00016 seconds |
108
108
  ./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00026 seconds |
109
- ./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00024 seconds |
109
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00023 seconds |
110
110
  ./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.00016 seconds |
111
- ./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00033 seconds |
112
- ./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00012 seconds |
111
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00021 seconds |
112
+ ./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00019 seconds |
113
113
  ./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.00011 seconds |
114
114
  ./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.00011 seconds |
115
115
  ./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00038 seconds |
116
116
  ./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.00011 seconds |
117
- ./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.00032 seconds |
118
- ./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.00023 seconds |
119
- ./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00022 seconds |
120
- ./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00022 seconds |
121
- ./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00011 seconds |
117
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.00028 seconds |
118
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.0003 seconds |
119
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00021 seconds |
120
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00023 seconds |
121
+ ./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00012 seconds |
122
122
  ./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.0001 seconds |
123
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00022 seconds |
123
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00021 seconds |
124
124
  ./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00014 seconds |
125
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00018 seconds |
126
- ./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.0002 seconds |
125
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00017 seconds |
126
+ ./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.00029 seconds |
127
127
  ./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00019 seconds |
128
- ./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.00017 seconds |
129
- ./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.0001 seconds |
128
+ ./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.0001 seconds |
129
+ ./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.00011 seconds |
130
130
  ./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.0001 seconds |
131
131
  ./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.0001 seconds |
132
132
  ./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00008 seconds |
133
133
  ./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.00003 seconds |
134
- ./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.00003 seconds |
134
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.00002 seconds |
135
135
  ./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.00035 seconds |
136
- ./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.00026 seconds |
137
- ./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.00009 seconds |
136
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.0002 seconds |
137
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.0001 seconds |
138
138
  ./spec/aircana/generators/hooks_generator_spec.rb[1:5:1:1] | passed | 0.00009 seconds |
139
139
  ./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00003 seconds |
140
- ./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00054 seconds |
141
- ./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00013 seconds |
142
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00042 seconds |
143
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.00027 seconds |
144
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00027 seconds |
140
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00059 seconds |
141
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00014 seconds |
142
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00032 seconds |
143
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.00025 seconds |
144
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00025 seconds |
145
145
  ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.00009 seconds |
146
146
  ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.00007 seconds |
147
- ./spec/aircana/generators/record_command_generator_spec.rb[1:1:1] | passed | 0.00019 seconds |
148
- ./spec/aircana/generators/record_command_generator_spec.rb[1:2:1] | passed | 0.0005 seconds |
149
- ./spec/aircana/generators/record_command_generator_spec.rb[1:2:2] | passed | 0.00008 seconds |
150
- ./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.0003 seconds |
151
- ./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.00024 seconds |
152
- ./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.00025 seconds |
153
- ./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.00033 seconds |
154
- ./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.00031 seconds |
147
+ ./spec/aircana/generators/record_command_generator_spec.rb[1:1:1] | passed | 0.0002 seconds |
148
+ ./spec/aircana/generators/record_command_generator_spec.rb[1:2:1] | passed | 0.00048 seconds |
149
+ ./spec/aircana/generators/record_command_generator_spec.rb[1:2:2] | passed | 0.00009 seconds |
150
+ ./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.00034 seconds |
151
+ ./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.0002 seconds |
152
+ ./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.00019 seconds |
153
+ ./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.00029 seconds |
154
+ ./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.0003 seconds |
155
155
  ./spec/aircana/generators/skills_generator_spec.rb[1:2:3] | passed | 0.00027 seconds |
156
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.00023 seconds |
157
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.00022 seconds |
158
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.0002 seconds |
159
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.00019 seconds |
160
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.00021 seconds |
161
- ./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.0002 seconds |
162
- ./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.00034 seconds |
163
- ./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.00022 seconds |
156
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.00021 seconds |
157
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.00025 seconds |
158
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.00019 seconds |
159
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.00017 seconds |
160
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.00018 seconds |
161
+ ./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.00018 seconds |
162
+ ./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.00016 seconds |
163
+ ./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.00025 seconds |
164
164
  ./spec/aircana/generators/skills_generator_spec.rb[1:5:1] | passed | 0.00021 seconds |
165
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.00023 seconds |
166
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.00031 seconds |
167
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.00021 seconds |
168
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.00018 seconds |
169
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.0002 seconds |
170
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.00036 seconds |
171
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.00028 seconds |
172
- ./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.00124 seconds |
173
- ./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.00108 seconds |
174
- ./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00007 seconds |
165
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.0002 seconds |
166
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.00019 seconds |
167
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.00026 seconds |
168
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.00022 seconds |
169
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.00021 seconds |
170
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.0002 seconds |
171
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.00019 seconds |
172
+ ./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.00328 seconds |
173
+ ./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.00115 seconds |
174
+ ./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00006 seconds |
175
175
  ./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.00004 seconds |
176
176
  ./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00004 seconds |
177
177
  ./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.00004 seconds |
178
178
  ./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.00003 seconds |
179
- ./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00003 seconds |
179
+ ./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00004 seconds |
180
180
  ./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.00003 seconds |
181
181
  ./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.00003 seconds |
182
182
  ./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00003 seconds |
183
183
  ./spec/aircana/human_logger_spec.rb[1:5:6] | passed | 0.00003 seconds |
184
184
  ./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00003 seconds |
185
- ./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00003 seconds |
186
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00047 seconds |
187
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00032 seconds |
185
+ ./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00027 seconds |
186
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00045 seconds |
187
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00033 seconds |
188
188
  ./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.00028 seconds |
189
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00029 seconds |
190
- ./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00032 seconds |
189
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00044 seconds |
190
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00034 seconds |
191
191
  ./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.00028 seconds |
192
- ./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.0003 seconds |
193
- ./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00027 seconds |
192
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.00041 seconds |
193
+ ./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00029 seconds |
194
194
  ./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.00028 seconds |
195
- ./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.00019 seconds |
195
+ ./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.0002 seconds |
196
196
  ./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00019 seconds |
197
- ./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00028 seconds |
198
- ./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00044 seconds |
199
- ./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.00055 seconds |
200
- ./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.0002 seconds |
197
+ ./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00026 seconds |
198
+ ./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00036 seconds |
199
+ ./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.0006 seconds |
200
+ ./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.00025 seconds |
201
201
  ./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00019 seconds |
202
- ./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00032 seconds |
203
- ./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00025 seconds |
204
- ./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00031 seconds |
205
- ./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.0003 seconds |
206
- ./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.00017 seconds |
207
- ./spec/aircana_spec.rb[1:1] | passed | 0.00004 seconds |
208
- ./spec/aircana_spec.rb[1:2] | passed | 0.00072 seconds |
202
+ ./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00019 seconds |
203
+ ./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00019 seconds |
204
+ ./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00021 seconds |
205
+ ./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.00026 seconds |
206
+ ./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.00016 seconds |
207
+ ./spec/aircana_spec.rb[1:1] | passed | 0.00003 seconds |
208
+ ./spec/aircana_spec.rb[1:2] | passed | 0.0006 seconds |
data/CHANGELOG.md CHANGED
@@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [4.0.0.rc2] - 2025-10-17
11
+
12
+ ### Fixed
13
+ - **KB Creation UX**: Improved knowledge base name prompt to guide users naturally
14
+ - Changed prompt from "Knowledge base name:" to "What topic should this knowledge base cover?"
15
+ - Added example default: "e.g., 'Canvas Backend Database', 'API Design'"
16
+ - Prevents duplicate "Learn" prefix in generated skill names
17
+ - **SKILL.md Generation**: Fixed empty knowledge file references in SKILL.md
18
+ - Reordered operations to generate SKILL.md after content is fetched
19
+ - Modified prompt functions to return success status
20
+ - SKILL.md now only generated as fallback if no content fetched
21
+ - **Confluence Content Processing**: Added comprehensive Confluence macro preprocessing
22
+ - Removes empty code blocks from Confluence API responses
23
+ - Converts panel macros to blockquotes
24
+ - Converts info/note/warning macros to formatted blockquotes with emoji indicators
25
+ - Strips all Confluence-specific XML tags while preserving content
26
+ - Fixes bug where code examples were missing from knowledge base
27
+ - **Filename Strategy**: Fixed mismatch between stored filenames and manifest references
28
+ - Primary method now scans actual markdown files on disk
29
+ - Matches disk files to manifest summaries
30
+ - Fallback extracts from manifest metadata for tests/initial generation
31
+ - SKILL.md now correctly references existing knowledge files
32
+ - **Empty Knowledge Base Warning**: Added helpful warning when generating SKILL.md with no content
33
+ - Warns user that SKILL.md will be empty
34
+ - Suggests running `aircana kb refresh <kb-name>` to fetch knowledge
35
+
36
+ ### Technical
37
+ - All tests passing (206 examples, 0 failures)
38
+ - Rubocop clean with justified disable directives for regex line lengths
39
+ - Backward compatible with existing tests and behavior
40
+
10
41
  ## [4.0.0.rc1] - 2025-10-17
11
42
 
12
43
  ### Changed
@@ -29,7 +29,8 @@ module Aircana
29
29
  def create # rubocop:disable Metrics/MethodLength
30
30
  prompt = TTY::Prompt.new
31
31
 
32
- kb_name = prompt.ask("Knowledge base name:")
32
+ kb_name = prompt.ask("What topic should this knowledge base cover?",
33
+ default: "e.g., 'Canvas Backend Database', 'API Design'")
33
34
  short_description = prompt.ask("Briefly describe what this KB contains:")
34
35
 
35
36
  # Prompt for knowledge base type
@@ -48,13 +49,14 @@ module Aircana
48
49
  normalized_kb_name = normalize_string(kb_name)
49
50
 
50
51
  # Prompt for knowledge fetching
51
- prompt_for_knowledge_fetch(prompt, normalized_kb_name, kb_type, short_description)
52
+ fetched_confluence = prompt_for_knowledge_fetch(prompt, normalized_kb_name, kb_type, short_description)
52
53
 
53
54
  # Prompt for web URL fetching
54
- prompt_for_url_fetch(prompt, normalized_kb_name, kb_type)
55
+ fetched_urls = prompt_for_url_fetch(prompt, normalized_kb_name, kb_type)
55
56
 
56
- # Generate SKILL.md
57
- regenerate_skill_md(normalized_kb_name, short_description)
57
+ # Generate SKILL.md if no content was fetched during the prompts
58
+ # (the prompt functions already generate it when they successfully fetch content)
59
+ regenerate_skill_md(normalized_kb_name, short_description) unless fetched_confluence || fetched_urls
58
60
 
59
61
  # If remote kb_type, ensure SessionStart hook is installed
60
62
  ensure_remote_knowledge_refresh_hook if kb_type == "remote"
@@ -326,7 +328,7 @@ module Aircana
326
328
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
327
329
  # rubocop:disable Metrics/PerceivedComplexity
328
330
  def prompt_for_knowledge_fetch(prompt, normalized_kb_name, kb_type, short_description)
329
- return unless confluence_configured?
331
+ return false unless confluence_configured?
330
332
 
331
333
  if prompt.yes?("Would you like to fetch knowledge for this KB from Confluence now?")
332
334
  Aircana.human_logger.info "Fetching knowledge from Confluence..."
@@ -340,8 +342,11 @@ module Aircana
340
342
  end
341
343
 
342
344
  result = perform_refresh(normalized_kb_name, kb_type, label: label)
343
- ensure_gitignore_entry(kb_type) if result[:pages_count]&.positive?
344
- regenerate_skill_md(normalized_kb_name, short_description) if result[:pages_count]&.positive?
345
+ if result[:pages_count]&.positive?
346
+ ensure_gitignore_entry(kb_type)
347
+ regenerate_skill_md(normalized_kb_name, short_description)
348
+ return true
349
+ end
345
350
  else
346
351
  refresh_message = if kb_type == "local"
347
352
  "fetch knowledge"
@@ -352,6 +357,8 @@ module Aircana
352
357
  "Skipping knowledge fetch. You can #{refresh_message} later."
353
358
  )
354
359
  end
360
+
361
+ false
355
362
  rescue Aircana::Error => e
356
363
  Aircana.human_logger.warn "Failed to fetch knowledge: #{e.message}"
357
364
  refresh_message = if kb_type == "local"
@@ -360,6 +367,7 @@ module Aircana
360
367
  "try again later with 'aircana kb refresh #{normalized_kb_name}'"
361
368
  end
362
369
  Aircana.human_logger.info "You can #{refresh_message}"
370
+ false
363
371
  end
364
372
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
365
373
  # rubocop:enable Metrics/PerceivedComplexity
@@ -367,7 +375,7 @@ module Aircana
367
375
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
368
376
  # rubocop:disable Metrics/PerceivedComplexity
369
377
  def prompt_for_url_fetch(prompt, normalized_kb_name, kb_type)
370
- return unless prompt.yes?("Would you like to add web URLs for this KB's knowledge base?")
378
+ return false unless prompt.yes?("Would you like to add web URLs for this KB's knowledge base?")
371
379
 
372
380
  urls = []
373
381
  loop do
@@ -382,7 +390,7 @@ module Aircana
382
390
  end
383
391
  end
384
392
 
385
- return if urls.empty?
393
+ return false if urls.empty?
386
394
 
387
395
  begin
388
396
  Aircana.human_logger.info "Fetching #{urls.size} URL(s)..."
@@ -393,6 +401,7 @@ module Aircana
393
401
  Aircana.human_logger.success "Successfully fetched #{result[:pages_count]} URL(s)"
394
402
  ensure_gitignore_entry(kb_type)
395
403
  regenerate_skill_md(normalized_kb_name)
404
+ return true
396
405
  else
397
406
  Aircana.human_logger.warn "No URLs were successfully fetched"
398
407
  end
@@ -402,6 +411,8 @@ module Aircana
402
411
  "You can add URLs later with 'aircana kb add-url #{normalized_kb_name} <URL>'"
403
412
  )
404
413
  end
414
+
415
+ false
405
416
  end
406
417
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
407
418
  # rubocop:enable Metrics/PerceivedComplexity
@@ -14,9 +14,52 @@ module Aircana
14
14
  def convert_to_markdown(html_content)
15
15
  return "" if html_content.nil? || html_content.empty?
16
16
 
17
- ReverseMarkdown.convert(html_content, github_flavored: true)
17
+ # Preprocess Confluence macros before converting to Markdown
18
+ cleaned_html = preprocess_confluence_macros(html_content)
19
+ ReverseMarkdown.convert(cleaned_html, github_flavored: true)
18
20
  end
19
21
 
22
+ # rubocop:disable Layout/LineLength, Metrics/MethodLength
23
+ def preprocess_confluence_macros(html)
24
+ # Process Confluence structured macros to make them compatible with Markdown conversion
25
+ cleaned = html.dup
26
+
27
+ # Remove empty code blocks (common issue with Confluence API)
28
+ cleaned.gsub!(
29
+ %r{<ac:structured-macro[^>]*ac:name="code"[^>]*>.*?<ac:plain-text-body>\s*</ac:plain-text-body>.*?</ac:structured-macro>}m, ""
30
+ )
31
+
32
+ # Convert panel macros to blockquotes, preserving inner content
33
+ cleaned.gsub!(
34
+ %r{<ac:structured-macro[^>]*ac:name="panel"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote>\1</blockquote>'
35
+ )
36
+
37
+ # Convert info/note/warning macros to blockquotes with indicators
38
+ cleaned.gsub!(
39
+ %r{<ac:structured-macro[^>]*ac:name="info"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote><strong>ℹ️ Info:</strong> \1</blockquote>'
40
+ )
41
+ cleaned.gsub!(
42
+ %r{<ac:structured-macro[^>]*ac:name="note"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote><strong>📝 Note:</strong> \1</blockquote>'
43
+ )
44
+ cleaned.gsub!(
45
+ %r{<ac:structured-macro[^>]*ac:name="warning"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote><strong>⚠️ Warning:</strong> \1</blockquote>'
46
+ )
47
+
48
+ # Strip other structured macros but preserve rich text body content
49
+ cleaned.gsub!(
50
+ %r{<ac:structured-macro[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '\1'
51
+ )
52
+
53
+ # Remove any remaining Confluence-specific tags
54
+ cleaned.gsub!(%r{</?ac:[^>]*>}m, "")
55
+
56
+ # Clean up Confluence parameter tags
57
+ cleaned.gsub!(%r{<ac:parameter[^>]*>.*?</ac:parameter>}m, "")
58
+
59
+ cleaned
60
+ end
61
+ # rubocop:enable Layout/LineLength, Metrics/MethodLength
62
+
20
63
  def log_pages_found(count, kb_name)
21
64
  Aircana.human_logger.info "Found #{count} pages for KB '#{kb_name}'"
22
65
  end
@@ -5,6 +5,7 @@ require_relative "../contexts/manifest"
5
5
 
6
6
  module Aircana
7
7
  module Generators
8
+ # rubocop:disable Metrics/ClassLength
8
9
  class SkillsGenerator < BaseGenerator
9
10
  attr_reader :kb_name, :short_description, :skill_description, :knowledge_files
10
11
 
@@ -24,11 +25,20 @@ module Aircana
24
25
  # rubocop:enable Metrics/ParameterLists
25
26
 
26
27
  # Generate SKILL.md based on manifest data
28
+ # rubocop:disable Metrics/MethodLength
27
29
  def self.from_manifest(kb_name)
28
30
  manifest = Contexts::Manifest.read_manifest(kb_name)
29
31
  raise Error, "No manifest found for knowledge base '#{kb_name}'" unless manifest
30
32
 
31
33
  knowledge_files = extract_knowledge_files_from_manifest(manifest)
34
+
35
+ # Warn if no knowledge files were found
36
+ if knowledge_files.empty?
37
+ Aircana.human_logger.warn "No knowledge files found for KB '#{kb_name}'. " \
38
+ "SKILL.md will be generated but will be empty. " \
39
+ "Run 'aircana kb refresh #{kb_name}' to fetch knowledge."
40
+ end
41
+
32
42
  skill_description = generate_skill_description_from_manifest(manifest, kb_name)
33
43
 
34
44
  new(
@@ -37,11 +47,45 @@ module Aircana
37
47
  knowledge_files: knowledge_files
38
48
  )
39
49
  end
50
+ # rubocop:enable Metrics/MethodLength
40
51
 
41
52
  # Class methods for manifest processing
53
+ def self.extract_knowledge_files_from_manifest(manifest)
54
+ kb_name = manifest["name"]
55
+
56
+ # If kb_dir exists, scan actual files on disk (preferred method)
57
+ if kb_name && Aircana.configuration.kb_knowledge_dir
58
+ kb_dir = Aircana.configuration.kb_path(kb_name)
59
+
60
+ return extract_files_from_disk(manifest, kb_dir) if Dir.exist?(kb_dir)
61
+ end
62
+
63
+ # Fallback: extract from manifest metadata (for tests or before files are created)
64
+ extract_files_from_manifest_metadata(manifest)
65
+ end
66
+
67
+ # rubocop:disable Metrics/MethodLength
68
+ def self.extract_files_from_disk(manifest, kb_dir)
69
+ actual_files = Dir.glob(File.join(kb_dir, "*.md"))
70
+ .reject { |f| File.basename(f) == "SKILL.md" }
71
+ .sort
72
+
73
+ # Build file list with summaries from manifest
74
+ actual_files.map do |filepath|
75
+ filename = File.basename(filepath)
76
+ summary = find_summary_for_file(manifest, filename)
77
+
78
+ {
79
+ summary: summary || File.basename(filename, ".md").tr("-", " ").capitalize,
80
+ filename: filename
81
+ }
82
+ end
83
+ end
84
+ # rubocop:enable Metrics/MethodLength
85
+
42
86
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
43
87
  # rubocop:disable Metrics/PerceivedComplexity
44
- def self.extract_knowledge_files_from_manifest(manifest)
88
+ def self.extract_files_from_manifest_metadata(manifest)
45
89
  files = []
46
90
 
47
91
  manifest["sources"]&.each do |source|
@@ -68,6 +112,29 @@ module Aircana
68
112
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
69
113
  # rubocop:enable Metrics/PerceivedComplexity
70
114
 
115
+ # Find the summary for a given filename from the manifest
116
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
117
+ # rubocop:disable Metrics/PerceivedComplexity
118
+ def self.find_summary_for_file(manifest, filename)
119
+ manifest["sources"]&.each do |source|
120
+ case source["type"]
121
+ when "confluence"
122
+ source["pages"]&.each do |page|
123
+ return page["summary"] if filename.include?(page["id"])
124
+ end
125
+ when "web"
126
+ source["urls"]&.each do |url_entry|
127
+ sanitized_url_part = sanitize_filename_from_url(url_entry["url"])
128
+ return url_entry["summary"] if filename.include?(sanitized_url_part)
129
+ end
130
+ end
131
+ end
132
+
133
+ nil
134
+ end
135
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
136
+ # rubocop:enable Metrics/PerceivedComplexity
137
+
71
138
  def self.generate_skill_description_from_manifest(manifest, kb_name)
72
139
  # Generate a description optimized for Claude's skill discovery
73
140
  source_count = manifest["sources"]&.size || 0
@@ -91,6 +158,7 @@ module Aircana
91
158
  rescue URI::InvalidURIError
92
159
  "web_resource"
93
160
  end
161
+ # rubocop:enable Metrics/ClassLength
94
162
 
95
163
  protected
96
164
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aircana
4
- VERSION = "4.0.0.rc1"
4
+ VERSION = "4.0.0.rc2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aircana
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.rc1
4
+ version: 4.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Dransfield