diff --git a/bikeshed/Spec.py b/bikeshed/Spec.py
index 74e798cb26..7ce609e39f 100644
--- a/bikeshed/Spec.py
+++ b/bikeshed/Spec.py
@@ -146,6 +146,7 @@ def initMetadata(self, inputContent: InputSource.InputContent) -> None:
# Combine the data so far, and compute the doctype
# (the other md sources need the doctype in order to be found)
self.md = metadata.join(self.mdBaseline, self.mdDocument, self.mdCommandLine)
+ rawDoctype = (self.md.rawOrg, self.md.rawGroup, self.md.rawStatus)
self.doctype = self.doctypes.getDoctype(self.md.rawOrg, self.md.rawGroup, self.md.rawStatus)
self.mdDefaults = metadata.fromJson(
@@ -153,6 +154,9 @@ def initMetadata(self, inputContent: InputSource.InputContent) -> None:
source="defaults",
)
self.md = metadata.join(self.mdBaseline, self.mdDefaults, self.mdDocument, self.mdCommandLine)
+ if rawDoctype != (self.md.rawOrg, self.md.rawGroup, self.md.rawStatus):
+ # recompute doctype
+ self.doctype = self.doctypes.getDoctype(self.md.rawOrg, self.md.rawGroup, self.md.rawStatus)
# Using all of that, load up the text macros so I can sub them into the computed-metadata file.
self.md.fillTextMacros(self.macros, doc=self)
diff --git a/bikeshed/doctypes/manager.py b/bikeshed/doctypes/manager.py
index f9ecc73d59..1c7d522362 100644
--- a/bikeshed/doctypes/manager.py
+++ b/bikeshed/doctypes/manager.py
@@ -166,7 +166,7 @@ def looselyMatch(self, rawStatus: str) -> bool:
orgName, statusName = utils.splitOrg(rawStatus)
if statusName and self.name.upper() != statusName.upper():
return False
- if orgName and self.org.name != orgName.lower():
+ if orgName and self.org.name != orgName.upper():
return False
return True
diff --git a/bikeshed/doctypes/utils.py b/bikeshed/doctypes/utils.py
index a02f2f06d4..00e40b0d4f 100644
--- a/bikeshed/doctypes/utils.py
+++ b/bikeshed/doctypes/utils.py
@@ -102,7 +102,7 @@ def canonicalize(
f"Your Group ({group.name}) is in the '{group.org.name}' Org, but your Status ({status.name}) is only usable in the '{status.org.name}' Org. Allowed Status values for '{group.org.name}' are {config.englishFromList(sorted(possibleStatusNames))}",
)
- if group and group.type is not None and status and status.groupTypes and group.type not in status.groupTypes:
+ if group and group.type is not None and status and status.groupTypes and group.type not in status.groupTypes:
allowedStatuses = [s.name for s in group.org.statuses.values() if group.type in s.groupTypes]
if allowedStatuses:
m.warn(
@@ -115,7 +115,7 @@ def canonicalize(
if group and status and group.org.name == "W3C":
# Apply the special w3c rules
- validateW3CStatus(group, status)
+ validateW3CStatus(status)
# Reconciliation done, return everything if Status exists.
if status:
@@ -200,7 +200,7 @@ def reconcileOrgs(fromRaw: str | None, fromStatus: str | None, fromGroup: str |
return orgName
-def validateW3CStatus(group: Group, status: Status) -> None:
+def validateW3CStatus(status: Status) -> None:
if status.name == "DREAM":
m.warn("You used Status:DREAM for a W3C document. Consider Status:UD instead.")
@@ -208,5 +208,3 @@ def validateW3CStatus(group: Group, status: Status) -> None:
m.die(
f"Under Process2021, {status.name} is no longer a valid status. Use NOTE (or one of its variants NOTE-ED, NOTE-FPWD, NOTE-WD) instead.",
)
-
-
diff --git a/bikeshed/headings.py b/bikeshed/headings.py
index 3e75d4eac9..1cd7f3300b 100644
--- a/bikeshed/headings.py
+++ b/bikeshed/headings.py
@@ -23,7 +23,7 @@ def processHeadings(doc: t.SpecT, scope: str = "doc") -> None:
for el in headings:
h.addClass(doc, el, "settled")
if scope == "all" and doc.doctype.group.privSec:
- checkPrivacySecurityHeadings(h.findAll(".heading", doc))
+ checkPrivacySecurityHeadings(doc, h.findAll(".heading", doc))
def resetHeadings(headings: list[t.ElementT]) -> None:
@@ -56,7 +56,7 @@ def addHeadingIds(doc: t.SpecT, headings: list[t.ElementT]) -> None:
)
-def checkPrivacySecurityHeadings(headings: list[t.ElementT]) -> None:
+def checkPrivacySecurityHeadings(doc: t.SpecT, headings: list[t.ElementT]) -> None:
security = False
privacy = False
for header in headings:
@@ -66,7 +66,7 @@ def checkPrivacySecurityHeadings(headings: list[t.ElementT]) -> None:
security = True
if "privacy" in text and "considerations" in text:
privacy = True
- if "security" in text and "privacy" in text and "considerations" in text:
+ if "security" in text and "privacy" in text and "considerations" in text and doc.doctype.org.name == "W3C":
m.warn(
"W3C policy requires Privacy Considerations and Security Considerations to be separate sections, but you appear to have them combined into one.",
el=header,
diff --git a/bikeshed/metadata.py b/bikeshed/metadata.py
index f5da5cbdd2..539eda7621 100644
--- a/bikeshed/metadata.py
+++ b/bikeshed/metadata.py
@@ -279,8 +279,10 @@ def fillTextMacros(self, macros: t.DefaultDict[str, str], doc: t.SpecT) -> None:
macros["level"] = str(self.level)
if self.displayVshortname:
macros["vshortname"] = self.displayVshortname
- if doc.doctype.status.fullName() == "FINDING" and doc.doctype.group:
+ if doc.doctype.status.name == "FINDING" and doc.doctype.group:
macros["longstatus"] = f"Finding of the {doc.doctype.group.name}"
+ elif doc.doctype.status.name == "DRAFT-FINDING" and doc.doctype.group:
+ macros["longstatus"] = f"Draft Finding of the {doc.doctype.group.name}"
elif doc.doctype.status:
macros["longstatus"] = doc.doctype.status.longName
else:
diff --git a/bikeshed/spec-data/readonly/boilerplate/doctypes.kdl b/bikeshed/spec-data/readonly/boilerplate/doctypes.kdl
index 3e9f705f72..0b475de73a 100644
--- a/bikeshed/spec-data/readonly/boilerplate/doctypes.kdl
+++ b/bikeshed/spec-data/readonly/boilerplate/doctypes.kdl
@@ -49,9 +49,11 @@ status "LS-COMMIT" "Commit Snapshot"
status "LS-BRANCH" "Branch Snapshot"
status "LS-PR" "PR Preview"
status "LD" "Living Document"
+status "DRAFT-FINDING" "Draft Finding"
+status "FINDING" "Finding"
org "whatwg" {
- group "whatwg" priv-sec=true
+ group "whatwg" priv-sec=false
status "RD" "Review Draft" {
requires "Date"
}
@@ -126,7 +128,7 @@ org "w3c" {
group "webml" type="cg"
group "webmlwg" type="wg"
group "webperf" type="wg"
- group "webplatform" type="cg" priv-sec=true
+ group "webplatform" type="wg" priv-sec=true
group "webrtc" type="wg"
group "webspecs" type="wg" priv-sec=true
group "webtransport" type="wg"
@@ -162,7 +164,7 @@ org "w3c" {
group-types "wg"
}
status "CR" "W3C Candidate Recommendation Snapshot" {
- requires "Level" "ED" "TR" "Issue Tracking" "Date" "Implentation Report"
+ requires "Level" "ED" "TR" "Issue Tracking" "Date" "Implementation Report"
group-types "wg"
}
status "CRD" "W3C Candidate Recommendation Draft" {
diff --git a/tests/github/WICG/container-queries/index.html b/tests/github/WICG/container-queries/index.html
index 0679d356d4..8a6463c850 100644
--- a/tests/github/WICG/container-queries/index.html
+++ b/tests/github/WICG/container-queries/index.html
@@ -3,7 +3,7 @@
Container Queries
-
+
diff --git a/tests/github/WICG/content-index/spec/index.console.txt b/tests/github/WICG/content-index/spec/index.console.txt
index 7433e54ac9..1e4817e6cb 100644
--- a/tests/github/WICG/content-index/spec/index.console.txt
+++ b/tests/github/WICG/content-index/spec/index.console.txt
@@ -1,4 +1,4 @@
-WARNING: You used Status: ED, but W3C Community and Business Groups are limited to these statuses: CG-DRAFT, CG-FINAL, UD.
+WARNING: You used Status ED, but your Group (WICG) is limited to the statuses CG-DRAFT, CG-FINAL, or UD.
LINE ~76: Multiple possible 'service worker' dfn refs.
Arbitrarily chose https://w3c.github.io/ServiceWorker/#dfn-service-worker
To auto-select one of the following refs, insert one of these lines into a
block:
diff --git a/tests/github/WICG/cq-usecases/index.console.txt b/tests/github/WICG/cq-usecases/index.console.txt
index 3c54f5b598..062190474d 100644
--- a/tests/github/WICG/cq-usecases/index.console.txt
+++ b/tests/github/WICG/cq-usecases/index.console.txt
@@ -1,4 +1,4 @@
-WARNING: You used Status: ED, but W3C Community and Business Groups are limited to these statuses: CG-DRAFT, CG-FINAL, UD.
+WARNING: You used Status ED, but your Group (WICG) is limited to the statuses CG-DRAFT, CG-FINAL, or UD.
LINT: Your document appears to use spaces to indent, but line 48 starts with tabs.
LINT: Your document appears to use spaces to indent, but line 49 starts with tabs.
LINT: Your document appears to use spaces to indent, but line 55 starts with tabs.
diff --git a/tests/github/WICG/css-parser-api/index.console.txt b/tests/github/WICG/css-parser-api/index.console.txt
index e69de29bb2..8d40d41fcb 100644
--- a/tests/github/WICG/css-parser-api/index.console.txt
+++ b/tests/github/WICG/css-parser-api/index.console.txt
@@ -0,0 +1 @@
+WARNING: This specification has neither a 'Security Considerations' nor a 'Privacy Considerations' section. Please consider adding both, see https://w3ctag.github.io/security-questionnaire/.
diff --git a/tests/github/WICG/keyboard-lock/index.console.txt b/tests/github/WICG/keyboard-lock/index.console.txt
index 7243b6c61a..4e767c3a9a 100644
--- a/tests/github/WICG/keyboard-lock/index.console.txt
+++ b/tests/github/WICG/keyboard-lock/index.console.txt
@@ -1,3 +1,4 @@
+WARNING: You used Status CG-DRAFT, but your Group (WEBPLATFORM) is limited to the statuses CR, CRD, CRY, CRYD, DRAFT-FINDING, DRY, ED, FINDING, FPWD, LCWD, LS, MO, NOTE, NOTE-ED, NOTE-FPWD, NOTE-WD, PER, PR, REC, RY, UD, WD, or WG-NOTE.
LINT: Your document appears to use tabs to indent, but line 40 starts with spaces.
LINT: Your document appears to use tabs to indent, but line 41 starts with spaces.
LINT: Your document appears to use tabs to indent, but line 54 starts with spaces.
diff --git a/tests/github/immersive-web/lighting-estimation/index.html b/tests/github/immersive-web/lighting-estimation/index.html
index ae2fa228b0..846ef48f4c 100644
--- a/tests/github/immersive-web/lighting-estimation/index.html
+++ b/tests/github/immersive-web/lighting-estimation/index.html
@@ -3,7 +3,7 @@
WebXR Lighting Estimation API Level 1
-
+
diff --git a/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.console.txt b/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.console.txt
index 3da4c40d78..9b80b249e0 100644
--- a/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.console.txt
+++ b/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.console.txt
@@ -1,4 +1,4 @@
-WARNING: You used Status: DREAM for a W3C document. Consider UD instead.
+WARNING: You used Status:DREAM for a W3C document. Consider Status:UD instead.
LINE 259: Multiple elements have the same ID 'dom-xrframe-metadata'.
Deduping, but this ID may not be stable across revisions.
LINK ERROR: No 'idl-name' refs found for 'XRFeatureInit'.
diff --git a/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.html b/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.html
index e219298687..c56e3d9c5c 100644
--- a/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.html
+++ b/tests/github/immersive-web/real-world-geometry/webxrmeshing-1.html
@@ -1,1493 +1,13 @@
- WebXR Meshing API Level 1
-
+ WebXR Meshing API Level 1
+
+
+
+
To the extent possible under law, the editors have waived all copyright
-and related or neighboring rights to this work.
-In addition, as of 1 January 1970,
-the editors have made this specification available under the Open Web Foundation Agreement Version 1.0,
-which is available at http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
-Parts of this work may be from another specification document. If so, those parts are instead covered by the license of that specification document.