Skip to content
Stuart P. Bentley edited this page Feb 5, 2017 · 7 revisions

This is the full history of the OPWS project, as of February 4 2017, in terms of what happened when: slightly higher-level than just the raw Git commits ("some profiles were added, changed, or removed" is an implicit line between each item here), and with more insight into the non-Git-based history of the project (though I'm starting from there to refresh my memory about the exact timeframe for this stuff).

May 2013

@stuartpb begins work on a password management project (blot.pw), which includes a "sites.yaml" file that documents the password reset and change links for a handful of websites, as well as rules for a few of them (alongh with some documentation of HTTPS support).

October 2013

Having added a few more sites to the list and realizing that this undertaking deserves its own project, the sites.yaml file is removed from the blot.pw project and re-introduced as a set of YAML files in a new "domainprofiles" repository under the opensets organization.

Contrary to the flat-file-with-domains-as-keys approach of the monolithic sites.yaml, data in domainprofiles is initially organized as individual files under directories by public suffix (so, for example, GitHub's profile would be under "com/github.yaml").

There's no testing, and there isn't even really a well-defined schema. The most basic fields are documented in README.md, but data beyond those fields is documented in an ad-hoc fashion, with representations for more complex information invented on the fly, sometimes even inconsistently with previous representations for the same kind of info.

January 2014

A Gruntfile to compile all profiles into a single JSON flatfile is written, followed shortly behind by a test script that verifies that all files parse as valid YAML, and fit the correct naming convention (avoiding forgotten file extensions or redundant domain suffixes).

Travis CI integration is introduced alongside the tests, and changes start being vetted via pull request instead of just tossing them directly onto the tip of master as they were done before.

The first issue on the project is filed, kicking off the first major refactor for consistency and extensibility.

The "yaml" directory containing all profiles is renamed "profiles", because "yaml" is redundant and not descriptive of the content.

The CONTRIBUTING.md is added, along with an update to the documentation to make it more closely reflect the new profile structure.

February 2014

Fields for documenting password "must contain" requirements are added, along with more consistency around black/whitelisting.

username.remind is changed to more closely resemble the fields of password.

April 2014

More fields commonly seen in profiles are documented in README.md, including register, login, and questions ("register" and "login" having been previously "documented" in the form of issue #3).

June 2014

Captcha, usability, and reauth fields are documented and made consistent across profiles (though, since there's nothing in place to verify that profiles fit the schema as documented, mistakes still pop up from time to time).

October 2014

More fields are documented in README.md, and the full path to each field is used in the headings instead of implying them via nesting.

"register" and "login" are added as part of the template in CONTRIBUTING.md.

An issue is raised about many profiles having a value of token for password.reset.response, which isn't very useful. This kicks off a series of reviews that won't fully come to be resolved until the issue is finally closed in February 2017.

February 14, 2015 (Valentine's Day)

Probably the most significant leap in the project's history to date:

As this isn't a proper schema validation, it doesn't catch all incorrect uses of a field, but it catches enough to make the whole database consistent for the first time.

March 2015

The reviewed field is introduced (and quickly extended to reviewed.date).

password.reset.response is split into an object containing body (the old value of the field) and sender (arguably the more useful information to record).

The versioning scheme is laid out in issue #7, and the content policy is described by issue #9.

Issue #10 is opened to discuss documenting login persistence.

The topic of localizing profiles is broached with issue #12.

A first design for a planned API is laid out with issue #13.

April 2015

The awkward field password.reset.token.reset, and its accompanying stopgap documentation, is removed.

Issue #19 is opened, calling for a review of all existing profiles. It turns out that this is really difficult, and it's still far from done.

Three more issues discussing prospective field extensions are opened.

June 2015

The MIT license that the repo was initialized with (almost reflexively) is replaced with the more-properly-suited Open Database License.

Travis CI is replaced with Circle CI.

Fields for session invalidation on password change are added.

Usability fields are split into objects, closing issue #15 from April.

Third-party login providers are moved from login.thirdparty to thirdparty.auth.providers, per issue #31.

An issue is opened calling for use cases to guide the schema going forward.

Many other issues are opened, ranging in their concerns from profile fields to better tooling.

January 2016

GitHub having introduced protected branches in September 2015, the master branch is officially given "protected" status, will all future changes having to pass through CI in a pull request first.

Work begins on making profiles more clean-cut, less hairy:

  • For simplicity, profiles are moved out of their public-suffix directories and into the main profiles directory, with the full domain in the file name, as originally suggested in June.
  • The poorly-documented profile.fields, only used in one profile, is dropped until it can get some proper thought and attention (see issue #6).
  • The platform field is dropped (along with its accompanying platform-profiles), under similar reasoning (see issue #5).
  • The https field documenting HTTPS support is also dropped, as there are tools that can give better automated analysis on-demand.

February 2016

The template in CONTRIBUTING.md gains a reviewed.date example, replacing the now-removed https field.

Fields for session invalidation on password reset are added, and the values for password change are accordingly tweaked to match (with the "yes" value changing to the more-descriptive "own").

For consistency, email usability is changed to "single" and "double" instead of "once" and "twice".

A number of small details in password reset are encapsulated in the password.reset.steps structure described in issue #70. Extensions to this design continue for months, eventually expanding into issue #120 in May.

March 2016

Three more issues proposing new fields are opened.

Issue #100, "Roadmap", is opened, calling for the creation of this very history document (among other things).

April 2016

The name field is added to testing to be required on all profiles.

May 2016

GitHub having introduced merge squashing as a feature for pull requests at the beginning of April, this is changed to be the new default for merging to master (with merge commits being disabled).

A proposal to basically convert password.reset into a structure resembling password.reset.steps (issue #120) is introduced. This consumes most thinking about structuring password reset profiling for the rest of the year.

November 2016

The increasingly-hairy list-of-arbitrary-step-objects-to-represent-all-kinds-of-password-reset structure proposed in issue #120 is abandoned, in favor of a much more straightforward password.reset.flow structure, which only describes the most conventional kind of password reset, and more esoteric reset mechanisms (such as having a random password issued) going under different structures altogether, as described in issue #127.

password.reset.steps itself is reverted: different concerns are now split into different sub-fields with more information under password.reset.flow. Expiration, for instance, is refactored as an expire field on any step that can influence expiration.

February 2017

stuartpb designates this as his Project of the Month for February 2017.

The project is moved out of the opensets organization and into a new dedicated "opws" organization, opws.org is registered, and the logo is drawn.

This history document is created to track the major movements in the project so far.

Clone this wiki locally