Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Commit 92c4b42

Browse files
committed
agile: close sprint 29
1 parent b57e6c6 commit 92c4b42

2 files changed

Lines changed: 343 additions & 333 deletions

File tree

doc/agile/product_backlog.org

Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,320 @@ Release goals:
7878
The most significant stories needed by v2. These are either features
7979
or 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

83397
At present we are using meta-names for binding formatters to logical

0 commit comments

Comments
 (0)