Repository: bluesky-social/indigo

Issue:
Relay:initial-seq-number, default-account-limit and new-hosts-per-day-limit parameters always 0
The parameters initial-seq-number, default-account-limit and new-hosts-per-day-limit are always 0 because of the wrong flag type IntFlag instead of Int64Flag

Discussion:

Solution patch:
diff --git a/api/atproto/admindefs.go b/api/atproto/admindefs.go
index c6e42423..061d75b6 100644
--- a/api/atproto/admindefs.go
+++ b/api/atproto/admindefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.defs
 
-// schema: com.atproto.admin.defs
+package atproto
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -25,20 +25,16 @@ type AdminDefs_AccountView struct {
 }
 
 // AdminDefs_RepoBlobRef is a "repoBlobRef" in the com.atproto.admin.defs schema.
-//
-// RECORDTYPE: AdminDefs_RepoBlobRef
 type AdminDefs_RepoBlobRef struct {
-	LexiconTypeID string  `json:"$type,const=com.atproto.admin.defs#repoBlobRef" cborgen:"$type,const=com.atproto.admin.defs#repoBlobRef"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=com.atproto.admin.defs#repoBlobRef"`
 	Cid           string  `json:"cid" cborgen:"cid"`
 	Did           string  `json:"did" cborgen:"did"`
 	RecordUri     *string `json:"recordUri,omitempty" cborgen:"recordUri,omitempty"`
 }
 
 // AdminDefs_RepoRef is a "repoRef" in the com.atproto.admin.defs schema.
-//
-// RECORDTYPE: AdminDefs_RepoRef
 type AdminDefs_RepoRef struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.admin.defs#repoRef" cborgen:"$type,const=com.atproto.admin.defs#repoRef"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.admin.defs#repoRef"`
 	Did           string `json:"did" cborgen:"did"`
 }
 
diff --git a/api/atproto/admindeleteAccount.go b/api/atproto/admindeleteAccount.go
index 3b31ed37..f91b778a 100644
--- a/api/atproto/admindeleteAccount.go
+++ b/api/atproto/admindeleteAccount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.deleteAccount
 
-// schema: com.atproto.admin.deleteAccount
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/admindisableAccountInvites.go b/api/atproto/admindisableAccountInvites.go
index bb202106..02f1ce75 100644
--- a/api/atproto/admindisableAccountInvites.go
+++ b/api/atproto/admindisableAccountInvites.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.disableAccountInvites
 
-// schema: com.atproto.admin.disableAccountInvites
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/admindisableInviteCodes.go b/api/atproto/admindisableInviteCodes.go
index 129426f4..6ad5e8c0 100644
--- a/api/atproto/admindisableInviteCodes.go
+++ b/api/atproto/admindisableInviteCodes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.disableInviteCodes
 
-// schema: com.atproto.admin.disableInviteCodes
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminenableAccountInvites.go b/api/atproto/adminenableAccountInvites.go
index f19610aa..bca0cd79 100644
--- a/api/atproto/adminenableAccountInvites.go
+++ b/api/atproto/adminenableAccountInvites.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.enableAccountInvites
 
-// schema: com.atproto.admin.enableAccountInvites
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/admingetAccountInfo.go b/api/atproto/admingetAccountInfo.go
index f18fcf50..6193ab6f 100644
--- a/api/atproto/admingetAccountInfo.go
+++ b/api/atproto/admingetAccountInfo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.getAccountInfo
 
-// schema: com.atproto.admin.getAccountInfo
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/admingetAccountInfos.go b/api/atproto/admingetAccountInfos.go
index 3e5f931c..41543957 100644
--- a/api/atproto/admingetAccountInfos.go
+++ b/api/atproto/admingetAccountInfos.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.getAccountInfos
 
-// schema: com.atproto.admin.getAccountInfos
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/admingetInviteCodes.go b/api/atproto/admingetInviteCodes.go
index 10000868..dc51b966 100644
--- a/api/atproto/admingetInviteCodes.go
+++ b/api/atproto/admingetInviteCodes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.getInviteCodes
 
-// schema: com.atproto.admin.getInviteCodes
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/admingetSubjectStatus.go b/api/atproto/admingetSubjectStatus.go
index 9b5240d0..0872865b 100644
--- a/api/atproto/admingetSubjectStatus.go
+++ b/api/atproto/admingetSubjectStatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.getSubjectStatus
 
-// schema: com.atproto.admin.getSubjectStatus
+package atproto
 
 import (
 	"context"
@@ -38,8 +38,9 @@ func (t *AdminGetSubjectStatus_Output_Subject) MarshalJSON() ([]byte, error) {
 		t.AdminDefs_RepoBlobRef.LexiconTypeID = "com.atproto.admin.defs#repoBlobRef"
 		return json.Marshal(t.AdminDefs_RepoBlobRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *AdminGetSubjectStatus_Output_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/atproto/adminsearchAccounts.go b/api/atproto/adminsearchAccounts.go
index 5df32315..f74ed522 100644
--- a/api/atproto/adminsearchAccounts.go
+++ b/api/atproto/adminsearchAccounts.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.searchAccounts
 
-// schema: com.atproto.admin.searchAccounts
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminsendEmail.go b/api/atproto/adminsendEmail.go
index 21d0dc4d..86bd3049 100644
--- a/api/atproto/adminsendEmail.go
+++ b/api/atproto/adminsendEmail.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.sendEmail
 
-// schema: com.atproto.admin.sendEmail
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminupdateAccountEmail.go b/api/atproto/adminupdateAccountEmail.go
index 00679ca4..2ace2a79 100644
--- a/api/atproto/adminupdateAccountEmail.go
+++ b/api/atproto/adminupdateAccountEmail.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.updateAccountEmail
 
-// schema: com.atproto.admin.updateAccountEmail
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminupdateAccountHandle.go b/api/atproto/adminupdateAccountHandle.go
index 86a167ab..55763fff 100644
--- a/api/atproto/adminupdateAccountHandle.go
+++ b/api/atproto/adminupdateAccountHandle.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.updateAccountHandle
 
-// schema: com.atproto.admin.updateAccountHandle
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminupdateAccountPassword.go b/api/atproto/adminupdateAccountPassword.go
index 05cd9ace..e4e0ad9a 100644
--- a/api/atproto/adminupdateAccountPassword.go
+++ b/api/atproto/adminupdateAccountPassword.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.updateAccountPassword
 
-// schema: com.atproto.admin.updateAccountPassword
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminupdateAccountSigningKey.go b/api/atproto/adminupdateAccountSigningKey.go
index 9aac11ec..bfa2ba86 100644
--- a/api/atproto/adminupdateAccountSigningKey.go
+++ b/api/atproto/adminupdateAccountSigningKey.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.updateAccountSigningKey
 
-// schema: com.atproto.admin.updateAccountSigningKey
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/adminupdateSubjectStatus.go b/api/atproto/adminupdateSubjectStatus.go
index 9d76f10b..ff079c59 100644
--- a/api/atproto/adminupdateSubjectStatus.go
+++ b/api/atproto/adminupdateSubjectStatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.admin.updateSubjectStatus
 
-// schema: com.atproto.admin.updateSubjectStatus
+package atproto
 
 import (
 	"context"
@@ -38,8 +38,9 @@ func (t *AdminUpdateSubjectStatus_Input_Subject) MarshalJSON() ([]byte, error) {
 		t.AdminDefs_RepoBlobRef.LexiconTypeID = "com.atproto.admin.defs#repoBlobRef"
 		return json.Marshal(t.AdminDefs_RepoBlobRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *AdminUpdateSubjectStatus_Input_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -87,8 +88,9 @@ func (t *AdminUpdateSubjectStatus_Output_Subject) MarshalJSON() ([]byte, error)
 		t.AdminDefs_RepoBlobRef.LexiconTypeID = "com.atproto.admin.defs#repoBlobRef"
 		return json.Marshal(t.AdminDefs_RepoBlobRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *AdminUpdateSubjectStatus_Output_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/atproto/identitydefs.go b/api/atproto/identitydefs.go
index 940cd23f..e5cf8bf5 100644
--- a/api/atproto/identitydefs.go
+++ b/api/atproto/identitydefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.defs
 
-// schema: com.atproto.identity.defs
+package atproto
 
 // IdentityDefs_IdentityInfo is a "identityInfo" in the com.atproto.identity.defs schema.
 type IdentityDefs_IdentityInfo struct {
diff --git a/api/atproto/identitygetRecommendedDidCredentials.go b/api/atproto/identitygetRecommendedDidCredentials.go
index f1abc3f7..63172a6d 100644
--- a/api/atproto/identitygetRecommendedDidCredentials.go
+++ b/api/atproto/identitygetRecommendedDidCredentials.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.getRecommendedDidCredentials
 
-// schema: com.atproto.identity.getRecommendedDidCredentials
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identityrefreshIdentity.go b/api/atproto/identityrefreshIdentity.go
index e9d4027b..8d5b1c96 100644
--- a/api/atproto/identityrefreshIdentity.go
+++ b/api/atproto/identityrefreshIdentity.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.refreshIdentity
 
-// schema: com.atproto.identity.refreshIdentity
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identityrequestPlcOperationSignature.go b/api/atproto/identityrequestPlcOperationSignature.go
index f18e0bad..a6654098 100644
--- a/api/atproto/identityrequestPlcOperationSignature.go
+++ b/api/atproto/identityrequestPlcOperationSignature.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.requestPlcOperationSignature
 
-// schema: com.atproto.identity.requestPlcOperationSignature
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identityresolveDid.go b/api/atproto/identityresolveDid.go
index b849e704..23cedb57 100644
--- a/api/atproto/identityresolveDid.go
+++ b/api/atproto/identityresolveDid.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.resolveDid
 
-// schema: com.atproto.identity.resolveDid
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identityresolveHandle.go b/api/atproto/identityresolveHandle.go
index 9681fe83..1ba08e3d 100644
--- a/api/atproto/identityresolveHandle.go
+++ b/api/atproto/identityresolveHandle.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.resolveHandle
 
-// schema: com.atproto.identity.resolveHandle
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identityresolveIdentity.go b/api/atproto/identityresolveIdentity.go
index d9f5cc10..60198e31 100644
--- a/api/atproto/identityresolveIdentity.go
+++ b/api/atproto/identityresolveIdentity.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.resolveIdentity
 
-// schema: com.atproto.identity.resolveIdentity
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identitysignPlcOperation.go b/api/atproto/identitysignPlcOperation.go
index f6cfdadb..74259229 100644
--- a/api/atproto/identitysignPlcOperation.go
+++ b/api/atproto/identitysignPlcOperation.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.signPlcOperation
 
-// schema: com.atproto.identity.signPlcOperation
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identitysubmitPlcOperation.go b/api/atproto/identitysubmitPlcOperation.go
index 248bea5c..e83f35a9 100644
--- a/api/atproto/identitysubmitPlcOperation.go
+++ b/api/atproto/identitysubmitPlcOperation.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.submitPlcOperation
 
-// schema: com.atproto.identity.submitPlcOperation
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/identityupdateHandle.go b/api/atproto/identityupdateHandle.go
index 40e1d7b5..7eb21764 100644
--- a/api/atproto/identityupdateHandle.go
+++ b/api/atproto/identityupdateHandle.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.identity.updateHandle
 
-// schema: com.atproto.identity.updateHandle
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/labeldefs.go b/api/atproto/labeldefs.go
index 67f456a8..8f290f9a 100644
--- a/api/atproto/labeldefs.go
+++ b/api/atproto/labeldefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.label.defs
 
-// schema: com.atproto.label.defs
+package atproto
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -72,9 +72,7 @@ type LabelDefs_SelfLabel struct {
 // LabelDefs_SelfLabels is a "selfLabels" in the com.atproto.label.defs schema.
 //
 // Metadata tags on an atproto record, published by the author within the record.
-//
-// RECORDTYPE: LabelDefs_SelfLabels
 type LabelDefs_SelfLabels struct {
-	LexiconTypeID string                 `json:"$type,const=com.atproto.label.defs#selfLabels" cborgen:"$type,const=com.atproto.label.defs#selfLabels"`
+	LexiconTypeID string                 `json:"$type" cborgen:"$type,const=com.atproto.label.defs#selfLabels"`
 	Values        []*LabelDefs_SelfLabel `json:"values" cborgen:"values,preservenil"`
 }
diff --git a/api/atproto/labelqueryLabels.go b/api/atproto/labelqueryLabels.go
index 19f1e317..bc7cd14a 100644
--- a/api/atproto/labelqueryLabels.go
+++ b/api/atproto/labelqueryLabels.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.label.queryLabels
 
-// schema: com.atproto.label.queryLabels
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/labelsubscribeLabels.go b/api/atproto/labelsubscribeLabels.go
index 76f584a4..0090c82b 100644
--- a/api/atproto/labelsubscribeLabels.go
+++ b/api/atproto/labelsubscribeLabels.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.label.subscribeLabels
 
-// schema: com.atproto.label.subscribeLabels
+package atproto
 
 // LabelSubscribeLabels_Info is a "info" in the com.atproto.label.subscribeLabels schema.
 type LabelSubscribeLabels_Info struct {
diff --git a/api/atproto/lexiconschema.go b/api/atproto/lexiconschema.go
index 7321c448..196babde 100644
--- a/api/atproto/lexiconschema.go
+++ b/api/atproto/lexiconschema.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.lexicon.schema
 
-// schema: com.atproto.lexicon.schema
+package atproto
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("com.atproto.lexicon.schema", &LexiconSchema{})
-} //
-// RECORDTYPE: LexiconSchema
+}
+
 type LexiconSchema struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.lexicon.schema" cborgen:"$type,const=com.atproto.lexicon.schema"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.lexicon.schema"`
 	// lexicon: Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system.
 	Lexicon int64 `json:"lexicon" cborgen:"lexicon"`
 }
diff --git a/api/atproto/moderationcreateReport.go b/api/atproto/moderationcreateReport.go
index 68877d6f..5e0b55ac 100644
--- a/api/atproto/moderationcreateReport.go
+++ b/api/atproto/moderationcreateReport.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.moderation.createReport
 
-// schema: com.atproto.moderation.createReport
+package atproto
 
 import (
 	"context"
@@ -36,8 +36,9 @@ func (t *ModerationCreateReport_Input_Subject) MarshalJSON() ([]byte, error) {
 		t.RepoStrongRef.LexiconTypeID = "com.atproto.repo.strongRef"
 		return json.Marshal(t.RepoStrongRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationCreateReport_Input_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -91,8 +92,9 @@ func (t *ModerationCreateReport_Output_Subject) MarshalJSON() ([]byte, error) {
 		t.RepoStrongRef.LexiconTypeID = "com.atproto.repo.strongRef"
 		return json.Marshal(t.RepoStrongRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationCreateReport_Output_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/atproto/moderationdefs.go b/api/atproto/moderationdefs.go
index fa8895d8..82767934 100644
--- a/api/atproto/moderationdefs.go
+++ b/api/atproto/moderationdefs.go
@@ -1,5 +1,5 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.moderation.defs
 
-// schema: com.atproto.moderation.defs
+package atproto
diff --git a/api/atproto/repoapplyWrites.go b/api/atproto/repoapplyWrites.go
index 645aec90..a16a3c3f 100644
--- a/api/atproto/repoapplyWrites.go
+++ b/api/atproto/repoapplyWrites.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.applyWrites
 
-// schema: com.atproto.repo.applyWrites
+package atproto
 
 import (
 	"context"
@@ -15,10 +15,8 @@ import (
 // RepoApplyWrites_Create is a "create" in the com.atproto.repo.applyWrites schema.
 //
 // Operation which creates a new record.
-//
-// RECORDTYPE: RepoApplyWrites_Create
 type RepoApplyWrites_Create struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.repo.applyWrites#create" cborgen:"$type,const=com.atproto.repo.applyWrites#create"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.repo.applyWrites#create"`
 	Collection    string `json:"collection" cborgen:"collection"`
 	// rkey: NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.
 	Rkey  *string                  `json:"rkey,omitempty" cborgen:"rkey,omitempty"`
@@ -26,10 +24,8 @@ type RepoApplyWrites_Create struct {
 }
 
 // RepoApplyWrites_CreateResult is a "createResult" in the com.atproto.repo.applyWrites schema.
-//
-// RECORDTYPE: RepoApplyWrites_CreateResult
 type RepoApplyWrites_CreateResult struct {
-	LexiconTypeID    string  `json:"$type,const=com.atproto.repo.applyWrites#createResult" cborgen:"$type,const=com.atproto.repo.applyWrites#createResult"`
+	LexiconTypeID    string  `json:"$type" cborgen:"$type,const=com.atproto.repo.applyWrites#createResult"`
 	Cid              string  `json:"cid" cborgen:"cid"`
 	Uri              string  `json:"uri" cborgen:"uri"`
 	ValidationStatus *string `json:"validationStatus,omitempty" cborgen:"validationStatus,omitempty"`
@@ -38,19 +34,15 @@ type RepoApplyWrites_CreateResult struct {
 // RepoApplyWrites_Delete is a "delete" in the com.atproto.repo.applyWrites schema.
 //
 // Operation which deletes an existing record.
-//
-// RECORDTYPE: RepoApplyWrites_Delete
 type RepoApplyWrites_Delete struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.repo.applyWrites#delete" cborgen:"$type,const=com.atproto.repo.applyWrites#delete"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.repo.applyWrites#delete"`
 	Collection    string `json:"collection" cborgen:"collection"`
 	Rkey          string `json:"rkey" cborgen:"rkey"`
 }
 
 // RepoApplyWrites_DeleteResult is a "deleteResult" in the com.atproto.repo.applyWrites schema.
-//
-// RECORDTYPE: RepoApplyWrites_DeleteResult
 type RepoApplyWrites_DeleteResult struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.repo.applyWrites#deleteResult" cborgen:"$type,const=com.atproto.repo.applyWrites#deleteResult"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.repo.applyWrites#deleteResult"`
 }
 
 // RepoApplyWrites_Input is the input argument to a com.atproto.repo.applyWrites call.
@@ -83,8 +75,9 @@ func (t *RepoApplyWrites_Input_Writes_Elem) MarshalJSON() ([]byte, error) {
 		t.RepoApplyWrites_Delete.LexiconTypeID = "com.atproto.repo.applyWrites#delete"
 		return json.Marshal(t.RepoApplyWrites_Delete)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *RepoApplyWrites_Input_Writes_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -103,7 +96,7 @@ func (t *RepoApplyWrites_Input_Writes_Elem) UnmarshalJSON(b []byte) error {
 		return json.Unmarshal(b, t.RepoApplyWrites_Delete)
 
 	default:
-		return fmt.Errorf("closed enums must have a matching value")
+		return fmt.Errorf("closed unions must match a listed schema")
 	}
 }
 
@@ -132,8 +125,9 @@ func (t *RepoApplyWrites_Output_Results_Elem) MarshalJSON() ([]byte, error) {
 		t.RepoApplyWrites_DeleteResult.LexiconTypeID = "com.atproto.repo.applyWrites#deleteResult"
 		return json.Marshal(t.RepoApplyWrites_DeleteResult)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *RepoApplyWrites_Output_Results_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -152,27 +146,23 @@ func (t *RepoApplyWrites_Output_Results_Elem) UnmarshalJSON(b []byte) error {
 		return json.Unmarshal(b, t.RepoApplyWrites_DeleteResult)
 
 	default:
-		return fmt.Errorf("closed enums must have a matching value")
+		return fmt.Errorf("closed unions must match a listed schema")
 	}
 }
 
 // RepoApplyWrites_Update is a "update" in the com.atproto.repo.applyWrites schema.
 //
 // Operation which updates an existing record.
-//
-// RECORDTYPE: RepoApplyWrites_Update
 type RepoApplyWrites_Update struct {
-	LexiconTypeID string                   `json:"$type,const=com.atproto.repo.applyWrites#update" cborgen:"$type,const=com.atproto.repo.applyWrites#update"`
+	LexiconTypeID string                   `json:"$type" cborgen:"$type,const=com.atproto.repo.applyWrites#update"`
 	Collection    string                   `json:"collection" cborgen:"collection"`
 	Rkey          string                   `json:"rkey" cborgen:"rkey"`
 	Value         *util.LexiconTypeDecoder `json:"value" cborgen:"value"`
 }
 
 // RepoApplyWrites_UpdateResult is a "updateResult" in the com.atproto.repo.applyWrites schema.
-//
-// RECORDTYPE: RepoApplyWrites_UpdateResult
 type RepoApplyWrites_UpdateResult struct {
-	LexiconTypeID    string  `json:"$type,const=com.atproto.repo.applyWrites#updateResult" cborgen:"$type,const=com.atproto.repo.applyWrites#updateResult"`
+	LexiconTypeID    string  `json:"$type" cborgen:"$type,const=com.atproto.repo.applyWrites#updateResult"`
 	Cid              string  `json:"cid" cborgen:"cid"`
 	Uri              string  `json:"uri" cborgen:"uri"`
 	ValidationStatus *string `json:"validationStatus,omitempty" cborgen:"validationStatus,omitempty"`
diff --git a/api/atproto/repocreateRecord.go b/api/atproto/repocreateRecord.go
index 4972a1aa..29021cda 100644
--- a/api/atproto/repocreateRecord.go
+++ b/api/atproto/repocreateRecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.createRecord
 
-// schema: com.atproto.repo.createRecord
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repodefs.go b/api/atproto/repodefs.go
index 66ea2aa5..1b3acbe9 100644
--- a/api/atproto/repodefs.go
+++ b/api/atproto/repodefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.defs
 
-// schema: com.atproto.repo.defs
+package atproto
 
 // RepoDefs_CommitMeta is a "commitMeta" in the com.atproto.repo.defs schema.
 type RepoDefs_CommitMeta struct {
diff --git a/api/atproto/repodeleteRecord.go b/api/atproto/repodeleteRecord.go
index dd3d4fe9..9b057193 100644
--- a/api/atproto/repodeleteRecord.go
+++ b/api/atproto/repodeleteRecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.deleteRecord
 
-// schema: com.atproto.repo.deleteRecord
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repodescribeRepo.go b/api/atproto/repodescribeRepo.go
index 9515e16b..ba5b5c98 100644
--- a/api/atproto/repodescribeRepo.go
+++ b/api/atproto/repodescribeRepo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.describeRepo
 
-// schema: com.atproto.repo.describeRepo
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repogetRecord.go b/api/atproto/repogetRecord.go
index 89f906ab..70a14d63 100644
--- a/api/atproto/repogetRecord.go
+++ b/api/atproto/repogetRecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.getRecord
 
-// schema: com.atproto.repo.getRecord
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repoimportRepo.go b/api/atproto/repoimportRepo.go
index e6bc900e..7705cb9a 100644
--- a/api/atproto/repoimportRepo.go
+++ b/api/atproto/repoimportRepo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.importRepo
 
-// schema: com.atproto.repo.importRepo
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repolistMissingBlobs.go b/api/atproto/repolistMissingBlobs.go
index a2e00ce7..d3b1d73a 100644
--- a/api/atproto/repolistMissingBlobs.go
+++ b/api/atproto/repolistMissingBlobs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.listMissingBlobs
 
-// schema: com.atproto.repo.listMissingBlobs
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repolistRecords.go b/api/atproto/repolistRecords.go
index 6ad9fdde..671e7e8b 100644
--- a/api/atproto/repolistRecords.go
+++ b/api/atproto/repolistRecords.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.listRecords
 
-// schema: com.atproto.repo.listRecords
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repoputRecord.go b/api/atproto/repoputRecord.go
index 45f39116..51fe2abb 100644
--- a/api/atproto/repoputRecord.go
+++ b/api/atproto/repoputRecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.putRecord
 
-// schema: com.atproto.repo.putRecord
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/repostrongRef.go b/api/atproto/repostrongRef.go
index 232cec61..6b94b23c 100644
--- a/api/atproto/repostrongRef.go
+++ b/api/atproto/repostrongRef.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.strongRef
 
-// schema: com.atproto.repo.strongRef
+package atproto
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,11 @@ import (
 
 func init() {
 	util.RegisterType("com.atproto.repo.strongRef#main", &RepoStrongRef{})
-} // RepoStrongRef is a "main" in the com.atproto.repo.strongRef schema.
-// RECORDTYPE: RepoStrongRef
+}
+
+// RepoStrongRef is a "main" in the com.atproto.repo.strongRef schema.
 type RepoStrongRef struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.repo.strongRef,omitempty" cborgen:"$type,const=com.atproto.repo.strongRef,omitempty"`
+	LexiconTypeID string `json:"$type,omitempty" cborgen:"$type,const=com.atproto.repo.strongRef,omitempty"`
 	Cid           string `json:"cid" cborgen:"cid"`
 	Uri           string `json:"uri" cborgen:"uri"`
 }
diff --git a/api/atproto/repouploadBlob.go b/api/atproto/repouploadBlob.go
index 1638feac..5380d4da 100644
--- a/api/atproto/repouploadBlob.go
+++ b/api/atproto/repouploadBlob.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.repo.uploadBlob
 
-// schema: com.atproto.repo.uploadBlob
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serveractivateAccount.go b/api/atproto/serveractivateAccount.go
index 5e83c6cc..2d980fa9 100644
--- a/api/atproto/serveractivateAccount.go
+++ b/api/atproto/serveractivateAccount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.activateAccount
 
-// schema: com.atproto.server.activateAccount
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servercheckAccountStatus.go b/api/atproto/servercheckAccountStatus.go
index ba7defdb..c41ba1a7 100644
--- a/api/atproto/servercheckAccountStatus.go
+++ b/api/atproto/servercheckAccountStatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.checkAccountStatus
 
-// schema: com.atproto.server.checkAccountStatus
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverconfirmEmail.go b/api/atproto/serverconfirmEmail.go
index 833f0c67..5823b045 100644
--- a/api/atproto/serverconfirmEmail.go
+++ b/api/atproto/serverconfirmEmail.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.confirmEmail
 
-// schema: com.atproto.server.confirmEmail
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servercreateAccount.go b/api/atproto/servercreateAccount.go
index 34cd5d2e..84e07423 100644
--- a/api/atproto/servercreateAccount.go
+++ b/api/atproto/servercreateAccount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.createAccount
 
-// schema: com.atproto.server.createAccount
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servercreateAppPassword.go b/api/atproto/servercreateAppPassword.go
index 0254ab32..8178b550 100644
--- a/api/atproto/servercreateAppPassword.go
+++ b/api/atproto/servercreateAppPassword.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.createAppPassword
 
-// schema: com.atproto.server.createAppPassword
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servercreateInviteCode.go b/api/atproto/servercreateInviteCode.go
index f37e6455..614fa738 100644
--- a/api/atproto/servercreateInviteCode.go
+++ b/api/atproto/servercreateInviteCode.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.createInviteCode
 
-// schema: com.atproto.server.createInviteCode
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servercreateInviteCodes.go b/api/atproto/servercreateInviteCodes.go
index c7f4098a..4ac1567e 100644
--- a/api/atproto/servercreateInviteCodes.go
+++ b/api/atproto/servercreateInviteCodes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.createInviteCodes
 
-// schema: com.atproto.server.createInviteCodes
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servercreateSession.go b/api/atproto/servercreateSession.go
index 25638e6d..d077595d 100644
--- a/api/atproto/servercreateSession.go
+++ b/api/atproto/servercreateSession.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.createSession
 
-// schema: com.atproto.server.createSession
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverdeactivateAccount.go b/api/atproto/serverdeactivateAccount.go
index c6faf413..5d8fe3b8 100644
--- a/api/atproto/serverdeactivateAccount.go
+++ b/api/atproto/serverdeactivateAccount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.deactivateAccount
 
-// schema: com.atproto.server.deactivateAccount
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverdefs.go b/api/atproto/serverdefs.go
index 953f68fc..03ef5fda 100644
--- a/api/atproto/serverdefs.go
+++ b/api/atproto/serverdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.defs
 
-// schema: com.atproto.server.defs
+package atproto
 
 // ServerDefs_InviteCode is a "inviteCode" in the com.atproto.server.defs schema.
 type ServerDefs_InviteCode struct {
diff --git a/api/atproto/serverdeleteAccount.go b/api/atproto/serverdeleteAccount.go
index 9ae6a1b2..3be88e07 100644
--- a/api/atproto/serverdeleteAccount.go
+++ b/api/atproto/serverdeleteAccount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.deleteAccount
 
-// schema: com.atproto.server.deleteAccount
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverdeleteSession.go b/api/atproto/serverdeleteSession.go
index a284a608..b0e175cd 100644
--- a/api/atproto/serverdeleteSession.go
+++ b/api/atproto/serverdeleteSession.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.deleteSession
 
-// schema: com.atproto.server.deleteSession
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverdescribeServer.go b/api/atproto/serverdescribeServer.go
index 610483f9..03800ca2 100644
--- a/api/atproto/serverdescribeServer.go
+++ b/api/atproto/serverdescribeServer.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.describeServer
 
-// schema: com.atproto.server.describeServer
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servergetAccountInviteCodes.go b/api/atproto/servergetAccountInviteCodes.go
index 4e719986..8a0dfe21 100644
--- a/api/atproto/servergetAccountInviteCodes.go
+++ b/api/atproto/servergetAccountInviteCodes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.getAccountInviteCodes
 
-// schema: com.atproto.server.getAccountInviteCodes
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servergetServiceAuth.go b/api/atproto/servergetServiceAuth.go
index f4c85873..5487e503 100644
--- a/api/atproto/servergetServiceAuth.go
+++ b/api/atproto/servergetServiceAuth.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.getServiceAuth
 
-// schema: com.atproto.server.getServiceAuth
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/servergetSession.go b/api/atproto/servergetSession.go
index 4d29a975..13c96b30 100644
--- a/api/atproto/servergetSession.go
+++ b/api/atproto/servergetSession.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.getSession
 
-// schema: com.atproto.server.getSession
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverlistAppPasswords.go b/api/atproto/serverlistAppPasswords.go
index 14cbe267..398740bb 100644
--- a/api/atproto/serverlistAppPasswords.go
+++ b/api/atproto/serverlistAppPasswords.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.listAppPasswords
 
-// schema: com.atproto.server.listAppPasswords
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverrefreshSession.go b/api/atproto/serverrefreshSession.go
index ed2b172c..528dee63 100644
--- a/api/atproto/serverrefreshSession.go
+++ b/api/atproto/serverrefreshSession.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.refreshSession
 
-// schema: com.atproto.server.refreshSession
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverrequestAccountDelete.go b/api/atproto/serverrequestAccountDelete.go
index 68738e96..b03d45aa 100644
--- a/api/atproto/serverrequestAccountDelete.go
+++ b/api/atproto/serverrequestAccountDelete.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.requestAccountDelete
 
-// schema: com.atproto.server.requestAccountDelete
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverrequestEmailConfirmation.go b/api/atproto/serverrequestEmailConfirmation.go
index 003c1f44..cf9f2168 100644
--- a/api/atproto/serverrequestEmailConfirmation.go
+++ b/api/atproto/serverrequestEmailConfirmation.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.requestEmailConfirmation
 
-// schema: com.atproto.server.requestEmailConfirmation
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverrequestEmailUpdate.go b/api/atproto/serverrequestEmailUpdate.go
index f306699c..d58217c7 100644
--- a/api/atproto/serverrequestEmailUpdate.go
+++ b/api/atproto/serverrequestEmailUpdate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.requestEmailUpdate
 
-// schema: com.atproto.server.requestEmailUpdate
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverrequestPasswordReset.go b/api/atproto/serverrequestPasswordReset.go
index 9080b2c1..bd14f264 100644
--- a/api/atproto/serverrequestPasswordReset.go
+++ b/api/atproto/serverrequestPasswordReset.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.requestPasswordReset
 
-// schema: com.atproto.server.requestPasswordReset
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverreserveSigningKey.go b/api/atproto/serverreserveSigningKey.go
index f5ef96a3..cd3c13a9 100644
--- a/api/atproto/serverreserveSigningKey.go
+++ b/api/atproto/serverreserveSigningKey.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.reserveSigningKey
 
-// schema: com.atproto.server.reserveSigningKey
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverresetPassword.go b/api/atproto/serverresetPassword.go
index b51643b5..61ffeead 100644
--- a/api/atproto/serverresetPassword.go
+++ b/api/atproto/serverresetPassword.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.resetPassword
 
-// schema: com.atproto.server.resetPassword
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverrevokeAppPassword.go b/api/atproto/serverrevokeAppPassword.go
index 040a8712..dbf74a81 100644
--- a/api/atproto/serverrevokeAppPassword.go
+++ b/api/atproto/serverrevokeAppPassword.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.revokeAppPassword
 
-// schema: com.atproto.server.revokeAppPassword
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/serverupdateEmail.go b/api/atproto/serverupdateEmail.go
index 612e7fc8..355047b2 100644
--- a/api/atproto/serverupdateEmail.go
+++ b/api/atproto/serverupdateEmail.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.server.updateEmail
 
-// schema: com.atproto.server.updateEmail
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/syncdefs.go b/api/atproto/syncdefs.go
index 1fe2610e..c55b26cf 100644
--- a/api/atproto/syncdefs.go
+++ b/api/atproto/syncdefs.go
@@ -1,5 +1,5 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.defs
 
-// schema: com.atproto.sync.defs
+package atproto
diff --git a/api/atproto/syncgetBlob.go b/api/atproto/syncgetBlob.go
index 558af418..11cd8188 100644
--- a/api/atproto/syncgetBlob.go
+++ b/api/atproto/syncgetBlob.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getBlob
 
-// schema: com.atproto.sync.getBlob
+package atproto
 
 import (
 	"bytes"
diff --git a/api/atproto/syncgetBlocks.go b/api/atproto/syncgetBlocks.go
index 96a9d575..fd8c0334 100644
--- a/api/atproto/syncgetBlocks.go
+++ b/api/atproto/syncgetBlocks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getBlocks
 
-// schema: com.atproto.sync.getBlocks
+package atproto
 
 import (
 	"bytes"
diff --git a/api/atproto/syncgetCheckout.go b/api/atproto/syncgetCheckout.go
index a9672482..fdd731b9 100644
--- a/api/atproto/syncgetCheckout.go
+++ b/api/atproto/syncgetCheckout.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getCheckout
 
-// schema: com.atproto.sync.getCheckout
+package atproto
 
 import (
 	"bytes"
diff --git a/api/atproto/syncgetHead.go b/api/atproto/syncgetHead.go
index 267554ff..6b523f4a 100644
--- a/api/atproto/syncgetHead.go
+++ b/api/atproto/syncgetHead.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getHead
 
-// schema: com.atproto.sync.getHead
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/syncgetHostStatus.go b/api/atproto/syncgetHostStatus.go
index 8d66e08d..64d3d2ed 100644
--- a/api/atproto/syncgetHostStatus.go
+++ b/api/atproto/syncgetHostStatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getHostStatus
 
-// schema: com.atproto.sync.getHostStatus
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/syncgetRecord.go b/api/atproto/syncgetRecord.go
index b4862b47..461d72c8 100644
--- a/api/atproto/syncgetRecord.go
+++ b/api/atproto/syncgetRecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getRecord
 
-// schema: com.atproto.sync.getRecord
+package atproto
 
 import (
 	"bytes"
diff --git a/api/atproto/syncgetRepo.go b/api/atproto/syncgetRepo.go
index d6031a07..ddd18d43 100644
--- a/api/atproto/syncgetRepo.go
+++ b/api/atproto/syncgetRepo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getRepo
 
-// schema: com.atproto.sync.getRepo
+package atproto
 
 import (
 	"bytes"
diff --git a/api/atproto/syncgetRepoStatus.go b/api/atproto/syncgetRepoStatus.go
index fe0bf5e1..64691831 100644
--- a/api/atproto/syncgetRepoStatus.go
+++ b/api/atproto/syncgetRepoStatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getRepoStatus
 
-// schema: com.atproto.sync.getRepoStatus
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/synclistBlobs.go b/api/atproto/synclistBlobs.go
index 45aee73c..f4049686 100644
--- a/api/atproto/synclistBlobs.go
+++ b/api/atproto/synclistBlobs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.listBlobs
 
-// schema: com.atproto.sync.listBlobs
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/synclistHosts.go b/api/atproto/synclistHosts.go
index 56c9c108..bf5abc7f 100644
--- a/api/atproto/synclistHosts.go
+++ b/api/atproto/synclistHosts.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.listHosts
 
-// schema: com.atproto.sync.listHosts
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/synclistRepos.go b/api/atproto/synclistRepos.go
index 426e656c..0e518a97 100644
--- a/api/atproto/synclistRepos.go
+++ b/api/atproto/synclistRepos.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.listRepos
 
-// schema: com.atproto.sync.listRepos
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/synclistReposByCollection.go b/api/atproto/synclistReposByCollection.go
index da08f1ce..60678f7a 100644
--- a/api/atproto/synclistReposByCollection.go
+++ b/api/atproto/synclistReposByCollection.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.listReposByCollection
 
-// schema: com.atproto.sync.listReposByCollection
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/syncnotifyOfUpdate.go b/api/atproto/syncnotifyOfUpdate.go
index 1a42ab13..20834f75 100644
--- a/api/atproto/syncnotifyOfUpdate.go
+++ b/api/atproto/syncnotifyOfUpdate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.notifyOfUpdate
 
-// schema: com.atproto.sync.notifyOfUpdate
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/syncrequestCrawl.go b/api/atproto/syncrequestCrawl.go
index 7ca43d33..964a4e36 100644
--- a/api/atproto/syncrequestCrawl.go
+++ b/api/atproto/syncrequestCrawl.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.requestCrawl
 
-// schema: com.atproto.sync.requestCrawl
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/syncsubscribeRepos.go b/api/atproto/syncsubscribeRepos.go
index 5bb08125..9d728217 100644
--- a/api/atproto/syncsubscribeRepos.go
+++ b/api/atproto/syncsubscribeRepos.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.subscribeRepos
 
-// schema: com.atproto.sync.subscribeRepos
+package atproto
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
diff --git a/api/atproto/tempaddReservedHandle.go b/api/atproto/tempaddReservedHandle.go
index b3f50442..9568e8a0 100644
--- a/api/atproto/tempaddReservedHandle.go
+++ b/api/atproto/tempaddReservedHandle.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.temp.addReservedHandle
 
-// schema: com.atproto.temp.addReservedHandle
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/tempcheckHandleAvailability.go b/api/atproto/tempcheckHandleAvailability.go
index 724495b5..d1d978fe 100644
--- a/api/atproto/tempcheckHandleAvailability.go
+++ b/api/atproto/tempcheckHandleAvailability.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.temp.checkHandleAvailability
 
-// schema: com.atproto.temp.checkHandleAvailability
+package atproto
 
 import (
 	"context"
@@ -33,8 +33,9 @@ func (t *TempCheckHandleAvailability_Output_Result) MarshalJSON() ([]byte, error
 		t.TempCheckHandleAvailability_ResultUnavailable.LexiconTypeID = "com.atproto.temp.checkHandleAvailability#resultUnavailable"
 		return json.Marshal(t.TempCheckHandleAvailability_ResultUnavailable)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *TempCheckHandleAvailability_Output_Result) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -57,19 +58,15 @@ func (t *TempCheckHandleAvailability_Output_Result) UnmarshalJSON(b []byte) erro
 // TempCheckHandleAvailability_ResultAvailable is a "resultAvailable" in the com.atproto.temp.checkHandleAvailability schema.
 //
 // Indicates the provided handle is available.
-//
-// RECORDTYPE: TempCheckHandleAvailability_ResultAvailable
 type TempCheckHandleAvailability_ResultAvailable struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.temp.checkHandleAvailability#resultAvailable" cborgen:"$type,const=com.atproto.temp.checkHandleAvailability#resultAvailable"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.temp.checkHandleAvailability#resultAvailable"`
 }
 
 // TempCheckHandleAvailability_ResultUnavailable is a "resultUnavailable" in the com.atproto.temp.checkHandleAvailability schema.
 //
 // Indicates the provided handle is unavailable and gives suggestions of available handles.
-//
-// RECORDTYPE: TempCheckHandleAvailability_ResultUnavailable
 type TempCheckHandleAvailability_ResultUnavailable struct {
-	LexiconTypeID string `json:"$type,const=com.atproto.temp.checkHandleAvailability#resultUnavailable" cborgen:"$type,const=com.atproto.temp.checkHandleAvailability#resultUnavailable"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=com.atproto.temp.checkHandleAvailability#resultUnavailable"`
 	// suggestions: List of suggested handles based on the provided inputs.
 	Suggestions []*TempCheckHandleAvailability_Suggestion `json:"suggestions" cborgen:"suggestions"`
 }
diff --git a/api/atproto/tempcheckSignupQueue.go b/api/atproto/tempcheckSignupQueue.go
index c4654cfa..c201a247 100644
--- a/api/atproto/tempcheckSignupQueue.go
+++ b/api/atproto/tempcheckSignupQueue.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.temp.checkSignupQueue
 
-// schema: com.atproto.temp.checkSignupQueue
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/tempdereferenceScope.go b/api/atproto/tempdereferenceScope.go
new file mode 100644
index 00000000..9ac5ba08
--- /dev/null
+++ b/api/atproto/tempdereferenceScope.go
@@ -0,0 +1,32 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: com.atproto.temp.dereferenceScope
+
+package atproto
+
+import (
+	"context"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// TempDereferenceScope_Output is the output of a com.atproto.temp.dereferenceScope call.
+type TempDereferenceScope_Output struct {
+	// scope: The full oauth permission scope
+	Scope string `json:"scope" cborgen:"scope"`
+}
+
+// TempDereferenceScope calls the XRPC method "com.atproto.temp.dereferenceScope".
+//
+// scope: The scope reference (starts with 'ref:')
+func TempDereferenceScope(ctx context.Context, c util.LexClient, scope string) (*TempDereferenceScope_Output, error) {
+	var out TempDereferenceScope_Output
+
+	params := map[string]interface{}{}
+	params["scope"] = scope
+	if err := c.LexDo(ctx, util.Query, "", "com.atproto.temp.dereferenceScope", params, nil, &out); err != nil {
+		return nil, err
+	}
+
+	return &out, nil
+}
diff --git a/api/atproto/tempfetchLabels.go b/api/atproto/tempfetchLabels.go
index 39833b8b..e372d6ec 100644
--- a/api/atproto/tempfetchLabels.go
+++ b/api/atproto/tempfetchLabels.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.temp.fetchLabels
 
-// schema: com.atproto.temp.fetchLabels
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/temprequestPhoneVerification.go b/api/atproto/temprequestPhoneVerification.go
index 2e0810d4..d1fa7bc5 100644
--- a/api/atproto/temprequestPhoneVerification.go
+++ b/api/atproto/temprequestPhoneVerification.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.temp.requestPhoneVerification
 
-// schema: com.atproto.temp.requestPhoneVerification
+package atproto
 
 import (
 	"context"
diff --git a/api/atproto/temprevokeAccountCredentials.go b/api/atproto/temprevokeAccountCredentials.go
new file mode 100644
index 00000000..00864e62
--- /dev/null
+++ b/api/atproto/temprevokeAccountCredentials.go
@@ -0,0 +1,25 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: com.atproto.temp.revokeAccountCredentials
+
+package atproto
+
+import (
+	"context"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// TempRevokeAccountCredentials_Input is the input argument to a com.atproto.temp.revokeAccountCredentials call.
+type TempRevokeAccountCredentials_Input struct {
+	Account string `json:"account" cborgen:"account"`
+}
+
+// TempRevokeAccountCredentials calls the XRPC method "com.atproto.temp.revokeAccountCredentials".
+func TempRevokeAccountCredentials(ctx context.Context, c util.LexClient, input *TempRevokeAccountCredentials_Input) error {
+	if err := c.LexDo(ctx, util.Procedure, "application/json", "com.atproto.temp.revokeAccountCredentials", nil, input, nil); err != nil {
+		return err
+	}
+
+	return nil
+}
diff --git a/api/bsky/actordefs.go b/api/bsky/actordefs.go
index dd6f46b7..e9e7d5e2 100644
--- a/api/bsky/actordefs.go
+++ b/api/bsky/actordefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.defs
 
-// schema: app.bsky.actor.defs
+package bsky
 
 import (
 	"encoding/json"
@@ -13,10 +13,8 @@ import (
 )
 
 // ActorDefs_AdultContentPref is a "adultContentPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_AdultContentPref
 type ActorDefs_AdultContentPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#adultContentPref" cborgen:"$type,const=app.bsky.actor.defs#adultContentPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#adultContentPref"`
 	Enabled       bool   `json:"enabled" cborgen:"enabled"`
 }
 
@@ -30,10 +28,8 @@ type ActorDefs_BskyAppProgressGuide struct {
 // ActorDefs_BskyAppStatePref is a "bskyAppStatePref" in the app.bsky.actor.defs schema.
 //
 // A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.
-//
-// RECORDTYPE: ActorDefs_BskyAppStatePref
 type ActorDefs_BskyAppStatePref struct {
-	LexiconTypeID       string                          `json:"$type,const=app.bsky.actor.defs#bskyAppStatePref" cborgen:"$type,const=app.bsky.actor.defs#bskyAppStatePref"`
+	LexiconTypeID       string                          `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#bskyAppStatePref"`
 	ActiveProgressGuide *ActorDefs_BskyAppProgressGuide `json:"activeProgressGuide,omitempty" cborgen:"activeProgressGuide,omitempty"`
 	// nuxs: Storage for NUXs the user has encountered.
 	Nuxs []*ActorDefs_Nux `json:"nuxs,omitempty" cborgen:"nuxs,omitempty"`
@@ -42,10 +38,8 @@ type ActorDefs_BskyAppStatePref struct {
 }
 
 // ActorDefs_ContentLabelPref is a "contentLabelPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_ContentLabelPref
 type ActorDefs_ContentLabelPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#contentLabelPref" cborgen:"$type,const=app.bsky.actor.defs#contentLabelPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#contentLabelPref"`
 	Label         string `json:"label" cborgen:"label"`
 	// labelerDid: Which labeler does this preference apply to? If undefined, applies globally.
 	LabelerDid *string `json:"labelerDid,omitempty" cborgen:"labelerDid,omitempty"`
@@ -53,10 +47,8 @@ type ActorDefs_ContentLabelPref struct {
 }
 
 // ActorDefs_FeedViewPref is a "feedViewPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_FeedViewPref
 type ActorDefs_FeedViewPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#feedViewPref" cborgen:"$type,const=app.bsky.actor.defs#feedViewPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#feedViewPref"`
 	// feed: The URI of the feed, or an identifier which describes the feed.
 	Feed string `json:"feed" cborgen:"feed"`
 	// hideQuotePosts: Hide quote posts in the feed.
@@ -72,19 +64,15 @@ type ActorDefs_FeedViewPref struct {
 }
 
 // ActorDefs_HiddenPostsPref is a "hiddenPostsPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_HiddenPostsPref
 type ActorDefs_HiddenPostsPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#hiddenPostsPref" cborgen:"$type,const=app.bsky.actor.defs#hiddenPostsPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#hiddenPostsPref"`
 	// items: A list of URIs of posts the account owner has hidden.
 	Items []string `json:"items" cborgen:"items"`
 }
 
 // ActorDefs_InterestsPref is a "interestsPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_InterestsPref
 type ActorDefs_InterestsPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#interestsPref" cborgen:"$type,const=app.bsky.actor.defs#interestsPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#interestsPref"`
 	// tags: A list of tags which describe the account owner's interests gathered during onboarding.
 	Tags []string `json:"tags" cborgen:"tags"`
 }
@@ -103,10 +91,8 @@ type ActorDefs_LabelerPrefItem struct {
 }
 
 // ActorDefs_LabelersPref is a "labelersPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_LabelersPref
 type ActorDefs_LabelersPref struct {
-	LexiconTypeID string                       `json:"$type,const=app.bsky.actor.defs#labelersPref" cborgen:"$type,const=app.bsky.actor.defs#labelersPref"`
+	LexiconTypeID string                       `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#labelersPref"`
 	Labelers      []*ActorDefs_LabelerPrefItem `json:"labelers" cborgen:"labelers"`
 }
 
@@ -126,10 +112,8 @@ type ActorDefs_MutedWord struct {
 }
 
 // ActorDefs_MutedWordsPref is a "mutedWordsPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_MutedWordsPref
 type ActorDefs_MutedWordsPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#mutedWordsPref" cborgen:"$type,const=app.bsky.actor.defs#mutedWordsPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#mutedWordsPref"`
 	// items: A list of words the account owner has muted.
 	Items []*ActorDefs_MutedWord `json:"items" cborgen:"items"`
 }
@@ -147,10 +131,8 @@ type ActorDefs_Nux struct {
 }
 
 // ActorDefs_PersonalDetailsPref is a "personalDetailsPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_PersonalDetailsPref
 type ActorDefs_PersonalDetailsPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#personalDetailsPref" cborgen:"$type,const=app.bsky.actor.defs#personalDetailsPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#personalDetailsPref"`
 	// birthDate: The birth date of account owner.
 	BirthDate *string `json:"birthDate,omitempty" cborgen:"birthDate,omitempty"`
 }
@@ -158,10 +140,8 @@ type ActorDefs_PersonalDetailsPref struct {
 // ActorDefs_PostInteractionSettingsPref is a "postInteractionSettingsPref" in the app.bsky.actor.defs schema.
 //
 // Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.
-//
-// RECORDTYPE: ActorDefs_PostInteractionSettingsPref
 type ActorDefs_PostInteractionSettingsPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#postInteractionSettingsPref" cborgen:"$type,const=app.bsky.actor.defs#postInteractionSettingsPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#postInteractionSettingsPref"`
 	// postgateEmbeddingRules: Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed.
 	PostgateEmbeddingRules []*ActorDefs_PostInteractionSettingsPref_PostgateEmbeddingRules_Elem `json:"postgateEmbeddingRules,omitempty" cborgen:"postgateEmbeddingRules,omitempty"`
 	// threadgateAllowRules: Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply.
@@ -177,8 +157,9 @@ func (t *ActorDefs_PostInteractionSettingsPref_PostgateEmbeddingRules_Elem) Mars
 		t.FeedPostgate_DisableRule.LexiconTypeID = "app.bsky.feed.postgate#disableRule"
 		return json.Marshal(t.FeedPostgate_DisableRule)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ActorDefs_PostInteractionSettingsPref_PostgateEmbeddingRules_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -219,8 +200,9 @@ func (t *ActorDefs_PostInteractionSettingsPref_ThreadgateAllowRules_Elem) Marsha
 		t.FeedThreadgate_ListRule.LexiconTypeID = "app.bsky.feed.threadgate#listRule"
 		return json.Marshal(t.FeedThreadgate_ListRule)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ActorDefs_PostInteractionSettingsPref_ThreadgateAllowRules_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -320,8 +302,9 @@ func (t *ActorDefs_Preferences_Elem) MarshalJSON() ([]byte, error) {
 		t.ActorDefs_VerificationPrefs.LexiconTypeID = "app.bsky.actor.defs#verificationPrefs"
 		return json.Marshal(t.ActorDefs_VerificationPrefs)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ActorDefs_Preferences_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -408,6 +391,7 @@ type ActorDefs_ProfileView struct {
 	Handle       string                             `json:"handle" cborgen:"handle"`
 	IndexedAt    *string                            `json:"indexedAt,omitempty" cborgen:"indexedAt,omitempty"`
 	Labels       []*comatprototypes.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"`
+	Pronouns     *string                            `json:"pronouns,omitempty" cborgen:"pronouns,omitempty"`
 	Status       *ActorDefs_StatusView              `json:"status,omitempty" cborgen:"status,omitempty"`
 	Verification *ActorDefs_VerificationState       `json:"verification,omitempty" cborgen:"verification,omitempty"`
 	Viewer       *ActorDefs_ViewerState             `json:"viewer,omitempty" cborgen:"viewer,omitempty"`
@@ -422,6 +406,7 @@ type ActorDefs_ProfileViewBasic struct {
 	DisplayName  *string                            `json:"displayName,omitempty" cborgen:"displayName,omitempty"`
 	Handle       string                             `json:"handle" cborgen:"handle"`
 	Labels       []*comatprototypes.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"`
+	Pronouns     *string                            `json:"pronouns,omitempty" cborgen:"pronouns,omitempty"`
 	Status       *ActorDefs_StatusView              `json:"status,omitempty" cborgen:"status,omitempty"`
 	Verification *ActorDefs_VerificationState       `json:"verification,omitempty" cborgen:"verification,omitempty"`
 	Viewer       *ActorDefs_ViewerState             `json:"viewer,omitempty" cborgen:"viewer,omitempty"`
@@ -444,9 +429,11 @@ type ActorDefs_ProfileViewDetailed struct {
 	Labels               []*comatprototypes.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"`
 	PinnedPost           *comatprototypes.RepoStrongRef     `json:"pinnedPost,omitempty" cborgen:"pinnedPost,omitempty"`
 	PostsCount           *int64                             `json:"postsCount,omitempty" cborgen:"postsCount,omitempty"`
+	Pronouns             *string                            `json:"pronouns,omitempty" cborgen:"pronouns,omitempty"`
 	Status               *ActorDefs_StatusView              `json:"status,omitempty" cborgen:"status,omitempty"`
 	Verification         *ActorDefs_VerificationState       `json:"verification,omitempty" cborgen:"verification,omitempty"`
 	Viewer               *ActorDefs_ViewerState             `json:"viewer,omitempty" cborgen:"viewer,omitempty"`
+	Website              *string                            `json:"website,omitempty" cborgen:"website,omitempty"`
 }
 
 // ActorDefs_SavedFeed is a "savedFeed" in the app.bsky.actor.defs schema.
@@ -458,20 +445,16 @@ type ActorDefs_SavedFeed struct {
 }
 
 // ActorDefs_SavedFeedsPref is a "savedFeedsPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_SavedFeedsPref
 type ActorDefs_SavedFeedsPref struct {
-	LexiconTypeID string   `json:"$type,const=app.bsky.actor.defs#savedFeedsPref" cborgen:"$type,const=app.bsky.actor.defs#savedFeedsPref"`
+	LexiconTypeID string   `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#savedFeedsPref"`
 	Pinned        []string `json:"pinned" cborgen:"pinned"`
 	Saved         []string `json:"saved" cborgen:"saved"`
 	TimelineIndex *int64   `json:"timelineIndex,omitempty" cborgen:"timelineIndex,omitempty"`
 }
 
 // ActorDefs_SavedFeedsPrefV2 is a "savedFeedsPrefV2" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_SavedFeedsPrefV2
 type ActorDefs_SavedFeedsPrefV2 struct {
-	LexiconTypeID string                 `json:"$type,const=app.bsky.actor.defs#savedFeedsPrefV2" cborgen:"$type,const=app.bsky.actor.defs#savedFeedsPrefV2"`
+	LexiconTypeID string                 `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#savedFeedsPrefV2"`
 	Items         []*ActorDefs_SavedFeed `json:"items" cborgen:"items"`
 }
 
@@ -498,8 +481,9 @@ func (t *ActorDefs_StatusView_Embed) MarshalJSON() ([]byte, error) {
 		t.EmbedExternal_View.LexiconTypeID = "app.bsky.embed.external#view"
 		return json.Marshal(t.EmbedExternal_View)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ActorDefs_StatusView_Embed) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -517,10 +501,8 @@ func (t *ActorDefs_StatusView_Embed) UnmarshalJSON(b []byte) error {
 }
 
 // ActorDefs_ThreadViewPref is a "threadViewPref" in the app.bsky.actor.defs schema.
-//
-// RECORDTYPE: ActorDefs_ThreadViewPref
 type ActorDefs_ThreadViewPref struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#threadViewPref" cborgen:"$type,const=app.bsky.actor.defs#threadViewPref"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#threadViewPref"`
 	// prioritizeFollowedUsers: Show followed users at the top of all replies.
 	PrioritizeFollowedUsers *bool `json:"prioritizeFollowedUsers,omitempty" cborgen:"prioritizeFollowedUsers,omitempty"`
 	// sort: Sorting mode for threads.
@@ -530,10 +512,8 @@ type ActorDefs_ThreadViewPref struct {
 // ActorDefs_VerificationPrefs is a "verificationPrefs" in the app.bsky.actor.defs schema.
 //
 // Preferences for how verified accounts appear in the app.
-//
-// RECORDTYPE: ActorDefs_VerificationPrefs
 type ActorDefs_VerificationPrefs struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.defs#verificationPrefs" cborgen:"$type,const=app.bsky.actor.defs#verificationPrefs"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.defs#verificationPrefs"`
 	// hideBadges: Hide the blue check badges for verified accounts and trusted verifiers.
 	HideBadges *bool `json:"hideBadges,omitempty" cborgen:"hideBadges,omitempty"`
 }
diff --git a/api/bsky/actorgetPreferences.go b/api/bsky/actorgetPreferences.go
index 6a2a178e..1c1faa3b 100644
--- a/api/bsky/actorgetPreferences.go
+++ b/api/bsky/actorgetPreferences.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.getPreferences
 
-// schema: app.bsky.actor.getPreferences
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorgetProfile.go b/api/bsky/actorgetProfile.go
index c1871ca7..9adbc693 100644
--- a/api/bsky/actorgetProfile.go
+++ b/api/bsky/actorgetProfile.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.getProfile
 
-// schema: app.bsky.actor.getProfile
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorgetProfiles.go b/api/bsky/actorgetProfiles.go
index 0cc8c1ce..b85e286e 100644
--- a/api/bsky/actorgetProfiles.go
+++ b/api/bsky/actorgetProfiles.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.getProfiles
 
-// schema: app.bsky.actor.getProfiles
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorgetSuggestions.go b/api/bsky/actorgetSuggestions.go
index c5cdec04..d9d284ad 100644
--- a/api/bsky/actorgetSuggestions.go
+++ b/api/bsky/actorgetSuggestions.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.getSuggestions
 
-// schema: app.bsky.actor.getSuggestions
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorprofile.go b/api/bsky/actorprofile.go
index e94a0e2d..5a34392e 100644
--- a/api/bsky/actorprofile.go
+++ b/api/bsky/actorprofile.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.profile
 
-// schema: app.bsky.actor.profile
+package bsky
 
 import (
 	"bytes"
@@ -17,10 +17,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.actor.profile", &ActorProfile{})
-} //
-// RECORDTYPE: ActorProfile
+}
+
 type ActorProfile struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.profile" cborgen:"$type,const=app.bsky.actor.profile"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.profile"`
 	// avatar: Small image to be displayed next to posts from account. AKA, 'profile picture'
 	Avatar *util.LexBlob `json:"avatar,omitempty" cborgen:"avatar,omitempty"`
 	// banner: Larger horizontal image to display behind profile view.
@@ -33,6 +33,9 @@ type ActorProfile struct {
 	// labels: Self-label values, specific to the Bluesky application, on the overall account.
 	Labels     *ActorProfile_Labels           `json:"labels,omitempty" cborgen:"labels,omitempty"`
 	PinnedPost *comatprototypes.RepoStrongRef `json:"pinnedPost,omitempty" cborgen:"pinnedPost,omitempty"`
+	// pronouns: Free-form pronouns text.
+	Pronouns *string `json:"pronouns,omitempty" cborgen:"pronouns,omitempty"`
+	Website  *string `json:"website,omitempty" cborgen:"website,omitempty"`
 }
 
 // Self-label values, specific to the Bluesky application, on the overall account.
@@ -45,8 +48,9 @@ func (t *ActorProfile_Labels) MarshalJSON() ([]byte, error) {
 		t.LabelDefs_SelfLabels.LexiconTypeID = "com.atproto.label.defs#selfLabels"
 		return json.Marshal(t.LabelDefs_SelfLabels)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ActorProfile_Labels) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -72,7 +76,7 @@ func (t *ActorProfile_Labels) MarshalCBOR(w io.Writer) error {
 	if t.LabelDefs_SelfLabels != nil {
 		return t.LabelDefs_SelfLabels.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *ActorProfile_Labels) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/actorputPreferences.go b/api/bsky/actorputPreferences.go
index fa4d0c11..4a780b46 100644
--- a/api/bsky/actorputPreferences.go
+++ b/api/bsky/actorputPreferences.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.putPreferences
 
-// schema: app.bsky.actor.putPreferences
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorsearchActors.go b/api/bsky/actorsearchActors.go
index 8a4dd50d..bdb7ac47 100644
--- a/api/bsky/actorsearchActors.go
+++ b/api/bsky/actorsearchActors.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.searchActors
 
-// schema: app.bsky.actor.searchActors
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorsearchActorsTypeahead.go b/api/bsky/actorsearchActorsTypeahead.go
index cf8303f8..719ed7e6 100644
--- a/api/bsky/actorsearchActorsTypeahead.go
+++ b/api/bsky/actorsearchActorsTypeahead.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.searchActorsTypeahead
 
-// schema: app.bsky.actor.searchActorsTypeahead
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/actorstatus.go b/api/bsky/actorstatus.go
index 54d08d55..df0f8eff 100644
--- a/api/bsky/actorstatus.go
+++ b/api/bsky/actorstatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.actor.status
 
-// schema: app.bsky.actor.status
+package bsky
 
 import (
 	"bytes"
@@ -16,10 +16,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.actor.status", &ActorStatus{})
-} //
-// RECORDTYPE: ActorStatus
+}
+
 type ActorStatus struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.actor.status" cborgen:"$type,const=app.bsky.actor.status"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.actor.status"`
 	CreatedAt     string `json:"createdAt" cborgen:"createdAt"`
 	// durationMinutes: The duration of the status in minutes. Applications can choose to impose minimum and maximum limits.
 	DurationMinutes *int64 `json:"durationMinutes,omitempty" cborgen:"durationMinutes,omitempty"`
@@ -39,8 +39,9 @@ func (t *ActorStatus_Embed) MarshalJSON() ([]byte, error) {
 		t.EmbedExternal.LexiconTypeID = "app.bsky.embed.external"
 		return json.Marshal(t.EmbedExternal)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ActorStatus_Embed) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -66,7 +67,7 @@ func (t *ActorStatus_Embed) MarshalCBOR(w io.Writer) error {
 	if t.EmbedExternal != nil {
 		return t.EmbedExternal.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *ActorStatus_Embed) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/bookmarkcreateBookmark.go b/api/bsky/bookmarkcreateBookmark.go
index c576673d..99b9dfee 100644
--- a/api/bsky/bookmarkcreateBookmark.go
+++ b/api/bsky/bookmarkcreateBookmark.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.bookmark.createBookmark
 
-// schema: app.bsky.bookmark.createBookmark
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/bookmarkdefs.go b/api/bsky/bookmarkdefs.go
index 583ecc11..091ddbac 100644
--- a/api/bsky/bookmarkdefs.go
+++ b/api/bsky/bookmarkdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.bookmark.defs
 
-// schema: app.bsky.bookmark.defs
+package bsky
 
 import (
 	"encoding/json"
@@ -47,8 +47,9 @@ func (t *BookmarkDefs_BookmarkView_Item) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_PostView.LexiconTypeID = "app.bsky.feed.defs#postView"
 		return json.Marshal(t.FeedDefs_PostView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *BookmarkDefs_BookmarkView_Item) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/bookmarkdeleteBookmark.go b/api/bsky/bookmarkdeleteBookmark.go
index 1dc33737..f9342c32 100644
--- a/api/bsky/bookmarkdeleteBookmark.go
+++ b/api/bsky/bookmarkdeleteBookmark.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.bookmark.deleteBookmark
 
-// schema: app.bsky.bookmark.deleteBookmark
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/bookmarkgetBookmarks.go b/api/bsky/bookmarkgetBookmarks.go
index cb43f7df..88d1ad6f 100644
--- a/api/bsky/bookmarkgetBookmarks.go
+++ b/api/bsky/bookmarkgetBookmarks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.bookmark.getBookmarks
 
-// schema: app.bsky.bookmark.getBookmarks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/cbor_gen.go b/api/bsky/cbor_gen.go
index 2ac623e0..0253f8ec 100644
--- a/api/bsky/cbor_gen.go
+++ b/api/bsky/cbor_gen.go
@@ -2185,7 +2185,7 @@ func (t *ActorProfile) MarshalCBOR(w io.Writer) error {
 	}
 
 	cw := cbg.NewCborWriter(w)
-	fieldCount := 9
+	fieldCount := 11
 
 	if t.Avatar == nil {
 		fieldCount--
@@ -2219,6 +2219,14 @@ func (t *ActorProfile) MarshalCBOR(w io.Writer) error {
 		fieldCount--
 	}
 
+	if t.Pronouns == nil {
+		fieldCount--
+	}
+
+	if t.Website == nil {
+		fieldCount--
+	}
+
 	if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil {
 		return err
 	}
@@ -2299,6 +2307,70 @@ func (t *ActorProfile) MarshalCBOR(w io.Writer) error {
 		}
 	}
 
+	// t.Website (string) (string)
+	if t.Website != nil {
+
+		if len("website") > 1000000 {
+			return xerrors.Errorf("Value in field \"website\" was too long")
+		}
+
+		if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("website"))); err != nil {
+			return err
+		}
+		if _, err := cw.WriteString(string("website")); err != nil {
+			return err
+		}
+
+		if t.Website == nil {
+			if _, err := cw.Write(cbg.CborNull); err != nil {
+				return err
+			}
+		} else {
+			if len(*t.Website) > 1000000 {
+				return xerrors.Errorf("Value in field t.Website was too long")
+			}
+
+			if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.Website))); err != nil {
+				return err
+			}
+			if _, err := cw.WriteString(string(*t.Website)); err != nil {
+				return err
+			}
+		}
+	}
+
+	// t.Pronouns (string) (string)
+	if t.Pronouns != nil {
+
+		if len("pronouns") > 1000000 {
+			return xerrors.Errorf("Value in field \"pronouns\" was too long")
+		}
+
+		if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("pronouns"))); err != nil {
+			return err
+		}
+		if _, err := cw.WriteString(string("pronouns")); err != nil {
+			return err
+		}
+
+		if t.Pronouns == nil {
+			if _, err := cw.Write(cbg.CborNull); err != nil {
+				return err
+			}
+		} else {
+			if len(*t.Pronouns) > 1000000 {
+				return xerrors.Errorf("Value in field t.Pronouns was too long")
+			}
+
+			if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.Pronouns))); err != nil {
+				return err
+			}
+			if _, err := cw.WriteString(string(*t.Pronouns)); err != nil {
+				return err
+			}
+		}
+	}
+
 	// t.CreatedAt (string) (string)
 	if t.CreatedAt != nil {
 
@@ -2547,6 +2619,48 @@ func (t *ActorProfile) UnmarshalCBOR(r io.Reader) (err error) {
 				}
 
 			}
+			// t.Website (string) (string)
+		case "website":
+
+			{
+				b, err := cr.ReadByte()
+				if err != nil {
+					return err
+				}
+				if b != cbg.CborNull[0] {
+					if err := cr.UnreadByte(); err != nil {
+						return err
+					}
+
+					sval, err := cbg.ReadStringWithMax(cr, 1000000)
+					if err != nil {
+						return err
+					}
+
+					t.Website = (*string)(&sval)
+				}
+			}
+			// t.Pronouns (string) (string)
+		case "pronouns":
+
+			{
+				b, err := cr.ReadByte()
+				if err != nil {
+					return err
+				}
+				if b != cbg.CborNull[0] {
+					if err := cr.UnreadByte(); err != nil {
+						return err
+					}
+
+					sval, err := cbg.ReadStringWithMax(cr, 1000000)
+					if err != nil {
+						return err
+					}
+
+					t.Pronouns = (*string)(&sval)
+				}
+			}
 			// t.CreatedAt (string) (string)
 		case "createdAt":
 
diff --git a/api/bsky/embeddefs.go b/api/bsky/embeddefs.go
index 277f316b..449b629f 100644
--- a/api/bsky/embeddefs.go
+++ b/api/bsky/embeddefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.embed.defs
 
-// schema: app.bsky.embed.defs
+package bsky
 
 // EmbedDefs_AspectRatio is a "aspectRatio" in the app.bsky.embed.defs schema.
 //
diff --git a/api/bsky/embedexternal.go b/api/bsky/embedexternal.go
index ca82da82..f7b72534 100644
--- a/api/bsky/embedexternal.go
+++ b/api/bsky/embedexternal.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.embed.external
 
-// schema: app.bsky.embed.external
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,12 +10,13 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.embed.external#main", &EmbedExternal{})
-} // EmbedExternal is a "main" in the app.bsky.embed.external schema.
-// A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).
+}
+
+// EmbedExternal is a "main" in the app.bsky.embed.external schema.
 //
-// RECORDTYPE: EmbedExternal
+// A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).
 type EmbedExternal struct {
-	LexiconTypeID string                  `json:"$type,const=app.bsky.embed.external" cborgen:"$type,const=app.bsky.embed.external"`
+	LexiconTypeID string                  `json:"$type" cborgen:"$type,const=app.bsky.embed.external"`
 	External      *EmbedExternal_External `json:"external" cborgen:"external"`
 }
 
@@ -28,10 +29,8 @@ type EmbedExternal_External struct {
 }
 
 // EmbedExternal_View is a "view" in the app.bsky.embed.external schema.
-//
-// RECORDTYPE: EmbedExternal_View
 type EmbedExternal_View struct {
-	LexiconTypeID string                      `json:"$type,const=app.bsky.embed.external#view" cborgen:"$type,const=app.bsky.embed.external#view"`
+	LexiconTypeID string                      `json:"$type" cborgen:"$type,const=app.bsky.embed.external#view"`
 	External      *EmbedExternal_ViewExternal `json:"external" cborgen:"external"`
 }
 
diff --git a/api/bsky/embedimages.go b/api/bsky/embedimages.go
index 89531373..7f4236b7 100644
--- a/api/bsky/embedimages.go
+++ b/api/bsky/embedimages.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.embed.images
 
-// schema: app.bsky.embed.images
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,11 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.embed.images#main", &EmbedImages{})
-} // EmbedImages is a "main" in the app.bsky.embed.images schema.
-// RECORDTYPE: EmbedImages
+}
+
+// EmbedImages is a "main" in the app.bsky.embed.images schema.
 type EmbedImages struct {
-	LexiconTypeID string               `json:"$type,const=app.bsky.embed.images" cborgen:"$type,const=app.bsky.embed.images"`
+	LexiconTypeID string               `json:"$type" cborgen:"$type,const=app.bsky.embed.images"`
 	Images        []*EmbedImages_Image `json:"images" cborgen:"images"`
 }
 
@@ -26,10 +27,8 @@ type EmbedImages_Image struct {
 }
 
 // EmbedImages_View is a "view" in the app.bsky.embed.images schema.
-//
-// RECORDTYPE: EmbedImages_View
 type EmbedImages_View struct {
-	LexiconTypeID string                   `json:"$type,const=app.bsky.embed.images#view" cborgen:"$type,const=app.bsky.embed.images#view"`
+	LexiconTypeID string                   `json:"$type" cborgen:"$type,const=app.bsky.embed.images#view"`
 	Images        []*EmbedImages_ViewImage `json:"images" cborgen:"images"`
 }
 
diff --git a/api/bsky/embedrecord.go b/api/bsky/embedrecord.go
index baddc252..e9656535 100644
--- a/api/bsky/embedrecord.go
+++ b/api/bsky/embedrecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.embed.record
 
-// schema: app.bsky.embed.record
+package bsky
 
 import (
 	"encoding/json"
@@ -14,54 +14,45 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.embed.record#main", &EmbedRecord{})
-} // EmbedRecord is a "main" in the app.bsky.embed.record schema.
-// RECORDTYPE: EmbedRecord
+}
+
+// EmbedRecord is a "main" in the app.bsky.embed.record schema.
 type EmbedRecord struct {
-	LexiconTypeID string                         `json:"$type,const=app.bsky.embed.record" cborgen:"$type,const=app.bsky.embed.record"`
+	LexiconTypeID string                         `json:"$type" cborgen:"$type,const=app.bsky.embed.record"`
 	Record        *comatprototypes.RepoStrongRef `json:"record" cborgen:"record"`
 }
 
 // EmbedRecord_View is a "view" in the app.bsky.embed.record schema.
-//
-// RECORDTYPE: EmbedRecord_View
 type EmbedRecord_View struct {
-	LexiconTypeID string                   `json:"$type,const=app.bsky.embed.record#view" cborgen:"$type,const=app.bsky.embed.record#view"`
+	LexiconTypeID string                   `json:"$type" cborgen:"$type,const=app.bsky.embed.record#view"`
 	Record        *EmbedRecord_View_Record `json:"record" cborgen:"record"`
 }
 
 // EmbedRecord_ViewBlocked is a "viewBlocked" in the app.bsky.embed.record schema.
-//
-// RECORDTYPE: EmbedRecord_ViewBlocked
 type EmbedRecord_ViewBlocked struct {
-	LexiconTypeID string                  `json:"$type,const=app.bsky.embed.record#viewBlocked" cborgen:"$type,const=app.bsky.embed.record#viewBlocked"`
+	LexiconTypeID string                  `json:"$type" cborgen:"$type,const=app.bsky.embed.record#viewBlocked"`
 	Author        *FeedDefs_BlockedAuthor `json:"author" cborgen:"author"`
 	Blocked       bool                    `json:"blocked" cborgen:"blocked"`
 	Uri           string                  `json:"uri" cborgen:"uri"`
 }
 
 // EmbedRecord_ViewDetached is a "viewDetached" in the app.bsky.embed.record schema.
-//
-// RECORDTYPE: EmbedRecord_ViewDetached
 type EmbedRecord_ViewDetached struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.embed.record#viewDetached" cborgen:"$type,const=app.bsky.embed.record#viewDetached"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.record#viewDetached"`
 	Detached      bool   `json:"detached" cborgen:"detached"`
 	Uri           string `json:"uri" cborgen:"uri"`
 }
 
 // EmbedRecord_ViewNotFound is a "viewNotFound" in the app.bsky.embed.record schema.
-//
-// RECORDTYPE: EmbedRecord_ViewNotFound
 type EmbedRecord_ViewNotFound struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.embed.record#viewNotFound" cborgen:"$type,const=app.bsky.embed.record#viewNotFound"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.record#viewNotFound"`
 	NotFound      bool   `json:"notFound" cborgen:"notFound"`
 	Uri           string `json:"uri" cborgen:"uri"`
 }
 
 // EmbedRecord_ViewRecord is a "viewRecord" in the app.bsky.embed.record schema.
-//
-// RECORDTYPE: EmbedRecord_ViewRecord
 type EmbedRecord_ViewRecord struct {
-	LexiconTypeID string                                `json:"$type,const=app.bsky.embed.record#viewRecord" cborgen:"$type,const=app.bsky.embed.record#viewRecord"`
+	LexiconTypeID string                                `json:"$type" cborgen:"$type,const=app.bsky.embed.record#viewRecord"`
 	Author        *ActorDefs_ProfileViewBasic           `json:"author" cborgen:"author"`
 	Cid           string                                `json:"cid" cborgen:"cid"`
 	Embeds        []*EmbedRecord_ViewRecord_Embeds_Elem `json:"embeds,omitempty" cborgen:"embeds,omitempty"`
@@ -105,8 +96,9 @@ func (t *EmbedRecord_ViewRecord_Embeds_Elem) MarshalJSON() ([]byte, error) {
 		t.EmbedRecordWithMedia_View.LexiconTypeID = "app.bsky.embed.recordWithMedia#view"
 		return json.Marshal(t.EmbedRecordWithMedia_View)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *EmbedRecord_ViewRecord_Embeds_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -179,8 +171,9 @@ func (t *EmbedRecord_View_Record) MarshalJSON() ([]byte, error) {
 		t.GraphDefs_StarterPackViewBasic.LexiconTypeID = "app.bsky.graph.defs#starterPackViewBasic"
 		return json.Marshal(t.GraphDefs_StarterPackViewBasic)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *EmbedRecord_View_Record) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/embedrecordWithMedia.go b/api/bsky/embedrecordWithMedia.go
index 4e6d9962..bfefac13 100644
--- a/api/bsky/embedrecordWithMedia.go
+++ b/api/bsky/embedrecordWithMedia.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.embed.recordWithMedia
 
-// schema: app.bsky.embed.recordWithMedia
+package bsky
 
 import (
 	"bytes"
@@ -16,10 +16,11 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.embed.recordWithMedia#main", &EmbedRecordWithMedia{})
-} // EmbedRecordWithMedia is a "main" in the app.bsky.embed.recordWithMedia schema.
-// RECORDTYPE: EmbedRecordWithMedia
+}
+
+// EmbedRecordWithMedia is a "main" in the app.bsky.embed.recordWithMedia schema.
 type EmbedRecordWithMedia struct {
-	LexiconTypeID string                      `json:"$type,const=app.bsky.embed.recordWithMedia" cborgen:"$type,const=app.bsky.embed.recordWithMedia"`
+	LexiconTypeID string                      `json:"$type" cborgen:"$type,const=app.bsky.embed.recordWithMedia"`
 	Media         *EmbedRecordWithMedia_Media `json:"media" cborgen:"media"`
 	Record        *EmbedRecord                `json:"record" cborgen:"record"`
 }
@@ -43,8 +44,9 @@ func (t *EmbedRecordWithMedia_Media) MarshalJSON() ([]byte, error) {
 		t.EmbedExternal.LexiconTypeID = "app.bsky.embed.external"
 		return json.Marshal(t.EmbedExternal)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *EmbedRecordWithMedia_Media) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -82,7 +84,7 @@ func (t *EmbedRecordWithMedia_Media) MarshalCBOR(w io.Writer) error {
 	if t.EmbedExternal != nil {
 		return t.EmbedExternal.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *EmbedRecordWithMedia_Media) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
@@ -107,10 +109,8 @@ func (t *EmbedRecordWithMedia_Media) UnmarshalCBOR(r io.Reader) error {
 }
 
 // EmbedRecordWithMedia_View is a "view" in the app.bsky.embed.recordWithMedia schema.
-//
-// RECORDTYPE: EmbedRecordWithMedia_View
 type EmbedRecordWithMedia_View struct {
-	LexiconTypeID string                           `json:"$type,const=app.bsky.embed.recordWithMedia#view" cborgen:"$type,const=app.bsky.embed.recordWithMedia#view"`
+	LexiconTypeID string                           `json:"$type" cborgen:"$type,const=app.bsky.embed.recordWithMedia#view"`
 	Media         *EmbedRecordWithMedia_View_Media `json:"media" cborgen:"media"`
 	Record        *EmbedRecord_View                `json:"record" cborgen:"record"`
 }
@@ -134,8 +134,9 @@ func (t *EmbedRecordWithMedia_View_Media) MarshalJSON() ([]byte, error) {
 		t.EmbedExternal_View.LexiconTypeID = "app.bsky.embed.external#view"
 		return json.Marshal(t.EmbedExternal_View)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *EmbedRecordWithMedia_View_Media) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/embedvideo.go b/api/bsky/embedvideo.go
index 6f8eb710..a6ca352b 100644
--- a/api/bsky/embedvideo.go
+++ b/api/bsky/embedvideo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.embed.video
 
-// schema: app.bsky.embed.video
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,11 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.embed.video#main", &EmbedVideo{})
-} // EmbedVideo is a "main" in the app.bsky.embed.video schema.
-// RECORDTYPE: EmbedVideo
+}
+
+// EmbedVideo is a "main" in the app.bsky.embed.video schema.
 type EmbedVideo struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.embed.video" cborgen:"$type,const=app.bsky.embed.video"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.video"`
 	// alt: Alt text description of the video, for accessibility.
 	Alt         *string                `json:"alt,omitempty" cborgen:"alt,omitempty"`
 	AspectRatio *EmbedDefs_AspectRatio `json:"aspectRatio,omitempty" cborgen:"aspectRatio,omitempty"`
@@ -29,10 +30,8 @@ type EmbedVideo_Caption struct {
 }
 
 // EmbedVideo_View is a "view" in the app.bsky.embed.video schema.
-//
-// RECORDTYPE: EmbedVideo_View
 type EmbedVideo_View struct {
-	LexiconTypeID string                 `json:"$type,const=app.bsky.embed.video#view" cborgen:"$type,const=app.bsky.embed.video#view"`
+	LexiconTypeID string                 `json:"$type" cborgen:"$type,const=app.bsky.embed.video#view"`
 	Alt           *string                `json:"alt,omitempty" cborgen:"alt,omitempty"`
 	AspectRatio   *EmbedDefs_AspectRatio `json:"aspectRatio,omitempty" cborgen:"aspectRatio,omitempty"`
 	Cid           string                 `json:"cid" cborgen:"cid"`
diff --git a/api/bsky/feeddefs.go b/api/bsky/feeddefs.go
index 3e9923f8..3fe43a5b 100644
--- a/api/bsky/feeddefs.go
+++ b/api/bsky/feeddefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.defs
 
-// schema: app.bsky.feed.defs
+package bsky
 
 import (
 	"encoding/json"
@@ -19,10 +19,8 @@ type FeedDefs_BlockedAuthor struct {
 }
 
 // FeedDefs_BlockedPost is a "blockedPost" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_BlockedPost
 type FeedDefs_BlockedPost struct {
-	LexiconTypeID string                  `json:"$type,const=app.bsky.feed.defs#blockedPost" cborgen:"$type,const=app.bsky.feed.defs#blockedPost"`
+	LexiconTypeID string                  `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#blockedPost"`
 	Author        *FeedDefs_BlockedAuthor `json:"author" cborgen:"author"`
 	Blocked       bool                    `json:"blocked" cborgen:"blocked"`
 	Uri           string                  `json:"uri" cborgen:"uri"`
@@ -53,8 +51,9 @@ func (t *FeedDefs_FeedViewPost_Reason) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_ReasonPin.LexiconTypeID = "app.bsky.feed.defs#reasonPin"
 		return json.Marshal(t.FeedDefs_ReasonPin)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_FeedViewPost_Reason) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -75,10 +74,8 @@ func (t *FeedDefs_FeedViewPost_Reason) UnmarshalJSON(b []byte) error {
 }
 
 // FeedDefs_GeneratorView is a "generatorView" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_GeneratorView
 type FeedDefs_GeneratorView struct {
-	LexiconTypeID       string                             `json:"$type,const=app.bsky.feed.defs#generatorView" cborgen:"$type,const=app.bsky.feed.defs#generatorView"`
+	LexiconTypeID       string                             `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#generatorView"`
 	AcceptsInteractions *bool                              `json:"acceptsInteractions,omitempty" cborgen:"acceptsInteractions,omitempty"`
 	Avatar              *string                            `json:"avatar,omitempty" cborgen:"avatar,omitempty"`
 	Cid                 string                             `json:"cid" cborgen:"cid"`
@@ -111,19 +108,15 @@ type FeedDefs_Interaction struct {
 }
 
 // FeedDefs_NotFoundPost is a "notFoundPost" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_NotFoundPost
 type FeedDefs_NotFoundPost struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.defs#notFoundPost" cborgen:"$type,const=app.bsky.feed.defs#notFoundPost"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#notFoundPost"`
 	NotFound      bool   `json:"notFound" cborgen:"notFound"`
 	Uri           string `json:"uri" cborgen:"uri"`
 }
 
 // FeedDefs_PostView is a "postView" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_PostView
 type FeedDefs_PostView struct {
-	LexiconTypeID string                             `json:"$type,const=app.bsky.feed.defs#postView" cborgen:"$type,const=app.bsky.feed.defs#postView"`
+	LexiconTypeID string                             `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#postView"`
 	Author        *ActorDefs_ProfileViewBasic        `json:"author" cborgen:"author"`
 	BookmarkCount *int64                             `json:"bookmarkCount,omitempty" cborgen:"bookmarkCount,omitempty"`
 	Cid           string                             `json:"cid" cborgen:"cid"`
@@ -169,8 +162,9 @@ func (t *FeedDefs_PostView_Embed) MarshalJSON() ([]byte, error) {
 		t.EmbedRecordWithMedia_View.LexiconTypeID = "app.bsky.embed.recordWithMedia#view"
 		return json.Marshal(t.EmbedRecordWithMedia_View)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_PostView_Embed) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -200,17 +194,13 @@ func (t *FeedDefs_PostView_Embed) UnmarshalJSON(b []byte) error {
 }
 
 // FeedDefs_ReasonPin is a "reasonPin" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_ReasonPin
 type FeedDefs_ReasonPin struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.defs#reasonPin" cborgen:"$type,const=app.bsky.feed.defs#reasonPin"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#reasonPin"`
 }
 
 // FeedDefs_ReasonRepost is a "reasonRepost" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_ReasonRepost
 type FeedDefs_ReasonRepost struct {
-	LexiconTypeID string                      `json:"$type,const=app.bsky.feed.defs#reasonRepost" cborgen:"$type,const=app.bsky.feed.defs#reasonRepost"`
+	LexiconTypeID string                      `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#reasonRepost"`
 	By            *ActorDefs_ProfileViewBasic `json:"by" cborgen:"by"`
 	Cid           *string                     `json:"cid,omitempty" cborgen:"cid,omitempty"`
 	IndexedAt     string                      `json:"indexedAt" cborgen:"indexedAt"`
@@ -244,8 +234,9 @@ func (t *FeedDefs_ReplyRef_Parent) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_BlockedPost.LexiconTypeID = "app.bsky.feed.defs#blockedPost"
 		return json.Marshal(t.FeedDefs_BlockedPost)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_ReplyRef_Parent) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -287,8 +278,9 @@ func (t *FeedDefs_ReplyRef_Root) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_BlockedPost.LexiconTypeID = "app.bsky.feed.defs#blockedPost"
 		return json.Marshal(t.FeedDefs_BlockedPost)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_ReplyRef_Root) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -333,8 +325,9 @@ func (t *FeedDefs_SkeletonFeedPost_Reason) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_SkeletonReasonPin.LexiconTypeID = "app.bsky.feed.defs#skeletonReasonPin"
 		return json.Marshal(t.FeedDefs_SkeletonReasonPin)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_SkeletonFeedPost_Reason) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -355,17 +348,13 @@ func (t *FeedDefs_SkeletonFeedPost_Reason) UnmarshalJSON(b []byte) error {
 }
 
 // FeedDefs_SkeletonReasonPin is a "skeletonReasonPin" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_SkeletonReasonPin
 type FeedDefs_SkeletonReasonPin struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.defs#skeletonReasonPin" cborgen:"$type,const=app.bsky.feed.defs#skeletonReasonPin"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#skeletonReasonPin"`
 }
 
 // FeedDefs_SkeletonReasonRepost is a "skeletonReasonRepost" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_SkeletonReasonRepost
 type FeedDefs_SkeletonReasonRepost struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.defs#skeletonReasonRepost" cborgen:"$type,const=app.bsky.feed.defs#skeletonReasonRepost"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#skeletonReasonRepost"`
 	Repost        string `json:"repost" cborgen:"repost"`
 }
 
@@ -377,10 +366,8 @@ type FeedDefs_ThreadContext struct {
 }
 
 // FeedDefs_ThreadViewPost is a "threadViewPost" in the app.bsky.feed.defs schema.
-//
-// RECORDTYPE: FeedDefs_ThreadViewPost
 type FeedDefs_ThreadViewPost struct {
-	LexiconTypeID string                                  `json:"$type,const=app.bsky.feed.defs#threadViewPost" cborgen:"$type,const=app.bsky.feed.defs#threadViewPost"`
+	LexiconTypeID string                                  `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#threadViewPost"`
 	Parent        *FeedDefs_ThreadViewPost_Parent         `json:"parent,omitempty" cborgen:"parent,omitempty"`
 	Post          *FeedDefs_PostView                      `json:"post" cborgen:"post"`
 	Replies       []*FeedDefs_ThreadViewPost_Replies_Elem `json:"replies,omitempty" cborgen:"replies,omitempty"`
@@ -406,8 +393,9 @@ func (t *FeedDefs_ThreadViewPost_Parent) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_BlockedPost.LexiconTypeID = "app.bsky.feed.defs#blockedPost"
 		return json.Marshal(t.FeedDefs_BlockedPost)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_ThreadViewPost_Parent) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -449,8 +437,9 @@ func (t *FeedDefs_ThreadViewPost_Replies_Elem) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_BlockedPost.LexiconTypeID = "app.bsky.feed.defs#blockedPost"
 		return json.Marshal(t.FeedDefs_BlockedPost)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedDefs_ThreadViewPost_Replies_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/feeddescribeFeedGenerator.go b/api/bsky/feeddescribeFeedGenerator.go
index 232794d8..4cac747a 100644
--- a/api/bsky/feeddescribeFeedGenerator.go
+++ b/api/bsky/feeddescribeFeedGenerator.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.describeFeedGenerator
 
-// schema: app.bsky.feed.describeFeedGenerator
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgenerator.go b/api/bsky/feedgenerator.go
index 2656a91f..6ae594c8 100644
--- a/api/bsky/feedgenerator.go
+++ b/api/bsky/feedgenerator.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.generator
 
-// schema: app.bsky.feed.generator
+package bsky
 
 import (
 	"bytes"
@@ -17,10 +17,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.feed.generator", &FeedGenerator{})
-} //
-// RECORDTYPE: FeedGenerator
+}
+
 type FeedGenerator struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.generator" cborgen:"$type,const=app.bsky.feed.generator"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.generator"`
 	// acceptsInteractions: Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions
 	AcceptsInteractions *bool            `json:"acceptsInteractions,omitempty" cborgen:"acceptsInteractions,omitempty"`
 	Avatar              *util.LexBlob    `json:"avatar,omitempty" cborgen:"avatar,omitempty"`
@@ -44,8 +44,9 @@ func (t *FeedGenerator_Labels) MarshalJSON() ([]byte, error) {
 		t.LabelDefs_SelfLabels.LexiconTypeID = "com.atproto.label.defs#selfLabels"
 		return json.Marshal(t.LabelDefs_SelfLabels)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedGenerator_Labels) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -71,7 +72,7 @@ func (t *FeedGenerator_Labels) MarshalCBOR(w io.Writer) error {
 	if t.LabelDefs_SelfLabels != nil {
 		return t.LabelDefs_SelfLabels.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *FeedGenerator_Labels) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/feedgetActorFeeds.go b/api/bsky/feedgetActorFeeds.go
index 0a9b26d5..9545e226 100644
--- a/api/bsky/feedgetActorFeeds.go
+++ b/api/bsky/feedgetActorFeeds.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getActorFeeds
 
-// schema: app.bsky.feed.getActorFeeds
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetActorLikes.go b/api/bsky/feedgetActorLikes.go
index 93dbb8d0..9b06f2e5 100644
--- a/api/bsky/feedgetActorLikes.go
+++ b/api/bsky/feedgetActorLikes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getActorLikes
 
-// schema: app.bsky.feed.getActorLikes
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetAuthorFeed.go b/api/bsky/feedgetAuthorFeed.go
index 341deb79..454f6dbe 100644
--- a/api/bsky/feedgetAuthorFeed.go
+++ b/api/bsky/feedgetAuthorFeed.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getAuthorFeed
 
-// schema: app.bsky.feed.getAuthorFeed
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetFeed.go b/api/bsky/feedgetFeed.go
index b8deb09a..ad607873 100644
--- a/api/bsky/feedgetFeed.go
+++ b/api/bsky/feedgetFeed.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getFeed
 
-// schema: app.bsky.feed.getFeed
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetFeedGenerator.go b/api/bsky/feedgetFeedGenerator.go
index afc91425..189f5138 100644
--- a/api/bsky/feedgetFeedGenerator.go
+++ b/api/bsky/feedgetFeedGenerator.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getFeedGenerator
 
-// schema: app.bsky.feed.getFeedGenerator
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetFeedGenerators.go b/api/bsky/feedgetFeedGenerators.go
index 1a8bd799..6b45ca93 100644
--- a/api/bsky/feedgetFeedGenerators.go
+++ b/api/bsky/feedgetFeedGenerators.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getFeedGenerators
 
-// schema: app.bsky.feed.getFeedGenerators
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetFeedSkeleton.go b/api/bsky/feedgetFeedSkeleton.go
index c66af44e..eb5f0f1e 100644
--- a/api/bsky/feedgetFeedSkeleton.go
+++ b/api/bsky/feedgetFeedSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getFeedSkeleton
 
-// schema: app.bsky.feed.getFeedSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetLikes.go b/api/bsky/feedgetLikes.go
index f2c68ad0..0db2e078 100644
--- a/api/bsky/feedgetLikes.go
+++ b/api/bsky/feedgetLikes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getLikes
 
-// schema: app.bsky.feed.getLikes
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetListFeed.go b/api/bsky/feedgetListFeed.go
index 04530e46..68a3eefa 100644
--- a/api/bsky/feedgetListFeed.go
+++ b/api/bsky/feedgetListFeed.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getListFeed
 
-// schema: app.bsky.feed.getListFeed
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetPostThread.go b/api/bsky/feedgetPostThread.go
index f3934567..ea860c49 100644
--- a/api/bsky/feedgetPostThread.go
+++ b/api/bsky/feedgetPostThread.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getPostThread
 
-// schema: app.bsky.feed.getPostThread
+package bsky
 
 import (
 	"context"
@@ -37,8 +37,9 @@ func (t *FeedGetPostThread_Output_Thread) MarshalJSON() ([]byte, error) {
 		t.FeedDefs_BlockedPost.LexiconTypeID = "app.bsky.feed.defs#blockedPost"
 		return json.Marshal(t.FeedDefs_BlockedPost)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedGetPostThread_Output_Thread) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/feedgetPosts.go b/api/bsky/feedgetPosts.go
index 3c9a8f57..be4fc145 100644
--- a/api/bsky/feedgetPosts.go
+++ b/api/bsky/feedgetPosts.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getPosts
 
-// schema: app.bsky.feed.getPosts
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetQuotes.go b/api/bsky/feedgetQuotes.go
index c1a04cca..f43dc84c 100644
--- a/api/bsky/feedgetQuotes.go
+++ b/api/bsky/feedgetQuotes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getQuotes
 
-// schema: app.bsky.feed.getQuotes
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetRepostedBy.go b/api/bsky/feedgetRepostedBy.go
index 3074fd0b..585ef99b 100644
--- a/api/bsky/feedgetRepostedBy.go
+++ b/api/bsky/feedgetRepostedBy.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getRepostedBy
 
-// schema: app.bsky.feed.getRepostedBy
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetSuggestedFeeds.go b/api/bsky/feedgetSuggestedFeeds.go
index e43d1b1b..97977b3c 100644
--- a/api/bsky/feedgetSuggestedFeeds.go
+++ b/api/bsky/feedgetSuggestedFeeds.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getSuggestedFeeds
 
-// schema: app.bsky.feed.getSuggestedFeeds
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedgetTimeline.go b/api/bsky/feedgetTimeline.go
index 7cb35316..d163d6a5 100644
--- a/api/bsky/feedgetTimeline.go
+++ b/api/bsky/feedgetTimeline.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.getTimeline
 
-// schema: app.bsky.feed.getTimeline
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedlike.go b/api/bsky/feedlike.go
index a481bf9f..27463955 100644
--- a/api/bsky/feedlike.go
+++ b/api/bsky/feedlike.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.like
 
-// schema: app.bsky.feed.like
+package bsky
 
 import (
 	comatprototypes "github.com/bluesky-social/indigo/api/atproto"
@@ -11,10 +11,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.feed.like", &FeedLike{})
-} //
-// RECORDTYPE: FeedLike
+}
+
 type FeedLike struct {
-	LexiconTypeID string                         `json:"$type,const=app.bsky.feed.like" cborgen:"$type,const=app.bsky.feed.like"`
+	LexiconTypeID string                         `json:"$type" cborgen:"$type,const=app.bsky.feed.like"`
 	CreatedAt     string                         `json:"createdAt" cborgen:"createdAt"`
 	Subject       *comatprototypes.RepoStrongRef `json:"subject" cborgen:"subject"`
 	Via           *comatprototypes.RepoStrongRef `json:"via,omitempty" cborgen:"via,omitempty"`
diff --git a/api/bsky/feedpost.go b/api/bsky/feedpost.go
index 06e6209b..ad075ac5 100644
--- a/api/bsky/feedpost.go
+++ b/api/bsky/feedpost.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.post
 
-// schema: app.bsky.feed.post
+package bsky
 
 import (
 	"bytes"
@@ -17,10 +17,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.feed.post", &FeedPost{})
-} //
-// RECORDTYPE: FeedPost
+}
+
 type FeedPost struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.post" cborgen:"$type,const=app.bsky.feed.post"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.post"`
 	// createdAt: Client-declared timestamp when this post was originally created.
 	CreatedAt string          `json:"createdAt" cborgen:"createdAt"`
 	Embed     *FeedPost_Embed `json:"embed,omitempty" cborgen:"embed,omitempty"`
@@ -68,8 +68,9 @@ func (t *FeedPost_Embed) MarshalJSON() ([]byte, error) {
 		t.EmbedRecordWithMedia.LexiconTypeID = "app.bsky.embed.recordWithMedia"
 		return json.Marshal(t.EmbedRecordWithMedia)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedPost_Embed) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -119,7 +120,7 @@ func (t *FeedPost_Embed) MarshalCBOR(w io.Writer) error {
 	if t.EmbedRecordWithMedia != nil {
 		return t.EmbedRecordWithMedia.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *FeedPost_Embed) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
@@ -169,8 +170,9 @@ func (t *FeedPost_Labels) MarshalJSON() ([]byte, error) {
 		t.LabelDefs_SelfLabels.LexiconTypeID = "com.atproto.label.defs#selfLabels"
 		return json.Marshal(t.LabelDefs_SelfLabels)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedPost_Labels) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -196,7 +198,7 @@ func (t *FeedPost_Labels) MarshalCBOR(w io.Writer) error {
 	if t.LabelDefs_SelfLabels != nil {
 		return t.LabelDefs_SelfLabels.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *FeedPost_Labels) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/feedpostgate.go b/api/bsky/feedpostgate.go
index 2c270552..47d85f89 100644
--- a/api/bsky/feedpostgate.go
+++ b/api/bsky/feedpostgate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.postgate
 
-// schema: app.bsky.feed.postgate
+package bsky
 
 import (
 	"bytes"
@@ -16,10 +16,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.feed.postgate", &FeedPostgate{})
-} //
-// RECORDTYPE: FeedPostgate
+}
+
 type FeedPostgate struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.postgate" cborgen:"$type,const=app.bsky.feed.postgate"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.postgate"`
 	CreatedAt     string `json:"createdAt" cborgen:"createdAt"`
 	// detachedEmbeddingUris: List of AT-URIs embedding this post that the author has detached from.
 	DetachedEmbeddingUris []string `json:"detachedEmbeddingUris,omitempty" cborgen:"detachedEmbeddingUris,omitempty"`
@@ -32,10 +32,8 @@ type FeedPostgate struct {
 // FeedPostgate_DisableRule is a "disableRule" in the app.bsky.feed.postgate schema.
 //
 // Disables embedding of this post.
-//
-// RECORDTYPE: FeedPostgate_DisableRule
 type FeedPostgate_DisableRule struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.postgate#disableRule" cborgen:"$type,const=app.bsky.feed.postgate#disableRule"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.postgate#disableRule"`
 }
 
 type FeedPostgate_EmbeddingRules_Elem struct {
@@ -47,8 +45,9 @@ func (t *FeedPostgate_EmbeddingRules_Elem) MarshalJSON() ([]byte, error) {
 		t.FeedPostgate_DisableRule.LexiconTypeID = "app.bsky.feed.postgate#disableRule"
 		return json.Marshal(t.FeedPostgate_DisableRule)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedPostgate_EmbeddingRules_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -74,7 +73,7 @@ func (t *FeedPostgate_EmbeddingRules_Elem) MarshalCBOR(w io.Writer) error {
 	if t.FeedPostgate_DisableRule != nil {
 		return t.FeedPostgate_DisableRule.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *FeedPostgate_EmbeddingRules_Elem) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/feedrepost.go b/api/bsky/feedrepost.go
index a107dada..600b789a 100644
--- a/api/bsky/feedrepost.go
+++ b/api/bsky/feedrepost.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.repost
 
-// schema: app.bsky.feed.repost
+package bsky
 
 import (
 	comatprototypes "github.com/bluesky-social/indigo/api/atproto"
@@ -11,10 +11,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.feed.repost", &FeedRepost{})
-} //
-// RECORDTYPE: FeedRepost
+}
+
 type FeedRepost struct {
-	LexiconTypeID string                         `json:"$type,const=app.bsky.feed.repost" cborgen:"$type,const=app.bsky.feed.repost"`
+	LexiconTypeID string                         `json:"$type" cborgen:"$type,const=app.bsky.feed.repost"`
 	CreatedAt     string                         `json:"createdAt" cborgen:"createdAt"`
 	Subject       *comatprototypes.RepoStrongRef `json:"subject" cborgen:"subject"`
 	Via           *comatprototypes.RepoStrongRef `json:"via,omitempty" cborgen:"via,omitempty"`
diff --git a/api/bsky/feedsearchPosts.go b/api/bsky/feedsearchPosts.go
index 05b26231..48f29c57 100644
--- a/api/bsky/feedsearchPosts.go
+++ b/api/bsky/feedsearchPosts.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.searchPosts
 
-// schema: app.bsky.feed.searchPosts
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedsendInteractions.go b/api/bsky/feedsendInteractions.go
index 4d42e23f..4f99759b 100644
--- a/api/bsky/feedsendInteractions.go
+++ b/api/bsky/feedsendInteractions.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.sendInteractions
 
-// schema: app.bsky.feed.sendInteractions
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/feedthreadgate.go b/api/bsky/feedthreadgate.go
index 68de5f44..a5bd43b9 100644
--- a/api/bsky/feedthreadgate.go
+++ b/api/bsky/feedthreadgate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.feed.threadgate
 
-// schema: app.bsky.feed.threadgate
+package bsky
 
 import (
 	"bytes"
@@ -16,10 +16,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.feed.threadgate", &FeedThreadgate{})
-} //
-// RECORDTYPE: FeedThreadgate
+}
+
 type FeedThreadgate struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.threadgate" cborgen:"$type,const=app.bsky.feed.threadgate"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.threadgate"`
 	// allow: List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply.
 	Allow     []*FeedThreadgate_Allow_Elem `json:"allow,omitempty" cborgen:"allow,omitempty"`
 	CreatedAt string                       `json:"createdAt" cborgen:"createdAt"`
@@ -53,8 +53,9 @@ func (t *FeedThreadgate_Allow_Elem) MarshalJSON() ([]byte, error) {
 		t.FeedThreadgate_ListRule.LexiconTypeID = "app.bsky.feed.threadgate#listRule"
 		return json.Marshal(t.FeedThreadgate_ListRule)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *FeedThreadgate_Allow_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -98,7 +99,7 @@ func (t *FeedThreadgate_Allow_Elem) MarshalCBOR(w io.Writer) error {
 	if t.FeedThreadgate_ListRule != nil {
 		return t.FeedThreadgate_ListRule.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *FeedThreadgate_Allow_Elem) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
@@ -128,36 +129,28 @@ func (t *FeedThreadgate_Allow_Elem) UnmarshalCBOR(r io.Reader) error {
 // FeedThreadgate_FollowerRule is a "followerRule" in the app.bsky.feed.threadgate schema.
 //
 // Allow replies from actors who follow you.
-//
-// RECORDTYPE: FeedThreadgate_FollowerRule
 type FeedThreadgate_FollowerRule struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.threadgate#followerRule" cborgen:"$type,const=app.bsky.feed.threadgate#followerRule"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.threadgate#followerRule"`
 }
 
 // FeedThreadgate_FollowingRule is a "followingRule" in the app.bsky.feed.threadgate schema.
 //
 // Allow replies from actors you follow.
-//
-// RECORDTYPE: FeedThreadgate_FollowingRule
 type FeedThreadgate_FollowingRule struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.threadgate#followingRule" cborgen:"$type,const=app.bsky.feed.threadgate#followingRule"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.threadgate#followingRule"`
 }
 
 // FeedThreadgate_ListRule is a "listRule" in the app.bsky.feed.threadgate schema.
 //
 // Allow replies from actors on a list.
-//
-// RECORDTYPE: FeedThreadgate_ListRule
 type FeedThreadgate_ListRule struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.threadgate#listRule" cborgen:"$type,const=app.bsky.feed.threadgate#listRule"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.threadgate#listRule"`
 	List          string `json:"list" cborgen:"list"`
 }
 
 // FeedThreadgate_MentionRule is a "mentionRule" in the app.bsky.feed.threadgate schema.
 //
 // Allow replies from actors mentioned in your post.
-//
-// RECORDTYPE: FeedThreadgate_MentionRule
 type FeedThreadgate_MentionRule struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.feed.threadgate#mentionRule" cborgen:"$type,const=app.bsky.feed.threadgate#mentionRule"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.threadgate#mentionRule"`
 }
diff --git a/api/bsky/graphblock.go b/api/bsky/graphblock.go
index 3009718a..8dc7b8a9 100644
--- a/api/bsky/graphblock.go
+++ b/api/bsky/graphblock.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.block
 
-// schema: app.bsky.graph.block
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.block", &GraphBlock{})
-} //
-// RECORDTYPE: GraphBlock
+}
+
 type GraphBlock struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.block" cborgen:"$type,const=app.bsky.graph.block"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.block"`
 	CreatedAt     string `json:"createdAt" cborgen:"createdAt"`
 	// subject: DID of the account to be blocked.
 	Subject string `json:"subject" cborgen:"subject"`
diff --git a/api/bsky/graphdefs.go b/api/bsky/graphdefs.go
index 7f8c94ab..56db9759 100644
--- a/api/bsky/graphdefs.go
+++ b/api/bsky/graphdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.defs
 
-// schema: app.bsky.graph.defs
+package bsky
 
 import (
 	comatprototypes "github.com/bluesky-social/indigo/api/atproto"
@@ -16,10 +16,8 @@ type GraphDefs_ListItemView struct {
 }
 
 // GraphDefs_ListView is a "listView" in the app.bsky.graph.defs schema.
-//
-// RECORDTYPE: GraphDefs_ListView
 type GraphDefs_ListView struct {
-	LexiconTypeID     string                             `json:"$type,const=app.bsky.graph.defs#listView" cborgen:"$type,const=app.bsky.graph.defs#listView"`
+	LexiconTypeID     string                             `json:"$type" cborgen:"$type,const=app.bsky.graph.defs#listView"`
 	Avatar            *string                            `json:"avatar,omitempty" cborgen:"avatar,omitempty"`
 	Cid               string                             `json:"cid" cborgen:"cid"`
 	Creator           *ActorDefs_ProfileView             `json:"creator" cborgen:"creator"`
@@ -56,10 +54,8 @@ type GraphDefs_ListViewerState struct {
 // GraphDefs_NotFoundActor is a "notFoundActor" in the app.bsky.graph.defs schema.
 //
 // indicates that a handle or DID could not be resolved
-//
-// RECORDTYPE: GraphDefs_NotFoundActor
 type GraphDefs_NotFoundActor struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.defs#notFoundActor" cborgen:"$type,const=app.bsky.graph.defs#notFoundActor"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.defs#notFoundActor"`
 	Actor         string `json:"actor" cborgen:"actor"`
 	NotFound      bool   `json:"notFound" cborgen:"notFound"`
 }
@@ -67,10 +63,8 @@ type GraphDefs_NotFoundActor struct {
 // GraphDefs_Relationship is a "relationship" in the app.bsky.graph.defs schema.
 //
 // lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)
-//
-// RECORDTYPE: GraphDefs_Relationship
 type GraphDefs_Relationship struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.defs#relationship" cborgen:"$type,const=app.bsky.graph.defs#relationship"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.defs#relationship"`
 	Did           string `json:"did" cborgen:"did"`
 	// followedBy: if the actor is followed by this DID, contains the AT-URI of the follow record
 	FollowedBy *string `json:"followedBy,omitempty" cborgen:"followedBy,omitempty"`
@@ -94,10 +88,8 @@ type GraphDefs_StarterPackView struct {
 }
 
 // GraphDefs_StarterPackViewBasic is a "starterPackViewBasic" in the app.bsky.graph.defs schema.
-//
-// RECORDTYPE: GraphDefs_StarterPackViewBasic
 type GraphDefs_StarterPackViewBasic struct {
-	LexiconTypeID      string                             `json:"$type,const=app.bsky.graph.defs#starterPackViewBasic" cborgen:"$type,const=app.bsky.graph.defs#starterPackViewBasic"`
+	LexiconTypeID      string                             `json:"$type" cborgen:"$type,const=app.bsky.graph.defs#starterPackViewBasic"`
 	Cid                string                             `json:"cid" cborgen:"cid"`
 	Creator            *ActorDefs_ProfileViewBasic        `json:"creator" cborgen:"creator"`
 	IndexedAt          string                             `json:"indexedAt" cborgen:"indexedAt"`
diff --git a/api/bsky/graphfollow.go b/api/bsky/graphfollow.go
index 124e7fe1..bbbb2864 100644
--- a/api/bsky/graphfollow.go
+++ b/api/bsky/graphfollow.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.follow
 
-// schema: app.bsky.graph.follow
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.follow", &GraphFollow{})
-} //
-// RECORDTYPE: GraphFollow
+}
+
 type GraphFollow struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.follow" cborgen:"$type,const=app.bsky.graph.follow"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.follow"`
 	CreatedAt     string `json:"createdAt" cborgen:"createdAt"`
 	Subject       string `json:"subject" cborgen:"subject"`
 }
diff --git a/api/bsky/graphgetActorStarterPacks.go b/api/bsky/graphgetActorStarterPacks.go
index 30d69f3d..e564ca39 100644
--- a/api/bsky/graphgetActorStarterPacks.go
+++ b/api/bsky/graphgetActorStarterPacks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getActorStarterPacks
 
-// schema: app.bsky.graph.getActorStarterPacks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetBlocks.go b/api/bsky/graphgetBlocks.go
index 5a0ee4b5..e31c0414 100644
--- a/api/bsky/graphgetBlocks.go
+++ b/api/bsky/graphgetBlocks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getBlocks
 
-// schema: app.bsky.graph.getBlocks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetFollowers.go b/api/bsky/graphgetFollowers.go
index 0aa2e8f2..fb7e6634 100644
--- a/api/bsky/graphgetFollowers.go
+++ b/api/bsky/graphgetFollowers.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getFollowers
 
-// schema: app.bsky.graph.getFollowers
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetFollows.go b/api/bsky/graphgetFollows.go
index 6186655d..7406ec29 100644
--- a/api/bsky/graphgetFollows.go
+++ b/api/bsky/graphgetFollows.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getFollows
 
-// schema: app.bsky.graph.getFollows
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetKnownFollowers.go b/api/bsky/graphgetKnownFollowers.go
index cde53815..a0e09799 100644
--- a/api/bsky/graphgetKnownFollowers.go
+++ b/api/bsky/graphgetKnownFollowers.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getKnownFollowers
 
-// schema: app.bsky.graph.getKnownFollowers
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetList.go b/api/bsky/graphgetList.go
index 443f1aac..c4c62519 100644
--- a/api/bsky/graphgetList.go
+++ b/api/bsky/graphgetList.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getList
 
-// schema: app.bsky.graph.getList
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetListBlocks.go b/api/bsky/graphgetListBlocks.go
index 7830bfbc..a5ebc98a 100644
--- a/api/bsky/graphgetListBlocks.go
+++ b/api/bsky/graphgetListBlocks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getListBlocks
 
-// schema: app.bsky.graph.getListBlocks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetListMutes.go b/api/bsky/graphgetListMutes.go
index 41f7ff39..750fb41a 100644
--- a/api/bsky/graphgetListMutes.go
+++ b/api/bsky/graphgetListMutes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getListMutes
 
-// schema: app.bsky.graph.getListMutes
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetLists.go b/api/bsky/graphgetLists.go
index f91b893c..69a8eaed 100644
--- a/api/bsky/graphgetLists.go
+++ b/api/bsky/graphgetLists.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getLists
 
-// schema: app.bsky.graph.getLists
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetListsWithMembership.go b/api/bsky/graphgetListsWithMembership.go
index 65a4051f..c967d288 100644
--- a/api/bsky/graphgetListsWithMembership.go
+++ b/api/bsky/graphgetListsWithMembership.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getListsWithMembership
 
-// schema: app.bsky.graph.getListsWithMembership
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetMutes.go b/api/bsky/graphgetMutes.go
index 4fb98ad3..cf38e20e 100644
--- a/api/bsky/graphgetMutes.go
+++ b/api/bsky/graphgetMutes.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getMutes
 
-// schema: app.bsky.graph.getMutes
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetRelationships.go b/api/bsky/graphgetRelationships.go
index bf185134..96492071 100644
--- a/api/bsky/graphgetRelationships.go
+++ b/api/bsky/graphgetRelationships.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getRelationships
 
-// schema: app.bsky.graph.getRelationships
+package bsky
 
 import (
 	"context"
@@ -32,8 +32,9 @@ func (t *GraphGetRelationships_Output_Relationships_Elem) MarshalJSON() ([]byte,
 		t.GraphDefs_NotFoundActor.LexiconTypeID = "app.bsky.graph.defs#notFoundActor"
 		return json.Marshal(t.GraphDefs_NotFoundActor)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *GraphGetRelationships_Output_Relationships_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/graphgetStarterPack.go b/api/bsky/graphgetStarterPack.go
index c516fea5..82e826c9 100644
--- a/api/bsky/graphgetStarterPack.go
+++ b/api/bsky/graphgetStarterPack.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getStarterPack
 
-// schema: app.bsky.graph.getStarterPack
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetStarterPacks.go b/api/bsky/graphgetStarterPacks.go
index 212884a4..9efedc53 100644
--- a/api/bsky/graphgetStarterPacks.go
+++ b/api/bsky/graphgetStarterPacks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getStarterPacks
 
-// schema: app.bsky.graph.getStarterPacks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetStarterPacksWithMembership.go b/api/bsky/graphgetStarterPacksWithMembership.go
index fa9aea92..4586ae94 100644
--- a/api/bsky/graphgetStarterPacksWithMembership.go
+++ b/api/bsky/graphgetStarterPacksWithMembership.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getStarterPacksWithMembership
 
-// schema: app.bsky.graph.getStarterPacksWithMembership
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphgetSuggestedFollowsByActor.go b/api/bsky/graphgetSuggestedFollowsByActor.go
index e9d8e424..19e52699 100644
--- a/api/bsky/graphgetSuggestedFollowsByActor.go
+++ b/api/bsky/graphgetSuggestedFollowsByActor.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.getSuggestedFollowsByActor
 
-// schema: app.bsky.graph.getSuggestedFollowsByActor
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphlist.go b/api/bsky/graphlist.go
index ab313b00..ae5cd351 100644
--- a/api/bsky/graphlist.go
+++ b/api/bsky/graphlist.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.list
 
-// schema: app.bsky.graph.list
+package bsky
 
 import (
 	"bytes"
@@ -17,10 +17,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.list", &GraphList{})
-} //
-// RECORDTYPE: GraphList
+}
+
 type GraphList struct {
-	LexiconTypeID     string            `json:"$type,const=app.bsky.graph.list" cborgen:"$type,const=app.bsky.graph.list"`
+	LexiconTypeID     string            `json:"$type" cborgen:"$type,const=app.bsky.graph.list"`
 	Avatar            *util.LexBlob     `json:"avatar,omitempty" cborgen:"avatar,omitempty"`
 	CreatedAt         string            `json:"createdAt" cborgen:"createdAt"`
 	Description       *string           `json:"description,omitempty" cborgen:"description,omitempty"`
@@ -41,8 +41,9 @@ func (t *GraphList_Labels) MarshalJSON() ([]byte, error) {
 		t.LabelDefs_SelfLabels.LexiconTypeID = "com.atproto.label.defs#selfLabels"
 		return json.Marshal(t.LabelDefs_SelfLabels)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *GraphList_Labels) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -68,7 +69,7 @@ func (t *GraphList_Labels) MarshalCBOR(w io.Writer) error {
 	if t.LabelDefs_SelfLabels != nil {
 		return t.LabelDefs_SelfLabels.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *GraphList_Labels) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/graphlistblock.go b/api/bsky/graphlistblock.go
index 3d24e63b..bc6c5de7 100644
--- a/api/bsky/graphlistblock.go
+++ b/api/bsky/graphlistblock.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.listblock
 
-// schema: app.bsky.graph.listblock
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.listblock", &GraphListblock{})
-} //
-// RECORDTYPE: GraphListblock
+}
+
 type GraphListblock struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.listblock" cborgen:"$type,const=app.bsky.graph.listblock"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.listblock"`
 	CreatedAt     string `json:"createdAt" cborgen:"createdAt"`
 	// subject: Reference (AT-URI) to the mod list record.
 	Subject string `json:"subject" cborgen:"subject"`
diff --git a/api/bsky/graphlistitem.go b/api/bsky/graphlistitem.go
index 8495bf44..63bb1903 100644
--- a/api/bsky/graphlistitem.go
+++ b/api/bsky/graphlistitem.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.listitem
 
-// schema: app.bsky.graph.listitem
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.listitem", &GraphListitem{})
-} //
-// RECORDTYPE: GraphListitem
+}
+
 type GraphListitem struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.listitem" cborgen:"$type,const=app.bsky.graph.listitem"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.listitem"`
 	CreatedAt     string `json:"createdAt" cborgen:"createdAt"`
 	// list: Reference (AT-URI) to the list record (app.bsky.graph.list).
 	List string `json:"list" cborgen:"list"`
diff --git a/api/bsky/graphmuteActor.go b/api/bsky/graphmuteActor.go
index 45906f1a..e29ce7ac 100644
--- a/api/bsky/graphmuteActor.go
+++ b/api/bsky/graphmuteActor.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.muteActor
 
-// schema: app.bsky.graph.muteActor
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphmuteActorList.go b/api/bsky/graphmuteActorList.go
index 38e905d5..3dc5f767 100644
--- a/api/bsky/graphmuteActorList.go
+++ b/api/bsky/graphmuteActorList.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.muteActorList
 
-// schema: app.bsky.graph.muteActorList
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphmuteThread.go b/api/bsky/graphmuteThread.go
index 6fe347f1..672b5417 100644
--- a/api/bsky/graphmuteThread.go
+++ b/api/bsky/graphmuteThread.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.muteThread
 
-// schema: app.bsky.graph.muteThread
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphsearchStarterPacks.go b/api/bsky/graphsearchStarterPacks.go
index ffe951cd..ca8e6bf5 100644
--- a/api/bsky/graphsearchStarterPacks.go
+++ b/api/bsky/graphsearchStarterPacks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.searchStarterPacks
 
-// schema: app.bsky.graph.searchStarterPacks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphstarterpack.go b/api/bsky/graphstarterpack.go
index 89ddea15..9cbce888 100644
--- a/api/bsky/graphstarterpack.go
+++ b/api/bsky/graphstarterpack.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.starterpack
 
-// schema: app.bsky.graph.starterpack
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.starterpack", &GraphStarterpack{})
-} //
-// RECORDTYPE: GraphStarterpack
+}
+
 type GraphStarterpack struct {
-	LexiconTypeID     string                       `json:"$type,const=app.bsky.graph.starterpack" cborgen:"$type,const=app.bsky.graph.starterpack"`
+	LexiconTypeID     string                       `json:"$type" cborgen:"$type,const=app.bsky.graph.starterpack"`
 	CreatedAt         string                       `json:"createdAt" cborgen:"createdAt"`
 	Description       *string                      `json:"description,omitempty" cborgen:"description,omitempty"`
 	DescriptionFacets []*RichtextFacet             `json:"descriptionFacets,omitempty" cborgen:"descriptionFacets,omitempty"`
diff --git a/api/bsky/graphunmuteActor.go b/api/bsky/graphunmuteActor.go
index 78af6d2c..3e0ea87a 100644
--- a/api/bsky/graphunmuteActor.go
+++ b/api/bsky/graphunmuteActor.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.unmuteActor
 
-// schema: app.bsky.graph.unmuteActor
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphunmuteActorList.go b/api/bsky/graphunmuteActorList.go
index f82f097b..006748fc 100644
--- a/api/bsky/graphunmuteActorList.go
+++ b/api/bsky/graphunmuteActorList.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.unmuteActorList
 
-// schema: app.bsky.graph.unmuteActorList
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphunmuteThread.go b/api/bsky/graphunmuteThread.go
index c2ad343c..921053de 100644
--- a/api/bsky/graphunmuteThread.go
+++ b/api/bsky/graphunmuteThread.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.unmuteThread
 
-// schema: app.bsky.graph.unmuteThread
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/graphverification.go b/api/bsky/graphverification.go
index f263f454..f61b3da4 100644
--- a/api/bsky/graphverification.go
+++ b/api/bsky/graphverification.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.graph.verification
 
-// schema: app.bsky.graph.verification
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.graph.verification", &GraphVerification{})
-} //
-// RECORDTYPE: GraphVerification
+}
+
 type GraphVerification struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.graph.verification" cborgen:"$type,const=app.bsky.graph.verification"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.verification"`
 	// createdAt: Date of when the verification was created.
 	CreatedAt string `json:"createdAt" cborgen:"createdAt"`
 	// displayName: Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying.
diff --git a/api/bsky/labelerdefs.go b/api/bsky/labelerdefs.go
index 637b71a6..f1495ba5 100644
--- a/api/bsky/labelerdefs.go
+++ b/api/bsky/labelerdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.labeler.defs
 
-// schema: app.bsky.labeler.defs
+package bsky
 
 import (
 	comatprototypes "github.com/bluesky-social/indigo/api/atproto"
@@ -17,10 +17,8 @@ type LabelerDefs_LabelerPolicies struct {
 }
 
 // LabelerDefs_LabelerView is a "labelerView" in the app.bsky.labeler.defs schema.
-//
-// RECORDTYPE: LabelerDefs_LabelerView
 type LabelerDefs_LabelerView struct {
-	LexiconTypeID string                             `json:"$type,const=app.bsky.labeler.defs#labelerView" cborgen:"$type,const=app.bsky.labeler.defs#labelerView"`
+	LexiconTypeID string                             `json:"$type" cborgen:"$type,const=app.bsky.labeler.defs#labelerView"`
 	Cid           string                             `json:"cid" cborgen:"cid"`
 	Creator       *ActorDefs_ProfileView             `json:"creator" cborgen:"creator"`
 	IndexedAt     string                             `json:"indexedAt" cborgen:"indexedAt"`
@@ -31,10 +29,8 @@ type LabelerDefs_LabelerView struct {
 }
 
 // LabelerDefs_LabelerViewDetailed is a "labelerViewDetailed" in the app.bsky.labeler.defs schema.
-//
-// RECORDTYPE: LabelerDefs_LabelerViewDetailed
 type LabelerDefs_LabelerViewDetailed struct {
-	LexiconTypeID string                             `json:"$type,const=app.bsky.labeler.defs#labelerViewDetailed" cborgen:"$type,const=app.bsky.labeler.defs#labelerViewDetailed"`
+	LexiconTypeID string                             `json:"$type" cborgen:"$type,const=app.bsky.labeler.defs#labelerViewDetailed"`
 	Cid           string                             `json:"cid" cborgen:"cid"`
 	Creator       *ActorDefs_ProfileView             `json:"creator" cborgen:"creator"`
 	IndexedAt     string                             `json:"indexedAt" cborgen:"indexedAt"`
diff --git a/api/bsky/labelergetServices.go b/api/bsky/labelergetServices.go
index 5f184080..f29f8a88 100644
--- a/api/bsky/labelergetServices.go
+++ b/api/bsky/labelergetServices.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.labeler.getServices
 
-// schema: app.bsky.labeler.getServices
+package bsky
 
 import (
 	"context"
@@ -31,8 +31,9 @@ func (t *LabelerGetServices_Output_Views_Elem) MarshalJSON() ([]byte, error) {
 		t.LabelerDefs_LabelerViewDetailed.LexiconTypeID = "app.bsky.labeler.defs#labelerViewDetailed"
 		return json.Marshal(t.LabelerDefs_LabelerViewDetailed)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *LabelerGetServices_Output_Views_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/labelerservice.go b/api/bsky/labelerservice.go
index 7297d89b..3b408e1d 100644
--- a/api/bsky/labelerservice.go
+++ b/api/bsky/labelerservice.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.labeler.service
 
-// schema: app.bsky.labeler.service
+package bsky
 
 import (
 	"bytes"
@@ -17,10 +17,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.labeler.service", &LabelerService{})
-} //
-// RECORDTYPE: LabelerService
+}
+
 type LabelerService struct {
-	LexiconTypeID string                       `json:"$type,const=app.bsky.labeler.service" cborgen:"$type,const=app.bsky.labeler.service"`
+	LexiconTypeID string                       `json:"$type" cborgen:"$type,const=app.bsky.labeler.service"`
 	CreatedAt     string                       `json:"createdAt" cborgen:"createdAt"`
 	Labels        *LabelerService_Labels       `json:"labels,omitempty" cborgen:"labels,omitempty"`
 	Policies      *LabelerDefs_LabelerPolicies `json:"policies" cborgen:"policies"`
@@ -41,8 +41,9 @@ func (t *LabelerService_Labels) MarshalJSON() ([]byte, error) {
 		t.LabelDefs_SelfLabels.LexiconTypeID = "com.atproto.label.defs#selfLabels"
 		return json.Marshal(t.LabelDefs_SelfLabels)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *LabelerService_Labels) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -68,7 +69,7 @@ func (t *LabelerService_Labels) MarshalCBOR(w io.Writer) error {
 	if t.LabelDefs_SelfLabels != nil {
 		return t.LabelDefs_SelfLabels.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *LabelerService_Labels) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
diff --git a/api/bsky/notificationdeclaration.go b/api/bsky/notificationdeclaration.go
index 3cdf7bb4..daf01e12 100644
--- a/api/bsky/notificationdeclaration.go
+++ b/api/bsky/notificationdeclaration.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.declaration
 
-// schema: app.bsky.notification.declaration
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,10 +10,10 @@ import (
 
 func init() {
 	util.RegisterType("app.bsky.notification.declaration", &NotificationDeclaration{})
-} //
-// RECORDTYPE: NotificationDeclaration
+}
+
 type NotificationDeclaration struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.notification.declaration" cborgen:"$type,const=app.bsky.notification.declaration"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.notification.declaration"`
 	// allowSubscriptions: A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'.
 	AllowSubscriptions string `json:"allowSubscriptions" cborgen:"allowSubscriptions"`
 }
diff --git a/api/bsky/notificationdefs.go b/api/bsky/notificationdefs.go
index af6b2d0b..8debd58e 100644
--- a/api/bsky/notificationdefs.go
+++ b/api/bsky/notificationdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.defs
 
-// schema: app.bsky.notification.defs
+package bsky
 
 // NotificationDefs_ActivitySubscription is a "activitySubscription" in the app.bsky.notification.defs schema.
 type NotificationDefs_ActivitySubscription struct {
diff --git a/api/bsky/notificationgetPreferences.go b/api/bsky/notificationgetPreferences.go
index 61a2ea1f..aaf7b777 100644
--- a/api/bsky/notificationgetPreferences.go
+++ b/api/bsky/notificationgetPreferences.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.getPreferences
 
-// schema: app.bsky.notification.getPreferences
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationgetUnreadCount.go b/api/bsky/notificationgetUnreadCount.go
index 3de49df1..f5ba2e7b 100644
--- a/api/bsky/notificationgetUnreadCount.go
+++ b/api/bsky/notificationgetUnreadCount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.getUnreadCount
 
-// schema: app.bsky.notification.getUnreadCount
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationlistActivitySubscriptions.go b/api/bsky/notificationlistActivitySubscriptions.go
index 1afe59df..a08fb5fd 100644
--- a/api/bsky/notificationlistActivitySubscriptions.go
+++ b/api/bsky/notificationlistActivitySubscriptions.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.listActivitySubscriptions
 
-// schema: app.bsky.notification.listActivitySubscriptions
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationlistNotifications.go b/api/bsky/notificationlistNotifications.go
index 5df30fc3..5bec9c55 100644
--- a/api/bsky/notificationlistNotifications.go
+++ b/api/bsky/notificationlistNotifications.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.listNotifications
 
-// schema: app.bsky.notification.listNotifications
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationputActivitySubscription.go b/api/bsky/notificationputActivitySubscription.go
index 3ae57a62..3eb927ba 100644
--- a/api/bsky/notificationputActivitySubscription.go
+++ b/api/bsky/notificationputActivitySubscription.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.putActivitySubscription
 
-// schema: app.bsky.notification.putActivitySubscription
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationputPreferences.go b/api/bsky/notificationputPreferences.go
index fb6e64dc..51d9d978 100644
--- a/api/bsky/notificationputPreferences.go
+++ b/api/bsky/notificationputPreferences.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.putPreferences
 
-// schema: app.bsky.notification.putPreferences
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationputPreferencesV2.go b/api/bsky/notificationputPreferencesV2.go
index 3bf09ce8..da17f2be 100644
--- a/api/bsky/notificationputPreferencesV2.go
+++ b/api/bsky/notificationputPreferencesV2.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.putPreferencesV2
 
-// schema: app.bsky.notification.putPreferencesV2
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationregisterPush.go b/api/bsky/notificationregisterPush.go
index 5052f393..55015353 100644
--- a/api/bsky/notificationregisterPush.go
+++ b/api/bsky/notificationregisterPush.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.registerPush
 
-// schema: app.bsky.notification.registerPush
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationunregisterPush.go b/api/bsky/notificationunregisterPush.go
index c2c52fa5..ea752a3b 100644
--- a/api/bsky/notificationunregisterPush.go
+++ b/api/bsky/notificationunregisterPush.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.unregisterPush
 
-// schema: app.bsky.notification.unregisterPush
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/notificationupdateSeen.go b/api/bsky/notificationupdateSeen.go
index 91561ee8..78594ad3 100644
--- a/api/bsky/notificationupdateSeen.go
+++ b/api/bsky/notificationupdateSeen.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.notification.updateSeen
 
-// schema: app.bsky.notification.updateSeen
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/richtextfacet.go b/api/bsky/richtextfacet.go
index f6434801..9fb7d58f 100644
--- a/api/bsky/richtextfacet.go
+++ b/api/bsky/richtextfacet.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.richtext.facet
 
-// schema: app.bsky.richtext.facet
+package bsky
 
 import (
 	"bytes"
@@ -49,8 +49,9 @@ func (t *RichtextFacet_Features_Elem) MarshalJSON() ([]byte, error) {
 		t.RichtextFacet_Tag.LexiconTypeID = "app.bsky.richtext.facet#tag"
 		return json.Marshal(t.RichtextFacet_Tag)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *RichtextFacet_Features_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -88,7 +89,7 @@ func (t *RichtextFacet_Features_Elem) MarshalCBOR(w io.Writer) error {
 	if t.RichtextFacet_Tag != nil {
 		return t.RichtextFacet_Tag.MarshalCBOR(w)
 	}
-	return fmt.Errorf("cannot cbor marshal empty enum")
+	return fmt.Errorf("can not marshal empty union as CBOR")
 }
 func (t *RichtextFacet_Features_Elem) UnmarshalCBOR(r io.Reader) error {
 	typ, b, err := util.CborTypeExtractReader(r)
@@ -115,29 +116,23 @@ func (t *RichtextFacet_Features_Elem) UnmarshalCBOR(r io.Reader) error {
 // RichtextFacet_Link is a "link" in the app.bsky.richtext.facet schema.
 //
 // Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.
-//
-// RECORDTYPE: RichtextFacet_Link
 type RichtextFacet_Link struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.richtext.facet#link" cborgen:"$type,const=app.bsky.richtext.facet#link"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.richtext.facet#link"`
 	Uri           string `json:"uri" cborgen:"uri"`
 }
 
 // RichtextFacet_Mention is a "mention" in the app.bsky.richtext.facet schema.
 //
 // Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.
-//
-// RECORDTYPE: RichtextFacet_Mention
 type RichtextFacet_Mention struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.richtext.facet#mention" cborgen:"$type,const=app.bsky.richtext.facet#mention"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.richtext.facet#mention"`
 	Did           string `json:"did" cborgen:"did"`
 }
 
 // RichtextFacet_Tag is a "tag" in the app.bsky.richtext.facet schema.
 //
 // Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').
-//
-// RECORDTYPE: RichtextFacet_Tag
 type RichtextFacet_Tag struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.richtext.facet#tag" cborgen:"$type,const=app.bsky.richtext.facet#tag"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.richtext.facet#tag"`
 	Tag           string `json:"tag" cborgen:"tag"`
 }
diff --git a/api/bsky/unspecceddefs.go b/api/bsky/unspecceddefs.go
index 5d51da7c..2d87c789 100644
--- a/api/bsky/unspecceddefs.go
+++ b/api/bsky/unspecceddefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.defs
 
-// schema: app.bsky.unspecced.defs
+package bsky
 
 // UnspeccedDefs_AgeAssuranceEvent is a "ageAssuranceEvent" in the app.bsky.unspecced.defs schema.
 //
@@ -64,32 +64,24 @@ type UnspeccedDefs_SkeletonTrend struct {
 }
 
 // UnspeccedDefs_ThreadItemBlocked is a "threadItemBlocked" in the app.bsky.unspecced.defs schema.
-//
-// RECORDTYPE: UnspeccedDefs_ThreadItemBlocked
 type UnspeccedDefs_ThreadItemBlocked struct {
-	LexiconTypeID string                  `json:"$type,const=app.bsky.unspecced.defs#threadItemBlocked" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemBlocked"`
+	LexiconTypeID string                  `json:"$type" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemBlocked"`
 	Author        *FeedDefs_BlockedAuthor `json:"author" cborgen:"author"`
 }
 
 // UnspeccedDefs_ThreadItemNoUnauthenticated is a "threadItemNoUnauthenticated" in the app.bsky.unspecced.defs schema.
-//
-// RECORDTYPE: UnspeccedDefs_ThreadItemNoUnauthenticated
 type UnspeccedDefs_ThreadItemNoUnauthenticated struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.unspecced.defs#threadItemNoUnauthenticated" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemNoUnauthenticated"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemNoUnauthenticated"`
 }
 
 // UnspeccedDefs_ThreadItemNotFound is a "threadItemNotFound" in the app.bsky.unspecced.defs schema.
-//
-// RECORDTYPE: UnspeccedDefs_ThreadItemNotFound
 type UnspeccedDefs_ThreadItemNotFound struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.unspecced.defs#threadItemNotFound" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemNotFound"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemNotFound"`
 }
 
 // UnspeccedDefs_ThreadItemPost is a "threadItemPost" in the app.bsky.unspecced.defs schema.
-//
-// RECORDTYPE: UnspeccedDefs_ThreadItemPost
 type UnspeccedDefs_ThreadItemPost struct {
-	LexiconTypeID string `json:"$type,const=app.bsky.unspecced.defs#threadItemPost" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemPost"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.unspecced.defs#threadItemPost"`
 	// hiddenByThreadgate: The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread.
 	HiddenByThreadgate bool `json:"hiddenByThreadgate" cborgen:"hiddenByThreadgate"`
 	// moreParents: This post has more parents that were not present in the response. This is just a boolean, without the number of parents.
diff --git a/api/bsky/unspeccedgetAgeAssuranceState.go b/api/bsky/unspeccedgetAgeAssuranceState.go
index 0bad5488..33c85c2c 100644
--- a/api/bsky/unspeccedgetAgeAssuranceState.go
+++ b/api/bsky/unspeccedgetAgeAssuranceState.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getAgeAssuranceState
 
-// schema: app.bsky.unspecced.getAgeAssuranceState
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetConfig.go b/api/bsky/unspeccedgetConfig.go
index c2167f02..13811d60 100644
--- a/api/bsky/unspeccedgetConfig.go
+++ b/api/bsky/unspeccedgetConfig.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getConfig
 
-// schema: app.bsky.unspecced.getConfig
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetOnboardingSuggestedStarterPacks.go b/api/bsky/unspeccedgetOnboardingSuggestedStarterPacks.go
new file mode 100644
index 00000000..207e1f1a
--- /dev/null
+++ b/api/bsky/unspeccedgetOnboardingSuggestedStarterPacks.go
@@ -0,0 +1,31 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: app.bsky.unspecced.getOnboardingSuggestedStarterPacks
+
+package bsky
+
+import (
+	"context"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// UnspeccedGetOnboardingSuggestedStarterPacks_Output is the output of a app.bsky.unspecced.getOnboardingSuggestedStarterPacks call.
+type UnspeccedGetOnboardingSuggestedStarterPacks_Output struct {
+	StarterPacks []*GraphDefs_StarterPackView `json:"starterPacks" cborgen:"starterPacks"`
+}
+
+// UnspeccedGetOnboardingSuggestedStarterPacks calls the XRPC method "app.bsky.unspecced.getOnboardingSuggestedStarterPacks".
+func UnspeccedGetOnboardingSuggestedStarterPacks(ctx context.Context, c util.LexClient, limit int64) (*UnspeccedGetOnboardingSuggestedStarterPacks_Output, error) {
+	var out UnspeccedGetOnboardingSuggestedStarterPacks_Output
+
+	params := map[string]interface{}{}
+	if limit != 0 {
+		params["limit"] = limit
+	}
+	if err := c.LexDo(ctx, util.Query, "", "app.bsky.unspecced.getOnboardingSuggestedStarterPacks", params, nil, &out); err != nil {
+		return nil, err
+	}
+
+	return &out, nil
+}
diff --git a/api/bsky/unspeccedgetOnboardingSuggestedStarterPacksSkeleton.go b/api/bsky/unspeccedgetOnboardingSuggestedStarterPacksSkeleton.go
new file mode 100644
index 00000000..9e67db85
--- /dev/null
+++ b/api/bsky/unspeccedgetOnboardingSuggestedStarterPacksSkeleton.go
@@ -0,0 +1,36 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton
+
+package bsky
+
+import (
+	"context"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// UnspeccedGetOnboardingSuggestedStarterPacksSkeleton_Output is the output of a app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton call.
+type UnspeccedGetOnboardingSuggestedStarterPacksSkeleton_Output struct {
+	StarterPacks []string `json:"starterPacks" cborgen:"starterPacks"`
+}
+
+// UnspeccedGetOnboardingSuggestedStarterPacksSkeleton calls the XRPC method "app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton".
+//
+// viewer: DID of the account making the request (not included for public/unauthenticated queries).
+func UnspeccedGetOnboardingSuggestedStarterPacksSkeleton(ctx context.Context, c util.LexClient, limit int64, viewer string) (*UnspeccedGetOnboardingSuggestedStarterPacksSkeleton_Output, error) {
+	var out UnspeccedGetOnboardingSuggestedStarterPacksSkeleton_Output
+
+	params := map[string]interface{}{}
+	if limit != 0 {
+		params["limit"] = limit
+	}
+	if viewer != "" {
+		params["viewer"] = viewer
+	}
+	if err := c.LexDo(ctx, util.Query, "", "app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton", params, nil, &out); err != nil {
+		return nil, err
+	}
+
+	return &out, nil
+}
diff --git a/api/bsky/unspeccedgetPopularFeedGenerators.go b/api/bsky/unspeccedgetPopularFeedGenerators.go
index 6e276395..a1e7b509 100644
--- a/api/bsky/unspeccedgetPopularFeedGenerators.go
+++ b/api/bsky/unspeccedgetPopularFeedGenerators.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getPopularFeedGenerators
 
-// schema: app.bsky.unspecced.getPopularFeedGenerators
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetPostThreadOtherV2.go b/api/bsky/unspeccedgetPostThreadOtherV2.go
index 7586cf7a..ad462e01 100644
--- a/api/bsky/unspeccedgetPostThreadOtherV2.go
+++ b/api/bsky/unspeccedgetPostThreadOtherV2.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getPostThreadOtherV2
 
-// schema: app.bsky.unspecced.getPostThreadOtherV2
+package bsky
 
 import (
 	"context"
@@ -35,8 +35,9 @@ func (t *UnspeccedGetPostThreadOtherV2_ThreadItem_Value) MarshalJSON() ([]byte,
 		t.UnspeccedDefs_ThreadItemPost.LexiconTypeID = "app.bsky.unspecced.defs#threadItemPost"
 		return json.Marshal(t.UnspeccedDefs_ThreadItemPost)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *UnspeccedGetPostThreadOtherV2_ThreadItem_Value) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/unspeccedgetPostThreadV2.go b/api/bsky/unspeccedgetPostThreadV2.go
index b4173b38..9270e080 100644
--- a/api/bsky/unspeccedgetPostThreadV2.go
+++ b/api/bsky/unspeccedgetPostThreadV2.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getPostThreadV2
 
-// schema: app.bsky.unspecced.getPostThreadV2
+package bsky
 
 import (
 	"context"
@@ -53,8 +53,9 @@ func (t *UnspeccedGetPostThreadV2_ThreadItem_Value) MarshalJSON() ([]byte, error
 		t.UnspeccedDefs_ThreadItemBlocked.LexiconTypeID = "app.bsky.unspecced.defs#threadItemBlocked"
 		return json.Marshal(t.UnspeccedDefs_ThreadItemBlocked)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *UnspeccedGetPostThreadV2_ThreadItem_Value) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/bsky/unspeccedgetSuggestedFeeds.go b/api/bsky/unspeccedgetSuggestedFeeds.go
index 7f8fcae1..3eabb884 100644
--- a/api/bsky/unspeccedgetSuggestedFeeds.go
+++ b/api/bsky/unspeccedgetSuggestedFeeds.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestedFeeds
 
-// schema: app.bsky.unspecced.getSuggestedFeeds
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetSuggestedFeedsSkeleton.go b/api/bsky/unspeccedgetSuggestedFeedsSkeleton.go
index 8200b846..fbe0be90 100644
--- a/api/bsky/unspeccedgetSuggestedFeedsSkeleton.go
+++ b/api/bsky/unspeccedgetSuggestedFeedsSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestedFeedsSkeleton
 
-// schema: app.bsky.unspecced.getSuggestedFeedsSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetSuggestedStarterPacks.go b/api/bsky/unspeccedgetSuggestedStarterPacks.go
index 163d7eff..2e26d266 100644
--- a/api/bsky/unspeccedgetSuggestedStarterPacks.go
+++ b/api/bsky/unspeccedgetSuggestedStarterPacks.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestedStarterPacks
 
-// schema: app.bsky.unspecced.getSuggestedStarterPacks
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetSuggestedStarterPacksSkeleton.go b/api/bsky/unspeccedgetSuggestedStarterPacksSkeleton.go
index d6d7fb93..e4e7df07 100644
--- a/api/bsky/unspeccedgetSuggestedStarterPacksSkeleton.go
+++ b/api/bsky/unspeccedgetSuggestedStarterPacksSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestedStarterPacksSkeleton
 
-// schema: app.bsky.unspecced.getSuggestedStarterPacksSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetSuggestedUsers.go b/api/bsky/unspeccedgetSuggestedUsers.go
index e31686b8..c38404df 100644
--- a/api/bsky/unspeccedgetSuggestedUsers.go
+++ b/api/bsky/unspeccedgetSuggestedUsers.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestedUsers
 
-// schema: app.bsky.unspecced.getSuggestedUsers
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetSuggestedUsersSkeleton.go b/api/bsky/unspeccedgetSuggestedUsersSkeleton.go
index b81d8c0a..731dfea4 100644
--- a/api/bsky/unspeccedgetSuggestedUsersSkeleton.go
+++ b/api/bsky/unspeccedgetSuggestedUsersSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestedUsersSkeleton
 
-// schema: app.bsky.unspecced.getSuggestedUsersSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetSuggestionsSkeleton.go b/api/bsky/unspeccedgetSuggestionsSkeleton.go
index f23cd795..b81b2c2d 100644
--- a/api/bsky/unspeccedgetSuggestionsSkeleton.go
+++ b/api/bsky/unspeccedgetSuggestionsSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getSuggestionsSkeleton
 
-// schema: app.bsky.unspecced.getSuggestionsSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetTaggedSuggestions.go b/api/bsky/unspeccedgetTaggedSuggestions.go
index dfcf7b6a..5758c9a9 100644
--- a/api/bsky/unspeccedgetTaggedSuggestions.go
+++ b/api/bsky/unspeccedgetTaggedSuggestions.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getTaggedSuggestions
 
-// schema: app.bsky.unspecced.getTaggedSuggestions
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetTrendingTopics.go b/api/bsky/unspeccedgetTrendingTopics.go
index 93b44f57..9836b549 100644
--- a/api/bsky/unspeccedgetTrendingTopics.go
+++ b/api/bsky/unspeccedgetTrendingTopics.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getTrendingTopics
 
-// schema: app.bsky.unspecced.getTrendingTopics
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetTrends.go b/api/bsky/unspeccedgetTrends.go
index c3f4ca2b..898fb76f 100644
--- a/api/bsky/unspeccedgetTrends.go
+++ b/api/bsky/unspeccedgetTrends.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getTrends
 
-// schema: app.bsky.unspecced.getTrends
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedgetTrendsSkeleton.go b/api/bsky/unspeccedgetTrendsSkeleton.go
index 7d8fe9ff..cad9fd1c 100644
--- a/api/bsky/unspeccedgetTrendsSkeleton.go
+++ b/api/bsky/unspeccedgetTrendsSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.getTrendsSkeleton
 
-// schema: app.bsky.unspecced.getTrendsSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedinitAgeAssurance.go b/api/bsky/unspeccedinitAgeAssurance.go
index 2c325285..ad1a31ed 100644
--- a/api/bsky/unspeccedinitAgeAssurance.go
+++ b/api/bsky/unspeccedinitAgeAssurance.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.initAgeAssurance
 
-// schema: app.bsky.unspecced.initAgeAssurance
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedsearchActorsSkeleton.go b/api/bsky/unspeccedsearchActorsSkeleton.go
index 8a1448ba..0b965557 100644
--- a/api/bsky/unspeccedsearchActorsSkeleton.go
+++ b/api/bsky/unspeccedsearchActorsSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.searchActorsSkeleton
 
-// schema: app.bsky.unspecced.searchActorsSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedsearchPostsSkeleton.go b/api/bsky/unspeccedsearchPostsSkeleton.go
index 00df83ec..453c4831 100644
--- a/api/bsky/unspeccedsearchPostsSkeleton.go
+++ b/api/bsky/unspeccedsearchPostsSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.searchPostsSkeleton
 
-// schema: app.bsky.unspecced.searchPostsSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/unspeccedsearchStarterPacksSkeleton.go b/api/bsky/unspeccedsearchStarterPacksSkeleton.go
index 36e3f457..d8453871 100644
--- a/api/bsky/unspeccedsearchStarterPacksSkeleton.go
+++ b/api/bsky/unspeccedsearchStarterPacksSkeleton.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.unspecced.searchStarterPacksSkeleton
 
-// schema: app.bsky.unspecced.searchStarterPacksSkeleton
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/videodefs.go b/api/bsky/videodefs.go
index 416392a7..8da5f7ca 100644
--- a/api/bsky/videodefs.go
+++ b/api/bsky/videodefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.video.defs
 
-// schema: app.bsky.video.defs
+package bsky
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
diff --git a/api/bsky/videogetJobStatus.go b/api/bsky/videogetJobStatus.go
index 1f9d6da9..cd6e3061 100644
--- a/api/bsky/videogetJobStatus.go
+++ b/api/bsky/videogetJobStatus.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.video.getJobStatus
 
-// schema: app.bsky.video.getJobStatus
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/videogetUploadLimits.go b/api/bsky/videogetUploadLimits.go
index d22e710d..23639aac 100644
--- a/api/bsky/videogetUploadLimits.go
+++ b/api/bsky/videogetUploadLimits.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.video.getUploadLimits
 
-// schema: app.bsky.video.getUploadLimits
+package bsky
 
 import (
 	"context"
diff --git a/api/bsky/videouploadVideo.go b/api/bsky/videouploadVideo.go
index 575a4b45..d1d94d78 100644
--- a/api/bsky/videouploadVideo.go
+++ b/api/bsky/videouploadVideo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package bsky
+// Lexicon schema: app.bsky.video.uploadVideo
 
-// schema: app.bsky.video.uploadVideo
+package bsky
 
 import (
 	"context"
diff --git a/api/chat/actordeclaration.go b/api/chat/actordeclaration.go
index 6ef9b748..e8ac997e 100644
--- a/api/chat/actordeclaration.go
+++ b/api/chat/actordeclaration.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.actor.declaration
 
-// schema: chat.bsky.actor.declaration
+package chat
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
@@ -10,9 +10,9 @@ import (
 
 func init() {
 	util.RegisterType("chat.bsky.actor.declaration", &ActorDeclaration{})
-} //
-// RECORDTYPE: ActorDeclaration
+}
+
 type ActorDeclaration struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.actor.declaration" cborgen:"$type,const=chat.bsky.actor.declaration"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.actor.declaration"`
 	AllowIncoming string `json:"allowIncoming" cborgen:"allowIncoming"`
 }
diff --git a/api/chat/actordefs.go b/api/chat/actordefs.go
index 87a80889..a485caae 100644
--- a/api/chat/actordefs.go
+++ b/api/chat/actordefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.actor.defs
 
-// schema: chat.bsky.actor.defs
+package chat
 
 import (
 	comatprototypes "github.com/bluesky-social/indigo/api/atproto"
diff --git a/api/chat/actordeleteAccount.go b/api/chat/actordeleteAccount.go
index 382205af..b1d2f1aa 100644
--- a/api/chat/actordeleteAccount.go
+++ b/api/chat/actordeleteAccount.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.actor.deleteAccount
 
-// schema: chat.bsky.actor.deleteAccount
+package chat
 
 import (
 	"context"
diff --git a/api/chat/actorexportAccountData.go b/api/chat/actorexportAccountData.go
index e075afbd..2a15d106 100644
--- a/api/chat/actorexportAccountData.go
+++ b/api/chat/actorexportAccountData.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.actor.exportAccountData
 
-// schema: chat.bsky.actor.exportAccountData
+package chat
 
 import (
 	"bytes"
diff --git a/api/chat/convoacceptConvo.go b/api/chat/convoacceptConvo.go
index 0bfb4d96..590ad0df 100644
--- a/api/chat/convoacceptConvo.go
+++ b/api/chat/convoacceptConvo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.acceptConvo
 
-// schema: chat.bsky.convo.acceptConvo
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convoaddReaction.go b/api/chat/convoaddReaction.go
index 8bc50e10..f2a8ca09 100644
--- a/api/chat/convoaddReaction.go
+++ b/api/chat/convoaddReaction.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.addReaction
 
-// schema: chat.bsky.convo.addReaction
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convodefs.go b/api/chat/convodefs.go
index 5146c327..d114dde2 100644
--- a/api/chat/convodefs.go
+++ b/api/chat/convodefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.defs
 
-// schema: chat.bsky.convo.defs
+package chat
 
 import (
 	"encoding/json"
@@ -38,8 +38,9 @@ func (t *ConvoDefs_ConvoView_LastMessage) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_ConvoView_LastMessage) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -68,8 +69,9 @@ func (t *ConvoDefs_ConvoView_LastReaction) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_MessageAndReactionView.LexiconTypeID = "chat.bsky.convo.defs#messageAndReactionView"
 		return json.Marshal(t.ConvoDefs_MessageAndReactionView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_ConvoView_LastReaction) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -87,10 +89,8 @@ func (t *ConvoDefs_ConvoView_LastReaction) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_DeletedMessageView is a "deletedMessageView" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_DeletedMessageView
 type ConvoDefs_DeletedMessageView struct {
-	LexiconTypeID string                       `json:"$type,const=chat.bsky.convo.defs#deletedMessageView" cborgen:"$type,const=chat.bsky.convo.defs#deletedMessageView"`
+	LexiconTypeID string                       `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#deletedMessageView"`
 	Id            string                       `json:"id" cborgen:"id"`
 	Rev           string                       `json:"rev" cborgen:"rev"`
 	Sender        *ConvoDefs_MessageViewSender `json:"sender" cborgen:"sender"`
@@ -98,19 +98,15 @@ type ConvoDefs_DeletedMessageView struct {
 }
 
 // ConvoDefs_LogAcceptConvo is a "logAcceptConvo" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogAcceptConvo
 type ConvoDefs_LogAcceptConvo struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.convo.defs#logAcceptConvo" cborgen:"$type,const=chat.bsky.convo.defs#logAcceptConvo"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logAcceptConvo"`
 	ConvoId       string `json:"convoId" cborgen:"convoId"`
 	Rev           string `json:"rev" cborgen:"rev"`
 }
 
 // ConvoDefs_LogAddReaction is a "logAddReaction" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogAddReaction
 type ConvoDefs_LogAddReaction struct {
-	LexiconTypeID string                            `json:"$type,const=chat.bsky.convo.defs#logAddReaction" cborgen:"$type,const=chat.bsky.convo.defs#logAddReaction"`
+	LexiconTypeID string                            `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logAddReaction"`
 	ConvoId       string                            `json:"convoId" cborgen:"convoId"`
 	Message       *ConvoDefs_LogAddReaction_Message `json:"message" cborgen:"message"`
 	Reaction      *ConvoDefs_ReactionView           `json:"reaction" cborgen:"reaction"`
@@ -131,8 +127,9 @@ func (t *ConvoDefs_LogAddReaction_Message) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_LogAddReaction_Message) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -153,19 +150,15 @@ func (t *ConvoDefs_LogAddReaction_Message) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_LogBeginConvo is a "logBeginConvo" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogBeginConvo
 type ConvoDefs_LogBeginConvo struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.convo.defs#logBeginConvo" cborgen:"$type,const=chat.bsky.convo.defs#logBeginConvo"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logBeginConvo"`
 	ConvoId       string `json:"convoId" cborgen:"convoId"`
 	Rev           string `json:"rev" cborgen:"rev"`
 }
 
 // ConvoDefs_LogCreateMessage is a "logCreateMessage" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogCreateMessage
 type ConvoDefs_LogCreateMessage struct {
-	LexiconTypeID string                              `json:"$type,const=chat.bsky.convo.defs#logCreateMessage" cborgen:"$type,const=chat.bsky.convo.defs#logCreateMessage"`
+	LexiconTypeID string                              `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logCreateMessage"`
 	ConvoId       string                              `json:"convoId" cborgen:"convoId"`
 	Message       *ConvoDefs_LogCreateMessage_Message `json:"message" cborgen:"message"`
 	Rev           string                              `json:"rev" cborgen:"rev"`
@@ -185,8 +178,9 @@ func (t *ConvoDefs_LogCreateMessage_Message) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_LogCreateMessage_Message) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -207,10 +201,8 @@ func (t *ConvoDefs_LogCreateMessage_Message) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_LogDeleteMessage is a "logDeleteMessage" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogDeleteMessage
 type ConvoDefs_LogDeleteMessage struct {
-	LexiconTypeID string                              `json:"$type,const=chat.bsky.convo.defs#logDeleteMessage" cborgen:"$type,const=chat.bsky.convo.defs#logDeleteMessage"`
+	LexiconTypeID string                              `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logDeleteMessage"`
 	ConvoId       string                              `json:"convoId" cborgen:"convoId"`
 	Message       *ConvoDefs_LogDeleteMessage_Message `json:"message" cborgen:"message"`
 	Rev           string                              `json:"rev" cborgen:"rev"`
@@ -230,8 +222,9 @@ func (t *ConvoDefs_LogDeleteMessage_Message) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_LogDeleteMessage_Message) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -252,28 +245,22 @@ func (t *ConvoDefs_LogDeleteMessage_Message) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_LogLeaveConvo is a "logLeaveConvo" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogLeaveConvo
 type ConvoDefs_LogLeaveConvo struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.convo.defs#logLeaveConvo" cborgen:"$type,const=chat.bsky.convo.defs#logLeaveConvo"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logLeaveConvo"`
 	ConvoId       string `json:"convoId" cborgen:"convoId"`
 	Rev           string `json:"rev" cborgen:"rev"`
 }
 
 // ConvoDefs_LogMuteConvo is a "logMuteConvo" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogMuteConvo
 type ConvoDefs_LogMuteConvo struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.convo.defs#logMuteConvo" cborgen:"$type,const=chat.bsky.convo.defs#logMuteConvo"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logMuteConvo"`
 	ConvoId       string `json:"convoId" cborgen:"convoId"`
 	Rev           string `json:"rev" cborgen:"rev"`
 }
 
 // ConvoDefs_LogReadMessage is a "logReadMessage" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogReadMessage
 type ConvoDefs_LogReadMessage struct {
-	LexiconTypeID string                            `json:"$type,const=chat.bsky.convo.defs#logReadMessage" cborgen:"$type,const=chat.bsky.convo.defs#logReadMessage"`
+	LexiconTypeID string                            `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logReadMessage"`
 	ConvoId       string                            `json:"convoId" cborgen:"convoId"`
 	Message       *ConvoDefs_LogReadMessage_Message `json:"message" cborgen:"message"`
 	Rev           string                            `json:"rev" cborgen:"rev"`
@@ -293,8 +280,9 @@ func (t *ConvoDefs_LogReadMessage_Message) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_LogReadMessage_Message) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -315,10 +303,8 @@ func (t *ConvoDefs_LogReadMessage_Message) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_LogRemoveReaction is a "logRemoveReaction" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogRemoveReaction
 type ConvoDefs_LogRemoveReaction struct {
-	LexiconTypeID string                               `json:"$type,const=chat.bsky.convo.defs#logRemoveReaction" cborgen:"$type,const=chat.bsky.convo.defs#logRemoveReaction"`
+	LexiconTypeID string                               `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logRemoveReaction"`
 	ConvoId       string                               `json:"convoId" cborgen:"convoId"`
 	Message       *ConvoDefs_LogRemoveReaction_Message `json:"message" cborgen:"message"`
 	Reaction      *ConvoDefs_ReactionView              `json:"reaction" cborgen:"reaction"`
@@ -339,8 +325,9 @@ func (t *ConvoDefs_LogRemoveReaction_Message) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_LogRemoveReaction_Message) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -361,19 +348,15 @@ func (t *ConvoDefs_LogRemoveReaction_Message) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_LogUnmuteConvo is a "logUnmuteConvo" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_LogUnmuteConvo
 type ConvoDefs_LogUnmuteConvo struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.convo.defs#logUnmuteConvo" cborgen:"$type,const=chat.bsky.convo.defs#logUnmuteConvo"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#logUnmuteConvo"`
 	ConvoId       string `json:"convoId" cborgen:"convoId"`
 	Rev           string `json:"rev" cborgen:"rev"`
 }
 
 // ConvoDefs_MessageAndReactionView is a "messageAndReactionView" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_MessageAndReactionView
 type ConvoDefs_MessageAndReactionView struct {
-	LexiconTypeID string                  `json:"$type,const=chat.bsky.convo.defs#messageAndReactionView" cborgen:"$type,const=chat.bsky.convo.defs#messageAndReactionView"`
+	LexiconTypeID string                  `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#messageAndReactionView"`
 	Message       *ConvoDefs_MessageView  `json:"message" cborgen:"message"`
 	Reaction      *ConvoDefs_ReactionView `json:"reaction" cborgen:"reaction"`
 }
@@ -395,8 +378,9 @@ func (t *ConvoDefs_MessageInput_Embed) MarshalJSON() ([]byte, error) {
 		t.EmbedRecord.LexiconTypeID = "app.bsky.embed.record"
 		return json.Marshal(t.EmbedRecord)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_MessageInput_Embed) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -414,20 +398,16 @@ func (t *ConvoDefs_MessageInput_Embed) UnmarshalJSON(b []byte) error {
 }
 
 // ConvoDefs_MessageRef is a "messageRef" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_MessageRef
 type ConvoDefs_MessageRef struct {
-	LexiconTypeID string `json:"$type,const=chat.bsky.convo.defs#messageRef" cborgen:"$type,const=chat.bsky.convo.defs#messageRef"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#messageRef"`
 	ConvoId       string `json:"convoId" cborgen:"convoId"`
 	Did           string `json:"did" cborgen:"did"`
 	MessageId     string `json:"messageId" cborgen:"messageId"`
 }
 
 // ConvoDefs_MessageView is a "messageView" in the chat.bsky.convo.defs schema.
-//
-// RECORDTYPE: ConvoDefs_MessageView
 type ConvoDefs_MessageView struct {
-	LexiconTypeID string                       `json:"$type,const=chat.bsky.convo.defs#messageView" cborgen:"$type,const=chat.bsky.convo.defs#messageView"`
+	LexiconTypeID string                       `json:"$type" cborgen:"$type,const=chat.bsky.convo.defs#messageView"`
 	Embed         *ConvoDefs_MessageView_Embed `json:"embed,omitempty" cborgen:"embed,omitempty"`
 	// facets: Annotations of text (mentions, URLs, hashtags, etc)
 	Facets []*appbskytypes.RichtextFacet `json:"facets,omitempty" cborgen:"facets,omitempty"`
@@ -454,8 +434,9 @@ func (t *ConvoDefs_MessageView_Embed) MarshalJSON() ([]byte, error) {
 		t.EmbedRecord_View.LexiconTypeID = "app.bsky.embed.record#view"
 		return json.Marshal(t.EmbedRecord_View)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoDefs_MessageView_Embed) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/chat/convodeleteMessageForSelf.go b/api/chat/convodeleteMessageForSelf.go
index e47e241d..4d493ccf 100644
--- a/api/chat/convodeleteMessageForSelf.go
+++ b/api/chat/convodeleteMessageForSelf.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.deleteMessageForSelf
 
-// schema: chat.bsky.convo.deleteMessageForSelf
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convogetConvo.go b/api/chat/convogetConvo.go
index f275cd1b..cdffd67f 100644
--- a/api/chat/convogetConvo.go
+++ b/api/chat/convogetConvo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.getConvo
 
-// schema: chat.bsky.convo.getConvo
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convogetConvoAvailability.go b/api/chat/convogetConvoAvailability.go
index c5507a83..299c0977 100644
--- a/api/chat/convogetConvoAvailability.go
+++ b/api/chat/convogetConvoAvailability.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.getConvoAvailability
 
-// schema: chat.bsky.convo.getConvoAvailability
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convogetConvoForMembers.go b/api/chat/convogetConvoForMembers.go
index 364a7abc..e3e24091 100644
--- a/api/chat/convogetConvoForMembers.go
+++ b/api/chat/convogetConvoForMembers.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.getConvoForMembers
 
-// schema: chat.bsky.convo.getConvoForMembers
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convogetLog.go b/api/chat/convogetLog.go
index dfcead8d..683b4802 100644
--- a/api/chat/convogetLog.go
+++ b/api/chat/convogetLog.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.getLog
 
-// schema: chat.bsky.convo.getLog
+package chat
 
 import (
 	"context"
@@ -72,8 +72,9 @@ func (t *ConvoGetLog_Output_Logs_Elem) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_LogRemoveReaction.LexiconTypeID = "chat.bsky.convo.defs#logRemoveReaction"
 		return json.Marshal(t.ConvoDefs_LogRemoveReaction)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoGetLog_Output_Logs_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/chat/convogetMessages.go b/api/chat/convogetMessages.go
index e3db9d34..24c8183a 100644
--- a/api/chat/convogetMessages.go
+++ b/api/chat/convogetMessages.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.getMessages
 
-// schema: chat.bsky.convo.getMessages
+package chat
 
 import (
 	"context"
@@ -32,8 +32,9 @@ func (t *ConvoGetMessages_Output_Messages_Elem) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ConvoGetMessages_Output_Messages_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/chat/convoleaveConvo.go b/api/chat/convoleaveConvo.go
index e486b185..f2475a14 100644
--- a/api/chat/convoleaveConvo.go
+++ b/api/chat/convoleaveConvo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.leaveConvo
 
-// schema: chat.bsky.convo.leaveConvo
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convolistConvos.go b/api/chat/convolistConvos.go
index beeaacd5..145aeeb0 100644
--- a/api/chat/convolistConvos.go
+++ b/api/chat/convolistConvos.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.listConvos
 
-// schema: chat.bsky.convo.listConvos
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convomuteConvo.go b/api/chat/convomuteConvo.go
index bf046614..0bd8fb20 100644
--- a/api/chat/convomuteConvo.go
+++ b/api/chat/convomuteConvo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.muteConvo
 
-// schema: chat.bsky.convo.muteConvo
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convoremoveReaction.go b/api/chat/convoremoveReaction.go
index fcc6682d..8401cd42 100644
--- a/api/chat/convoremoveReaction.go
+++ b/api/chat/convoremoveReaction.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.removeReaction
 
-// schema: chat.bsky.convo.removeReaction
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convosendMessage.go b/api/chat/convosendMessage.go
index 222ac83e..2a63caa4 100644
--- a/api/chat/convosendMessage.go
+++ b/api/chat/convosendMessage.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.sendMessage
 
-// schema: chat.bsky.convo.sendMessage
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convosendMessageBatch.go b/api/chat/convosendMessageBatch.go
index a9f14d6d..23e00fa2 100644
--- a/api/chat/convosendMessageBatch.go
+++ b/api/chat/convosendMessageBatch.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.sendMessageBatch
 
-// schema: chat.bsky.convo.sendMessageBatch
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convounmuteConvo.go b/api/chat/convounmuteConvo.go
index 922eddac..2798f629 100644
--- a/api/chat/convounmuteConvo.go
+++ b/api/chat/convounmuteConvo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.unmuteConvo
 
-// schema: chat.bsky.convo.unmuteConvo
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convoupdateAllRead.go b/api/chat/convoupdateAllRead.go
index 9a3a42f5..2a34598b 100644
--- a/api/chat/convoupdateAllRead.go
+++ b/api/chat/convoupdateAllRead.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.updateAllRead
 
-// schema: chat.bsky.convo.updateAllRead
+package chat
 
 import (
 	"context"
diff --git a/api/chat/convoupdateRead.go b/api/chat/convoupdateRead.go
index 2de87fd2..5c6f8b5f 100644
--- a/api/chat/convoupdateRead.go
+++ b/api/chat/convoupdateRead.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.convo.updateRead
 
-// schema: chat.bsky.convo.updateRead
+package chat
 
 import (
 	"context"
diff --git a/api/chat/moderationgetActorMetadata.go b/api/chat/moderationgetActorMetadata.go
index dea6560d..dc1ba6ab 100644
--- a/api/chat/moderationgetActorMetadata.go
+++ b/api/chat/moderationgetActorMetadata.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.moderation.getActorMetadata
 
-// schema: chat.bsky.moderation.getActorMetadata
+package chat
 
 import (
 	"context"
diff --git a/api/chat/moderationgetMessageContext.go b/api/chat/moderationgetMessageContext.go
index 05e6f0bb..cd8e07fa 100644
--- a/api/chat/moderationgetMessageContext.go
+++ b/api/chat/moderationgetMessageContext.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.moderation.getMessageContext
 
-// schema: chat.bsky.moderation.getMessageContext
+package chat
 
 import (
 	"context"
@@ -31,8 +31,9 @@ func (t *ModerationGetMessageContext_Output_Messages_Elem) MarshalJSON() ([]byte
 		t.ConvoDefs_DeletedMessageView.LexiconTypeID = "chat.bsky.convo.defs#deletedMessageView"
 		return json.Marshal(t.ConvoDefs_DeletedMessageView)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationGetMessageContext_Output_Messages_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/chat/moderationupdateActorAccess.go b/api/chat/moderationupdateActorAccess.go
index 155a254f..efb5614c 100644
--- a/api/chat/moderationupdateActorAccess.go
+++ b/api/chat/moderationupdateActorAccess.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package chat
+// Lexicon schema: chat.bsky.moderation.updateActorAccess
 
-// schema: chat.bsky.moderation.updateActorAccess
+package chat
 
 import (
 	"context"
diff --git a/api/ozone/communicationcreateTemplate.go b/api/ozone/communicationcreateTemplate.go
index 35d330e6..8e145601 100644
--- a/api/ozone/communicationcreateTemplate.go
+++ b/api/ozone/communicationcreateTemplate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.communication.createTemplate
 
-// schema: tools.ozone.communication.createTemplate
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/communicationdefs.go b/api/ozone/communicationdefs.go
index 8c59f4a0..b384f2be 100644
--- a/api/ozone/communicationdefs.go
+++ b/api/ozone/communicationdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.communication.defs
 
-// schema: tools.ozone.communication.defs
+package ozone
 
 // CommunicationDefs_TemplateView is a "templateView" in the tools.ozone.communication.defs schema.
 type CommunicationDefs_TemplateView struct {
diff --git a/api/ozone/communicationdeleteTemplate.go b/api/ozone/communicationdeleteTemplate.go
index 3d6aeeda..34dad6c4 100644
--- a/api/ozone/communicationdeleteTemplate.go
+++ b/api/ozone/communicationdeleteTemplate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.communication.deleteTemplate
 
-// schema: tools.ozone.communication.deleteTemplate
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/communicationlistTemplates.go b/api/ozone/communicationlistTemplates.go
index dff7801f..c3f55c6a 100644
--- a/api/ozone/communicationlistTemplates.go
+++ b/api/ozone/communicationlistTemplates.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.communication.listTemplates
 
-// schema: tools.ozone.communication.listTemplates
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/communicationupdateTemplate.go b/api/ozone/communicationupdateTemplate.go
index 4305f1ec..84f10c70 100644
--- a/api/ozone/communicationupdateTemplate.go
+++ b/api/ozone/communicationupdateTemplate.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.communication.updateTemplate
 
-// schema: tools.ozone.communication.updateTemplate
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/hostinggetAccountHistory.go b/api/ozone/hostinggetAccountHistory.go
index 22f6f080..f877fd94 100644
--- a/api/ozone/hostinggetAccountHistory.go
+++ b/api/ozone/hostinggetAccountHistory.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.hosting.getAccountHistory
 
-// schema: tools.ozone.hosting.getAccountHistory
+package ozone
 
 import (
 	"context"
@@ -13,27 +13,21 @@ import (
 )
 
 // HostingGetAccountHistory_AccountCreated is a "accountCreated" in the tools.ozone.hosting.getAccountHistory schema.
-//
-// RECORDTYPE: HostingGetAccountHistory_AccountCreated
 type HostingGetAccountHistory_AccountCreated struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.hosting.getAccountHistory#accountCreated" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#accountCreated"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#accountCreated"`
 	Email         *string `json:"email,omitempty" cborgen:"email,omitempty"`
 	Handle        *string `json:"handle,omitempty" cborgen:"handle,omitempty"`
 }
 
 // HostingGetAccountHistory_EmailConfirmed is a "emailConfirmed" in the tools.ozone.hosting.getAccountHistory schema.
-//
-// RECORDTYPE: HostingGetAccountHistory_EmailConfirmed
 type HostingGetAccountHistory_EmailConfirmed struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.hosting.getAccountHistory#emailConfirmed" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#emailConfirmed"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#emailConfirmed"`
 	Email         string `json:"email" cborgen:"email"`
 }
 
 // HostingGetAccountHistory_EmailUpdated is a "emailUpdated" in the tools.ozone.hosting.getAccountHistory schema.
-//
-// RECORDTYPE: HostingGetAccountHistory_EmailUpdated
 type HostingGetAccountHistory_EmailUpdated struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.hosting.getAccountHistory#emailUpdated" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#emailUpdated"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#emailUpdated"`
 	Email         string `json:"email" cborgen:"email"`
 }
 
@@ -73,8 +67,9 @@ func (t *HostingGetAccountHistory_Event_Details) MarshalJSON() ([]byte, error) {
 		t.HostingGetAccountHistory_HandleUpdated.LexiconTypeID = "tools.ozone.hosting.getAccountHistory#handleUpdated"
 		return json.Marshal(t.HostingGetAccountHistory_HandleUpdated)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *HostingGetAccountHistory_Event_Details) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -104,10 +99,8 @@ func (t *HostingGetAccountHistory_Event_Details) UnmarshalJSON(b []byte) error {
 }
 
 // HostingGetAccountHistory_HandleUpdated is a "handleUpdated" in the tools.ozone.hosting.getAccountHistory schema.
-//
-// RECORDTYPE: HostingGetAccountHistory_HandleUpdated
 type HostingGetAccountHistory_HandleUpdated struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.hosting.getAccountHistory#handleUpdated" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#handleUpdated"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#handleUpdated"`
 	Handle        string `json:"handle" cborgen:"handle"`
 }
 
@@ -118,10 +111,8 @@ type HostingGetAccountHistory_Output struct {
 }
 
 // HostingGetAccountHistory_PasswordUpdated is a "passwordUpdated" in the tools.ozone.hosting.getAccountHistory schema.
-//
-// RECORDTYPE: HostingGetAccountHistory_PasswordUpdated
 type HostingGetAccountHistory_PasswordUpdated struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.hosting.getAccountHistory#passwordUpdated" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#passwordUpdated"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.hosting.getAccountHistory#passwordUpdated"`
 }
 
 // HostingGetAccountHistory calls the XRPC method "tools.ozone.hosting.getAccountHistory".
diff --git a/api/ozone/moderationcancelScheduledActions.go b/api/ozone/moderationcancelScheduledActions.go
new file mode 100644
index 00000000..13ae1486
--- /dev/null
+++ b/api/ozone/moderationcancelScheduledActions.go
@@ -0,0 +1,44 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: tools.ozone.moderation.cancelScheduledActions
+
+package ozone
+
+import (
+	"context"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// ModerationCancelScheduledActions_CancellationResults is a "cancellationResults" in the tools.ozone.moderation.cancelScheduledActions schema.
+type ModerationCancelScheduledActions_CancellationResults struct {
+	// failed: DIDs for which cancellation failed with error details
+	Failed []*ModerationCancelScheduledActions_FailedCancellation `json:"failed" cborgen:"failed"`
+	// succeeded: DIDs for which all pending scheduled actions were successfully cancelled
+	Succeeded []string `json:"succeeded" cborgen:"succeeded"`
+}
+
+// ModerationCancelScheduledActions_FailedCancellation is a "failedCancellation" in the tools.ozone.moderation.cancelScheduledActions schema.
+type ModerationCancelScheduledActions_FailedCancellation struct {
+	Did       string  `json:"did" cborgen:"did"`
+	Error     string  `json:"error" cborgen:"error"`
+	ErrorCode *string `json:"errorCode,omitempty" cborgen:"errorCode,omitempty"`
+}
+
+// ModerationCancelScheduledActions_Input is the input argument to a tools.ozone.moderation.cancelScheduledActions call.
+type ModerationCancelScheduledActions_Input struct {
+	// comment: Optional comment describing the reason for cancellation
+	Comment *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
+	// subjects: Array of DID subjects to cancel scheduled actions for
+	Subjects []string `json:"subjects" cborgen:"subjects"`
+}
+
+// ModerationCancelScheduledActions calls the XRPC method "tools.ozone.moderation.cancelScheduledActions".
+func ModerationCancelScheduledActions(ctx context.Context, c util.LexClient, input *ModerationCancelScheduledActions_Input) (*ModerationCancelScheduledActions_CancellationResults, error) {
+	var out ModerationCancelScheduledActions_CancellationResults
+	if err := c.LexDo(ctx, util.Procedure, "application/json", "tools.ozone.moderation.cancelScheduledActions", nil, input, &out); err != nil {
+		return nil, err
+	}
+
+	return &out, nil
+}
diff --git a/api/ozone/moderationdefs.go b/api/ozone/moderationdefs.go
index cbbf8cd8..848be3fd 100644
--- a/api/ozone/moderationdefs.go
+++ b/api/ozone/moderationdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.defs
 
-// schema: tools.ozone.moderation.defs
+package ozone
 
 import (
 	"encoding/json"
@@ -16,10 +16,8 @@ import (
 // ModerationDefs_AccountEvent is a "accountEvent" in the tools.ozone.moderation.defs schema.
 //
 // Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
-//
-// RECORDTYPE: ModerationDefs_AccountEvent
 type ModerationDefs_AccountEvent struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#accountEvent" cborgen:"$type,const=tools.ozone.moderation.defs#accountEvent"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#accountEvent"`
 	// active: Indicates that the account has a repository which can be fetched from the host that emitted this event.
 	Active    bool    `json:"active" cborgen:"active"`
 	Comment   *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
@@ -28,10 +26,8 @@ type ModerationDefs_AccountEvent struct {
 }
 
 // ModerationDefs_AccountHosting is a "accountHosting" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_AccountHosting
 type ModerationDefs_AccountHosting struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#accountHosting" cborgen:"$type,const=tools.ozone.moderation.defs#accountHosting"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#accountHosting"`
 	CreatedAt     *string `json:"createdAt,omitempty" cborgen:"createdAt,omitempty"`
 	DeactivatedAt *string `json:"deactivatedAt,omitempty" cborgen:"deactivatedAt,omitempty"`
 	DeletedAt     *string `json:"deletedAt,omitempty" cborgen:"deletedAt,omitempty"`
@@ -59,10 +55,8 @@ type ModerationDefs_AccountStats struct {
 // ModerationDefs_AgeAssuranceEvent is a "ageAssuranceEvent" in the tools.ozone.moderation.defs schema.
 //
 // Age assurance info coming directly from users. Only works on DID subjects.
-//
-// RECORDTYPE: ModerationDefs_AgeAssuranceEvent
 type ModerationDefs_AgeAssuranceEvent struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#ageAssuranceEvent" cborgen:"$type,const=tools.ozone.moderation.defs#ageAssuranceEvent"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#ageAssuranceEvent"`
 	// attemptId: The unique identifier for this instance of the age assurance flow, in UUID format.
 	AttemptId string `json:"attemptId" cborgen:"attemptId"`
 	// completeIp: The IP address used when completing the AA flow.
@@ -82,10 +76,8 @@ type ModerationDefs_AgeAssuranceEvent struct {
 // ModerationDefs_AgeAssuranceOverrideEvent is a "ageAssuranceOverrideEvent" in the tools.ozone.moderation.defs schema.
 //
 // Age assurance status override by moderators. Only works on DID subjects.
-//
-// RECORDTYPE: ModerationDefs_AgeAssuranceOverrideEvent
 type ModerationDefs_AgeAssuranceOverrideEvent struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#ageAssuranceOverrideEvent" cborgen:"$type,const=tools.ozone.moderation.defs#ageAssuranceOverrideEvent"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#ageAssuranceOverrideEvent"`
 	// comment: Comment describing the reason for the override.
 	Comment string `json:"comment" cborgen:"comment"`
 	// status: The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.
@@ -116,8 +108,9 @@ func (t *ModerationDefs_BlobView_Details) MarshalJSON() ([]byte, error) {
 		t.ModerationDefs_VideoDetails.LexiconTypeID = "tools.ozone.moderation.defs#videoDetails"
 		return json.Marshal(t.ModerationDefs_VideoDetails)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_BlobView_Details) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -137,13 +130,19 @@ func (t *ModerationDefs_BlobView_Details) UnmarshalJSON(b []byte) error {
 	}
 }
 
+// ModerationDefs_CancelScheduledTakedownEvent is a "cancelScheduledTakedownEvent" in the tools.ozone.moderation.defs schema.
+//
+// Logs cancellation of a scheduled takedown action for an account.
+type ModerationDefs_CancelScheduledTakedownEvent struct {
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#cancelScheduledTakedownEvent"`
+	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
+}
+
 // ModerationDefs_IdentityEvent is a "identityEvent" in the tools.ozone.moderation.defs schema.
 //
 // Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
-//
-// RECORDTYPE: ModerationDefs_IdentityEvent
 type ModerationDefs_IdentityEvent struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#identityEvent" cborgen:"$type,const=tools.ozone.moderation.defs#identityEvent"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#identityEvent"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	Handle        *string `json:"handle,omitempty" cborgen:"handle,omitempty"`
 	PdsHost       *string `json:"pdsHost,omitempty" cborgen:"pdsHost,omitempty"`
@@ -152,19 +151,15 @@ type ModerationDefs_IdentityEvent struct {
 }
 
 // ModerationDefs_ImageDetails is a "imageDetails" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_ImageDetails
 type ModerationDefs_ImageDetails struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#imageDetails" cborgen:"$type,const=tools.ozone.moderation.defs#imageDetails"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#imageDetails"`
 	Height        int64  `json:"height" cborgen:"height"`
 	Width         int64  `json:"width" cborgen:"width"`
 }
 
 // ModerationDefs_ModEventAcknowledge is a "modEventAcknowledge" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_ModEventAcknowledge
 type ModerationDefs_ModEventAcknowledge struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventAcknowledge" cborgen:"$type,const=tools.ozone.moderation.defs#modEventAcknowledge"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventAcknowledge"`
 	// acknowledgeAccountSubjects: If true, all other reports on content authored by this account will be resolved (acknowledged).
 	AcknowledgeAccountSubjects *bool   `json:"acknowledgeAccountSubjects,omitempty" cborgen:"acknowledgeAccountSubjects,omitempty"`
 	Comment                    *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
@@ -173,10 +168,8 @@ type ModerationDefs_ModEventAcknowledge struct {
 // ModerationDefs_ModEventComment is a "modEventComment" in the tools.ozone.moderation.defs schema.
 //
 // Add a comment to a subject. An empty comment will clear any previously set sticky comment.
-//
-// RECORDTYPE: ModerationDefs_ModEventComment
 type ModerationDefs_ModEventComment struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventComment" cborgen:"$type,const=tools.ozone.moderation.defs#modEventComment"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventComment"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	// sticky: Make the comment persistent on the subject
 	Sticky *bool `json:"sticky,omitempty" cborgen:"sticky,omitempty"`
@@ -185,20 +178,16 @@ type ModerationDefs_ModEventComment struct {
 // ModerationDefs_ModEventDivert is a "modEventDivert" in the tools.ozone.moderation.defs schema.
 //
 // Divert a record's blobs to a 3rd party service for further scanning/tagging
-//
-// RECORDTYPE: ModerationDefs_ModEventDivert
 type ModerationDefs_ModEventDivert struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventDivert" cborgen:"$type,const=tools.ozone.moderation.defs#modEventDivert"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventDivert"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 }
 
 // ModerationDefs_ModEventEmail is a "modEventEmail" in the tools.ozone.moderation.defs schema.
 //
-// # Keep a log of outgoing email to a user
-//
-// RECORDTYPE: ModerationDefs_ModEventEmail
+// Keep a log of outgoing email to a user
 type ModerationDefs_ModEventEmail struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventEmail" cborgen:"$type,const=tools.ozone.moderation.defs#modEventEmail"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventEmail"`
 	// comment: Additional comment about the outgoing comm.
 	Comment *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	// content: The content of the email sent to the user.
@@ -208,20 +197,16 @@ type ModerationDefs_ModEventEmail struct {
 }
 
 // ModerationDefs_ModEventEscalate is a "modEventEscalate" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_ModEventEscalate
 type ModerationDefs_ModEventEscalate struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventEscalate" cborgen:"$type,const=tools.ozone.moderation.defs#modEventEscalate"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventEscalate"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 }
 
 // ModerationDefs_ModEventLabel is a "modEventLabel" in the tools.ozone.moderation.defs schema.
 //
 // Apply/Negate labels on a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventLabel
 type ModerationDefs_ModEventLabel struct {
-	LexiconTypeID   string   `json:"$type,const=tools.ozone.moderation.defs#modEventLabel" cborgen:"$type,const=tools.ozone.moderation.defs#modEventLabel"`
+	LexiconTypeID   string   `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventLabel"`
 	Comment         *string  `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	CreateLabelVals []string `json:"createLabelVals" cborgen:"createLabelVals"`
 	// durationInHours: Indicates how long the label will remain on the subject. Only applies on labels that are being added.
@@ -231,11 +216,9 @@ type ModerationDefs_ModEventLabel struct {
 
 // ModerationDefs_ModEventMute is a "modEventMute" in the tools.ozone.moderation.defs schema.
 //
-// # Mute incoming reports on a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventMute
+// Mute incoming reports on a subject
 type ModerationDefs_ModEventMute struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventMute" cborgen:"$type,const=tools.ozone.moderation.defs#modEventMute"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventMute"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	// durationInHours: Indicates how long the subject should remain muted.
 	DurationInHours int64 `json:"durationInHours" cborgen:"durationInHours"`
@@ -243,11 +226,9 @@ type ModerationDefs_ModEventMute struct {
 
 // ModerationDefs_ModEventMuteReporter is a "modEventMuteReporter" in the tools.ozone.moderation.defs schema.
 //
-// # Mute incoming reports from an account
-//
-// RECORDTYPE: ModerationDefs_ModEventMuteReporter
+// Mute incoming reports from an account
 type ModerationDefs_ModEventMuteReporter struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventMuteReporter" cborgen:"$type,const=tools.ozone.moderation.defs#modEventMuteReporter"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventMuteReporter"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	// durationInHours: Indicates how long the account should remain muted. Falsy value here means a permanent mute.
 	DurationInHours *int64 `json:"durationInHours,omitempty" cborgen:"durationInHours,omitempty"`
@@ -256,21 +237,17 @@ type ModerationDefs_ModEventMuteReporter struct {
 // ModerationDefs_ModEventPriorityScore is a "modEventPriorityScore" in the tools.ozone.moderation.defs schema.
 //
 // Set priority score of the subject. Higher score means higher priority.
-//
-// RECORDTYPE: ModerationDefs_ModEventPriorityScore
 type ModerationDefs_ModEventPriorityScore struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventPriorityScore" cborgen:"$type,const=tools.ozone.moderation.defs#modEventPriorityScore"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventPriorityScore"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	Score         int64   `json:"score" cborgen:"score"`
 }
 
 // ModerationDefs_ModEventReport is a "modEventReport" in the tools.ozone.moderation.defs schema.
 //
-// # Report a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventReport
+// Report a subject
 type ModerationDefs_ModEventReport struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#modEventReport" cborgen:"$type,const=tools.ozone.moderation.defs#modEventReport"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventReport"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	// isReporterMuted: Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject.
 	IsReporterMuted *bool   `json:"isReporterMuted,omitempty" cborgen:"isReporterMuted,omitempty"`
@@ -279,22 +256,18 @@ type ModerationDefs_ModEventReport struct {
 
 // ModerationDefs_ModEventResolveAppeal is a "modEventResolveAppeal" in the tools.ozone.moderation.defs schema.
 //
-// # Resolve appeal on a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventResolveAppeal
+// Resolve appeal on a subject
 type ModerationDefs_ModEventResolveAppeal struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventResolveAppeal" cborgen:"$type,const=tools.ozone.moderation.defs#modEventResolveAppeal"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventResolveAppeal"`
 	// comment: Describe resolution.
 	Comment *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 }
 
 // ModerationDefs_ModEventReverseTakedown is a "modEventReverseTakedown" in the tools.ozone.moderation.defs schema.
 //
-// # Revert take down action on a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventReverseTakedown
+// Revert take down action on a subject
 type ModerationDefs_ModEventReverseTakedown struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventReverseTakedown" cborgen:"$type,const=tools.ozone.moderation.defs#modEventReverseTakedown"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventReverseTakedown"`
 	// comment: Describe reasoning behind the reversal.
 	Comment *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 }
@@ -302,10 +275,8 @@ type ModerationDefs_ModEventReverseTakedown struct {
 // ModerationDefs_ModEventTag is a "modEventTag" in the tools.ozone.moderation.defs schema.
 //
 // Add/Remove a tag on a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventTag
 type ModerationDefs_ModEventTag struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventTag" cborgen:"$type,const=tools.ozone.moderation.defs#modEventTag"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventTag"`
 	// add: Tags to be added to the subject. If already exists, won't be duplicated.
 	Add []string `json:"add" cborgen:"add"`
 	// comment: Additional comment about added/removed tags.
@@ -316,11 +287,9 @@ type ModerationDefs_ModEventTag struct {
 
 // ModerationDefs_ModEventTakedown is a "modEventTakedown" in the tools.ozone.moderation.defs schema.
 //
-// # Take down a subject permanently or temporarily
-//
-// RECORDTYPE: ModerationDefs_ModEventTakedown
+// Take down a subject permanently or temporarily
 type ModerationDefs_ModEventTakedown struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventTakedown" cborgen:"$type,const=tools.ozone.moderation.defs#modEventTakedown"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventTakedown"`
 	// acknowledgeAccountSubjects: If true, all other reports on content authored by this account will be resolved (acknowledged).
 	AcknowledgeAccountSubjects *bool   `json:"acknowledgeAccountSubjects,omitempty" cborgen:"acknowledgeAccountSubjects,omitempty"`
 	Comment                    *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
@@ -332,22 +301,18 @@ type ModerationDefs_ModEventTakedown struct {
 
 // ModerationDefs_ModEventUnmute is a "modEventUnmute" in the tools.ozone.moderation.defs schema.
 //
-// # Unmute action on a subject
-//
-// RECORDTYPE: ModerationDefs_ModEventUnmute
+// Unmute action on a subject
 type ModerationDefs_ModEventUnmute struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventUnmute" cborgen:"$type,const=tools.ozone.moderation.defs#modEventUnmute"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventUnmute"`
 	// comment: Describe reasoning behind the reversal.
 	Comment *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 }
 
 // ModerationDefs_ModEventUnmuteReporter is a "modEventUnmuteReporter" in the tools.ozone.moderation.defs schema.
 //
-// # Unmute incoming reports from an account
-//
-// RECORDTYPE: ModerationDefs_ModEventUnmuteReporter
+// Unmute incoming reports from an account
 type ModerationDefs_ModEventUnmuteReporter struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#modEventUnmuteReporter" cborgen:"$type,const=tools.ozone.moderation.defs#modEventUnmuteReporter"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#modEventUnmuteReporter"`
 	// comment: Describe reasoning behind the reversal.
 	Comment *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 }
@@ -377,27 +342,30 @@ type ModerationDefs_ModEventViewDetail struct {
 }
 
 type ModerationDefs_ModEventViewDetail_Event struct {
-	ModerationDefs_ModEventTakedown          *ModerationDefs_ModEventTakedown
-	ModerationDefs_ModEventReverseTakedown   *ModerationDefs_ModEventReverseTakedown
-	ModerationDefs_ModEventComment           *ModerationDefs_ModEventComment
-	ModerationDefs_ModEventReport            *ModerationDefs_ModEventReport
-	ModerationDefs_ModEventLabel             *ModerationDefs_ModEventLabel
-	ModerationDefs_ModEventAcknowledge       *ModerationDefs_ModEventAcknowledge
-	ModerationDefs_ModEventEscalate          *ModerationDefs_ModEventEscalate
-	ModerationDefs_ModEventMute              *ModerationDefs_ModEventMute
-	ModerationDefs_ModEventUnmute            *ModerationDefs_ModEventUnmute
-	ModerationDefs_ModEventMuteReporter      *ModerationDefs_ModEventMuteReporter
-	ModerationDefs_ModEventUnmuteReporter    *ModerationDefs_ModEventUnmuteReporter
-	ModerationDefs_ModEventEmail             *ModerationDefs_ModEventEmail
-	ModerationDefs_ModEventResolveAppeal     *ModerationDefs_ModEventResolveAppeal
-	ModerationDefs_ModEventDivert            *ModerationDefs_ModEventDivert
-	ModerationDefs_ModEventTag               *ModerationDefs_ModEventTag
-	ModerationDefs_AccountEvent              *ModerationDefs_AccountEvent
-	ModerationDefs_IdentityEvent             *ModerationDefs_IdentityEvent
-	ModerationDefs_RecordEvent               *ModerationDefs_RecordEvent
-	ModerationDefs_ModEventPriorityScore     *ModerationDefs_ModEventPriorityScore
-	ModerationDefs_AgeAssuranceEvent         *ModerationDefs_AgeAssuranceEvent
-	ModerationDefs_AgeAssuranceOverrideEvent *ModerationDefs_AgeAssuranceOverrideEvent
+	ModerationDefs_ModEventTakedown              *ModerationDefs_ModEventTakedown
+	ModerationDefs_ModEventReverseTakedown       *ModerationDefs_ModEventReverseTakedown
+	ModerationDefs_ModEventComment               *ModerationDefs_ModEventComment
+	ModerationDefs_ModEventReport                *ModerationDefs_ModEventReport
+	ModerationDefs_ModEventLabel                 *ModerationDefs_ModEventLabel
+	ModerationDefs_ModEventAcknowledge           *ModerationDefs_ModEventAcknowledge
+	ModerationDefs_ModEventEscalate              *ModerationDefs_ModEventEscalate
+	ModerationDefs_ModEventMute                  *ModerationDefs_ModEventMute
+	ModerationDefs_ModEventUnmute                *ModerationDefs_ModEventUnmute
+	ModerationDefs_ModEventMuteReporter          *ModerationDefs_ModEventMuteReporter
+	ModerationDefs_ModEventUnmuteReporter        *ModerationDefs_ModEventUnmuteReporter
+	ModerationDefs_ModEventEmail                 *ModerationDefs_ModEventEmail
+	ModerationDefs_ModEventResolveAppeal         *ModerationDefs_ModEventResolveAppeal
+	ModerationDefs_ModEventDivert                *ModerationDefs_ModEventDivert
+	ModerationDefs_ModEventTag                   *ModerationDefs_ModEventTag
+	ModerationDefs_AccountEvent                  *ModerationDefs_AccountEvent
+	ModerationDefs_IdentityEvent                 *ModerationDefs_IdentityEvent
+	ModerationDefs_RecordEvent                   *ModerationDefs_RecordEvent
+	ModerationDefs_ModEventPriorityScore         *ModerationDefs_ModEventPriorityScore
+	ModerationDefs_AgeAssuranceEvent             *ModerationDefs_AgeAssuranceEvent
+	ModerationDefs_AgeAssuranceOverrideEvent     *ModerationDefs_AgeAssuranceOverrideEvent
+	ModerationDefs_RevokeAccountCredentialsEvent *ModerationDefs_RevokeAccountCredentialsEvent
+	ModerationDefs_ScheduleTakedownEvent         *ModerationDefs_ScheduleTakedownEvent
+	ModerationDefs_CancelScheduledTakedownEvent  *ModerationDefs_CancelScheduledTakedownEvent
 }
 
 func (t *ModerationDefs_ModEventViewDetail_Event) MarshalJSON() ([]byte, error) {
@@ -485,8 +453,21 @@ func (t *ModerationDefs_ModEventViewDetail_Event) MarshalJSON() ([]byte, error)
 		t.ModerationDefs_AgeAssuranceOverrideEvent.LexiconTypeID = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent"
 		return json.Marshal(t.ModerationDefs_AgeAssuranceOverrideEvent)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	if t.ModerationDefs_RevokeAccountCredentialsEvent != nil {
+		t.ModerationDefs_RevokeAccountCredentialsEvent.LexiconTypeID = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent"
+		return json.Marshal(t.ModerationDefs_RevokeAccountCredentialsEvent)
+	}
+	if t.ModerationDefs_ScheduleTakedownEvent != nil {
+		t.ModerationDefs_ScheduleTakedownEvent.LexiconTypeID = "tools.ozone.moderation.defs#scheduleTakedownEvent"
+		return json.Marshal(t.ModerationDefs_ScheduleTakedownEvent)
+	}
+	if t.ModerationDefs_CancelScheduledTakedownEvent != nil {
+		t.ModerationDefs_CancelScheduledTakedownEvent.LexiconTypeID = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent"
+		return json.Marshal(t.ModerationDefs_CancelScheduledTakedownEvent)
+	}
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_ModEventViewDetail_Event) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -557,6 +538,15 @@ func (t *ModerationDefs_ModEventViewDetail_Event) UnmarshalJSON(b []byte) error
 	case "tools.ozone.moderation.defs#ageAssuranceOverrideEvent":
 		t.ModerationDefs_AgeAssuranceOverrideEvent = new(ModerationDefs_AgeAssuranceOverrideEvent)
 		return json.Unmarshal(b, t.ModerationDefs_AgeAssuranceOverrideEvent)
+	case "tools.ozone.moderation.defs#revokeAccountCredentialsEvent":
+		t.ModerationDefs_RevokeAccountCredentialsEvent = new(ModerationDefs_RevokeAccountCredentialsEvent)
+		return json.Unmarshal(b, t.ModerationDefs_RevokeAccountCredentialsEvent)
+	case "tools.ozone.moderation.defs#scheduleTakedownEvent":
+		t.ModerationDefs_ScheduleTakedownEvent = new(ModerationDefs_ScheduleTakedownEvent)
+		return json.Unmarshal(b, t.ModerationDefs_ScheduleTakedownEvent)
+	case "tools.ozone.moderation.defs#cancelScheduledTakedownEvent":
+		t.ModerationDefs_CancelScheduledTakedownEvent = new(ModerationDefs_CancelScheduledTakedownEvent)
+		return json.Unmarshal(b, t.ModerationDefs_CancelScheduledTakedownEvent)
 
 	default:
 		return nil
@@ -587,8 +577,9 @@ func (t *ModerationDefs_ModEventViewDetail_Subject) MarshalJSON() ([]byte, error
 		t.ModerationDefs_RecordViewNotFound.LexiconTypeID = "tools.ozone.moderation.defs#recordViewNotFound"
 		return json.Marshal(t.ModerationDefs_RecordViewNotFound)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_ModEventViewDetail_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -615,27 +606,30 @@ func (t *ModerationDefs_ModEventViewDetail_Subject) UnmarshalJSON(b []byte) erro
 }
 
 type ModerationDefs_ModEventView_Event struct {
-	ModerationDefs_ModEventTakedown          *ModerationDefs_ModEventTakedown
-	ModerationDefs_ModEventReverseTakedown   *ModerationDefs_ModEventReverseTakedown
-	ModerationDefs_ModEventComment           *ModerationDefs_ModEventComment
-	ModerationDefs_ModEventReport            *ModerationDefs_ModEventReport
-	ModerationDefs_ModEventLabel             *ModerationDefs_ModEventLabel
-	ModerationDefs_ModEventAcknowledge       *ModerationDefs_ModEventAcknowledge
-	ModerationDefs_ModEventEscalate          *ModerationDefs_ModEventEscalate
-	ModerationDefs_ModEventMute              *ModerationDefs_ModEventMute
-	ModerationDefs_ModEventUnmute            *ModerationDefs_ModEventUnmute
-	ModerationDefs_ModEventMuteReporter      *ModerationDefs_ModEventMuteReporter
-	ModerationDefs_ModEventUnmuteReporter    *ModerationDefs_ModEventUnmuteReporter
-	ModerationDefs_ModEventEmail             *ModerationDefs_ModEventEmail
-	ModerationDefs_ModEventResolveAppeal     *ModerationDefs_ModEventResolveAppeal
-	ModerationDefs_ModEventDivert            *ModerationDefs_ModEventDivert
-	ModerationDefs_ModEventTag               *ModerationDefs_ModEventTag
-	ModerationDefs_AccountEvent              *ModerationDefs_AccountEvent
-	ModerationDefs_IdentityEvent             *ModerationDefs_IdentityEvent
-	ModerationDefs_RecordEvent               *ModerationDefs_RecordEvent
-	ModerationDefs_ModEventPriorityScore     *ModerationDefs_ModEventPriorityScore
-	ModerationDefs_AgeAssuranceEvent         *ModerationDefs_AgeAssuranceEvent
-	ModerationDefs_AgeAssuranceOverrideEvent *ModerationDefs_AgeAssuranceOverrideEvent
+	ModerationDefs_ModEventTakedown              *ModerationDefs_ModEventTakedown
+	ModerationDefs_ModEventReverseTakedown       *ModerationDefs_ModEventReverseTakedown
+	ModerationDefs_ModEventComment               *ModerationDefs_ModEventComment
+	ModerationDefs_ModEventReport                *ModerationDefs_ModEventReport
+	ModerationDefs_ModEventLabel                 *ModerationDefs_ModEventLabel
+	ModerationDefs_ModEventAcknowledge           *ModerationDefs_ModEventAcknowledge
+	ModerationDefs_ModEventEscalate              *ModerationDefs_ModEventEscalate
+	ModerationDefs_ModEventMute                  *ModerationDefs_ModEventMute
+	ModerationDefs_ModEventUnmute                *ModerationDefs_ModEventUnmute
+	ModerationDefs_ModEventMuteReporter          *ModerationDefs_ModEventMuteReporter
+	ModerationDefs_ModEventUnmuteReporter        *ModerationDefs_ModEventUnmuteReporter
+	ModerationDefs_ModEventEmail                 *ModerationDefs_ModEventEmail
+	ModerationDefs_ModEventResolveAppeal         *ModerationDefs_ModEventResolveAppeal
+	ModerationDefs_ModEventDivert                *ModerationDefs_ModEventDivert
+	ModerationDefs_ModEventTag                   *ModerationDefs_ModEventTag
+	ModerationDefs_AccountEvent                  *ModerationDefs_AccountEvent
+	ModerationDefs_IdentityEvent                 *ModerationDefs_IdentityEvent
+	ModerationDefs_RecordEvent                   *ModerationDefs_RecordEvent
+	ModerationDefs_ModEventPriorityScore         *ModerationDefs_ModEventPriorityScore
+	ModerationDefs_AgeAssuranceEvent             *ModerationDefs_AgeAssuranceEvent
+	ModerationDefs_AgeAssuranceOverrideEvent     *ModerationDefs_AgeAssuranceOverrideEvent
+	ModerationDefs_RevokeAccountCredentialsEvent *ModerationDefs_RevokeAccountCredentialsEvent
+	ModerationDefs_ScheduleTakedownEvent         *ModerationDefs_ScheduleTakedownEvent
+	ModerationDefs_CancelScheduledTakedownEvent  *ModerationDefs_CancelScheduledTakedownEvent
 }
 
 func (t *ModerationDefs_ModEventView_Event) MarshalJSON() ([]byte, error) {
@@ -723,8 +717,21 @@ func (t *ModerationDefs_ModEventView_Event) MarshalJSON() ([]byte, error) {
 		t.ModerationDefs_AgeAssuranceOverrideEvent.LexiconTypeID = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent"
 		return json.Marshal(t.ModerationDefs_AgeAssuranceOverrideEvent)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	if t.ModerationDefs_RevokeAccountCredentialsEvent != nil {
+		t.ModerationDefs_RevokeAccountCredentialsEvent.LexiconTypeID = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent"
+		return json.Marshal(t.ModerationDefs_RevokeAccountCredentialsEvent)
+	}
+	if t.ModerationDefs_ScheduleTakedownEvent != nil {
+		t.ModerationDefs_ScheduleTakedownEvent.LexiconTypeID = "tools.ozone.moderation.defs#scheduleTakedownEvent"
+		return json.Marshal(t.ModerationDefs_ScheduleTakedownEvent)
+	}
+	if t.ModerationDefs_CancelScheduledTakedownEvent != nil {
+		t.ModerationDefs_CancelScheduledTakedownEvent.LexiconTypeID = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent"
+		return json.Marshal(t.ModerationDefs_CancelScheduledTakedownEvent)
+	}
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_ModEventView_Event) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -795,6 +802,15 @@ func (t *ModerationDefs_ModEventView_Event) UnmarshalJSON(b []byte) error {
 	case "tools.ozone.moderation.defs#ageAssuranceOverrideEvent":
 		t.ModerationDefs_AgeAssuranceOverrideEvent = new(ModerationDefs_AgeAssuranceOverrideEvent)
 		return json.Unmarshal(b, t.ModerationDefs_AgeAssuranceOverrideEvent)
+	case "tools.ozone.moderation.defs#revokeAccountCredentialsEvent":
+		t.ModerationDefs_RevokeAccountCredentialsEvent = new(ModerationDefs_RevokeAccountCredentialsEvent)
+		return json.Unmarshal(b, t.ModerationDefs_RevokeAccountCredentialsEvent)
+	case "tools.ozone.moderation.defs#scheduleTakedownEvent":
+		t.ModerationDefs_ScheduleTakedownEvent = new(ModerationDefs_ScheduleTakedownEvent)
+		return json.Unmarshal(b, t.ModerationDefs_ScheduleTakedownEvent)
+	case "tools.ozone.moderation.defs#cancelScheduledTakedownEvent":
+		t.ModerationDefs_CancelScheduledTakedownEvent = new(ModerationDefs_CancelScheduledTakedownEvent)
+		return json.Unmarshal(b, t.ModerationDefs_CancelScheduledTakedownEvent)
 
 	default:
 		return nil
@@ -820,8 +836,9 @@ func (t *ModerationDefs_ModEventView_Subject) MarshalJSON() ([]byte, error) {
 		t.ConvoDefs_MessageRef.LexiconTypeID = "chat.bsky.convo.defs#messageRef"
 		return json.Marshal(t.ConvoDefs_MessageRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_ModEventView_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -867,10 +884,8 @@ type ModerationDefs_ModerationDetail struct {
 // ModerationDefs_RecordEvent is a "recordEvent" in the tools.ozone.moderation.defs schema.
 //
 // Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
-//
-// RECORDTYPE: ModerationDefs_RecordEvent
 type ModerationDefs_RecordEvent struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#recordEvent" cborgen:"$type,const=tools.ozone.moderation.defs#recordEvent"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#recordEvent"`
 	Cid           *string `json:"cid,omitempty" cborgen:"cid,omitempty"`
 	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
 	Op            string  `json:"op" cborgen:"op"`
@@ -878,10 +893,8 @@ type ModerationDefs_RecordEvent struct {
 }
 
 // ModerationDefs_RecordHosting is a "recordHosting" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RecordHosting
 type ModerationDefs_RecordHosting struct {
-	LexiconTypeID string  `json:"$type,const=tools.ozone.moderation.defs#recordHosting" cborgen:"$type,const=tools.ozone.moderation.defs#recordHosting"`
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#recordHosting"`
 	CreatedAt     *string `json:"createdAt,omitempty" cborgen:"createdAt,omitempty"`
 	DeletedAt     *string `json:"deletedAt,omitempty" cborgen:"deletedAt,omitempty"`
 	Status        string  `json:"status" cborgen:"status"`
@@ -889,10 +902,8 @@ type ModerationDefs_RecordHosting struct {
 }
 
 // ModerationDefs_RecordView is a "recordView" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RecordView
 type ModerationDefs_RecordView struct {
-	LexiconTypeID string                     `json:"$type,const=tools.ozone.moderation.defs#recordView" cborgen:"$type,const=tools.ozone.moderation.defs#recordView"`
+	LexiconTypeID string                     `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#recordView"`
 	BlobCids      []string                   `json:"blobCids" cborgen:"blobCids"`
 	Cid           string                     `json:"cid" cborgen:"cid"`
 	IndexedAt     string                     `json:"indexedAt" cborgen:"indexedAt"`
@@ -903,10 +914,8 @@ type ModerationDefs_RecordView struct {
 }
 
 // ModerationDefs_RecordViewDetail is a "recordViewDetail" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RecordViewDetail
 type ModerationDefs_RecordViewDetail struct {
-	LexiconTypeID string                             `json:"$type,const=tools.ozone.moderation.defs#recordViewDetail" cborgen:"$type,const=tools.ozone.moderation.defs#recordViewDetail"`
+	LexiconTypeID string                             `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#recordViewDetail"`
 	Blobs         []*ModerationDefs_BlobView         `json:"blobs" cborgen:"blobs"`
 	Cid           string                             `json:"cid" cborgen:"cid"`
 	IndexedAt     string                             `json:"indexedAt" cborgen:"indexedAt"`
@@ -918,10 +927,8 @@ type ModerationDefs_RecordViewDetail struct {
 }
 
 // ModerationDefs_RecordViewNotFound is a "recordViewNotFound" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RecordViewNotFound
 type ModerationDefs_RecordViewNotFound struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#recordViewNotFound" cborgen:"$type,const=tools.ozone.moderation.defs#recordViewNotFound"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#recordViewNotFound"`
 	Uri           string `json:"uri" cborgen:"uri"`
 }
 
@@ -948,10 +955,8 @@ type ModerationDefs_RecordsStats struct {
 }
 
 // ModerationDefs_RepoView is a "repoView" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RepoView
 type ModerationDefs_RepoView struct {
-	LexiconTypeID    string                                       `json:"$type,const=tools.ozone.moderation.defs#repoView" cborgen:"$type,const=tools.ozone.moderation.defs#repoView"`
+	LexiconTypeID    string                                       `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#repoView"`
 	DeactivatedAt    *string                                      `json:"deactivatedAt,omitempty" cborgen:"deactivatedAt,omitempty"`
 	Did              string                                       `json:"did" cborgen:"did"`
 	Email            *string                                      `json:"email,omitempty" cborgen:"email,omitempty"`
@@ -966,10 +971,8 @@ type ModerationDefs_RepoView struct {
 }
 
 // ModerationDefs_RepoViewDetail is a "repoViewDetail" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RepoViewDetail
 type ModerationDefs_RepoViewDetail struct {
-	LexiconTypeID    string                                       `json:"$type,const=tools.ozone.moderation.defs#repoViewDetail" cborgen:"$type,const=tools.ozone.moderation.defs#repoViewDetail"`
+	LexiconTypeID    string                                       `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#repoViewDetail"`
 	DeactivatedAt    *string                                      `json:"deactivatedAt,omitempty" cborgen:"deactivatedAt,omitempty"`
 	Did              string                                       `json:"did" cborgen:"did"`
 	Email            *string                                      `json:"email,omitempty" cborgen:"email,omitempty"`
@@ -987,10 +990,8 @@ type ModerationDefs_RepoViewDetail struct {
 }
 
 // ModerationDefs_RepoViewNotFound is a "repoViewNotFound" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_RepoViewNotFound
 type ModerationDefs_RepoViewNotFound struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#repoViewNotFound" cborgen:"$type,const=tools.ozone.moderation.defs#repoViewNotFound"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#repoViewNotFound"`
 	Did           string `json:"did" cborgen:"did"`
 }
 
@@ -1015,6 +1016,62 @@ type ModerationDefs_ReporterStats struct {
 	TakendownRecordCount int64 `json:"takendownRecordCount" cborgen:"takendownRecordCount"`
 }
 
+// ModerationDefs_RevokeAccountCredentialsEvent is a "revokeAccountCredentialsEvent" in the tools.ozone.moderation.defs schema.
+//
+// Account credentials revocation by moderators. Only works on DID subjects.
+type ModerationDefs_RevokeAccountCredentialsEvent struct {
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#revokeAccountCredentialsEvent"`
+	// comment: Comment describing the reason for the revocation.
+	Comment string `json:"comment" cborgen:"comment"`
+}
+
+// ModerationDefs_ScheduleTakedownEvent is a "scheduleTakedownEvent" in the tools.ozone.moderation.defs schema.
+//
+// Logs a scheduled takedown action for an account.
+type ModerationDefs_ScheduleTakedownEvent struct {
+	LexiconTypeID string  `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#scheduleTakedownEvent"`
+	Comment       *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
+	ExecuteAfter  *string `json:"executeAfter,omitempty" cborgen:"executeAfter,omitempty"`
+	ExecuteAt     *string `json:"executeAt,omitempty" cborgen:"executeAt,omitempty"`
+	ExecuteUntil  *string `json:"executeUntil,omitempty" cborgen:"executeUntil,omitempty"`
+}
+
+// ModerationDefs_ScheduledActionView is a "scheduledActionView" in the tools.ozone.moderation.defs schema.
+//
+// View of a scheduled moderation action
+type ModerationDefs_ScheduledActionView struct {
+	// action: Type of action to be executed
+	Action string `json:"action" cborgen:"action"`
+	// createdAt: When the scheduled action was created
+	CreatedAt string `json:"createdAt" cborgen:"createdAt"`
+	// createdBy: DID of the user who created this scheduled action
+	CreatedBy string `json:"createdBy" cborgen:"createdBy"`
+	// did: Subject DID for the action
+	Did string `json:"did" cborgen:"did"`
+	// eventData: Serialized event object that will be propagated to the event when performed
+	EventData *util.LexiconTypeDecoder `json:"eventData,omitempty" cborgen:"eventData,omitempty"`
+	// executeAfter: Earliest time to execute the action (for randomized scheduling)
+	ExecuteAfter *string `json:"executeAfter,omitempty" cborgen:"executeAfter,omitempty"`
+	// executeAt: Exact time to execute the action
+	ExecuteAt *string `json:"executeAt,omitempty" cborgen:"executeAt,omitempty"`
+	// executeUntil: Latest time to execute the action (for randomized scheduling)
+	ExecuteUntil *string `json:"executeUntil,omitempty" cborgen:"executeUntil,omitempty"`
+	// executionEventId: ID of the moderation event created when action was successfully executed
+	ExecutionEventId *int64 `json:"executionEventId,omitempty" cborgen:"executionEventId,omitempty"`
+	// id: Auto-incrementing row ID
+	Id int64 `json:"id" cborgen:"id"`
+	// lastExecutedAt: When the action was last attempted to be executed
+	LastExecutedAt *string `json:"lastExecutedAt,omitempty" cborgen:"lastExecutedAt,omitempty"`
+	// lastFailureReason: Reason for the last execution failure
+	LastFailureReason *string `json:"lastFailureReason,omitempty" cborgen:"lastFailureReason,omitempty"`
+	// randomizeExecution: Whether execution time should be randomized within the specified range
+	RandomizeExecution *bool `json:"randomizeExecution,omitempty" cborgen:"randomizeExecution,omitempty"`
+	// status: Current status of the scheduled action
+	Status string `json:"status" cborgen:"status"`
+	// updatedAt: When the scheduled action was last updated
+	UpdatedAt *string `json:"updatedAt,omitempty" cborgen:"updatedAt,omitempty"`
+}
+
 // ModerationDefs_SubjectStatusView is a "subjectStatusView" in the tools.ozone.moderation.defs schema.
 type ModerationDefs_SubjectStatusView struct {
 	// accountStats: Statistics related to the account subject
@@ -1067,8 +1124,9 @@ func (t *ModerationDefs_SubjectStatusView_Hosting) MarshalJSON() ([]byte, error)
 		t.ModerationDefs_RecordHosting.LexiconTypeID = "tools.ozone.moderation.defs#recordHosting"
 		return json.Marshal(t.ModerationDefs_RecordHosting)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_SubjectStatusView_Hosting) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -1107,8 +1165,9 @@ func (t *ModerationDefs_SubjectStatusView_Subject) MarshalJSON() ([]byte, error)
 		t.ConvoDefs_MessageRef.LexiconTypeID = "chat.bsky.convo.defs#messageRef"
 		return json.Marshal(t.ConvoDefs_MessageRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationDefs_SubjectStatusView_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -1144,10 +1203,8 @@ type ModerationDefs_SubjectView struct {
 }
 
 // ModerationDefs_VideoDetails is a "videoDetails" in the tools.ozone.moderation.defs schema.
-//
-// RECORDTYPE: ModerationDefs_VideoDetails
 type ModerationDefs_VideoDetails struct {
-	LexiconTypeID string `json:"$type,const=tools.ozone.moderation.defs#videoDetails" cborgen:"$type,const=tools.ozone.moderation.defs#videoDetails"`
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.defs#videoDetails"`
 	Height        int64  `json:"height" cborgen:"height"`
 	Length        int64  `json:"length" cborgen:"length"`
 	Width         int64  `json:"width" cborgen:"width"`
diff --git a/api/ozone/moderationemitEvent.go b/api/ozone/moderationemitEvent.go
index 6cc1aff8..dbe64463 100644
--- a/api/ozone/moderationemitEvent.go
+++ b/api/ozone/moderationemitEvent.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.emitEvent
 
-// schema: tools.ozone.moderation.emitEvent
+package ozone
 
 import (
 	"context"
@@ -25,27 +25,30 @@ type ModerationEmitEvent_Input struct {
 }
 
 type ModerationEmitEvent_Input_Event struct {
-	ModerationDefs_ModEventTakedown          *ModerationDefs_ModEventTakedown
-	ModerationDefs_ModEventAcknowledge       *ModerationDefs_ModEventAcknowledge
-	ModerationDefs_ModEventEscalate          *ModerationDefs_ModEventEscalate
-	ModerationDefs_ModEventComment           *ModerationDefs_ModEventComment
-	ModerationDefs_ModEventLabel             *ModerationDefs_ModEventLabel
-	ModerationDefs_ModEventReport            *ModerationDefs_ModEventReport
-	ModerationDefs_ModEventMute              *ModerationDefs_ModEventMute
-	ModerationDefs_ModEventUnmute            *ModerationDefs_ModEventUnmute
-	ModerationDefs_ModEventMuteReporter      *ModerationDefs_ModEventMuteReporter
-	ModerationDefs_ModEventUnmuteReporter    *ModerationDefs_ModEventUnmuteReporter
-	ModerationDefs_ModEventReverseTakedown   *ModerationDefs_ModEventReverseTakedown
-	ModerationDefs_ModEventResolveAppeal     *ModerationDefs_ModEventResolveAppeal
-	ModerationDefs_ModEventEmail             *ModerationDefs_ModEventEmail
-	ModerationDefs_ModEventDivert            *ModerationDefs_ModEventDivert
-	ModerationDefs_ModEventTag               *ModerationDefs_ModEventTag
-	ModerationDefs_AccountEvent              *ModerationDefs_AccountEvent
-	ModerationDefs_IdentityEvent             *ModerationDefs_IdentityEvent
-	ModerationDefs_RecordEvent               *ModerationDefs_RecordEvent
-	ModerationDefs_ModEventPriorityScore     *ModerationDefs_ModEventPriorityScore
-	ModerationDefs_AgeAssuranceEvent         *ModerationDefs_AgeAssuranceEvent
-	ModerationDefs_AgeAssuranceOverrideEvent *ModerationDefs_AgeAssuranceOverrideEvent
+	ModerationDefs_ModEventTakedown              *ModerationDefs_ModEventTakedown
+	ModerationDefs_ModEventAcknowledge           *ModerationDefs_ModEventAcknowledge
+	ModerationDefs_ModEventEscalate              *ModerationDefs_ModEventEscalate
+	ModerationDefs_ModEventComment               *ModerationDefs_ModEventComment
+	ModerationDefs_ModEventLabel                 *ModerationDefs_ModEventLabel
+	ModerationDefs_ModEventReport                *ModerationDefs_ModEventReport
+	ModerationDefs_ModEventMute                  *ModerationDefs_ModEventMute
+	ModerationDefs_ModEventUnmute                *ModerationDefs_ModEventUnmute
+	ModerationDefs_ModEventMuteReporter          *ModerationDefs_ModEventMuteReporter
+	ModerationDefs_ModEventUnmuteReporter        *ModerationDefs_ModEventUnmuteReporter
+	ModerationDefs_ModEventReverseTakedown       *ModerationDefs_ModEventReverseTakedown
+	ModerationDefs_ModEventResolveAppeal         *ModerationDefs_ModEventResolveAppeal
+	ModerationDefs_ModEventEmail                 *ModerationDefs_ModEventEmail
+	ModerationDefs_ModEventDivert                *ModerationDefs_ModEventDivert
+	ModerationDefs_ModEventTag                   *ModerationDefs_ModEventTag
+	ModerationDefs_AccountEvent                  *ModerationDefs_AccountEvent
+	ModerationDefs_IdentityEvent                 *ModerationDefs_IdentityEvent
+	ModerationDefs_RecordEvent                   *ModerationDefs_RecordEvent
+	ModerationDefs_ModEventPriorityScore         *ModerationDefs_ModEventPriorityScore
+	ModerationDefs_AgeAssuranceEvent             *ModerationDefs_AgeAssuranceEvent
+	ModerationDefs_AgeAssuranceOverrideEvent     *ModerationDefs_AgeAssuranceOverrideEvent
+	ModerationDefs_RevokeAccountCredentialsEvent *ModerationDefs_RevokeAccountCredentialsEvent
+	ModerationDefs_ScheduleTakedownEvent         *ModerationDefs_ScheduleTakedownEvent
+	ModerationDefs_CancelScheduledTakedownEvent  *ModerationDefs_CancelScheduledTakedownEvent
 }
 
 func (t *ModerationEmitEvent_Input_Event) MarshalJSON() ([]byte, error) {
@@ -133,8 +136,21 @@ func (t *ModerationEmitEvent_Input_Event) MarshalJSON() ([]byte, error) {
 		t.ModerationDefs_AgeAssuranceOverrideEvent.LexiconTypeID = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent"
 		return json.Marshal(t.ModerationDefs_AgeAssuranceOverrideEvent)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	if t.ModerationDefs_RevokeAccountCredentialsEvent != nil {
+		t.ModerationDefs_RevokeAccountCredentialsEvent.LexiconTypeID = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent"
+		return json.Marshal(t.ModerationDefs_RevokeAccountCredentialsEvent)
+	}
+	if t.ModerationDefs_ScheduleTakedownEvent != nil {
+		t.ModerationDefs_ScheduleTakedownEvent.LexiconTypeID = "tools.ozone.moderation.defs#scheduleTakedownEvent"
+		return json.Marshal(t.ModerationDefs_ScheduleTakedownEvent)
+	}
+	if t.ModerationDefs_CancelScheduledTakedownEvent != nil {
+		t.ModerationDefs_CancelScheduledTakedownEvent.LexiconTypeID = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent"
+		return json.Marshal(t.ModerationDefs_CancelScheduledTakedownEvent)
+	}
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationEmitEvent_Input_Event) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -205,6 +221,15 @@ func (t *ModerationEmitEvent_Input_Event) UnmarshalJSON(b []byte) error {
 	case "tools.ozone.moderation.defs#ageAssuranceOverrideEvent":
 		t.ModerationDefs_AgeAssuranceOverrideEvent = new(ModerationDefs_AgeAssuranceOverrideEvent)
 		return json.Unmarshal(b, t.ModerationDefs_AgeAssuranceOverrideEvent)
+	case "tools.ozone.moderation.defs#revokeAccountCredentialsEvent":
+		t.ModerationDefs_RevokeAccountCredentialsEvent = new(ModerationDefs_RevokeAccountCredentialsEvent)
+		return json.Unmarshal(b, t.ModerationDefs_RevokeAccountCredentialsEvent)
+	case "tools.ozone.moderation.defs#scheduleTakedownEvent":
+		t.ModerationDefs_ScheduleTakedownEvent = new(ModerationDefs_ScheduleTakedownEvent)
+		return json.Unmarshal(b, t.ModerationDefs_ScheduleTakedownEvent)
+	case "tools.ozone.moderation.defs#cancelScheduledTakedownEvent":
+		t.ModerationDefs_CancelScheduledTakedownEvent = new(ModerationDefs_CancelScheduledTakedownEvent)
+		return json.Unmarshal(b, t.ModerationDefs_CancelScheduledTakedownEvent)
 
 	default:
 		return nil
@@ -225,8 +250,9 @@ func (t *ModerationEmitEvent_Input_Subject) MarshalJSON() ([]byte, error) {
 		t.RepoStrongRef.LexiconTypeID = "com.atproto.repo.strongRef"
 		return json.Marshal(t.RepoStrongRef)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationEmitEvent_Input_Subject) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/ozone/moderationgetAccountTimeline.go b/api/ozone/moderationgetAccountTimeline.go
index 55bb182f..98ee1309 100644
--- a/api/ozone/moderationgetAccountTimeline.go
+++ b/api/ozone/moderationgetAccountTimeline.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getAccountTimeline
 
-// schema: tools.ozone.moderation.getAccountTimeline
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationgetEvent.go b/api/ozone/moderationgetEvent.go
index fca82cb3..40744dd5 100644
--- a/api/ozone/moderationgetEvent.go
+++ b/api/ozone/moderationgetEvent.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getEvent
 
-// schema: tools.ozone.moderation.getEvent
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationgetRecord.go b/api/ozone/moderationgetRecord.go
index 9725da91..35a65b8e 100644
--- a/api/ozone/moderationgetRecord.go
+++ b/api/ozone/moderationgetRecord.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getRecord
 
-// schema: tools.ozone.moderation.getRecord
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationgetRecords.go b/api/ozone/moderationgetRecords.go
index 78799771..af02c1ce 100644
--- a/api/ozone/moderationgetRecords.go
+++ b/api/ozone/moderationgetRecords.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getRecords
 
-// schema: tools.ozone.moderation.getRecords
+package ozone
 
 import (
 	"context"
@@ -31,8 +31,9 @@ func (t *ModerationGetRecords_Output_Records_Elem) MarshalJSON() ([]byte, error)
 		t.ModerationDefs_RecordViewNotFound.LexiconTypeID = "tools.ozone.moderation.defs#recordViewNotFound"
 		return json.Marshal(t.ModerationDefs_RecordViewNotFound)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationGetRecords_Output_Records_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/ozone/moderationgetRepo.go b/api/ozone/moderationgetRepo.go
index 503fc09b..1cb76dd3 100644
--- a/api/ozone/moderationgetRepo.go
+++ b/api/ozone/moderationgetRepo.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getRepo
 
-// schema: tools.ozone.moderation.getRepo
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationgetReporterStats.go b/api/ozone/moderationgetReporterStats.go
index 7bf323e2..9910b6be 100644
--- a/api/ozone/moderationgetReporterStats.go
+++ b/api/ozone/moderationgetReporterStats.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getReporterStats
 
-// schema: tools.ozone.moderation.getReporterStats
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationgetRepos.go b/api/ozone/moderationgetRepos.go
index 523272b3..63813320 100644
--- a/api/ozone/moderationgetRepos.go
+++ b/api/ozone/moderationgetRepos.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getRepos
 
-// schema: tools.ozone.moderation.getRepos
+package ozone
 
 import (
 	"context"
@@ -31,8 +31,9 @@ func (t *ModerationGetRepos_Output_Repos_Elem) MarshalJSON() ([]byte, error) {
 		t.ModerationDefs_RepoViewNotFound.LexiconTypeID = "tools.ozone.moderation.defs#repoViewNotFound"
 		return json.Marshal(t.ModerationDefs_RepoViewNotFound)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *ModerationGetRepos_Output_Repos_Elem) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/ozone/moderationgetSubjects.go b/api/ozone/moderationgetSubjects.go
index 89ef4e89..0ffb42d7 100644
--- a/api/ozone/moderationgetSubjects.go
+++ b/api/ozone/moderationgetSubjects.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.getSubjects
 
-// schema: tools.ozone.moderation.getSubjects
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationlistScheduledActions.go b/api/ozone/moderationlistScheduledActions.go
new file mode 100644
index 00000000..bbb49207
--- /dev/null
+++ b/api/ozone/moderationlistScheduledActions.go
@@ -0,0 +1,44 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: tools.ozone.moderation.listScheduledActions
+
+package ozone
+
+import (
+	"context"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// ModerationListScheduledActions_Input is the input argument to a tools.ozone.moderation.listScheduledActions call.
+type ModerationListScheduledActions_Input struct {
+	// cursor: Cursor for pagination
+	Cursor *string `json:"cursor,omitempty" cborgen:"cursor,omitempty"`
+	// endsBefore: Filter actions scheduled to execute before this time
+	EndsBefore *string `json:"endsBefore,omitempty" cborgen:"endsBefore,omitempty"`
+	// limit: Maximum number of results to return
+	Limit *int64 `json:"limit,omitempty" cborgen:"limit,omitempty"`
+	// startsAfter: Filter actions scheduled to execute after this time
+	StartsAfter *string `json:"startsAfter,omitempty" cborgen:"startsAfter,omitempty"`
+	// statuses: Filter actions by status
+	Statuses []string `json:"statuses" cborgen:"statuses"`
+	// subjects: Filter actions for specific DID subjects
+	Subjects []string `json:"subjects,omitempty" cborgen:"subjects,omitempty"`
+}
+
+// ModerationListScheduledActions_Output is the output of a tools.ozone.moderation.listScheduledActions call.
+type ModerationListScheduledActions_Output struct {
+	Actions []*ModerationDefs_ScheduledActionView `json:"actions" cborgen:"actions"`
+	// cursor: Cursor for next page of results
+	Cursor *string `json:"cursor,omitempty" cborgen:"cursor,omitempty"`
+}
+
+// ModerationListScheduledActions calls the XRPC method "tools.ozone.moderation.listScheduledActions".
+func ModerationListScheduledActions(ctx context.Context, c util.LexClient, input *ModerationListScheduledActions_Input) (*ModerationListScheduledActions_Output, error) {
+	var out ModerationListScheduledActions_Output
+	if err := c.LexDo(ctx, util.Procedure, "application/json", "tools.ozone.moderation.listScheduledActions", nil, input, &out); err != nil {
+		return nil, err
+	}
+
+	return &out, nil
+}
diff --git a/api/ozone/moderationqueryEvents.go b/api/ozone/moderationqueryEvents.go
index dd4fa690..e90630c6 100644
--- a/api/ozone/moderationqueryEvents.go
+++ b/api/ozone/moderationqueryEvents.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.queryEvents
 
-// schema: tools.ozone.moderation.queryEvents
+package ozone
 
 import (
 	"context"
@@ -21,6 +21,7 @@ type ModerationQueryEvents_Output struct {
 // addedLabels: If specified, only events where all of these labels were added are returned
 // addedTags: If specified, only events where all of these tags were added are returned
 // ageAssuranceState: If specified, only events where the age assurance state matches the given value are returned
+// batchId: If specified, only events where the batchId matches the given value are returned
 // collections: If specified, only events where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored.
 // comment: If specified, only events with comments containing the keyword are returned. Apply || separator to use multiple keywords and match using OR condition.
 // createdAfter: Retrieve events created after a given timestamp
@@ -33,7 +34,7 @@ type ModerationQueryEvents_Output struct {
 // sortDirection: Sort direction for the events. Defaults to descending order of created at timestamp.
 // subjectType: If specified, only events where the subject is of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored.
 // types: The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent<name>) to filter by. If not specified, all events are returned.
-func ModerationQueryEvents(ctx context.Context, c util.LexClient, addedLabels []string, addedTags []string, ageAssuranceState string, collections []string, comment string, createdAfter string, createdBefore string, createdBy string, cursor string, hasComment bool, includeAllUserRecords bool, limit int64, modTool []string, policies []string, removedLabels []string, removedTags []string, reportTypes []string, sortDirection string, subject string, subjectType string, types []string) (*ModerationQueryEvents_Output, error) {
+func ModerationQueryEvents(ctx context.Context, c util.LexClient, addedLabels []string, addedTags []string, ageAssuranceState string, batchId string, collections []string, comment string, createdAfter string, createdBefore string, createdBy string, cursor string, hasComment bool, includeAllUserRecords bool, limit int64, modTool []string, policies []string, removedLabels []string, removedTags []string, reportTypes []string, sortDirection string, subject string, subjectType string, types []string) (*ModerationQueryEvents_Output, error) {
 	var out ModerationQueryEvents_Output
 
 	params := map[string]interface{}{}
@@ -46,6 +47,9 @@ func ModerationQueryEvents(ctx context.Context, c util.LexClient, addedLabels []
 	if ageAssuranceState != "" {
 		params["ageAssuranceState"] = ageAssuranceState
 	}
+	if batchId != "" {
+		params["batchId"] = batchId
+	}
 	if len(collections) != 0 {
 		params["collections"] = collections
 	}
diff --git a/api/ozone/moderationqueryStatuses.go b/api/ozone/moderationqueryStatuses.go
index f266cfbd..e115d324 100644
--- a/api/ozone/moderationqueryStatuses.go
+++ b/api/ozone/moderationqueryStatuses.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.queryStatuses
 
-// schema: tools.ozone.moderation.queryStatuses
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/moderationscheduleAction.go b/api/ozone/moderationscheduleAction.go
new file mode 100644
index 00000000..6aa411a0
--- /dev/null
+++ b/api/ozone/moderationscheduleAction.go
@@ -0,0 +1,101 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: tools.ozone.moderation.scheduleAction
+
+package ozone
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+
+	"github.com/bluesky-social/indigo/lex/util"
+)
+
+// ModerationScheduleAction_FailedScheduling is a "failedScheduling" in the tools.ozone.moderation.scheduleAction schema.
+type ModerationScheduleAction_FailedScheduling struct {
+	Error     string  `json:"error" cborgen:"error"`
+	ErrorCode *string `json:"errorCode,omitempty" cborgen:"errorCode,omitempty"`
+	Subject   string  `json:"subject" cborgen:"subject"`
+}
+
+// ModerationScheduleAction_Input is the input argument to a tools.ozone.moderation.scheduleAction call.
+type ModerationScheduleAction_Input struct {
+	Action    *ModerationScheduleAction_Input_Action `json:"action" cborgen:"action"`
+	CreatedBy string                                 `json:"createdBy" cborgen:"createdBy"`
+	// modTool: This will be propagated to the moderation event when it is applied
+	ModTool    *ModerationDefs_ModTool                    `json:"modTool,omitempty" cborgen:"modTool,omitempty"`
+	Scheduling *ModerationScheduleAction_SchedulingConfig `json:"scheduling" cborgen:"scheduling"`
+	// subjects: Array of DID subjects to schedule the action for
+	Subjects []string `json:"subjects" cborgen:"subjects"`
+}
+
+type ModerationScheduleAction_Input_Action struct {
+	ModerationScheduleAction_Takedown *ModerationScheduleAction_Takedown
+}
+
+func (t *ModerationScheduleAction_Input_Action) MarshalJSON() ([]byte, error) {
+	if t.ModerationScheduleAction_Takedown != nil {
+		t.ModerationScheduleAction_Takedown.LexiconTypeID = "tools.ozone.moderation.scheduleAction#takedown"
+		return json.Marshal(t.ModerationScheduleAction_Takedown)
+	}
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
+}
+
+func (t *ModerationScheduleAction_Input_Action) UnmarshalJSON(b []byte) error {
+	typ, err := util.TypeExtract(b)
+	if err != nil {
+		return err
+	}
+
+	switch typ {
+	case "tools.ozone.moderation.scheduleAction#takedown":
+		t.ModerationScheduleAction_Takedown = new(ModerationScheduleAction_Takedown)
+		return json.Unmarshal(b, t.ModerationScheduleAction_Takedown)
+
+	default:
+		return nil
+	}
+}
+
+// ModerationScheduleAction_ScheduledActionResults is a "scheduledActionResults" in the tools.ozone.moderation.scheduleAction schema.
+type ModerationScheduleAction_ScheduledActionResults struct {
+	Failed    []*ModerationScheduleAction_FailedScheduling `json:"failed" cborgen:"failed"`
+	Succeeded []string                                     `json:"succeeded" cborgen:"succeeded"`
+}
+
+// ModerationScheduleAction_SchedulingConfig is a "schedulingConfig" in the tools.ozone.moderation.scheduleAction schema.
+//
+// Configuration for when the action should be executed
+type ModerationScheduleAction_SchedulingConfig struct {
+	// executeAfter: Earliest time to execute the action (for randomized scheduling)
+	ExecuteAfter *string `json:"executeAfter,omitempty" cborgen:"executeAfter,omitempty"`
+	// executeAt: Exact time to execute the action
+	ExecuteAt *string `json:"executeAt,omitempty" cborgen:"executeAt,omitempty"`
+	// executeUntil: Latest time to execute the action (for randomized scheduling)
+	ExecuteUntil *string `json:"executeUntil,omitempty" cborgen:"executeUntil,omitempty"`
+}
+
+// ModerationScheduleAction_Takedown is a "takedown" in the tools.ozone.moderation.scheduleAction schema.
+//
+// Schedule a takedown action
+type ModerationScheduleAction_Takedown struct {
+	LexiconTypeID string `json:"$type" cborgen:"$type,const=tools.ozone.moderation.scheduleAction#takedown"`
+	// acknowledgeAccountSubjects: If true, all other reports on content authored by this account will be resolved (acknowledged).
+	AcknowledgeAccountSubjects *bool   `json:"acknowledgeAccountSubjects,omitempty" cborgen:"acknowledgeAccountSubjects,omitempty"`
+	Comment                    *string `json:"comment,omitempty" cborgen:"comment,omitempty"`
+	// durationInHours: Indicates how long the takedown should be in effect before automatically expiring.
+	DurationInHours *int64 `json:"durationInHours,omitempty" cborgen:"durationInHours,omitempty"`
+	// policies: Names/Keywords of the policies that drove the decision.
+	Policies []string `json:"policies,omitempty" cborgen:"policies,omitempty"`
+}
+
+// ModerationScheduleAction calls the XRPC method "tools.ozone.moderation.scheduleAction".
+func ModerationScheduleAction(ctx context.Context, c util.LexClient, input *ModerationScheduleAction_Input) (*ModerationScheduleAction_ScheduledActionResults, error) {
+	var out ModerationScheduleAction_ScheduledActionResults
+	if err := c.LexDo(ctx, util.Procedure, "application/json", "tools.ozone.moderation.scheduleAction", nil, input, &out); err != nil {
+		return nil, err
+	}
+
+	return &out, nil
+}
diff --git a/api/ozone/moderationsearchRepos.go b/api/ozone/moderationsearchRepos.go
index 27e89def..9a0e767c 100644
--- a/api/ozone/moderationsearchRepos.go
+++ b/api/ozone/moderationsearchRepos.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.moderation.searchRepos
 
-// schema: tools.ozone.moderation.searchRepos
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/reportdefs.go b/api/ozone/reportdefs.go
new file mode 100644
index 00000000..4faad21e
--- /dev/null
+++ b/api/ozone/reportdefs.go
@@ -0,0 +1,5 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+// Lexicon schema: tools.ozone.report.defs
+
+package ozone
diff --git a/api/ozone/safelinkaddRule.go b/api/ozone/safelinkaddRule.go
index 80f64400..edb23c2e 100644
--- a/api/ozone/safelinkaddRule.go
+++ b/api/ozone/safelinkaddRule.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.safelink.addRule
 
-// schema: tools.ozone.safelink.addRule
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/safelinkdefs.go b/api/ozone/safelinkdefs.go
index b13e9e2d..d9aa66e8 100644
--- a/api/ozone/safelinkdefs.go
+++ b/api/ozone/safelinkdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.safelink.defs
 
-// schema: tools.ozone.safelink.defs
+package ozone
 
 // SafelinkDefs_Event is a "event" in the tools.ozone.safelink.defs schema.
 //
diff --git a/api/ozone/safelinkqueryEvents.go b/api/ozone/safelinkqueryEvents.go
index 058132b1..927e8363 100644
--- a/api/ozone/safelinkqueryEvents.go
+++ b/api/ozone/safelinkqueryEvents.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.safelink.queryEvents
 
-// schema: tools.ozone.safelink.queryEvents
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/safelinkqueryRules.go b/api/ozone/safelinkqueryRules.go
index 474fa148..c38ac2a0 100644
--- a/api/ozone/safelinkqueryRules.go
+++ b/api/ozone/safelinkqueryRules.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.safelink.queryRules
 
-// schema: tools.ozone.safelink.queryRules
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/safelinkremoveRule.go b/api/ozone/safelinkremoveRule.go
index d7d00d02..aabdc983 100644
--- a/api/ozone/safelinkremoveRule.go
+++ b/api/ozone/safelinkremoveRule.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.safelink.removeRule
 
-// schema: tools.ozone.safelink.removeRule
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/safelinkupdateRule.go b/api/ozone/safelinkupdateRule.go
index 5b376620..689711bb 100644
--- a/api/ozone/safelinkupdateRule.go
+++ b/api/ozone/safelinkupdateRule.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.safelink.updateRule
 
-// schema: tools.ozone.safelink.updateRule
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/servergetConfig.go b/api/ozone/servergetConfig.go
index a9859325..0dde0865 100644
--- a/api/ozone/servergetConfig.go
+++ b/api/ozone/servergetConfig.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.server.getConfig
 
-// schema: tools.ozone.server.getConfig
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/setaddValues.go b/api/ozone/setaddValues.go
index f95e68d3..9c79838e 100644
--- a/api/ozone/setaddValues.go
+++ b/api/ozone/setaddValues.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.addValues
 
-// schema: tools.ozone.set.addValues
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/setdefs.go b/api/ozone/setdefs.go
index 2181b12f..3d89bdb6 100644
--- a/api/ozone/setdefs.go
+++ b/api/ozone/setdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.defs
 
-// schema: tools.ozone.set.defs
+package ozone
 
 // SetDefs_Set is a "set" in the tools.ozone.set.defs schema.
 type SetDefs_Set struct {
diff --git a/api/ozone/setdeleteSet.go b/api/ozone/setdeleteSet.go
index 4ad8dfc8..54da08a8 100644
--- a/api/ozone/setdeleteSet.go
+++ b/api/ozone/setdeleteSet.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.deleteSet
 
-// schema: tools.ozone.set.deleteSet
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/setdeleteValues.go b/api/ozone/setdeleteValues.go
index bdd5ce97..c69b8415 100644
--- a/api/ozone/setdeleteValues.go
+++ b/api/ozone/setdeleteValues.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.deleteValues
 
-// schema: tools.ozone.set.deleteValues
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/setgetValues.go b/api/ozone/setgetValues.go
index 6b917b82..dd8f11be 100644
--- a/api/ozone/setgetValues.go
+++ b/api/ozone/setgetValues.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.getValues
 
-// schema: tools.ozone.set.getValues
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/setquerySets.go b/api/ozone/setquerySets.go
index 9d64aa24..4283ca04 100644
--- a/api/ozone/setquerySets.go
+++ b/api/ozone/setquerySets.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.querySets
 
-// schema: tools.ozone.set.querySets
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/settingdefs.go b/api/ozone/settingdefs.go
index ccf33441..c0c52cb5 100644
--- a/api/ozone/settingdefs.go
+++ b/api/ozone/settingdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.setting.defs
 
-// schema: tools.ozone.setting.defs
+package ozone
 
 import (
 	"github.com/bluesky-social/indigo/lex/util"
diff --git a/api/ozone/settinglistOptions.go b/api/ozone/settinglistOptions.go
index 9105406a..3c73c350 100644
--- a/api/ozone/settinglistOptions.go
+++ b/api/ozone/settinglistOptions.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.setting.listOptions
 
-// schema: tools.ozone.setting.listOptions
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/settingremoveOptions.go b/api/ozone/settingremoveOptions.go
index 07f0bd5f..8f16b450 100644
--- a/api/ozone/settingremoveOptions.go
+++ b/api/ozone/settingremoveOptions.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.setting.removeOptions
 
-// schema: tools.ozone.setting.removeOptions
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/settingupsertOption.go b/api/ozone/settingupsertOption.go
index ce744e5e..7f784b8b 100644
--- a/api/ozone/settingupsertOption.go
+++ b/api/ozone/settingupsertOption.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.setting.upsertOption
 
-// schema: tools.ozone.setting.upsertOption
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/setupsertSet.go b/api/ozone/setupsertSet.go
index 5d2b9379..c0c76d1e 100644
--- a/api/ozone/setupsertSet.go
+++ b/api/ozone/setupsertSet.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.set.upsertSet
 
-// schema: tools.ozone.set.upsertSet
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/signaturedefs.go b/api/ozone/signaturedefs.go
index 7336836a..a9374b22 100644
--- a/api/ozone/signaturedefs.go
+++ b/api/ozone/signaturedefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.signature.defs
 
-// schema: tools.ozone.signature.defs
+package ozone
 
 // SignatureDefs_SigDetail is a "sigDetail" in the tools.ozone.signature.defs schema.
 type SignatureDefs_SigDetail struct {
diff --git a/api/ozone/signaturefindCorrelation.go b/api/ozone/signaturefindCorrelation.go
index e7047b70..f16cfb19 100644
--- a/api/ozone/signaturefindCorrelation.go
+++ b/api/ozone/signaturefindCorrelation.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.signature.findCorrelation
 
-// schema: tools.ozone.signature.findCorrelation
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/signaturefindRelatedAccounts.go b/api/ozone/signaturefindRelatedAccounts.go
index f95caabc..a32f65c7 100644
--- a/api/ozone/signaturefindRelatedAccounts.go
+++ b/api/ozone/signaturefindRelatedAccounts.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.signature.findRelatedAccounts
 
-// schema: tools.ozone.signature.findRelatedAccounts
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/signaturesearchAccounts.go b/api/ozone/signaturesearchAccounts.go
index 24a3bd01..c2d88bb8 100644
--- a/api/ozone/signaturesearchAccounts.go
+++ b/api/ozone/signaturesearchAccounts.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.signature.searchAccounts
 
-// schema: tools.ozone.signature.searchAccounts
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/teamaddMember.go b/api/ozone/teamaddMember.go
index b04e1c9a..66e3dca6 100644
--- a/api/ozone/teamaddMember.go
+++ b/api/ozone/teamaddMember.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.team.addMember
 
-// schema: tools.ozone.team.addMember
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/teamdefs.go b/api/ozone/teamdefs.go
index 30801b15..833ea2b8 100644
--- a/api/ozone/teamdefs.go
+++ b/api/ozone/teamdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.team.defs
 
-// schema: tools.ozone.team.defs
+package ozone
 
 import (
 	appbskytypes "github.com/bluesky-social/indigo/api/bsky"
diff --git a/api/ozone/teamdeleteMember.go b/api/ozone/teamdeleteMember.go
index 89bac5c0..9885269c 100644
--- a/api/ozone/teamdeleteMember.go
+++ b/api/ozone/teamdeleteMember.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.team.deleteMember
 
-// schema: tools.ozone.team.deleteMember
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/teamlistMembers.go b/api/ozone/teamlistMembers.go
index c6bc754c..59d63d76 100644
--- a/api/ozone/teamlistMembers.go
+++ b/api/ozone/teamlistMembers.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.team.listMembers
 
-// schema: tools.ozone.team.listMembers
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/teamupdateMember.go b/api/ozone/teamupdateMember.go
index c698ed68..1e623fd2 100644
--- a/api/ozone/teamupdateMember.go
+++ b/api/ozone/teamupdateMember.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.team.updateMember
 
-// schema: tools.ozone.team.updateMember
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/verificationdefs.go b/api/ozone/verificationdefs.go
index e8d05c0f..4480e5e5 100644
--- a/api/ozone/verificationdefs.go
+++ b/api/ozone/verificationdefs.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.verification.defs
 
-// schema: tools.ozone.verification.defs
+package ozone
 
 import (
 	"encoding/json"
@@ -53,8 +53,9 @@ func (t *VerificationDefs_VerificationView_IssuerRepo) MarshalJSON() ([]byte, er
 		t.ModerationDefs_RepoViewNotFound.LexiconTypeID = "tools.ozone.moderation.defs#repoViewNotFound"
 		return json.Marshal(t.ModerationDefs_RepoViewNotFound)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *VerificationDefs_VerificationView_IssuerRepo) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
@@ -88,8 +89,9 @@ func (t *VerificationDefs_VerificationView_SubjectRepo) MarshalJSON() ([]byte, e
 		t.ModerationDefs_RepoViewNotFound.LexiconTypeID = "tools.ozone.moderation.defs#repoViewNotFound"
 		return json.Marshal(t.ModerationDefs_RepoViewNotFound)
 	}
-	return nil, fmt.Errorf("cannot marshal empty enum")
+	return nil, fmt.Errorf("can not marshal empty union as JSON")
 }
+
 func (t *VerificationDefs_VerificationView_SubjectRepo) UnmarshalJSON(b []byte) error {
 	typ, err := util.TypeExtract(b)
 	if err != nil {
diff --git a/api/ozone/verificationgrantVerifications.go b/api/ozone/verificationgrantVerifications.go
index 6be45f31..ca9ebb4d 100644
--- a/api/ozone/verificationgrantVerifications.go
+++ b/api/ozone/verificationgrantVerifications.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.verification.grantVerifications
 
-// schema: tools.ozone.verification.grantVerifications
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/verificationlistVerifications.go b/api/ozone/verificationlistVerifications.go
index ccd3f143..9ec346e1 100644
--- a/api/ozone/verificationlistVerifications.go
+++ b/api/ozone/verificationlistVerifications.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.verification.listVerifications
 
-// schema: tools.ozone.verification.listVerifications
+package ozone
 
 import (
 	"context"
diff --git a/api/ozone/verificationrevokeVerifications.go b/api/ozone/verificationrevokeVerifications.go
index 8f60ca6c..a7ce9a87 100644
--- a/api/ozone/verificationrevokeVerifications.go
+++ b/api/ozone/verificationrevokeVerifications.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package ozone
+// Lexicon schema: tools.ozone.verification.revokeVerifications
 
-// schema: tools.ozone.verification.revokeVerifications
+package ozone
 
 import (
 	"context"
diff --git a/automod/consumer/ozone.go b/automod/consumer/ozone.go
index 06112d35..e884d897 100644
--- a/automod/consumer/ozone.go
+++ b/automod/consumer/ozone.go
@@ -61,6 +61,7 @@ func (oc *OzoneConsumer) Run(ctx context.Context) error {
 			nil,            // addedLabels []string
 			nil,            // addedTags []string
 			"",             // ageAssuranceState
+			"",             // batchId string
 			nil,            // collections []string
 			"",             // comment string
 			since.String(), // createdAfter string
diff --git a/automod/engine/persisthelpers.go b/automod/engine/persisthelpers.go
index 42694ee5..ea9dcda2 100644
--- a/automod/engine/persisthelpers.go
+++ b/automod/engine/persisthelpers.go
@@ -174,6 +174,7 @@ func (eng *Engine) createReportIfFresh(ctx context.Context, xrpcc *xrpc.Client,
 		nil,            // addedLabels []string
 		nil,            // addedTags []string
 		"",             // ageAssuranceState
+		"",             // batchId string
 		nil,            // collections []string
 		"",             // comment string
 		"",             // createdAfter string
@@ -258,6 +259,7 @@ func (eng *Engine) createRecordReportIfFresh(ctx context.Context, xrpcc *xrpc.Cl
 		nil,            // addedLabels []string
 		nil,            // addedTags []string
 		"",             // ageAssuranceState
+		"",             // batchId string
 		nil,            // collections []string
 		"",             // comment string
 		"",             // createdAfter string
diff --git a/carstore/sqlite_store.go b/carstore/sqlite_store.go
index 18a8467d..5fbf4bad 100644
--- a/carstore/sqlite_store.go
+++ b/carstore/sqlite_store.go
@@ -6,12 +6,13 @@ import (
 	"database/sql"
 	"errors"
 	"fmt"
-	"go.opentelemetry.io/otel/attribute"
 	"io"
 	"log/slog"
 	"os"
 	"path/filepath"
 
+	"go.opentelemetry.io/otel/attribute"
+
 	"github.com/bluesky-social/indigo/models"
 	blockformat "github.com/ipfs/go-block-format"
 	"github.com/ipfs/go-cid"
@@ -215,9 +216,6 @@ func (sqs *SQLiteStore) GetUserRepoHead(ctx context.Context, user models.Uid) (c
 	if lastShard == nil {
 		return cid.Undef, nil
 	}
-	if lastShard.ID == 0 {
-		return cid.Undef, nil
-	}
 
 	return lastShard.Root.CID, nil
 }
@@ -231,9 +229,6 @@ func (sqs *SQLiteStore) GetUserRepoRev(ctx context.Context, user models.Uid) (st
 	if lastShard == nil {
 		return "", nil
 	}
-	if lastShard.ID == 0 {
-		return "", nil
-	}
 
 	return lastShard.Rev, nil
 }
@@ -476,7 +471,11 @@ func (sqs *SQLiteStore) getBlock(ctx context.Context, user models.Uid, bcid cid.
 		if err != nil {
 			return nil, fmt.Errorf("getb bad scan, %w", err)
 		}
-		return blocks.NewBlock(blockb), nil
+		blk, err := blocks.NewBlockWithCid(blockb, bcid)
+		if err != nil {
+			return nil, fmt.Errorf("getb bad block, %w", err)
+		}
+		return blk, nil
 	}
 	return nil, ErrNothingThere
 }
diff --git a/cmd/beemo/notify_reports.go b/cmd/beemo/notify_reports.go
index a3b0c6fb..1af79ea4 100644
--- a/cmd/beemo/notify_reports.go
+++ b/cmd/beemo/notify_reports.go
@@ -74,6 +74,7 @@ func pollNewReports(ctx context.Context, cmd *cli.Command) error {
 			nil,   // addedLabels []string
 			nil,   // addedTags []string
 			"",    // ageAssuranceState
+			"",    // batchId string
 			nil,   // collections []string
 			"",    // comment string
 			"",    // createdAfter string
diff --git a/cmd/gosky/admin.go b/cmd/gosky/admin.go
index ad012652..c2aa694a 100644
--- a/cmd/gosky/admin.go
+++ b/cmd/gosky/admin.go
@@ -396,6 +396,7 @@ var listReportsCmd = &cli.Command{
 			nil,   // addedLabels []string
 			nil,   // addedTags []string
 			"",    // ageAssuranceState
+			"",    // batchId string
 			nil,   // collections []string
 			"",    // comment string
 			"",    // createdAfter string
@@ -713,6 +714,7 @@ var queryModerationStatusesCmd = &cli.Command{
 			nil,   // addedLabels []string
 			nil,   // addedTags []string
 			"",    // ageAssuranceState
+			"",    // batchId string
 			nil,   // collections []string
 			"",    // comment string
 			"",    // createdAfter string
diff --git a/cmd/relay/main.go b/cmd/relay/main.go
index 225f42de..f51d0cfd 100644
--- a/cmd/relay/main.go
+++ b/cmd/relay/main.go
@@ -13,9 +13,10 @@ import (
 	"syscall"
 	"time"
 
+	_ "net/http/pprof"
+
 	_ "github.com/joho/godotenv/autoload"
 	_ "go.uber.org/automaxprocs"
-	_ "net/http/pprof"
 
 	"github.com/bluesky-social/indigo/atproto/identity"
 	"github.com/bluesky-social/indigo/cmd/relay/relay"
@@ -102,13 +103,13 @@ func run(args []string) error {
 					Sources: cli.EnvVars("RELAY_HOST_CONCURRENCY", "RELAY_CONCURRENCY_PER_PDS"),
 					Value:   40,
 				},
-				&cli.IntFlag{
+				&cli.Int64Flag{
 					Name:    "default-account-limit",
 					Value:   100,
 					Usage:   "max number of active accounts for new upstream hosts",
 					Sources: cli.EnvVars("RELAY_DEFAULT_ACCOUNT_LIMIT", "RELAY_DEFAULT_REPO_LIMIT"),
 				},
-				&cli.IntFlag{
+				&cli.Int64Flag{
 					Name:    "new-hosts-per-day-limit",
 					Value:   50,
 					Usage:   "max number of new upstream hosts subscribed per day via public requestCrawl",
@@ -135,7 +136,7 @@ func run(args []string) error {
 					Usage:   "when messages fail atproto 'Sync 1.1' validation, just log, don't drop",
 					Sources: cli.EnvVars("RELAY_LENIENT_SYNC_VALIDATION"),
 				},
-				&cli.IntFlag{
+				&cli.Int64Flag{
 					Name:    "initial-seq-number",
 					Usage:   "when initializing output firehose, start with this sequence number",
 					Value:   1,
diff --git a/lex/gen.go b/lex/gen.go
index 7d6d3adc..e286fd44 100644
--- a/lex/gen.go
+++ b/lex/gen.go
@@ -126,9 +126,9 @@ func GenCodeForSchema(pkg Package, reqcode bool, s *Schema, packages []Package,
 	// See https://golang.org/s/generatedcode.
 	pf("// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.\n\n")
 
-	pf("package %s\n\n", pkg.GoPackage)
+	pf("// Lexicon schema: %s\n\n", s.ID)
 
-	pf("// schema: %s\n\n", s.ID)
+	pf("package %s\n\n", pkg.GoPackage)
 
 	pf("import (\n")
 	pf("\t\"context\"\n")
@@ -196,7 +196,7 @@ func writeDecoderRegister(w io.Writer, tps []outputType) error {
 	if buf.Len() == 0 {
 		return nil
 	}
-	outf("}")
+	outf("}\n")
 	_, err := w.Write(buf.Bytes())
 	return err
 }
diff --git a/lex/type_schema.go b/lex/type_schema.go
index 9d044a75..912b21a9 100644
--- a/lex/type_schema.go
+++ b/lex/type_schema.go
@@ -640,10 +640,6 @@ func (ts *TypeSchema) writeTypeDefinition(name string, w io.Writer) error {
 	case "boolean":
 		pf("type %s bool\n", name)
 	case "object":
-		if ts.needsType {
-			pf("//\n// RECORDTYPE: %s\n", name)
-		}
-
 		pf("type %s struct {\n", name)
 
 		if ts.needsType {
@@ -655,7 +651,7 @@ func (ts *TypeSchema) writeTypeDefinition(name string, w io.Writer) error {
 			if ts.defName != "" && ts.defName != "main" {
 				cval += "#" + ts.defName
 			}
-			pf("\tLexiconTypeID string `json:\"$type,const=%s%s\" cborgen:\"$type,const=%s%s\"`\n", cval, omit, cval, omit)
+			pf("\tLexiconTypeID string `json:\"$type%s\" cborgen:\"$type,const=%s%s\"`\n", omit, cval, omit)
 		} else {
 			//pf("\tLexiconTypeID string `json:\"$type,omitempty\" cborgen:\"$type,omitempty\"`\n")
 		}
@@ -818,7 +814,7 @@ func (ts *TypeSchema) writeJsonMarshalerEnum(name string, w io.Writer) error {
 		pf("\t\treturn json.Marshal(t.%s)\n\t}\n", vname)
 	}
 
-	pf("\treturn nil, fmt.Errorf(\"cannot marshal empty enum\")\n}\n")
+	pf("\treturn nil, fmt.Errorf(\"can not marshal empty union as JSON\")\n}\n\n")
 	return nil
 }
 
@@ -849,7 +845,7 @@ func (ts *TypeSchema) writeJsonUnmarshalerEnum(name string, w io.Writer) error {
 	if ts.Closed {
 		pf(`
 			default:
-				return fmt.Errorf("closed enums must have a matching value")
+				return fmt.Errorf("closed unions must match a listed schema")
 		`)
 	} else {
 		pf(`
@@ -881,7 +877,7 @@ func (ts *TypeSchema) writeCborMarshalerEnum(name string, w io.Writer) error {
 		pf("\t\treturn t.%s.MarshalCBOR(w)\n\t}\n", vname)
 	}
 
-	pf("\treturn fmt.Errorf(\"cannot cbor marshal empty enum\")\n}\n")
+	pf("\treturn fmt.Errorf(\"can not marshal empty union as CBOR\")\n}\n")
 	return nil
 }
 
@@ -906,7 +902,7 @@ func (ts *TypeSchema) writeCborUnmarshalerEnum(name string, w io.Writer) error {
 	if ts.Closed {
 		pf(`
 			default:
-				return fmt.Errorf("closed enums must have a matching value")
+				return fmt.Errorf("closed unions must match a listed schema")
 		`)
 	} else {
 		pf(`



Test patch:
diff --git a/api/atproto/syncgetLatestCommit.go b/api/atproto/syncgetLatestCommit.go
index e0395a67..5ec47591 100644
--- a/api/atproto/syncgetLatestCommit.go
+++ b/api/atproto/syncgetLatestCommit.go
@@ -1,8 +1,8 @@
 // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
 
-package atproto
+// Lexicon schema: com.atproto.sync.getLatestCommit
 
-// schema: com.atproto.sync.getLatestCommit
+package atproto
 
 import (
 	"context"