@smartsoft001-mobilems/claude-plugins 2.124.0 → 2.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartsoft001-mobilems/claude-plugins",
3
- "version": "2.124.0",
3
+ "version": "2.126.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "mobilems",
3
3
  "description": "MobilEMS-specific Claude Code skills (MuzaCMS / MobileMS indexer API)",
4
- "version": "2.124.0"
4
+ "version": "2.126.0"
5
5
  }
@@ -35,13 +35,16 @@ list — re-implementing framework code is a defect, not a shortcut:
35
35
  2. [`packages/objects/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/objects/README.md) — this module's package catalog
36
36
  3. `libs/shared/angular/README.md` — the app's own shared lib (built by `mobilems-project-init`)
37
37
 
38
- | Do not hand-roll | Use |
39
- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
40
- | a masonry grid (`new Masonry(...)`, per-page masonry JS/CSS) | `<smart-mobilems-masonry-grid>` (`MasonryGridComponent`) with a `#masonryContentTpl`; the `Masonry` provider in step 3 only feeds it |
41
- | filter state / hand-built `query` arrays | `FiltersBaseComponent<MsObject>` + its `FiltersContext` accessors (`searchText`, `keywords`, `page`, `sort`, `onlyImage`, …) |
42
- | list page logic (first read, persistence, SSR read, read guard, load-more, masonry lifecycle, list SEO) | `ObjectsCatalogBaseComponent` (`pages/list` extends it; the app keeps its own markup and `sortOptions` over `isNewType`) |
43
- | detail plumbing (facade wiring, id-from-route, PDF) | the `ObjectsItemComponent` base class (detail page only) |
44
- | media URLs, meta/OG tags, filter dictionaries, modals, WCAG | `FileUrlService`, `SeoService`/`MetaService`, `DictionaryService`, `ModalService`, `WcagService` |
38
+ | Do not hand-roll | Use |
39
+ | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
40
+ | a masonry grid (`new Masonry(...)`, per-page masonry JS/CSS) | `<smart-mobilems-masonry-grid>` (`MasonryGridComponent`) with a `#masonryContentTpl`; the `Masonry` provider in step 3 only feeds it |
41
+ | filter state / hand-built `query` arrays | `FiltersBaseComponent<MsObject>` + its `FiltersContext` accessors (`searchText`, `keywords`, `page`, `sort`, `onlyImage`, …) |
42
+ | list page logic (first read, persistence, SSR read, read guard, load-more, masonry lifecycle, list SEO) | `ObjectsCatalogBaseComponent` (`pages/list` extends it; the app keeps its own markup and `sortOptions` over `isNewType`) |
43
+ | detail page logic (SSR SEO, scroll, visit counter, retry, opt-in related / related collections) | `ObjectDetailsBaseComponent` (extends `ObjectsItemComponent`; `pages/item` extends it, `related` and `relatedCollections` are opt-in via the constructor options) |
44
+ | object detail field helpers (title, tags, inventory, bibliography, description, related articles, ask-about link) | the `objectTitle`, `tagValues`, `inventoryValues`, `bibliography`, `descriptionHtml`, `relatedArticles`, `askAboutObjectHref` tools |
45
+ | gallery / media lists | `ObjectMediaService` |
46
+ | visit counter, related objects, collection / archaeological dictionaries | `ObjectsDataService` (extends `ObjectsService`) |
47
+ | media URLs, meta/OG tags, filter dictionaries, modals, WCAG | `FileUrlService`, `SeoService`/`MetaService`, `DictionaryService`, `ModalService`, `WcagService` |
45
48
 
46
49
  Anything the framework genuinely lacks goes into `libs/shared/angular` **once** (and into its
47
50
  README) — never a per-module copy. `scripts/verify-module.sh` fails the run on hand-rolled masonry.
@@ -23,12 +23,13 @@ libs/museum-objects/
23
23
  ├── components/ # description, filter-input (may extend FilterInputBaseComponent - its API is a subset), high-def-request-modal,
24
24
  │ # menu, objects-searchbar (standalone, live search), tabs/*
25
25
  ├── pages/ # list (ListComponent), item (ItemComponent) + index
26
- └── services/ # objects.service.ts + index
26
+ └── services/ # no local objects.service / object-media.service (framework ObjectsDataService, ObjectMediaService)
27
27
  ```
28
28
 
29
29
  `pages/list` extends `ObjectsCatalogBaseComponent` (logic only: first read, persistence, SSR read, read guard,
30
30
  load-more, masonry lifecycle, list SEO) and keeps the app's own markup and `sortOptions` over `isNewType`;
31
- `pages/item` extends `ObjectsItemComponent`.
31
+ `pages/item` extends `ObjectDetailsBaseComponent` (SSR SEO, scroll, visit counter, retry, opt-in related / related
32
+ collections; the app keeps its markup). There is no local `objects.service` or `object-media.service`.
32
33
 
33
34
  ## Domain entity (verbatim, thread nothing — pure types)
34
35
 
@@ -122,6 +122,22 @@ if [ -f "$LISTF" ]; then
122
122
  fi
123
123
  fi
124
124
 
125
+ # 6. detail page logic lives in the framework details base; no local copies of its helpers
126
+ ITEMF="$LIBDIR/pages/item/item.component.ts"
127
+ if [ -f "$ITEMF" ]; then
128
+ if grep -qE "extends[[:space:]]+ObjectDetailsBaseComponent" "$ITEMF"; then
129
+ pass "pages/item extends ObjectDetailsBaseComponent"
130
+ else
131
+ bad "pages/item/item.component.ts does not extend ObjectDetailsBaseComponent — detail logic belongs to the framework base ($ITEMF)"
132
+ fi
133
+ fi
134
+ if grep -rqE "logVisit\(|applyForSsr\(|class ObjectMediaService" "$LIBDIR" 2>/dev/null; then
135
+ bad "lib contains logVisit(, applyForSsr( or class ObjectMediaService — use ObjectDetailsBaseComponent / ObjectsDataService / ObjectMediaService from the framework:"
136
+ grep -rnE "logVisit\(|applyForSsr\(|class ObjectMediaService" "$LIBDIR" >&2 || true
137
+ else
138
+ pass "no hand-rolled visit counter, SSR apply or media service"
139
+ fi
140
+
125
141
  echo "== Translations (REF_ROOT=${REF_ROOT:-unset}) =="
126
142
  # Groups: present in pl+en, no dead references, complete vs the reference repo
127
143
  # (export REF_ROOT=<reference-repo-root> to enable the completeness diff).