@@ -78,6 +78,320 @@ Release goals:
7878The most significant stories needed by v2. These are either features
7979or refactoring that must go in.
8080
81+ *** Remove dia-specific types in dia model :story:
82+
83+ We probably don't need the "processed" types, we can just use the
84+ codec types directly.
85+
86+ *** Consider handling "dia comments" in a general manner :story:
87+
88+ At present we allow comments with:
89+
90+ : #DOGEN masd.codec.dia.comment=true
91+
92+ to be processed as part of the containing object. We should try to
93+ generalise this notion so that any codec could make use of this
94+ feature.
95+
96+ *** Consider adding a codec meta-model :story:
97+
98+ As we did with the PMM, it would be nice if you could create an
99+ element with a stereotype, say:
100+
101+ : masd::codec
102+
103+ And then have it create a meta-model entry for the codec, with an
104+ associated name and description. These can then be used for
105+ documentation. It should also include the codec extension. The codec
106+ interface should return the meta-type of the codec.
107+
108+ *** Move graph of containment to codec model :story:
109+
110+ At present we are doing the containment graph within the dia codec. We
111+ should really do this in the main codec model so we can reuse it for
112+ org-mode.
113+
114+ *** Move wale templates to TS namespaces :story:
115+
116+ At present the wale templates are in the top-level namespace of the
117+ text model, but they should really be in each technical space.
118+
119+ *** Allow uses of "dictionaries" for invalid class names :story:
120+
121+ It would be nice if we had a meta-type that represented a dictionary
122+ of invalid names and then could associate it with meta-types and
123+ possibly technical spaces. For example, we could say that certain
124+ words are invalid for all technical spaces, other only for technical
125+ space x etc. In addition, certain words could be valid for certain
126+ meta-types (say archetypes) but invalid for others (say objects). If
127+ these were meta-types we could place them in a dogen model and even
128+ allow users to create their own lists. Maybe the better term is
129+ "whitelist"?
130+
131+ Links:
132+
133+ - [[https://english.stackexchange.com/questions/51088/alternative-term-to-blacklist-and-whitelist][Alternative term to “Blacklist” and “Whitelist”]]
134+
135+ *** Add technical space version to element :story:
136+
137+ We should add the version of the TS to the element itself rather than
138+ querying it on the model. We probably should also have the major TS
139+ name in the element as well.
140+
141+ *** Move mustache templates into the =transforms= namespaces :story:
142+
143+ We left the templates at the top level as it was in the TS-specific
144+ models but they should really be within =transforms= namespace. We
145+ need to check to see how name resolution for templates is working.
146+
147+ *** Consider moving helper chain to outside the text transforms :story:
148+
149+ Given helpers are temporary this may not make a lot of sense, but for
150+ what its worth, we could run the chain prior to executing the text
151+ transforms and then supply a string parameter with the helper
152+ text. This way the assistant would do less and there would be less
153+ code in each text transform.
154+
155+ *** Model functionality provided by assistant in the logical model :story:
156+
157+ We need to look at all the methods in assistant and see if we can
158+ replace them by data which is processed in transforms.
159+
160+ *** Consider moving CI to GitHub Actions :story:
161+
162+ At present we are using Travis and AppVeyor for our CI. However, it
163+ would be nice to have a single place with all of the CI (and even more
164+ ideally, packaging as well). GitHub seems to offer some kind of CI
165+ support via GitHub actions. However, we need to first move to building
166+ on [[*Build dogen from docker][docker]].
167+
168+ Actually it seems we don't even need to do very much. See [[https://raymii.org/s/articles/Github_Actions_cpp_boost_cmake_speedup.html][this article]].
169+
170+ Links:
171+
172+ - [[https://raymii.org/s/articles/Github_Actions_cpp_boost_cmake_speedup.html][Github Actions, C++ with Boost and cmake, almost a 50% speedup with
173+ caching]]
174+ - [[https://packages.debian.org/sid/libdtl-dev][libdtl-dev]]: dependency available on debian now.
175+
176+ *** Stitch formatter updates :story:
177+
178+ There are a number of issues with stitch formatters at present:
179+
180+ - stitch transform is still generating its own artefact.
181+
182+ Actually, now that we've updated all formatters do we even need a
183+ stitch formatter? The helpers are probably going via some other
184+ route. If so, remove it and the wale formatter.
185+
186+ This is incorrect. Whilst we are using the output of stitch in a
187+ different way, we are still expanding the stitch template for the
188+ header files.
189+
190+ *** Remove annotations from stitch templates :story:
191+
192+ In the new world, stitch templates don't have all of the required
193+ information to build the boilerplate:
194+
195+ - they cannot expand wale templates because the KVPs will be in the
196+ element itself, not the template. Strictly speaking this is not an
197+ problem we have right now though.
198+ - more importantly, the include dependencies cannot be computed by the
199+ template. This is because the dependencies are really a function of
200+ the model type we are expressing on the template. Instead, we did a
201+ quick hack and supplied the includes as KVPs. So they are kind of
202+ parameters but kind of not really parameters because they are
203+ hard-coded to the template. It solved the immediate problem of
204+ having them formatted and placed in the right part of the file, but
205+ now we can see this is not the right approach.
206+
207+ In reality, we should not have any annotations at all in
208+ templates. The boilerplate and includes should be supplied as KVPs and
209+ applied as variables. They should be composed externally with access
210+ to data from the model element. Thus we then need a way to associate
211+ includes with model elements. This is captured as a separate story.
212+
213+ We seem to be using features to read values out of the templates. We
214+ need to see if this adds any value.
215+
216+ *** Clean up helpers interface and move it to =text= :story:
217+
218+ Notes:
219+
220+ - we need to include the wale template in the meta-model
221+ element. Once this is done we should see if we can remove the stitch
222+ and wale formatters in the c++ model.
223+ - the helper interface should only take logical and physical types so
224+ that we can move it to =text=. However, we may be using the
225+ assistant. See if we can create the assistant inside the helper as
226+ we do with formatters.
227+
228+ *** Create a "combined" assistant in =text= :story:
229+
230+ Assistant should not really exist, but to get us to the next step we
231+ should just make it a helper in =text= model. We just need to merge
232+ the C++ and C# classes into one and move it to =text=.
233+
234+ *** Rename "model-to-X" to TLAs :story:
235+
236+ Given that model-to-text (M2T) and text-to-model (T2M) - to a lesser
237+ extent - are well known TLAs in MDE we should make use of these in
238+ class names. The names we have at present are very long. The
239+ additional size is not providing any benefits.
240+
241+ *** Implement M2T chains via code generation :story:
242+
243+ We need to update the =backend= and =part= transforms to be a set of
244+ calls to their "children", based on the PMM. Once this is done we can
245+ remove all of the existing infrastructure in the TS models:
246+
247+ - repositories
248+ - initialisers
249+ - workflows
250+ - traits
251+ - registrars
252+
253+ Notes:
254+
255+ - in the new world we no longer need a M2T interface at the text
256+ transform level. The backend chain knows of all of the facet chains;
257+ and the facet chains know of all of the archetypes. We can dispatch
258+ the element using the visitor into a concrete type and then find the
259+ archetypes that process that type. However, we do not want to
260+ generate an apply method per logical element...
261+
262+ Merged stories:
263+
264+ *Implement backend and facet transform*
265+
266+ The backend transform should:
267+
268+ - return the ID of the backend;
269+ - use the facet and archetype transforms to process all elements.
270+
271+ Check backlog for a story on this.
272+
273+ *** Consider renaming =text= to =logical_physical= :story:
274+
275+ This is really the right name for the model; the text processing part
276+ are the transforms that are done on the model.
277+
278+ Notes:
279+
280+ - rename =logical_physical_region= to just =region=.
281+ - actually another way of looking at this is trying to figure out what
282+ is the dominant responsibility of the component. The LPS will
283+ probably be 2 or 3 types whereas the M2T transforms will be 99% of
284+ the types. We probably should name the model after lps and the
285+ component after the M2Ts.
286+
287+ *** Move all stitch include dependencies to legacy transform :story:
288+
289+ We should move all of the inclusion dependencies in stitch templates
290+ into the legacy dependencies transform, e.g.:
291+
292+ #+begin_src
293+ <#@ masd.stitch.inclusion_dependency="dogen.text.cpp/types/transforms/hash/traits.hpp" #>
294+ <#@ masd.stitch.inclusion_dependency="dogen.text.cpp/types/transforms/assistant.hpp" #>
295+ <#@ masd.stitch.inclusion_dependency="dogen.logical/types/entities/helper_properties.hpp" #>
296+ <#@ masd.stitch.inclusion_dependency="dogen.text.cpp/types/transforms/hash/date_helper_transform.hpp" #>
297+ #+end_src
298+
299+ Once we do this we should also remove support for
300+ =inclusion_dependency= so that it is not possible to add these any
301+ more. We need to check to see if all the headers we have at present
302+ are really required (for example traits should not be).
303+
304+ This is a prerequisite for moving to relationship based dependencies.
305+
306+ *** Improve modeling of attribute properties :story:
307+
308+ When we decommissioned formattables we did a lift and shift of a few
309+ properties into the model itself:
310+
311+ - =streaming_properties=
312+ - =aspect_properties=
313+ - =assistant_properties=
314+
315+ This was the first phase of this work. Once the PDM work has been
316+ carried out and we determine which of these properties are really
317+ required, we should move them to the attributes instead of the model
318+ because that is how they are ultimately used.
319+
320+ *** Prune non-generatable types from logical model :story:
321+
322+ Add a pruning transform that filters out all non-generatable types
323+ from logical model.
324+
325+ Actually we can't just do this directly else the inclusion will not
326+ work. However we do have a "reducer" transform in the formattables
327+ namespace which needs to be moved to the new world.
328+
329+ *** Feature initializer with no features does not compile :story:
330+
331+ We removed all the features from =masd::variability::initializer= and
332+ the compilation failed with the following error:
333+
334+ #+begin_quote
335+ [5/19] Building CXX object projects/dogen.text.cpp/src/CMakeFiles/dogen.text.cpp.lib.dir/types/feature_initializer.cpp.o
336+ FAILED: projects/dogen.text.cpp/src/CMakeFiles/dogen.text.cpp.lib.dir/types/feature_initializer.cpp.o
337+ /usr/bin/clang++-11 -DENABLE_CPP_REF_IMPL_TESTS -DENABLE_CSHARP_REF_IMPL_TESTS -DLZMA_API_STATIC -D_GLIBCXX_USE_CXX11_ABI=1 -Istage/include -I../../../../projects/dogen/include -I../../../../projects/dogen.identification/include -I../../../../projects/dogen.physical/include -I../../../../projects/dogen.cli/include -I../../../../projects/dogen.utility/include -I../../../../projects/dogen.variability/include -I../../../../projects/dogen.dia/include -I../../../../projects/dogen.codec/include -I../../../../projects/dogen.codec.dia/include -I../../../../projects/dogen.codec.json/include -I../../../../projects/dogen.codec.org_mode/include -I../../../../projects/dogen.tracing/include -I../../../../projects/dogen.logical/include -I../../../../projects/dogen.orchestration/include -I../../../../projects/dogen.templating/include -I../../../../projects/dogen.text/include -I../../../../projects/dogen.text.cpp/include -I../../../../projects/dogen.text.csharp/include -I../../../../projects/dogen.relational/include -isystem /work/DomainDrivenConsulting/masd/vcpkg/masd/installed/x64-linux/include -Wall -Wextra -Wconversion -Wno-mismatched-tags -pedantic -Werror -Wno-system-headers -Woverloaded-virtual -Wwrite-strings -frtti -fvisibility-inlines-hidden -fvisibility=hidden -O3 -DNDEBUG -fPIC -std=gnu++17 -MD -MT projects/dogen.text.cpp/src/CMakeFiles/dogen.text.cpp.lib.dir/types/feature_initializer.cpp.o -MF projects/dogen.text.cpp/src/CMakeFiles/dogen.text.cpp.lib.dir/types/feature_initializer.cpp.o.d -o projects/dogen.text.cpp/src/CMakeFiles/dogen.text.cpp.lib.dir/types/feature_initializer.cpp.o -c ../../../../projects/dogen.text.cpp/src/types/feature_initializer.cpp
338+ ../../../../projects/dogen.text.cpp/src/types/feature_initializer.cpp:26:52: error: unused parameter 'rg' [-Werror,-Wunused-parameter]
339+ register_entities(variability::helpers::registrar& rg) {
340+ #+end_quote
341+
342+ We could perhaps issue a dogen warning for the absence of features but
343+ the code should compile.
344+
345+ *** Create a patch for tests :story:
346+
347+ At present we only output the head of the first 5 diffs when a model
348+ fails. However, in some cases we may want to look at the entire
349+ diff. It would be nice if we could output the patch into the
350+ byproducts directory for each test.
351+
352+ *** Deprecate managed directories :story:
353+
354+ There should only be one "managed directory" at the input stage, which
355+ is the component directory (for component models). If parts have
356+ relative directories off of the component directory then we should add
357+ to the list of managed directories inside the PM pipeline.
358+
359+ *** Wale should throw on non-required keys :story:
360+
361+ At present we throw if we do not supply required keys. We should also
362+ throw if we supply non-required keys.
363+
364+ *** Remove wale instantiation from stitch :story:
365+
366+ Though we've split wale out of stitch in the logical model, its still
367+ possible to instantiate a wale template within stitch. We should
368+ remove this as well.
369+
370+ *** Decouple physical model from logical model :story:
371+
372+ At present we have a dependency of the logical model on the physical
373+ model. This is for two reasons:
374+
375+ - variability (=variability_profiles_chain=): we need to instantiate
376+ the template domains.
377+ - helpers (=helper_properties_transform=): we need access to the
378+ helpers in order to create the helper properties.
379+
380+ We should not really couple these two models. For the first case we
381+ could supply the domains as an argument when constructing the context
382+ and rely only on =std= types. Helpers will be decommissioned with
383+ PDMs. At that point we should look into making these two models
384+ independent again.
385+
386+ Actually we could do a quick change now and address this:
387+
388+ - do the variability change now.
389+ - instead of adding helper transform, add this work into the logical
390+ to physical projector.
391+
392+ Actually that would not work as we are projecting "the other way
393+ around". This work will have to wait.
394+
81395*** Replace meta-model naming with stereotypes :story:
82396
83397At present we are using meta-names for binding formatters to logical
0 commit comments