You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 643d74f
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,7 +49,7 @@ Interactive text output uses inspection spinners and progress bars with a packag
49
49
50
50
## Metadata and architecture
51
51
52
-
Only the `singer` category has its declaration file parsed. All other categories, including `inference`, retain their expanded `desc.json` entry and expose category, ID and any checked direct file path. Their declaration files are not parsed, their variables are not expanded, and declaration fields are not extracted or indexed. Their category and ID remain indexed and usable in contribution selectors. No name or declaration expansion state is fabricated for them. Singer contributions additionally expose common module fields, avatar, background and demo audio when extractable. Contribution-specific fields and import/export relationships are not validated. String `path` values directly in `desc.json` and package readme paths must reference regular files inside the package. Resource paths within contribution declarations are neither checked nor opened. A non-string `path` in an opaque category is retained as category-owned data.
52
+
Only the `singer` category has its declaration file parsed. All other categories, including `inference`, retain their expanded `desc.json` entry and expose category, ID and any checked direct file path. Their declaration files are not parsed, their variables are not expanded, and declaration fields are not extracted or indexed. Their category and ID remain indexed and usable in contribution selectors. No name or declaration expansion state is fabricated for them. Singer contributions additionally expose common module fields, avatar, background and demo audio when extractable. Contribution-specific fields and import/export relationships are not validated. String `path` values directly in `desc.json` and package license and readme paths must reference regular files inside the package. Resource paths within contribution declarations are neither checked nor opened. A non-string `path` in an opaque category is retained as category-owned data.
53
53
54
54
The package manifest and singer JSON declarations support UTF-8 BOM and comments, reject duplicate keys and trailing commas, and preserve unknown fields. Variable expansion follows declaration order and scope and never rescans substituted text. Parsing limits include 16 MiB per parsed declaration, 128 levels, one million value nodes, and a 64 MiB cumulative metadata budget. Malformed singer fields produce extraction diagnostics rather than installation failures; unreadable or invalid singer JSON declarations are rejected. These JSON requirements do not apply to opaque contribution declaration files. All package files still participate in archive integrity checks, content hashing and extraction limits.
Copy file name to clipboardExpand all lines: docs/installed-database.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -172,7 +172,7 @@ def content_hash(files):
172
172
173
173
## Metadata Ownership
174
174
175
-
The database is an installation-time management and listing index. `desc.json` retains complete package metadata and opaque entries. Singer declarations retain complete singer metadata. The database excludes declaration bodies, declaration paths, expansion state, copyright, readme, URL, singer media fields, and import or export relationships. It also excludes resolved dependency edges, source archive paths, remote repository records, and installed file inventories.
175
+
The database is an installation-time management and listing index. `desc.json` retains complete package metadata and opaque entries. Singer declarations retain complete singer metadata. The database excludes declaration bodies, declaration paths, expansion state, license paths, readme paths, URL, singer media fields, and import or export relationships. It also excludes resolved dependency edges, source archive paths, remote repository records, and installed file inventories.
176
176
177
177
Installed package contents are immutable under the management protocol. Replacement uses installation with `--overwrite-existing` if the same identity has different content. External file edits can produce stale indexed metadata, dependencies, and recorded hashes. `list` does not rescan declarations. `info --installed` reopens package and singer metadata without reindexing or recomputing the installed hash. A registered identity mismatch is rejected. Opaque declaration files are not parsed by information queries.
Copy file name to clipboardExpand all lines: docs/interoperability.md
+9-6Lines changed: 9 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -97,6 +97,7 @@ The root version response contains no query envelope. The executable version is
97
97
| Category, interface, or variant ID | The string contains contribution ID segments separated by `.`. Category IDs are extensible and case-sensitive. |
98
98
| Package version | The string contains four decimal integer components, such as `"1.2.0.0"`. Components have arbitrary precision and no leading zeros except the value `0`. |
99
99
|`Text`| The object maps language keys to strings and includes the default key `_`. Extracted shorthand strings become `{"_":"value"}`. Empty strings and all language keys are retained. |
100
+
|`FilePaths`| The object has the `Text` representation. Every value is a nonempty, fully qualified, lexically normalized host path to a regular file inside the package. |
100
101
|`Dependency`| The object contains a package `id` and normalized target `version`. The target does not identify a resolved provider version. |
101
102
| Content hash | The string contains 128 lowercase hexadecimal characters representing the [content tree digest](installed-database.md#content-hash). |
102
103
@@ -135,22 +136,24 @@ A singer contribution has category ID exactly equal to `singer`. An opaque contr
135
136
136
137
### Package Manifest
137
138
138
-
`PackageManifest` contains required `id`, `version`, `formatVersion`, `runtimeLevel`, `compatVersion`, `dependencies`, `contributions`, and `manifest`. Optional fields are `name`, `description`, `vendor`, `copyright`, `readme`, `url`, and `diagnostics`. `dependencies` and `contributions` are arrays, including `[]` if empty. `diagnostics`, if present, is a nonempty string array.
139
+
`PackageManifest` contains required `id`, `version`, `formatVersion`, `runtimeLevel`, `compatVersion`, `dependencies`, `contributions`, and `manifest`. Optional fields are `name`, `description`, `vendor`, `license`, `readme`, `url`, and `diagnostics`. `dependencies` and `contributions` are arrays, including `[]` if empty. `diagnostics`, if present, is a nonempty string array.
139
140
140
141
| Declaration field | Extracted representation |
141
142
| --- | --- |
142
143
|`$version`|`formatVersion` contains the normalized format version. The supported value is `"1.0.0.0"`. |
143
144
|`runtimeLevel`|`runtimeLevel` contains the supported integer value `1`. |
144
145
|`id`, `version`, `compatVersion`| The extracted fields retain their names. Versions are normalized. An absent `compatVersion` defaults to `version`. |
145
-
|`name`, `description`, `vendor`, `copyright`| Each extracted field contains a complete `Text` object. |
146
-
|`readme`|The extracted `Text` object contains fully qualified, lexically normalized host paths. Every localized path must reference a regular file within the package. |
146
+
|`name`, `description`, `vendor`| Each extracted field contains a complete `Text` object. |
147
+
|`license`, `readme`|Each extracted field contains a complete `FilePaths` object. All language keys are retained. |
147
148
|`url`| The extracted field contains the expanded string. An absent field is omitted. An explicit empty string remains `""`. URI syntax and network availability are not checked. |
148
149
|`dependencies`, `contributions`| The extracted arrays contain declared dependencies and full contribution objects. |
149
150
|`vars`| Variable definitions are consumed during expansion and omitted from the expanded manifest. |
150
151
151
-
`manifest` contains expanded `desc.json` with arbitrary fields and JSON types retained. It does not preserve source formatting, comments, or byte order marks. Typed normalization does not modify the retained declaration representation. For example, `manifest.version` can contain `"1.0"` while the typed `version` contains `"1.0.0.0"`. `manifest.readme` contains expanded declaration paths while typed `readme` contains resolved host paths.
152
+
`license` and `readme` use identical path rules. A declaration accepts a shorthand string such as `"license": "LICENSE.txt"` or a language map such as `"license": {"_": "LICENSE.txt", "zh-CN": "docs/许可证.txt"}`. A language map requires the default key `_`. Variable expansion precedes path resolution. Every localized path is checked, regardless of the selected output language. Null values, empty paths, missing files, directories, and references outside the package are rejected. An absent field remains omitted.
152
153
153
-
The database stores package name, description, and vendor for installed package summaries. Copyright, readme, URL, and arbitrary extension fields remain available through full information responses and are absent from installed package summaries.
154
+
`manifest` contains expanded `desc.json` with arbitrary fields and JSON types retained. It does not preserve source formatting, comments, or byte order marks. Typed normalization does not modify the retained declaration representation. For example, `manifest.version` can contain `"1.0"` while the typed `version` contains `"1.0.0.0"`. `manifest.license` and `manifest.readme` contain expanded declaration paths while typed `license` and `readme` contain resolved host paths.
155
+
156
+
The database stores package name, description, and vendor for installed package summaries. License paths, readme paths, URL, and arbitrary extension fields remain available through full information responses and are absent from installed package summaries.
154
157
155
158
### Contributions
156
159
@@ -178,7 +181,7 @@ Full singer `level` uses a JSON number. Indexed summaries and the database use d
178
181
179
182
An installed contribution selector filters only `package.contributions`. `package.manifest` and `installation.contributions` retain the complete package declaration and index.
180
183
181
-
`${root}`, `${dir}`, and typed readme paths depend on the read context. Installed information uses the installed package directory. Pack planning uses the source directory. Archive information uses the archive parent directory as a logical root without extracting files there. A singer declaration has `${dir}` set to its containing directory. Extracted singer resource strings are not independently resolved or normalized. Expanded absolute paths are specific to the applicable read context.
184
+
`${root}`, `${dir}`, and typed license and readme paths depend on the read context. Installed information uses the installed package directory. Pack planning uses the source directory. Archive information uses the archive parent directory as a logical root without extracting files there. A singer declaration has `${dir}` set to its containing directory. Extracted singer resource strings are not independently resolved or normalized. Expanded absolute paths are specific to the applicable read context.
"description": "Each localized value is a nonempty, fully qualified, lexically normalized host path in the package read context. Each reference must identify a regular file inside the package."
50
+
},
46
51
"diagnosticArray": {
47
52
"type": "array",
48
53
"items": { "type": "string" }
@@ -159,8 +164,8 @@
159
164
"name": { "$ref": "#/$defs/text" },
160
165
"description": { "$ref": "#/$defs/text" },
161
166
"vendor": { "$ref": "#/$defs/text" },
162
-
"copyright": { "$ref": "#/$defs/text" },
163
-
"readme": { "$ref": "#/$defs/text", "description": "Each localized value is a fully qualified, lexically normalized host path in the package read context. Each reference must identify a regular file inside the package." },
167
+
"license": { "$ref": "#/$defs/filePaths" },
168
+
"readme": { "$ref": "#/$defs/filePaths" },
164
169
"url": { "type": "string", "description": "The value is the website string after variable expansion. An explicit empty string is retained. The field is omitted if absent." },
165
170
"manifest": { "type": "object", "description": "The object contains expanded desc.json with vars removed. Arbitrary package fields and JSON types are retained. Source formatting and comments are excluded." },
0 commit comments