Jump to content

ICT:FinalConfig - Asset - v1: Difference between revisions

From Costa Sano MediaWiki
Created page with "= Final Configuration for the DigitalAsset Entity (v1 – No Numbering) = Document revision: {{#time:Y-m-d|{{REVISIONTIMESTAMP}}}} by {{REVISIONUSER}} This document defines the first stable implementation of the DigitalAsset entity. This version deliberately excludes automatic numbering, Lua modules, and JavaScript. The objective of v1 is to validate: - entity structure - foreign keys - recursion - dashboard interaction - long-term compatibility with future determinis..."
 
No edit summary
 
Line 1: Line 1:
= Final Configuration for the DigitalAsset Entity (v1 – No Numbering) =
= Final Configuration for the Asset Entity (v1 – No Numbering) =


Document revision: {{#time:Y-m-d|{{REVISIONTIMESTAMP}}}} by {{REVISIONUSER}}
Document revision: {{#time:Y-m-d|{{REVISIONTIMESTAMP}}}} by {{REVISIONUSER}}


This document defines the first stable implementation of the DigitalAsset entity.
This document defines the first stable implementation of the Asset entity.
This version deliberately excludes automatic numbering, Lua modules, and JavaScript.
This version deliberately excludes automatic numbering, Lua modules, and JavaScript.


The objective of v1 is to validate:
The objective of Asset v1 is to validate:
- entity structure
- entity structure
- foreign keys
- foreign keys
- recursion
- recursion
- dashboard interaction
- dashboard interaction
- long-term compatibility with future deterministic identifiers
- strict alignment with Chapter, Place, and Organisation


This configuration follows exactly the same architectural rules as the Organisation entity.
Automatic numbering and deterministic identifiers will be introduced
 
in a later version once the structural baseline is validated.
Numbering and identifier automation will be introduced in a later version
once the structural baseline is validated with real data.


----
----
Line 22: Line 20:
= Design Principles =
= Design Principles =


The DigitalAsset entity follows these non-negotiable rules:
The Asset entity follows the same non-negotiable rules as other core entities:


* The page name is the immutable technical identifier (**Code**)
* The page name is the immutable technical identifier (**Code**)
* All relations use the page name as foreign key
* All relations use the page name as foreign key
* The Label is optional and human-readable
* Label is the human-readable name and may change
* All interaction happens via dashboards and forms
* All interaction happens via dashboards and forms
* Pages are configuration records and must not be browsed directly
* Pages are configuration records and must not be browsed directly
Line 35: Line 33:
= Cargo Table =
= Cargo Table =


Template:DigitalAsset
Template:Asset


<pre>
<pre>
<noinclude>
<noinclude>
DigitalAsset data template (v1 – no numbering)
Asset data template (v1 – no numbering)
</noinclude>
</noinclude>


{{#cargo_declare:
{{#cargo_declare:
  |_table=DigitalAssets
  |_table=Assets
  |Code=Page
  |Code=Page
  |Label=String
  |Label=String
Line 90: Line 88:


Once the template is created, the Cargo table must be created manually.
Once the template is created, the Cargo table must be created manually.
If the table structure is modified, the table must be recreated and swapped via
If the table structure is modified, the table must be recreated and swapped
the Cargo administration interface.
via the Cargo administration interface.


The field Code stores the full page name and acts as the stable technical identifier
The field Code stores the full page name (including namespace) and acts as the
used for all relations.
stable technical identifier used for all relations.


----
----
Line 100: Line 98:
= Page Form =
= Page Form =


Form:DigitalAsset
Form:Asset


<pre>
<pre>
<noinclude>
<noinclude>
Form for creating and editing DigitalAsset pages (v1).
Form for creating and editing Asset pages (v1).
</noinclude>
</noinclude>


Line 117: Line 115:
''Fields marked with (*) are required.''
''Fields marked with (*) are required.''


{{{for template|DigitalAsset}}}
{{{for template|Asset}}}


{| class="formtable"
{| class="formtable"
Line 158: Line 156:
| {{{field|Parent
| {{{field|Parent
   |input type=combobox
   |input type=combobox
   |values from namespace=DigitalAsset
   |values from namespace=Asset
   |existing values only
   |existing values only
   |placeholder=Top level (no parent)
   |placeholder=Top level (no parent)
Line 228: Line 226:
</pre>
</pre>


The Page Form intentionally avoids:
The Page Form deliberately avoids:
- automatic page name generation
- automatic page name generation
- JavaScript logic
- JavaScript logic
- mandatory field flags
- automatic validation


Mandatory requirements are communicated via text and enforced by user discipline
Mandatory requirements are communicated via text and user discipline in v1.
in this version.


----
----
Line 240: Line 237:
= Dashboard Page =
= Dashboard Page =


Dashboard:DigitalAsset
Dashboard:Asset


<pre>
<pre>
= 🗂️ Costa Sano Research DIGITAL ASSET Dashboard =
= 🗂️ Costa Sano Research ASSET Dashboard =


📖 [[Dashboard:DigitalAsset/Help|Need Help?]]
📖 [[Dashboard:Asset/Help|Need Help?]]


{| class="wikitable sortable"
{| class="wikitable sortable"
! Code !! Label !! Chapter !! Place !! Organisation !! Type
! Code !! Label !! Chapter !! Place !! Organisation !! Type
{{#cargo_query:
{{#cargo_query:
  tables=DigitalAssets
  tables=Assets
  |fields=_pageName,_pageTitle,Label,Chapter,Place,Organisation,AssetType
  |fields=_pageName,_pageTitle,Label,Chapter,Place,Organisation,AssetType
  |where=_pageNamespace=3014
  |where=_pageNamespace=ASSET_NAMESPACE_ID
  |order by=_pageTitle
  |order by=_pageTitle
  |format=template
  |format=template
  |template=DigitalAssetRow
  |template=AssetRow
  |named args=yes
  |named args=yes
  |cache=no
  |cache=no
Line 264: Line 261:


{{#forminput:
{{#forminput:
  form=DigitalAsset
  form=Asset
  |namespace=DigitalAsset
  |namespace=Asset
  |button text=➕ New asset
  |button text=➕ New asset
  |returnto=Dashboard:DigitalAsset
  |returnto=Dashboard:Asset
}}
}}


Line 275: Line 272:
</pre>
</pre>


Dashboard tables are positional.
Replace **ASSET_NAMESPACE_ID** with the actual numeric namespace ID of Asset.
The number and order of:
- table headers
- Cargo query fields
- row template cells
MUST match exactly.
 
Only the first column (Code) is clickable and leads to the edit form.


----
----
Line 288: Line 278:
= Row Transclusion Template =
= Row Transclusion Template =


Template:DigitalAssetRow
Template:AssetRow


<pre>
<pre>
Line 294: Line 284:
|-
|-
| {{#formlink:
| {{#formlink:
   form=DigitalAsset
   form=Asset
   |target={{{_pageName}}}
   |target={{{_pageName}}}
   |link text={{{_pageTitle}}}
   |link text={{{_pageTitle}}}
   |returnto=Dashboard:DigitalAsset
   |returnto=Dashboard:Asset
  }}
  }}
| {{{Label}}}
| {{{Label}}}
Line 307: Line 297:
</pre>
</pre>


Parent, Place, Organisation, and AssetType are displayed as plain text
Only the first column (Code) is clickable.
to prevent navigation to record pages.
All other values are displayed as plain text to prevent navigation to record pages.


----
----
Line 315: Line 305:


<pre>
<pre>
{{DigitalAsset
{{Asset
  |Label=Photograph – Early Costa Sano activities
  |Label=Photograph – Early Costa Sano activities
  |Chapter=Chapter:CH03
  |Chapter=Chapter:CH03
Line 335: Line 325:
= Status =
= Status =


This document defines **DigitalAsset v1**.
This document defines **Asset v1**.


Automatic numbering, deterministic identifiers, Lua modules, and JavaScript
Automatic numbering, deterministic identifiers, Lua modules, and JavaScript

Latest revision as of 16:51, 17 February 2026

Final Configuration for the Asset Entity (v1 – No Numbering)

Document revision: 2026-02-17 by Mngr

This document defines the first stable implementation of the Asset entity. This version deliberately excludes automatic numbering, Lua modules, and JavaScript.

The objective of Asset v1 is to validate: - entity structure - foreign keys - recursion - dashboard interaction - strict alignment with Chapter, Place, and Organisation

Automatic numbering and deterministic identifiers will be introduced in a later version once the structural baseline is validated.


Design Principles

The Asset entity follows the same non-negotiable rules as other core entities:

  • The page name is the immutable technical identifier (**Code**)
  • All relations use the page name as foreign key
  • Label is the human-readable name and may change
  • All interaction happens via dashboards and forms
  • Pages are configuration records and must not be browsed directly
  • Explicit configuration is preferred over implicit automation

Cargo Table

Template:Asset

<noinclude>
Asset data template (v1 – no numbering)
</noinclude>

{{#cargo_declare:
 |_table=Assets
 |Code=Page
 |Label=String
 |Chapter=Page
 |Place=Page
 |Organisation=Page
 |Parent=Page
 |AssetSourceType=Page
 |AssetType=Page
 |File=Page
 |Language=String
 |Description=Text
 |Notes=Text
 |AIProcessed=Boolean
 |CitationText=Text
 |Permalink=String
 |Repository=String
 |Rights=String
 |IsPublishable=Boolean
}}

{{#cargo_store:
 |Code={{FULLPAGENAME}}
 |Label={{{Label|}}}
 |Chapter={{{Chapter|}}}
 |Place={{{Place|}}}
 |Organisation={{{Organisation|}}}
 |Parent={{{Parent|}}}
 |AssetSourceType={{{AssetSourceType|}}}
 |AssetType={{{AssetType|}}}
 |File={{{File|}}}
 |Language={{{Language|}}}
 |Description={{{Description|}}}
 |Notes={{{Notes|}}}
 |AIProcessed={{{AIProcessed|}}}
 |CitationText={{{CitationText|}}}
 |Permalink={{{Permalink|}}}
 |Repository={{{Repository|}}}
 |Rights={{{Rights|}}}
 |IsPublishable={{{IsPublishable|}}}
}}

== {{{Label|{{PAGENAME}}}}} ==
{{DISPLAYTITLE:{{{Label|{{PAGENAME}}}}}}}

Once the template is created, the Cargo table must be created manually. If the table structure is modified, the table must be recreated and swapped via the Cargo administration interface.

The field Code stores the full page name (including namespace) and acts as the stable technical identifier used for all relations.


Page Form

Form:Asset

<noinclude>
Form for creating and editing Asset pages (v1).
</noinclude>

{{{info
 |no summary
 |no preview
 |no minor edit
 |no watch
 |no footer
}}}

''Fields marked with (*) are required.''

{{{for template|Asset}}}

{| class="formtable"

! Code
| {{PAGENAME}}
|-

! Label
| {{{field|Label}}}
|-

! Chapter (*)
| {{{field|Chapter
   |input type=combobox
   |values from namespace=Chapter
   |existing values only
}}}
|-

! Place
| {{{field|Place
   |input type=combobox
   |values from namespace=Place
   |existing values only
   |placeholder=Optional – leave empty if using Organisation
}}}
|-

! Organisation
| {{{field|Organisation
   |input type=combobox
   |values from namespace=Organisation
   |existing values only
   |placeholder=Optional – leave empty if using Place
}}}
|-

! Parent asset
| {{{field|Parent
   |input type=combobox
   |values from namespace=Asset
   |existing values only
   |placeholder=Top level (no parent)
}}}
|-

! Asset source type
| {{{field|AssetSourceType
   |input type=combobox
   |values from namespace=AssetSourceType
   |existing values only
}}}
|-

! Asset type
| {{{field|AssetType
   |input type=combobox
   |values from namespace=AssetType
   |existing values only
}}}
|-

! File
| {{{field|File
   |input type=upload
}}}
|-

! Language
| {{{field|Language|input type=text|size=20}}}
|-

! Description
| {{{field|Description|input type=textarea}}}
|-

! Notes
| {{{field|Notes|input type=textarea}}}
|-

! AI processed
| {{{field|AIProcessed|input type=checkbox}}}
|-

! Citation text
| {{{field|CitationText|input type=textarea}}}
|-

! Permalink
| {{{field|Permalink|input type=text|size=60}}}
|-

! Repository
| {{{field|Repository|input type=text|size=60}}}
|-

! Rights
| {{{field|Rights|input type=text|size=60}}}
|-

! Publishable
| {{{field|IsPublishable|input type=checkbox}}}

|}

{{{standard input|save}}}

{{{end template}}}

The Page Form deliberately avoids: - automatic page name generation - JavaScript logic - automatic validation

Mandatory requirements are communicated via text and user discipline in v1.


Dashboard Page

Dashboard:Asset

= 🗂️ Costa Sano Research ASSET Dashboard =

📖 [[Dashboard:Asset/Help|Need Help?]]

{| class="wikitable sortable"
! Code !! Label !! Chapter !! Place !! Organisation !! Type
{{#cargo_query:
 tables=Assets
 |fields=_pageName,_pageTitle,Label,Chapter,Place,Organisation,AssetType
 |where=_pageNamespace=ASSET_NAMESPACE_ID
 |order by=_pageTitle
 |format=template
 |template=AssetRow
 |named args=yes
 |cache=no
}}
|}

Choose an asset code corresponding to the table above and respecting the naming conventions.

{{#forminput:
 form=Asset
 |namespace=Asset
 |button text=➕ New asset
 |returnto=Dashboard:Asset
}}

<div style="text-align:right; font-size:90%;">
Last updated: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} – {{CURRENTTIME}} UTC
</div>

Replace **ASSET_NAMESPACE_ID** with the actual numeric namespace ID of Asset.


Row Transclusion Template

Template:AssetRow

<includeonly>
|-
| {{#formlink:
   form=Asset
   |target={{{_pageName}}}
   |link text={{{_pageTitle}}}
   |returnto=Dashboard:Asset
 }}
| {{{Label}}}
| {{#if:{{{Chapter|}}}|{{#titleparts:{{{Chapter}}}|1}}|—}}
| {{#if:{{{Place|}}}|{{#titleparts:{{{Place}}}|1}}|—}}
| {{#if:{{{Organisation|}}}|{{#titleparts:{{{Organisation}}}|1}}|—}}
| {{#if:{{{AssetType|}}}|{{#titleparts:{{{AssetType}}}|1}}|—}}
</includeonly>

Only the first column (Code) is clickable. All other values are displayed as plain text to prevent navigation to record pages.


Example Asset Page (v1)

{{Asset
 |Label=Photograph – Early Costa Sano activities
 |Chapter=Chapter:CH03
 |Place=Place:BERCK
 |Organisation=
 |AssetType=AssetType:Photo
 |File=File:example.jpg
 |Description=Photograph of early Costa Sano activities.
 |Notes=Scanned from original archive.
 |AIProcessed=true
 |IsPublishable=true
}}

This page is a configuration record and must be accessed via the dashboard.


Status

This document defines **Asset v1**.

Automatic numbering, deterministic identifiers, Lua modules, and JavaScript will be introduced in a future version after structural validation.