JADE/Implementations/Archive 2017

This page describes the intended affordances of the JADE system and schemas that are meant to address these affordances. Edits are welcome. Bold-Revert-Discuss rules apply. See T153152 and https://etherpad.wikimedia.org/p/meta_ores_schema for past notes.

Affordances

 * User judgments (endorsements)
 * Wiki users may attach human judgement to any wiki artifact with a numerical ID (page, user, revision, etc.)
 * A user may only supply one judgement per artifact, but they can update their judgement.
 * Users may include a short free-text comment with their judgements (hash tags? #anon #addscategory)
 * Multiple users can record judgements for any given artifact


 * Judgment schemas
 * Judgements are structured data that corresponds to a machine-readable schema
 * New schemas can be safely added
 * Schemas are named and versioned


 * Consensus decisions
 * A flow topic can be associated with every artifact/schema (e.g. revision:12345/editquality --> Topic:32SAhbhas6)
 * A judgement can be promoted to "preferred" status (presumably through consensus discussion)
 * Judgements that disagree with "preferred" status remain present


 * Suppression/curation
 * User information, comments, and entire endorsements can be suppressed by changing visibility


 * History
 * All actions are captured as events that can be queried historically.

Schemas

 * artifact [unique key = (context, type, onwiki_id)]
 * id: int, primary key
 * context : str (the wiki dbname)
 * type : str (page|revision|user|IP|...)
 * local_id : int (a variable foreign key that is further defined by "type" and "context")


 * artifact-discussion [unique key = (artifact_id, schema_id)]
 * id: int, primary key
 * artifact_id : int (foreign key to an artifact)
 * schema_id : int (foreign key to a judgment schema)
 * flow_id : str (foreign key to a flow thread for an artifact)


 * judgment [unique key = (artifact_id, schema_id, data)]
 * id : int, primary key
 * artifact_id : int (foreign key to an artifact)
 * schema_id : int (foreign key to a judgment schema)
 * data : blob (json blob matching schema for judgement)
 * preference : bool (represents consensus)
 * touched : datetime


 * endorsement [unique key = (judgement_id, globaluser_id)]
 * id : int, primary key
 * judgement_id : int (foreign key to a judgment)
 * globaluser_id : int (foreign key to centralauth)
 * comment : str
 * visibility : int (bitfield: user | comment | all)
 * touched : datetime


 * schema [unique key = (name, version)]
 * id : int, primary key
 * name : str (An identifier for the schema)
 * version : str (Semantic version string)
 * data : blob (JSON schema)


 * new-schema
 * id : int
 * name : str (An identifier for the schema)
 * version : str (Semantic version string)
 * data : blob (JSON schema)
 * globaluser_id : int (foreign key to centralauth -- the creating user)


 * new-artifact
 * id : int
 * context : str (a database name)
 * type : str (page|revision|user|IP|...)
 * local_id : int (a variable foreign key that is further defined by "type" and "context")
 * globaluser_id : int (foreign key to centralauth -- the creating user)


 * new-discussion
 * id: int
 * artifact_id : int (foreign key to an artifact)
 * schema_id : int (foreign key to a judgment schema)
 * flow_id : str (foreign key to a flow thread for an artifact)
 * globaluser_id : int (foreign key to centralauth -- the creating user)


 * new-judgement
 * id : int
 * artifact_id : int (foreign key to a judged artifact)
 * schema_id : int (foreign key to a judgment schema)
 * data : blob (json blob matching schema for judgement)
 * globaluser_id : int (foreign key to centralauth -- the creating user)


 * judgement-preference-set
 * judgement_id : int (foreign key to judgement)
 * globaluser_id : int (foreign key to centralauth -- the user who set the preference)


 * new-endorsement
 * id : int
 * judgement_id : int (foreign key to a judgment)
 * globaluser_id : int (foreign key to centralauth -- the user to created the endorsement)
 * comment : str
 * visibility : int (bitfield: user | comment | all)


 * endorsement-change
 * id : int
 * judgement_id : int (foreign key to a judgment)
 * globaluser_id : int (foreign key to centralauth -- the user who updated the endorsement (might be an admin))
 * comment : str


 * endorsement-visibility-change
 * judgement_id
 * visibility : int (bitfield: user | comment | data | all)
 * globaluser_id : int (foreign key to centralauth -- the user who updated the visibility)
 * comment : str