Source manifest
Change the name, item noun, and mark a work item shows for its tracker, from the workspace's steering repo.
Overview
Every work item shows where it came from: a name such as Jira, an item noun such as Issue or Ticket, and a small mark. Oxagen ships a built-in manifest for each tracker. A workspace changes any of them with a file in its steering repo.
A manifest is a TOML file at work/sources/<key>.toml, and it names an SVG file beside it.
Write a manifest
# work/sources/jira.toml
schema = "source/v1"
type = "jira"
name = "Jira at Acme"
item_noun = "Ticket"
avatar = "jira.svg"
avatar_dark = "jira-dark.svg"| Key | Needed | Rule |
|---|---|---|
schema | Yes | The text source/v1 |
type | Yes | A collector type, or oxagen for items a person entered |
name | Yes | Up to 60 characters |
item_noun | Yes | Up to 30 characters |
avatar | Yes | The name of an SVG file in work/sources/, in lowercase, with no folder |
avatar_dark | No | The mark for the dark theme. Without it, Oxagen draws avatar in both themes |
Any other key refuses the file, and so does a manifest over 4 KB. An .svg name is lowercase letters and digits with dots, hyphens, or underscores, starts with a letter or digit, and is at most 63 characters before .svg. A name or an item noun with a control character or a direction override refuses the file, so the text reads the same everywhere. Oxagen shows both as text and never reads them as an instruction.
The file name is the key. A key uses lowercase letters and digits, joined by single hyphens or underscores, up to 64 characters. The key tracker is reserved for items whose tracker Oxagen cannot tell. A file named for a type, such as jira.toml, replaces that type's built-in manifest, so its type must be that type. To describe a type under another key, name the file for a key of your own.
Precedence
A collector shows the first of these that exists for its type:
- The manifest its own
sourcekey names. A collector file sets it, as insource = "jira-acme". - The steering repo's file for the type,
work/sources/<type>.toml. - The built-in manifest for the type.
A manifest of another type is skipped, so a source key that names one never makes a Jira collector read as GitHub. Oxagen resolves the source each time it reads an item and stores none on the item, so a change to a manifest shows on every item of that source at once.
SVG rules
Oxagen cleans each SVG into plain data and draws that data as its own elements. An image address or a piece of markup from your repository never reaches the page. One failed rule refuses the whole file.
- Size. At most 32 KB, 500 elements, and 16 levels of nesting. A path's
dis at most 16 KB. - Elements. One
svgroot withg,path,circle,ellipse,rect,line,polyline,polygon,defs,linearGradient,radialGradient, andstop. Atitleis allowed, and Oxagen drops its text because the app labels the mark with the source's name. - Attributes. Only geometry, transform, paint, and gradient attributes. On the root, Oxagen drops
width,height,role, andversion, because the app sets the size. Arectkeepswidthandheight. - Paint. A color keyword, a hex color,
rgb(),hsl(),none,currentColor, orurl(#id)naming a gradient in the same file. - Root. One
svgroot in the SVG namespace, with aviewBoxof four numbers. Elements outside the namespace, a second root, and an entity refuse the file. - Values. An attribute value over 512 characters, or one that is malformed for its attribute, refuses the file.
- Ids. A duplicate
idrefuses the file. Oxagen rewrites eachidand eachurl(#id)to carry the file's hash, so two marks on one page never share an id.
Why a file is refused
| Reason | Why |
|---|---|
| The SVG is over 32 KB, 500 elements, or 16 levels | A mark is a small icon, and the limits bound the work to draw it |
| A script, a style element or attribute, an event attribute | They run code or restyle the page |
A link, an image, a use element, a foreignObject element, or a nested svg | They load other content or hide it |
| A DOCTYPE or a processing instruction | They can load other files or define entities |
Any other url(, or a url(#id) that names no gradient in the file | An address could reach another host |
| An element or attribute not on the lists above | The lists name everything the app can draw |
The file holds no svg element, or is not valid XML | Nothing can be drawn |
Work setup shows each refused file with its reason. Oxagen keeps using the built-in manifest for that key until the file passes. list_work_sources returns the same list in refused.
Built-in marks
GitHub, GitLab, Linear, and Jira ship with their own marks, in each vendor's color. The marks remain their owners' trademarks and show where an item came from. A tracker with no mark draws a plain tracker icon.