summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--continuous_integration.mdwn2
-rw-r--r--continuous_integration/debian_buster_setup.mdwn349
-rw-r--r--continuous_integration/debian_stretch_setup.mdwn115
-rw-r--r--continuous_integration/freebsd_setup.mdwn3
-rw-r--r--continuous_integration/openbsd_setup.mdwn3
-rw-r--r--developer-weekend/aug-2019.mdwn368
-rw-r--r--developer-weekend/dec-2019.mdwn233
-rw-r--r--developer-weekend/feb-2019.mdwn202
-rw-r--r--developer-weekend/feb-2020.mdwn209
-rw-r--r--developer-weekend/may-2019.mdwn128
-rw-r--r--developer-weekend/may-2020.mdwn322
-rw-r--r--developer-weekend/nov-2018.mdwn15
-rw-r--r--developer-weekend/nov-2022.mdwn82
-rw-r--r--developer-weekend/oct-2020.mdwn88
-rw-r--r--gsoc/application.mdwn2
-rw-r--r--gsoc/requirements.mdwn2
-rw-r--r--gsoc_2014_ideas.mdwn2
-rw-r--r--release/allsource.mdwn97
-rw-r--r--release/corebuildsystem.mdwn78
-rw-r--r--release/netsurfbuildsystem.mdwn103
-rw-r--r--release/process.mdwn308
-rw-r--r--society/constitution.mdwn2
22 files changed, 2374 insertions, 339 deletions
diff --git a/continuous_integration.mdwn b/continuous_integration.mdwn
index e494d59..fadaeeb 100644
--- a/continuous_integration.mdwn
+++ b/continuous_integration.mdwn
@@ -34,6 +34,8 @@ The majority of the build slaves are provided by our own
[[virtual host server|virtual_host_server]] excepting operating
systems which cannot be virtualised (principally MAC OS X).
+### [[Debian 10 (Buster) Setup|continuous_integration/debian_buster_setup]]
+
### [[Debian 9 (Stretch) Setup|continuous_integration/debian_stretch_setup]]
### [[Fedora 26 Setup|continuous_integration/fedora_26_setup]]
diff --git a/continuous_integration/debian_buster_setup.mdwn b/continuous_integration/debian_buster_setup.mdwn
new file mode 100644
index 0000000..b216b14
--- /dev/null
+++ b/continuous_integration/debian_buster_setup.mdwn
@@ -0,0 +1,349 @@
+[[!meta title="Continuous Integration Debian Buster Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2018-12-21T12:46:14Z"]]
+
+
+[[!toc]]
+
+## Debian 9 (Buster) OS install
+
+### amd64 VDS install from media
+
+[[Virtual server setup|virtual_host_server]]
+
+Install minimal system from netinst CD (attached when VDS is created on
+phoenix) Config options:
+
+- In the "role" selection select "ssh server" and "system utilities" only.
+- The whole disc default partitioning is fine
+- The base user the install insists on creating should be the netsurf user.
+- Boot loader in MBR
+
+Once installed:
+
+- install sudo package and add netsurf user to sudo group
+- edit /etc/default/grub
+
+ GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
+
+as root update grub
+
+ update-grub2
+
+### arm64 VDS install
+
+[[ARM64 virtual server setup|virtual_host_server_arm64]]
+
+Once installed:
+
+- create netsurf user
+- install sudo package and add netsurf user to sudo group
+- edit /etc/inittab comment pty 3 through 6 and uncomment serial T0
+- enable backports
+
+`echo "deb `[`http://http.debian.net/debian`](http://http.debian.net/debian)` buster-backports main" > /etc/apt/sources.list.d/backports.list`
+`apt-get update`
+
+
+## Packaged CI worker install
+
+Do a base OS install
+
+The recommended hostname for CI workers is "nsciworker17" this allows us
+to clearly identify CI worker nodes. Note historically we have used
+"cislave1" which has been objected to by several users. See
+[[changing hostname|https://wiki.debian.org/howto/changehostname_changing_hostname]] on how to achive this.
+
+On master jenkins use "manage nodes" to create new node. Ensure "remote
+fs root" is set to /var/lib/jenkins add variable JENKINS\_HOME set to
+/var/lib/jenkins
+
+Note: replace arm64 with architecture name as required (armhf etc.)
+
+When configuring a scaleway instance the "Launch method" should be set
+to "start and stop this node on-demand" with the "Start script" set to
+`perl /usr/bin/pscw.pl start netsurf-ciworker17` and "Stop script" set
+to `perl /usr/bin/pscw.pl stop netsurf-ciworker17`. The Availability
+set to "Take this slave on-line when in demand and off-line when idle"
+and "in demand delay" set to 0 and "idle delay" set to 15. This will
+mean the node is turned off and not charged for when idle.
+
+As superuser:
+
+create jenkins user
+
+ adduser --system --group --home /var/lib/jenkins/ --disabled-login jenkins
+
+Install https transport
+
+ apt-get install apt-transport-https
+
+Add CI server repo to slave apt sources
+
+ echo "deb https://ci.netsurf-browser.org/debian/ buster/amd64/" >> /etc/apt/sources.list.d/netsurf-browser.list
+
+update repos
+
+ apt-get update
+
+install ci worker package. accept the large package list and the
+ unsigned package install for ns-ci-slave
+
+ apt-get install ns-ci-worker
+
+edit /etc/default/ns-ci-worker to set the correct url and secret parameters
+
+ensure /opt is setup correctly to allow toolchains to be built on the node
+
+ mkdir -p /opt/netsurf
+ chown jenkins:jenkins /opt/netsurf
+
+become jenkins user
+
+ su -s/bin/bash - jenkins
+
+create ssh keypair (accept defaults - no password)
+
+ ssh-keygen -t rsa -C "netsurf@nsciworker12.netsurf-browser.org"
+
+copy .ssh/id\_rsa.pub from worker to jenkins master node and append
+ to /home/netsurf/.ssh/authorized\_keys
+
+ scp /home/jenkins/.ssh/id_rsa.pub netsurf@ci.netsurf-browser.org:nsciworker12_id_rsa.pub
+
+exit jenkins user shell
+
+start CI worker daemon
+
+ /etc/init.d/ns-ci-worker start
+
+
+
+## Pbuilder setup
+
+This allows a worker to build Debian packages. The worker should be
+installed as a normal CI worker node and then:
+
+as superuser on node:
+
+ # apt-get install pbuilder
+ # addgroup pbuilder
+ # addgroup jenkins pbuilder
+
+create /etc/sudoers.d/pbuilder
+
+ jenkins ALL = NOPASSWD:/usr/sbin/pbuilder
+
+`visudo` and alter Defaults
+
+ Defaults env_reset,env_keep="DIST ARCH"
+
+replace `/etc/pbuilderrc`
+
+ # this is your configuration file for pbuilder.
+ # the file in /usr/share/pbuilder/pbuilderrc is the default template.
+ # /etc/pbuilderrc is the one meant for overwriting defaults in
+ # the default template
+ #
+ # read pbuilderrc.5 document for notes on specific options.
+
+ # List of Debian suites.
+ DEBIAN_SUITES=("sid", "buster", "jessie", "wheezy", "squeeze")
+
+ # List of Ubuntu suites.
+ UBUNTU_SUITES=("vivid" "utopic" "trusty" "saucy" "raring" "quantal" "precise" "oneiric" "natty" "lucid" "hardy")
+
+ # Mirrors to use. Update these to your preferred mirror.
+ DEBIAN_MIRROR="ftp.uk.debian.org"
+ UBUNTU_MIRROR="mirrors.kernel.org"
+
+ # set a default distribution if none is used.
+ : ${DIST:="$(lsb_release --short --codename)"}
+
+ # set the architecture to the host architecture if none set.
+ : ${ARCH:="$(dpkg --print-architecture)"}
+
+ NAME="$DIST"
+ if [ -n "${ARCH}" ]; then
+ NAME="$NAME-$ARCH"
+ DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
+ fi
+ BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"
+ DISTRIBUTION="$DIST"
+ BUILDRESULT="/var/cache/pbuilder/$NAME/result/"
+ APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"
+ BUILDPLACE="/var/cache/pbuilder/build/"
+
+ if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then
+ # Debian configuration
+ MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
+ COMPONENTS="main contrib non-free"
+ if $(echo "$STABLE_CODENAME stable" | grep -q $DIST); then
+ OTHERMIRROR="$OTHERMIRROR | deb $MIRRORSITE $STABLE_BACKPORTS_SUITE $COMPONENTS"
+ fi
+ elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then
+ # Ubuntu configuration
+ MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
+ COMPONENTS="main restricted universe multiverse"
+ else
+ echo "Unknown distribution: $DIST"
+ exit 1
+ fi
+
+The architecture is assumed to be the native one from
+
+ dpkg --print-architecture
+
+This can be set by passing ARCH to pbuilder (useful for i386 maybe?)
+
+for each distribution this node will build for:
+
+create pbuilder result directory and set ownership permissions
+
+ # mkdir -p /var/cache/pbuilder/buster-armhf/result
+ # chown root:pbuilder /var/cache/pbuilder/buster-armhf/result
+ # chmod g+w /var/cache/pbuilder/buster-armhf/result
+
+become jenkins user
+
+ su -s/bin/bash - jenkins
+
+create pbuilder base for distribution
+
+ sudo DIST=buster pbuilder create
+
+if desired additional packages and config can be made to the base with
+
+`sudo DIST=buster pbuilder login --save-after-login`
+
+## distcc worker node
+
+Do a basic OS install but \*not\* a CI worker setup.
+
+A recommended hostname for distcc worker is something like "cicpu0" this
+allows us to use systems as processing node for other purposes than just
+distcc in future. See debians
+[[changing hostname|https://wiki.debian.org/howto/changehostname_changing_hostname]] on how to achive this.
+
+The Netsurf repository has necessary updated packages in it and can be
+accessed by doing the following:
+
+Add CI server repo to worker apt sources
+
+ echo "deb https://ci.netsurf-browser.org/builds/debian/ buster/amd64/" >> /etc/apt/sources.list
+
+update repos
+
+ apt-get update
+
+use apt to install these packages:
+
+ build-essential
+ gcc
+ clang
+ distcc
+
+edit /etc/default/distcc
+
+ STARTDISTCC="true"
+ ALLOWEDNETS="192.168.211.0/24"
+ LISTEN="0.0.0.0"
+ JOBS="8"
+
+start the service
+
+ service distcc start
+
+ensure the client has hosts set to use the new worker
+
+
+
+## Manual CI worker install
+
+Caution these instructions may not be up to date.
+
+### required packages
+
+The Netsurf repository has necessary updated packages in it and can be
+accessed by doing the following:
+
+Add CI server repo to slave apt sources
+
+`echo "deb `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)` buster/amd64/" >> /etc/apt/sources.list`
+
+update repos
+
+ apt-get update
+
+use apt to install these packages:
+
+`openjdk-7-jre-headless `
+`screen `
+`build-essential`
+`ccache`
+`clang`
+`git`
+`pkg-config`
+`check`
+`doxygen`
+`libjson0-dev (from our repo - needs bugfixes `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)`)`
+`libexpat1-dev`
+`libxml-perl`
+`libxml-xpath-perl`
+`lcov`
+`gcovr (from our repo)`
+`gperf`
+`flex`
+`bison`
+`libpng-dev`
+`libjpeg-dev`
+`libmozjs185-dev`
+`libglib2.0-dev`
+`libcurl4-openssl-dev`
+`liblcms1-dev`
+`libxml2-dev`
+`librsvg2-dev`
+`libmng-dev`
+`libgtk2.0-dev`
+`libmozjs-dev`
+
+### config
+
+- on master jenkins use "manage nodes" to create new node. Ensure
+ "remote fs root" is set to /home/netsurf/jenkins
+- create netsurf user
+- as netsurf user:
+ - wget <http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar>
+ - run screen
+ - create jenkins-slave.sh
+
+ #!/bin/bash
+
+ java -Djava.awt.headless=true -jar slave.jar -jnlpUrl https://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp -secret 0123456789abcdef01234567890abcdef
+
+ - run jenkins-slave.sh
+ - create new screen tab
+ - create ssh keypair (accept defaults - no password)
+
+ ssh-keygen -t rsa -C "netsurf@cislave0.netsurf-browser.org"
+
+- - copy .ssh/id\_rsa.pub from slave to jenkins master node and
+ append to /home/netsurf/.ssh/authorized\_keys
+
+ scp ci.netsurf-browser.org:.ssh/id_rsa.pub .id_rsa.pub
+ cat id_rsa.pub >> .ssh/authorized_keys
+
+- - copy .ssh/id\_rsa.pub from master node to slave and append to
+ /home/netsurf/.ssh/authorized\_keys
+ - create reverse-ssh.sh (change tunnel port number!)
+
+ #!/bin/sh
+
+ ssh -R 22224:localhost:22 netsurf@ci.netsurf-browser.org 'bash -c "while true; do echo .; sleep 60; done"
+
+- - run reverse-ssh.sh
+ - on the master create a shell script to use the ssh tunnel
+ connection, thus firewalls etc are moot as long as the slave can
+ connect to the master
+
+ ssh netsurf@localhost -p 22223
diff --git a/continuous_integration/debian_stretch_setup.mdwn b/continuous_integration/debian_stretch_setup.mdwn
index c20abee..557472e 100644
--- a/continuous_integration/debian_stretch_setup.mdwn
+++ b/continuous_integration/debian_stretch_setup.mdwn
@@ -24,9 +24,8 @@ Once installed:
- install sudo package and add netsurf user to sudo group
- edit /etc/default/grub
-`GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"`
-
-`# update-grub2`
+ GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
+ # update-grub2
### arm64 VDS install
@@ -286,50 +285,62 @@ fs root" is set to /var/lib/jenkins add variable JENKINS\_HOME set to
Note: replace arm64 with architecture name as required (armhf etc.)
-When configuring a scaleway instance the "Launch method" should be set to "start and stop this node on-demand" with the "Start script" set to `perl /usr/bin/pscw.pl start netsurf-ciworker17` and "Stop script" set to `perl /usr/bin/pscw.pl stop netsurf-ciworker17`. The Availability set to "Take this slave on-line when in demand and off-line when idle" and "in demand delay" set to 0 and "idle delay" set to 15. This will mean the node is turned off and not charged for when idle.
+When configuring a scaleway instance the "Launch method" should be set
+to "start and stop this node on-demand" with the "Start script" set to
+`perl /usr/bin/pscw.pl start netsurf-ciworker17` and "Stop script" set
+to `perl /usr/bin/pscw.pl stop netsurf-ciworker17`. The Availability
+set to "Take this slave on-line when in demand and off-line when idle"
+and "in demand delay" set to 0 and "idle delay" set to 15. This will
+mean the node is turned off and not charged for when idle.
As superuser:
-- create jenkins user
+create jenkins user
-`adduser --system --group --home /var/lib/jenkins/ --disabled-login jenkins`
+ adduser --system --group --home /var/lib/jenkins/ --disabled-login jenkins
-- Add CI server repo to slave apt sources
+Install https transport
-`echo "deb `[`http://ci.netsurf-browser.org/debian/`](http://ci.netsurf-browser.org/debian/)` stretch/amd64/" >> /etc/apt/sources.list.d/netsurf-browser.list`
+ apt-get install apt-transport-https
-- update repos
+Add CI server repo to slave apt sources
-`apt-get update`
+ echo "deb https://ci.netsurf-browser.org/debian/ stretch/amd64/" >> /etc/apt/sources.list.d/netsurf-browser.list
+
+update repos
-- install ns-ci-worker package. accept the large package list and the
- unsigned package install for gcovr and ns-ci-slave
+ apt-get update
-`apt-get install ns-ci-worker`
+install ci worker package. accept the large package list and the
+ unsigned package install for ns-ci-slave
-- edit /etc/default/ns-ci-worker to set the correct url and secret parameters
-- ensure /opt is setup correctly to allow toolchains to be built on the node
+ apt-get install ns-ci-worker
-`mkdir -p /opt/netsurf`
-`chown jenkins:jenkins /opt/netsurf`
+edit /etc/default/ns-ci-worker to set the correct url and secret parameters
-- become jenkins user
+ensure /opt is setup correctly to allow toolchains to be built on the node
-`su -s/bin/bash - jenkins`
+ mkdir -p /opt/netsurf
+ chown jenkins:jenkins /opt/netsurf
-- create ssh keypair (accept defaults - no password)
+become jenkins user
+
+ su -s/bin/bash - jenkins
-`ssh-keygen -t rsa -C "netsurf@nsciworker17.netsurf-browser.org"`
+create ssh keypair (accept defaults - no password)
-- copy .ssh/id\_rsa.pub from worker to jenkins master node and append
+ ssh-keygen -t rsa -C "netsurf@nsciworker12.netsurf-browser.org"
+
+copy .ssh/id\_rsa.pub from worker to jenkins master node and append
to /home/netsurf/.ssh/authorized\_keys
-`scp /home/jenkins/.ssh/id_rsa.pub netsurf@ci.netsurf-browser.org:nsciworker17_id_rsa.pub`
+ scp /home/jenkins/.ssh/id_rsa.pub netsurf@ci.netsurf-browser.org:nsciworker12_id_rsa.pub
+
+exit jenkins user shell
-- exit jenkins user shell
-- start CI worker daemon
+start CI worker daemon
-`/etc/init.d/ns-ci-worker start`
+ /etc/init.d/ns-ci-worker start
@@ -350,9 +361,9 @@ create /etc/sudoers.d/pbuilder
`visudo` and alter Defaults
-`Defaults        env_reset,env_keep="DIST ARCH"`
+ Defaults env_reset,env_keep="DIST ARCH"
-replace /etc/pbuilderrc
+replace `/etc/pbuilderrc`
# this is your configuration file for pbuilder.
# the file in /usr/share/pbuilder/pbuilderrc is the default template.
@@ -406,7 +417,7 @@ replace /etc/pbuilderrc
The architecture is assumed to be the native one from
-`dpkg --print-architecture`
+ dpkg --print-architecture
This can be set by passing ARCH to pbuilder (useful for i386 maybe?)
@@ -420,11 +431,11 @@ create pbuilder result directory and set ownership permissions
become jenkins user
-`su -s/bin/bash - jenkins`
+ su -s/bin/bash - jenkins
create pbuilder base for distribution
-`sudo DIST=stretch pbuilder create`
+ sudo DIST=stretch pbuilder create
if desired additional packages and config can be made to the base with
@@ -444,18 +455,18 @@ accessed by doing the following:
Add CI server repo to worker apt sources
-`echo "deb `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)` stretch/amd64/" >> /etc/apt/sources.list`
+ echo "deb https://ci.netsurf-browser.org/builds/debian/ stretch/amd64/" >> /etc/apt/sources.list
update repos
-`apt-get update`
+ apt-get update
use apt to install these packages:
-`build-essential`
-`gcc`
-`clang`
-`distcc`
+ build-essential
+ gcc
+ clang
+ distcc
edit /etc/default/distcc
@@ -466,7 +477,7 @@ edit /etc/default/distcc
start the service
-`service distcc start`
+ service distcc start
ensure the client has hosts set to use the new worker
@@ -481,13 +492,13 @@ Caution these instructions may not be up to date.
The Netsurf repository has necessary updated packages in it and can be
accessed by doing the following:
-- Add CI server repo to slave apt sources
+Add CI server repo to slave apt sources
`echo "deb `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)` stretch/amd64/" >> /etc/apt/sources.list`
-- update repos
+update repos
-`apt-get update`
+ apt-get update
use apt to install these packages:
@@ -531,33 +542,33 @@ use apt to install these packages:
- run screen
- create jenkins-slave.sh
-`#!/bin/bash`
-
-`java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp)` -secret 0123456789abcdef01234567890abcdef`
+ #!/bin/bash
+
+ java -Djava.awt.headless=true -jar slave.jar -jnlpUrl https://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp -secret 0123456789abcdef01234567890abcdef
-- - run jenkins-slave.sh
+ - run jenkins-slave.sh
- create new screen tab
- create ssh keypair (accept defaults - no password)
-`ssh-keygen -t rsa -C "netsurf@cislave0.netsurf-browser.org"`
+ ssh-keygen -t rsa -C "netsurf@cislave0.netsurf-browser.org"
- - copy .ssh/id\_rsa.pub from slave to jenkins master node and
append to /home/netsurf/.ssh/authorized\_keys
-`scp ci.netsurf-browser.org:.ssh/id_rsa.pub .id_rsa.pub`
-`cat id_rsa.pub >> .ssh/authorized_keys`
+ scp ci.netsurf-browser.org:.ssh/id_rsa.pub .id_rsa.pub
+ cat id_rsa.pub >> .ssh/authorized_keys
- - copy .ssh/id\_rsa.pub from master node to slave and append to
/home/netsurf/.ssh/authorized\_keys
- create reverse-ssh.sh (change tunnel port number!)
-`#!/bin/sh`
-
-`ssh -R 22224:localhost:22 netsurf@ci.netsurf-browser.org 'bash -c "while true; do echo .; sleep 60; done"'`
+ #!/bin/sh
+
+ ssh -R 22224:localhost:22 netsurf@ci.netsurf-browser.org 'bash -c "while true; do echo .; sleep 60; done"
- - run reverse-ssh.sh
- on the master create a shell script to use the ssh tunnel
connection, thus firewalls etc are moot as long as the slave can
connect to the master
-`ssh netsurf@localhost -p 22223`
+ ssh netsurf@localhost -p 22223
diff --git a/continuous_integration/freebsd_setup.mdwn b/continuous_integration/freebsd_setup.mdwn
index 41a2731..a1896af 100644
--- a/continuous_integration/freebsd_setup.mdwn
+++ b/continuous_integration/freebsd_setup.mdwn
@@ -87,6 +87,9 @@ Required packages:
gperf
rsync
openjdk
+ vim-console
+
+vim-console is required for the xxd tool
### config
diff --git a/continuous_integration/openbsd_setup.mdwn b/continuous_integration/openbsd_setup.mdwn
index e8dd5ef..d94d498 100644
--- a/continuous_integration/openbsd_setup.mdwn
+++ b/continuous_integration/openbsd_setup.mdwn
@@ -80,9 +80,12 @@ Ensure all ports were added in the install or mess with ports as needed
pkg_add -v rsync-3.1.2p0-iconv git check doxygen
pkg_add -v gperf flex bison gtk+2 png jpeg
pkg_add -v wget curl bash gmake p5-HTML-Parser
+ pkg_add -v vim-8.0.0388-no_x11-lua
for historical reasons link gflex to flex in /usr/bin
+The VIM package is necessary to install the xxd tool
+
### config
Add node on jenkins master CI instance
diff --git a/developer-weekend/aug-2019.mdwn b/developer-weekend/aug-2019.mdwn
new file mode 100644
index 0000000..199d1e3
--- /dev/null
+++ b/developer-weekend/aug-2019.mdwn
@@ -0,0 +1,368 @@
+[[!meta title="Developer Weekend (August 2019)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2019-08-01 10:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+Apologies
+=========
+
+* John-Mark Bell
+
+Outstanding work (from May)
+============================
+
+* Monkey
+ * Driver - capability to "Click" on a specified piece of text (Daniel)
+ (Basically a way to say click button FOO) **DONE**
+* Framebuffer
+ * Language support for resources (Vince)
+ * Listing of compiled-in surfaces (Vince)
+
+Topics
+======
+
+
+Discussions
+===========
+
+
+Frontends
+=========
+
+Coverity
+========
+
+We went over coverity output because we got upgraded. Fixed a few items along
+the way.
+
+Bug Triage
+==========
+
+Plenty of triage was done. In addition, we fixed:
+
+* <https://bugs.netsurf-browser.org/mantis/view.php?id=2658>
+* <https://bugs.netsurf-browser.org/mantis/view.php?id=2617>
+
+Activity
+========
+
+Michael
+-------
+
+* Coverity fix for LibCSS that makes the select hash insertion at start of non-empty list code more readable.
+* Worked with Daniel on fixing NULL node hover crash on page with all content set to `visibility: hidden`.
+* Much plotting and planning of libnslayout's text layout, with Daniel.
+* Looked at browser window scale stuff with Vince and moved the scale handling for invalidate to the core, and updated the GTK front end.
+* Setting up of frameworks for new libparagraph stuff.
+* Updated duktape to version 2.4.0.
+* Made local-history bitmaps scale with DPI
+* Made iframe test on <https://test.netsurf-browser.org/html/iframe.html>
+* Attempted to add support for core window `scroll_visible` to RISC OS front end.
+ - It didn't compile, so built the RISC OS toolchain and SDK, and then fixed the compilation error.
+* Added support for scaling keyboard shortcuts to the Framebuffer front end.
+* Optimised libnsfb's xrgb8888 surface rendering using a neat trick from Adrian Lees.
+* Added support for scrolling core windows to the RISC OS front end.
+* Fixed the RISC OS core window get_window_dimensions to handle toolbar height.
+* Made all the core window callbacks return nserror instead of void.
+ - And updated all the front ends.
+* Changed the core window interface for scrolling from scroll_visible to much simpler get/set scroll APIs.
+* Reimplemented old scroll_visisble API in the core on top of the new set/get scroll and get_window_dimensions, using Daniel's algorithm from the GTK front end.
+* Made the RISC OS local history window claim input focus when it opens.
+* Fixed a couple of Duktape bindings for DOM element nodes that didn't check the return value of a LibDOM call.
+* Suppressed dead store `scan-build` warnings in the CSS presentational hints gatherer.
+* Wrote some simple iframe and image tests for bad SSL.
+* Implemented the libparagraph stuff for creating and destroying contexts.
+* Implemented the libparagraph stuff for adding content to contexts.
+* Added the libparagraph stuff to the Makefile, to build it.
+* Looked into crash with animated GIF redraw.
+ - Optimised box_coords when there's a float in the ancestors.
+ - Potentially fixed crash by short-circuiting object redraws before the HTML has had a layout pass.
+* Looked at CSS styling stuff with Vince.
+
+Daniel
+------
+
+* A number of bug fixes
+* Worked with Michael planning text layout
+* Acquired a polyfill for `Array.from()` and fixed `consoleFormatter`.
+* Fixed a typo (`BUTTOM`)
+* Made it so that cURL fetches will abort early if possible
+* Updated stacktrace handling to new duktape
+* Added cookie setting support
+* Wrote reload support into monkey driver/farmer
+* Added a cookie test using JS and a new cookies CGI
+* Various cleanups with `fetch_fdset()` vs `schedule_run()`
+* Added extra diagnostics during monkeyfarmer shutdown
+* Fixed the oldest bug! (Added scroll-visible to local history and added key
+ navigation)
+* Did similarly to treeview (scroll-visible)
+* Added click support to monkey, monkeyfarmer, monkey-driver, and added a test
+ to netsurf-test which will use it.
+* More robustification of the asyncio loop in monkeyfarmer.
+* Added additional intuitive nav to local history
+* Added a 'aborted-fetch' test (and fixed monkey_driver a bit)
+* Migrated the callback for auth/ssl from llcache through hlcache to the users
+ of the hlcache. It should be functionally equivalent (except sub-fetches
+ no longer prompt but instead automatically fail like in other browsers).
+* Designed an approach for shadow contents, fleshed it out, discussed it among
+ ourselves, discarded as being overcomplex. It is preserved below for posterity.
+* Designed, with Vince primarily being the clever monkey, a new approach which
+ removed the query callbacks from the llcache and instead uses content generated
+ in the `about:` handler. We think this is cleaner.
+* Combined `CONTENT_MSG_ERROR` and `CONTENT_MSG_ERRORCODE`
+* Taught `browser_window` how to remember fetch parameters so that we can
+ restart fetches in the new query design. Split navigation in half to make
+ that clean.
+* Migrated SSL certificate chain storage to `browser_window` and allowed it
+ to store the chains for the completed fetch, leading to possibilities of
+ padlocks later down the line. In the process, fixed a long-standing bug
+ where serial numbers never worked.
+* Excised the llcache query pathways and migrated them all the way up to the
+ `browser_window`
+* Tracked down a strange behaviour and discovered we didn't handle `PAUSED`
+ coming out when we tried to finish the parse. Added a fix for that.
+* Added internal navigation concept to `browser_window` and migrated the
+ login handling inside it, using Vince's new auth query support in the `about:`
+ fetcher.
+
+Vince
+-----
+
+* Restored OpenBSD to functionality in the CI
+* Splitting up of `browser.c`
+* Removed `scale` from `_invalidate`.
+* Removed scaling from `get_dimensions`.
+* Re-fixed Haiku worker in CI.
+* Cleared out leftover junk builds from the CI carrier.
+* Tested Michael's RISC OS changes under RPCEmu.
+* Completed `scale`ectomy in `browser_window_mouse_click()`, `browser_window_mouse_track()`, `browser_window_get_features()` `browser_window_set_scale()`. And updated all of the callers and all of the front ends.
+ - Now the front ends don't need to care about scale.
+* wrote about scheme query handlers for auth and privacy
+
+
+Thoughts on shadow contents -- We decided that this was overcomplex and CANCELLED THIS IDEA
+===========================================================================================
+
+In order to complete the work we started my migrating queryies all the way up
+from the `llcache` to the `browser_window`, we need to come up with a way for
+the `browser_window` to load and display a real content which will represent
+the query to present to the user.
+
+Terms
+-----
+
+* **real content**: A real content if available (e.g. the current page when then
+ navigating away).
+* **loading content**: The content which is currently loading into the window.
+* **real loading content**: The _loading content_ which may trigger a query.
+* **query**: The callback from the _real loading content_ which needs user
+ input to decide on the action for.
+* **stored query**: A stored callback and private word for answering the
+ last _query_ which came for the _real loading content_.
+* **shadow loading content**: A holding space for a _real loading content_
+ which should not give any events unless something else unblocks the query in
+ another window.
+* **special navigation**: An attempt to navigate in such a way as it would
+ answer a _stored query_
+
+Events
+------
+
+The events we have to respond to are:
+
+1. The query event coming into the `browser_window_callback`
+2. Any attempt to `browser_window_navigate`
+3. Any attempt to `browser_window_reload`
+4. Any event coming from a _shadow loading content_
+5. Destroying a `browser_window`
+6. Any call to `browser_window_stop`
+
+States
+------
+
+The states we might be in are:
+
+1. **Not loading**: The normal state of being where we're not loading and as
+ such nothing interesting is going on.
+2. **Normal loading**: The process of loading is happening, there is no
+ _shadow loading content_ and the _real loading content_ is making progress.
+3. **Shadow loading**: The process of loading is paused, and a shadow page is
+ being loaded. This implies there's a _stored query_.
+4. **Shadow loaded**: This is like the _not loading_ state, but there is a
+ _shadow loading content_ and a _stored query_ which mark it as different.
+
+State transitions
+-----------------
+
+1. Moving out of _not loading_ happens as normal on any of the usual events
+2. When _normal loading_ all the usual events behave in the current manner,
+ except if we receive a _query_. On receipt of a _query_ the _real loading
+ content_ is moved from the _loading content_ into the _shadow loading
+ content_, and a new request is created in the _loading content_ for the
+ query page with requisite parameters. Finally the _query_ parameters are
+ stored into the _stored query_. This moves us to _shadow loading_.
+3. When _shadow loading_ and any of the navigation events occur, we first abort
+ the _loading content_ and move the _shadow loading content_ (which is the
+ _real loading content_) back into the _loading content_. Then we refuse the
+ _stored query_ which will abort the _real loading content_. Then we process
+ the navigation as before.
+4. When loading completes when we're in _shadow loading_ then we proceed as
+ "normal" to replace the current content with the converted shadow document,
+ we fire the query at the frontend, and we enter _shadow loaded_.
+5. When in _shadow loaded_ and normal navigation occurs, we behave essentially
+ like we would in _shadow loading_ and such an event occurred.
+6. When in _shadow loaded_ and we receive a _special navigation_ instruction,
+ then we gather the information from the URL to answer the _stored query_,
+ then close the query page content, move the _shadow loading content_ back to
+ the _loading content_, and then clear the _stored query_. This transitions
+ us back into _normal loading_. Finally we send the answer to the query
+ which will kick off normal fetch procedures once more.
+7. When in _shadow loaded_ or _shadow loading_ we receive any events from the
+ _shadow loading content_ we should assume that a decision was made in
+ another window and so we abort any _loading content_, or close any displayed
+ content, drop the _stored query_, put the _shadow loading content_ back into
+ the _loading content_, and return to _normal loading_
+
+Replacement query proposal
+==========================
+
+In order to simplify matters we decided instead that we would unwind the
+paused/callback mechanism and instead have the fetch stop with an appropriate
+error code indicating the query, allow the browser window to deal with that
+and then to restart the fetch from the top level.
+
+To do so, the browser window will have to retain the post data etc. This
+allows for us to also implement the when reloading a page which was posted,
+query the user for whether or not to re-post. (but this is 'some future time')
+
+Then when we receive a query form `CONTENT_MSG_ERROR` the browser window can
+issue a special internal fetch for the query page it needs, passing the
+requisite information. On `CONTENT_COMPLETE` it can then call the gui, giving
+it a chance to chime in.
+
+If a reload happens while we're on a special page, we redo the original fetch,
+if we navigate to the special try-again, we redo the original fetch. If we
+navigate to the special proceed, we perform the update as needed, and redo
+the original fetch.
+
+Step one
+--------
+
+First, we need to clean up and unify `CONTENT_MSG_ERROR` and
+`CONTENT_MSG_ERRORCODE`.
+
+This will allow us to later use this unified thing to communicate more useful
+fetch errors upward toward the browser window.
+
+Step two
+--------
+
+We make `browser_window_navigate` store the fetch parameters so that
+redoing the fetch is possible
+
+Step three
+----------
+
+We change the fetch/llcache/hlcache layers to always pass SSL certificate
+chains upward when they are available.
+
+And we change the `browser_window` to store that chain alongside both the
+`current_content` and the `loading_content`.
+
+We may add APIs to access these later.
+
+Step four
+---------
+
+We change the fetch/llcache/hlcache layers to remove the `QUERY` concept
+entirely and to pass an appropriately structed `CONTENT_MSG_ERROR`.
+
+We change the `browser_window` to consume that error and call the current
+callbacks. The `proceed` callback will have to be implemented in
+`browser_window` in a simplistic fashion.
+
+At this point, all the plumbing is in place, but the current behaviour in terms
+of GUI interaction and urldb remains the same.
+
+Step five
+---------
+
+We write a handler in about: to provide the query pages. This is MVP to be
+able to get on with things. At this point we allow `browser_window` to have
+the concept of a special fetch which does not update the fetch paramters, nor
+the url bar etc. And when we stop a fetch because of the query errors, we
+navigate to that about: handler using the special fetch mode, thus we'll end up
+with both the new page *and* the GUI prompt still. Ideally we move the gui
+prompt to be on `CONTENT_DONE` for the special load.
+
+Step six
+--------
+
+We handle the special `about:` URI which means 'proceed' and the one which
+means 'try-again' as per the descriptions in the summary of this proposal.
+
+Step seven
+----------
+
+Rework the gui/browser_window querying so that instead of proceed/cancel
+it is try-again/take-answer/proceed.
+
+Step eight
+----------
+
+Various sundry cleanups as a result of all of the above.
+
+Statement of work
+=================
+
+If at all possible, we'd like to see some of the following addressed before
+the next developer weekend…
+
+* General
+ * Remove 401 login implementations from all frontends (Vince) **DONE**
+ * Resolve issues arising from introducing internal query pages (Daniel) **DONE**
+ * Implement any appropriate auto fill auth handlers
+ * Low level cache should own certificate data and persist with all other data
+ - Shouldn't be pushed down to browser window; browser window should request
+ it from the hlcache handle, which should get it from the llcache.
+ * Implement Site Information (padlock) and repurpose certificate error core
+ windows to be certificate viewing interfaces
+ * Continue styling the generated query pages.
+ * Review TODOs.
+* Framebuffer
+ * Language support for resources (Vince)
+ * Listing of compiled-in surfaces (Vince)
+* Internationalisation
+ * Write the English query page page messages first. (Vince) **DONE**
+ * Make a mailing list post about query pages. (Daniel) **DONE**
+ * Translations of all messages for the SSL/privacy internal query page.
+ * Translations of all messages for the authentication internal query page.
+* Current CI tests (test-site-run)
+ - Three groups:
+ + Tests that only fetch from our infrastructure.
+ + Tests that fetch off third party servers and are fast to run.
+ + Test that fetch from third party servers and long running.
+ - In Jenkins: Group the first two and make them trigger the third one.
+* New tests
+ * Take the 10,000 sites list, split it up into blocks of 20, and run them as
+ independent tests.
+ * Four core VM, which gets 4 Jenkins jobs for running these tests.
+ * Experiment and see how it breaks down. Needs to be weekly (we can tweak it).
+* Text layout
+ - Continue implementing. (Michael)
+
+Next time
+=========
+
+* Manchester
+* 30 Nov / 1 Dec.
+* Consider extending either side, depending on holidays.
+* changed from Cambridge because of Daniel and Micahel availability \ No newline at end of file
diff --git a/developer-weekend/dec-2019.mdwn b/developer-weekend/dec-2019.mdwn
new file mode 100644
index 0000000..d255425
--- /dev/null
+++ b/developer-weekend/dec-2019.mdwn
@@ -0,0 +1,233 @@
+[[!meta title="Developer Weekend (December 2019)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2019-12-01 22:30:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+
+Outstanding work (from May)
+============================
+
+* General
+ * Implement any appropriate auto fill auth handlers
+ * Low level cache should own certificate data and persist with all other data
+ - Shouldn't be pushed down to browser window; browser window should request
+ it from the hlcache handle, which should get it from the llcache.
+ * Implement Site Information (padlock) and repurpose certificate error core
+ windows to be certificate viewing interfaces
+ * Continue styling the generated query pages.
+ * Review TODOs.
+* Framebuffer
+ * Language support for resources (Vince)
+ * Listing of compiled-in surfaces (Vince)
+* Internationalisation
+ * Translations of all messages for the SSL/privacy internal query page.
+ * Translations of all messages for the authentication internal query page.
+* New tests
+ * Take the 10,000 sites list, split it up into blocks of 20, and run them as
+ independent tests.
+ * Four core VM, which gets 4 Jenkins jobs for running these tests.
+ * Experiment and see how it breaks down. Needs to be weekly (we can tweak it).
+* Text layout
+ - Continue implementing. (Michael)
+
+Topics
+======
+
+* Goals for the weekend
+ * Complete the multi-site parallel test stuff that Vince has started **DONE**
+ * Migrate SSL certification ownership to the llcache and at least block out
+ the padlock work **DONE**
+ * Resolve new Debian packaging and upload **Deferred to after 3.10**
+
+* Bug triage
+ * Do general triage **DONE**
+ * Specifically address [[!bug 2682]] (NetSurf on RISC OS keeps crashing in
+ curl-ares) **We looked, we couldn't work out what it was**
+ * Look at [[!bug 2686]] [[!bug 2701]] (WebP in SDK) **DONE** Daniel updated
+ toolchains
+
+* Reviews
+ * Go over GTK frontend changes **DONE** As a group
+ * Fetcher/Cache hacking regarding file/data/resources/etc **DONE** As a group
+ * Look over the generic error internal query page work **DONE** Daniel checked it
+ * Check over the mouse input handler rework **DONE** As a group
+
+* Consider the pathway to 3.10/4.0 **DONE**
+
+* Consider what the best return-on-effort might be to improve general layout
+ support. We're increasingly falling behind. **DONE**
+
+Discussions
+===========
+
+
+Frontends
+=========
+
+Coverity
+========
+
+
+Bug Triage
+==========
+
+* [[!bug 2719]] - 3DES and friends -- What do we do about this?
+* [[!bug 2705]] - Assigned to Michael - Layout
+* [[!bug 2649]] - Assigned to Vince - WIN32
+* [[!bug 2709]] - Assigned to Vince - WIN32
+* [[!bug 2708]] - Assigned to Vince - WIN32
+* [[!bug 2713]] - Closed, sent user to dev ML or IRC
+* [[!bug 2652]] - Assigned to Michael - Layout - Likely to be LONG TIME
+* [[!bug 2688]] - Assigned to Michael - Layout - Responded; needs CSS opacity support, which needs compositing.
+* [[!bug 2694]] - Updated with notes, left acknowledged but unassigned
+* [[!bug 2695]] - Resolved/Fixed thanks to Vince's new GTK UX
+* [[!bug 2689]] - Assigned to Michael - Layout - Fixed in HTML redraw
+* [[!bug 2703]] - Daniel added a note, but we're leaving it unassigned
+* [[!bug 2710]] - This appears to be a RISC OS font problem, Michael responded
+
+General Layout Improvement Approach
+===================================
+
+* libcss needs support for `calc`
+* libcss needs css variable support
+* NetSurf could try and use the flexbox properties and grid layout
+* Continue to try and get jQuery working
+
+Pathway to 3.10
+===============
+
+* Completion of MVP for page info core window (Assigned to Vince, Michael to
+ help)
+* Completion of integration of that into GTK and RISC OS frontends, with others
+ being given at least two weeks to integrate before they cease blocking.
+ (Assigned to Vince)
+* At least some attention given to GTK focus issues (Assigned to Vince, Daniel
+ to assist)
+* See if we can exfiltrate better SSL session error information such as a lack
+ of cipher list overlap. [[!bug 2719]] (Assigned to Daniel)
+* Verify webp on riscos, disable if too buggy (Assigned to Michael)
+
+Activity
+========
+
+Mostly individual activity here
+
+Michael
+-------
+
+* Proposed a FOSDEM talk
+* [[!bug 2689]] - Fixed us not to render scrollbars when the CSS tells us
+ not to.
+* Added some extra glyphs to the Framebuffer front end to render the the
+ [wttr](https://wttr.in/) page properly.
+* [[!bug 2688]] - Looked into the cause of this bug, and found it was due
+ to the unimplemented opacity property. It's tricky to implement right
+ now. It applies to all descendant elements, so compositing is required.
+* [[!bug 2705]] - Looked into this, unfortunately we seem to be given different
+ content to Firefox - save firefox's content and NS can render it. ARGH.
+* Helped Daniel track down a breakage in libcss when faced with
+ an incomplete ruleset inside a media query block.
+* Added support for `KeyboardEvent` properly in libdom and semi-properly
+ in NetSurf
+
+Daniel
+------
+
+* Added support for storing SSL certificates onto the llcache objects
+* Added catchup support so that new users get the certs too
+* Added support for serialising and deserialising the certificate chains
+ so that persistent https data retains its chain for use.
+* Did a bunch of toolchain updates
+* Did a bunch of `rr` and fixed some leaks in `box_construct.c`
+* Did a bunch of `rr` and tracked down a breakage in libcss when faced with
+ an incomplete ruleset inside a media query block. (Michael helped)
+* Did a bunch of `rr` and tracked down an incorrect throbberstoppage.
+* Wrote support for page info status indicators in browser window and
+ content, threaded through html content too.
+* Wrote a monkey test set to validate the page info status
+* Various jenkins frobbling
+
+
+Vince
+-----
+
+* [[!bug 2720]] - Implemented feature request of closing tabs with middle click
+* Finished extended internet test badgering including full reorganisation of
+ the monkey-tests tree.
+* Fixed [[!bug 2709]] - UTF8 caption on Windows (WIN32)
+* Implemented icons for page info status work that Daniel did, and made it all
+ work in the GTK frontend (GTK2 *and* GTK3)
+* Temporarily plumbed the old SSL cert info into being activated from that
+ button. It's not brilliant but it does work.
+* Began to look at fixing win32 font-width stuff for wide-chars
+* Various jenkins frobbling
+
+Plan for page info
+==================
+
+1. We add to browser_window the concept of the currently displayed page info.
+2. That info is an enumeration of:
+ * UNKNOWN (nothing loaded?)
+ * INTERNAL (e.g. `about:` etc)
+ * INSECURE (e.g. `http://`)
+ * SECURE+PROBLEMS (e.g. `https://` but `http://` images, or badssl)
+ * SECURE (all is well)
+3. Whenever the currently displayed page changes, `browser_window` will send a
+ notification to the GUI, which will then be able to retrieve the current
+ state information.
+4. More detailed page information will be available through further APIs
+
+Then separately
+
+When the page information button is clicked, the GUI pops up a corewindow for
+it. This window will show information about the page's security, etc. Most of
+the information for this can be directly retrieved from the browser_window and
+as such, the corewindow will be initialised with the browser_window pointer.
+The GUI will be responsible for destroying the corewindow when the browser
+window is going away, and for notifying the corewindow when the browser window
+event indicating info-change occurs.
+
+This means that the corewindow is borrowing from the browser window, so we need
+to ensure that anything the browser window returns by pointer will remain safe
+for use even when navigation events occur.
+
+
+
+Statement of work
+=================
+
+If at all possible, we'd like to see some of the following addressed before
+the next developer weekend…
+
+* General
+ * Implement any appropriate auto fill auth handlers
+ * Continue styling the generated query pages.
+ * Review TODOs.
+* Framebuffer
+ * Language support for resources (Vince)
+ * Listing of compiled-in surfaces (Vince)
+* Internationalisation
+ * Translations of all messages for the SSL/privacy internal query page.
+ * Translations of all messages for the authentication internal query page.
+* Text layout
+ - Continue implementing. (Michael)
+* Release 3.10
+ * Which means do the work first needed to complete it
+ * And then do Debian package releases, including removing framebuffer
+ from Debian.
+* Events
+ * Michael to do more UI event support in NetSurf
+
+Next time
+=========
+
+* February 21st to 24th (Fri through Monday) as a full 4 day event
+* Manchester, unless something changes.
diff --git a/developer-weekend/feb-2019.mdwn b/developer-weekend/feb-2019.mdwn
new file mode 100644
index 0000000..5505342
--- /dev/null
+++ b/developer-weekend/feb-2019.mdwn
@@ -0,0 +1,202 @@
+[[!meta title="Developer Weekend (February 2019)"]]
+[[!meta author="Daniel Silverstone"]]
+[[!meta date="2019-02-17 14:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+Apologies
+=========
+
+* John-Mark Bell
+
+Statement of work (from November)
+=================================
+
+Within the fortnight we will:
+
+1. Have `monkeyfarmer` and `monkey-driver` updated to work with 401 and the
+ full feature set thus-far defined.
+2. Have a set of tests in the `netsurf-test` repository along with their
+ metadata.
+3. Have those tests aggregated during the build/install of the repo
+4. Have a CI job which downloads that aggregation, acquires a source-all
+ tarball, and builds monkey from that, running the driver across the test
+ set.
+
+Topics
+======
+
+Saturday
+--------
+
+* Daniel to sort wapcaplet dodginess with modern libcs/compilers.
+* Do the SoW from November
+* Attempt to correct the sanitize situation with libdom. Failing that, disable
+ the job
+* Bug Triage
+* Figure out why master branch packaging jobs are failing
+* Review framebuffer's feature set and decide on a battle plan
+
+Sunday
+------
+
+* Review Lars statement on netsurf and the ick project
+* Daniel to write a CGI which reports everything about how it's called
+* Vince can then look at [[!bug 2595]] (submission missing button)
+* Vince can then look at [[!bug 2558]] (text area truncation)
+* Daniel will tone down dukky debug regarding odd stack trace reports
+* Vince will do [[!bug 2617]] (LCC support in build system)
+* Michael to update the svgtiny parser bug with why it's hard and thus why
+ we are deferring it short-term.
+* Michael will look through his assigned bugs.
+
+Discussions
+===========
+
+We all had a chat about Lars' statement on NetSurf and Ick - with a minor
+alteration we agreed to allow Lars to publish.
+
+Activity
+========
+
+Bug Triage
+----------
+
+* [[!bug 2595]] (Form button submission missing name/value) should be tackled
+ on Sunday
+* [[!bug 2558]] (Text area truncation/timeouts?) Possibly investigate adding
+ a test case for this.
+* [[!bug 2630]] (Dukky too verbose) will be solved by Daniel by rolling back
+ the warnings to debug level for now. No movement on the github bug.
+* [[!bug 2629]] (Oddness in 50vh in css) assigned to Michael
+* Daniel closed the CMakeLists bugs WONTFIX
+* [[!bug 2617]] (LCC support in build system) assigned to Vince
+* [[!bug 2600]] (no username stuff?) closed can't reproduce
+* [[!bug 2531]] (Something minijemmish) closed no change required
+* [[!bug 1961]] (Something fragmented) michael had already fixed
+* [[!bug 2605]] (JPEG somesuch) michael closes because they've not reproduced
+* [[!bug 2599]] (svgtiny parsing) assigned to michael
+
+
+Daniel
+------
+
+* Found and fixed issue with warning in wapcaplet. Learned that `memcpy` has
+ a return value. Shocking!
+* Fixed a monkey `TEXT` plot call bug which was introducing spurious newlines
+ and also failing to render the limited text string properly. This now
+ enables the `401LOGIN` support previously written in the `monkeyfarmer.py`
+* Added support for 401 in `monkey-driver.py` and wrote a `401login.yaml`
+ to demonstrate
+* Perhaps fixed remaining issue with dom sanitize tests.
+* Issued certificate for test.netsurf-browser.org
+* Wrote `monkey-see-monkey-do` and associated index CGI in the tests
+* Wrote an `image.cgi` which Michael might be able to use.
+* Wrote an `env.cgi` for Vince to use.
+* Reworked dukky logging pathways, toned things down by default, added a
+ category for dukky, and got nsgenbind to use it all.
+* Wrote a Makefile change for Vince
+
+Michael
+-------
+
+* Looked at libdom sanitiser failures.
+ * Found I'd already fixed all the issues with the actual libdom library
+ source on a branch.
+ * The commit message also helpfully explained all the remaining failures
+ due to an issue in the perl test generator.
+ * Merged the libdom fixes and discussed the perl stuff with Daniel.
+* Cleaned up the `netsurf-test` repo.
+* Wrote a bunch of automated NetSurf tests for `netsurf-test`.
+* Some minor fixes and tweaks to the monkey test runners.
+* Added bmp and ico to Monkey's mime hash.
+* Fixed HTML reflow triggered by HTML child objects to pass the correct
+ viewport height to layout. Fixes bug [[!bug 2629]]. This has made the
+ content structure aware of viewport height. (It was always aware of
+ viewport width.)
+
+Vincent
+-------
+
+* Updated all working toolchains (not atari) with new openssl/curl etc.
+* fixed framebuffer install target to use install program and install messages
+ file with the correct case. [[!bug 2616]]
+* fixed bug [[!bug 2468]] to get openbsd building framebuffer
+* resolved package build faliures in CI
+* Added support to the CI for running the integration test suites.
+* added framebuffer language resource selection from environment.
+* Added webp support
+* Sorted a bunch of bugs' "Fixed in version…"
+
+Frontends
+=========
+
+### Atari
+
+If we do nothing about the toolchains soon, it'll be entirely demoted.
+
+### Cocoa
+
+Basically gone away
+
+### Framebuffer
+
+Keep as release but minimal feature additions:
+
+* corewindow for cookies etc.
+* language support LANGUAGE, LC_ALL, LC_MESSAGES, LANG split on : then _ to get
+ langs and use as default Accept language
+* fontconfig
+* ability to list compiled in libnsfb surfaces
+
+### Otherwise...
+
+We revisited the decisions made in [September 2017](../sep-2017/#index4h1) and
+decided they're all good so we're not changing them for now.
+
+Statement of work
+=================
+
+If at all possible, we'd like to see some of the following addressed before
+the next developer weekend…
+
+* Monkey
+ * Ability to inject an arbitrary piece of JavaScript (Daniel)
+ * Driver - capability to "Click" on a specified piece of text (Daniel)
+ (Basically a way to say click button FOO)
+* JavaScript
+ * Some documentation around how to write bindings (Vince)
+* Dynamic relayout
+ * Write up documentation around whether we can regenerate the box model
+ as a sop to basic dynamic content changes. (Michael)
+* Framebuffer
+ * Language support for resources (Vince)
+ * Fontconfig (Vince)
+ * Listing of compiled-in surfaces (Vince)
+* LibCSS
+ * Finish media queries (Michael)
+
+Things we might want to think about but are making no commitments on:
+
+* GTK4?
+* Qt?
+* Framebuffer corewindow support
+* Further work toward core-as-widget
+* Using the core buildsystem for NetSurf
+
+We expect that subsequent to the next developer weekend we will make a release
+of NetSurf to comprise all the shiny new bug fixes (and possibly shiny new bugs
+too)
+
+Next time
+=========
+
+The next developer weekend will be in Manchester, from Friday 3rd through
+Tuesday 7th May.
diff --git a/developer-weekend/feb-2020.mdwn b/developer-weekend/feb-2020.mdwn
new file mode 100644
index 0000000..0e314e2
--- /dev/null
+++ b/developer-weekend/feb-2020.mdwn
@@ -0,0 +1,209 @@
+[[!meta title="Developer Weekend (February 2020)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2020-02-24 09:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+
+Outstanding work (from December)
+============================
+
+* General
+ * Implement any appropriate auto fill auth handlers **IGNORING**
+ * Continue styling the generated query pages. (Michael)
+ * Review TODOs.
+* Framebuffer
+ * Language support for resources (Vince) **SHITCANNED**
+ * Listing of compiled-in surfaces (Vince)
+* Internationalisation
+ * Translations of all messages for the SSL/privacy internal query page.
+ * Translations of all messages for the authentication internal query page.
+ * Short of finding a native speaker there's not a lot we can do. **Nothing**
+* Text layout
+ - Continue implementing. (Michael)
+* Release 3.10
+ * Which means do the work first needed to complete it
+ * And then do Debian package releases, including removing framebuffer
+ from Debian.
+* Events
+ * Michael to do more UI event support in NetSurf **SHITCANNED**
+
+Pathway to 3.10
+===============
+
+* Completion of MVP for page info core window (Michael to work on this)
+* DER exfiltration and SSL Certificate viewer `about:certificate` (Vince)
+* Completion of integration of that into GTK and RISC OS frontends, with others
+ being given at least two weeks to integrate before they cease blocking.
+ (Assigned to Vince)
+* At least some attention given to GTK focus issues (Daniel to complete this)
+* Review styling for internal pages. (Assigned to Michael)
+* Listing compiled-in surfaces for nsfb (Assigned to Daniel)
+* [[!bug 2650]] Inappropriate error message (Assigned to Vincent)
+* [[!bug 2722]] GTK3 UI vertical scrollbar wrong (Assigned to Vincent)
+* [[!bug 2721]] Bizarre corners on download box in highdpi (Assigned to Michael)
+
+Bug Triage
+==========
+
+* [[!bug 2704]] - Closed, can't reproduce.
+* [[!bug 2702]] - Definitely still happening, Daniel will look. (NOT ASSIGNING)
+* [[!bug 2716]] - Acknowledged (CURL ARES)
+* [[!bug 2717]] - Acknowledged (CURL ARES)
+* [[!bug 2703]] - Closed, notabug
+* [[!bug 2722]] - Selected for this weekend.
+* [[!bug 2719]] - Closed, no resolution required
+* [[!bug 2727]] - Acknowledged (Our scaling sucks)
+* [[!bug 2729]] - Closed, macOS sucks
+* [[!bug 2730]] - Misguided attempt at typo fix, closed.
+* [[!bug 2726]] - Closed, can't reproduce
+* [[!bug 2708]] - Fixed in 3.10
+* [[!bug 2731]] - Acknowledged
+* [[!bug 2732]] - Resolved in 3.10
+* [[!bug 2733]] - Acknowledged feature request
+* [[!bug 2734]] - Acknowledged feature request
+* [[!bug 2735]] - Acknowledged feature request
+* [[!bug 2737]] - Assigned to Daniel
+* [[!bug 2739]] - Assigned to Vincent
+* [[!bug 2738]] - Michael to explain user stylesheet
+* [[!bug 2736]] - Assigned to Daniel
+* [[!bug 2620]] - Assigned to Vincent
+
+Topics
+======
+
+* We need a discussion about framebuffer, but won't block 3.10 mostly
+* See if we can exfiltrate better SSL session error information such as a lack
+ of cipher list overlap. [[!bug 2719]] (Assigned to Daniel)
+
+Activity
+========
+
+Mostly individual activity here
+
+Michael
+-------
+
+* Converted NetSurf's README to Markdown.
+* Removed unused minimum GIF delay setting from:
+ - All the front ends that had settings code for the option:
+ (RISC OS, Amiga, GTK, Atari, Windows).
+ - Core options handling and tests.
+ - Settings documnetation.
+* Various constifications of parameters though APIs:
+ - The `bw` in browser window URL access function.
+ - The core window in the core window callback table's getters.
+ - The treeview clip rectangle through redraw.
+ - The `bw` though the browser_window page_info getter.
+* Check for success/failure on HTML script mimetype interning.
+* Split out a helper to get colour lightness in plot_style.
+* Added function to engorge a particular component channel in a colour.
+* Added stubs for new browser window interfaces for page-info functionality.
+* Added new page info core window.
+ - Handles correct scaling of everything (text, paddings, etc) for different DPIs.
+ - Handles light on dark, or dark on light colour configurations.
+ - Implemented content layout, redraw and mouse action.
+* Initialise/finalise the page-info module in NetSurf startup/quit handling.
+* Renamed "crtvrfy" to "pi" (for page-info) in the GTK front end.
+* Found a bug in the Amiga m86k toolchain where the compiler generates assembly
+ that the assembler says is invalid.
+ - For now, since we can't build the Amiga m86k toolchain, we have just
+ disabled that entry in the CI build matrix.
+* Added `-ldl` link flag for unit test build of `libmalloc_fig.so`.
+* Addressed missing malloc check in hashmap from Rob's code review.
+* Added treeview API for setting a search string in searchable treeviews.
+* Added cookie manager API for setting search string.
+* Made the browser window cookie opener set the search term to the current
+ URL's host.
+* Fixed six scan-build issues in libcss.
+
+Daniel
+------
+
+* Went through [[!bug 2702]] worked out that we weren't completing the
+ content state machine when async scripts completed after `dom_to_box` had
+ finished. Fixed that.
+* Went through [[!bug 2736]] and fixed the tests to use `__func__` instead.
+* Updated the SDK for iconv and curl versions
+* GTK3 - local history focussing and other core windows
+* Fixed async scripts not completing the content state machine properly
+* Don't progress the content state machine if scripts dont' run anything
+* Ignore content loading status in html_proceed_to_done
+* Added `DOMImplementation::createHtmlDocument()`
+* Added `Element::innerHTML` support
+* Added `Element::attributes` and thus a rudimentary `NamedNodeMap` and proxies
+* Fixed `infinity` to `Infinity` in exports in `Window`
+* Added `FOREGROUND` browser window creation flag to be honoured in frontends
+ which use tabs and can open things in the background at user choice
+ * Added support for that in GTK frontend
+* Added `FOCUS_LOCATION` browser window creation flag which frontends can use
+ to indicate that they want the location bar focussed when the window opens
+ * Added support to GTK frontend to use that
+ * Added a state machine for the focussing logic in GTK
+* Corrected `browser_window` to inform the GUI when redirects occur and to
+ ensure that the final URL reported to the GUI is the final fetched URL not
+ the fetch parameters URL
+ * Removed hack in GTK for url bar refresh on throbber stop as a result
+* Various GTK3 type updates (e.g. `GtkVBox` and `GtkHBox` to `GtkBox`)
+* Increased information available from `monkeyfarmer.py` when a window is
+ alive after being asked to destroy itself
+ * Also increased timeout in `monkey_driver` for that so that tests pass
+ once more
+* In the GTK frontend, drain GTK events before polling the scheduler to allow
+ windows a chance to realise before we render. This improves the local history
+ thumbnails and scrollbar size
+ * To complete the scrollbar fix, also send a resize event to the grid when
+ we complete a fetch so that the scrollbar will rerender its thumb properly
+* Correct `Node::nodeValue` setter to return the value set into it
+* made llcache persist anything useful during finalise
+* Added generic hashmap type
+ * Reworked the `fs_backing_store` to use this hashmap to reduce memory
+ impact at startup and simplify the code a bit.
+ * Added an SSL certificate chain cache to the curl fetcher using the hashmap
+* Corrected ring handling in about, resource, file, and data fetchers
+* Made fetch core send a `FETCH_ERROR` of `FetchFailedToFinish` if a fetch
+ is freed without actually passing through one of the finish states
+* Added surface enumeration to libnsfb
+ * Added support to use that to nsfb
+* Fixed [[!bug 2650]] by making windows port not use `NoMemory` where inappropriate.
+* Added disc cache path as a core option and made monkey able to use it
+
+Vince
+-----
+
+* Various code cleanups
+* Reworked our entire certificate handling framework to use DER rather than
+ our cert_info structures
+
+Browsing Cache
+==============
+
+Running the long-internet test with disk cache on and javascript off, the
+disc cache ended up with:
+
+* 1 dblk 82 ish entries in there
+* 1 mblk
+* 227 m files ranging in size from just over 8k to just under 10k
+* 913 d files
+
+Daniel put a copy in his homedir on `ci`.
+
+Statement of work
+=================
+
+If at all possible, we'd like to see some of the following addressed before
+the next developer weekend…
+
+
+Next time
+=========
+
+* May 22nd to 26th (Fri through Tuesday)
+* Remote / video conf / IRC.
diff --git a/developer-weekend/may-2019.mdwn b/developer-weekend/may-2019.mdwn
new file mode 100644
index 0000000..b45ba3a
--- /dev/null
+++ b/developer-weekend/may-2019.mdwn
@@ -0,0 +1,128 @@
+[[!meta title="Developer Weekend (May 2019)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2019-05-03 10:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+Apologies
+=========
+
+* John-Mark Bell
+
+Outstanding work (from February)
+================================
+
+* Monkey
+ * Ability to inject an arbitrary piece of JavaScript (Daniel)
+ * Driver - capability to "Click" on a specified piece of text (Daniel)
+ (Basically a way to say click button FOO)
+* JavaScript
+ * Some documentation around how to write bindings (Vince)
+* Dynamic relayout
+ * Write up documentation around whether we can regenerate the box model
+ as a sop to basic dynamic content changes. (Michael)
+* Framebuffer
+ * Language support for resources (Vince)
+ * Fontconfig (Vince)
+ * Listing of compiled-in surfaces (Vince)
+* LibCSS
+ * Finish media queries (Michael)
+
+Hacking the current layout engine to do dynamic layout
+------------------------------------------------------
+
+The idea would be to schedule the creation of a new
+box tree when we get `DOMSubtreeModified` events. Then
+run layout on the new box tree, and pivot to the new
+box tree and free the old one.
+
+### Issues
+
+Unfortunately there are a load of reasons this is not
+straightforward.
+
+* Box tree construction is itself restartable and yields
+ between elements. This means that while we are performing
+ the new box tree construction, activity could be happening
+ on the DOM tree causing new `DOMSubtreeModified` events to
+ occur. One (dodgy) approach would be to cancel any ongoing
+ box tree construction when the DOM is modified.
+* Box tree construction uses talloc, and the html_content is
+ used as the context. So boxes have the lifetime of the
+ html_content. Unless this is changed, memory use would
+ just grow with each new box tree created for the html_content.
+* During box tree construction we rummage around inside the
+ html_content quite a bit. This would all need sanitised.
+* During box tree construction we kick off fetches for things,
+ these affect the html_content's outstanding fetch counter.
+ The content handler for html_content-owned fetches is used
+ to handle a lot of behaviour, such as things like the
+ html_content's throbber, and whether to perform a relayout /
+ redraw.
+
+This would end up affecting a large chunk of the html / box /
+object / layout code. Even if a large amount were refactored
+to support this and not break our already creaky lifetimes
+stuff, the result would be poor because:
+
+* It would have to do work and and throw it away all the
+ time if it kept getting new `DOMSubtreeModified` events
+ during box tree reconstructions.
+* It would be really slow because all of the CSS selection
+ work would need redone for each new box tree construction.
+
+Bug Triage
+==========
+
+We did a basic triage and catagorized all outstanding 'new' issues
+
+Activity
+========
+
+Michael
+-------
+
+* Looked into how we could hack dynamic layout into the
+ current layout engine, and wrote it up (above).
+* merged media queries
+
+Daniel
+------
+
+* lots of javascript fixes
+* assist with media queries merge
+
+Vince
+-----
+
+* Fixed nsgenbind output so it correctly places #line directives greatly improving debug output usefulness
+* wrote document on creating bindings
+* improved monkey tests
+* assist with media queries merge
+
+Statement of work
+=================
+
+If at all possible, we'd like to see some of the following addressed before
+the next developer weekend…
+
+* General
+ * release 3.9 (vince)
+* Monkey
+ * Driver - capability to "Click" on a specified piece of text (Daniel)
+ (Basically a way to say click button FOO)
+* Framebuffer
+ * Language support for resources (Vince)
+ * Listing of compiled-in surfaces (Vince)
+
+Next time
+=========
+
+1st August to 6th August, Manchester.
diff --git a/developer-weekend/may-2020.mdwn b/developer-weekend/may-2020.mdwn
new file mode 100644
index 0000000..3764c95
--- /dev/null
+++ b/developer-weekend/may-2020.mdwn
@@ -0,0 +1,322 @@
+[[!meta title="Developer Weekend (May 2020)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2020-05-22 09:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+Outstanding work (from Feb)
+===========================
+
+* General
+ * Implement any appropriate auto fill auth handlers **IGNORING**
+ * Continue styling the generated query pages. (Michael) **DONE**
+ * Review TODOs. **IGNORING**
+* Framebuffer
+ * Listing of compiled-in surfaces (Daniel) **DONE**
+* Internationalisation
+ * Framebuffer front end.
+ * Translations of all messages for the SSL/privacy internal query page.
+ * Translations of all messages for the authentication internal query page.
+ * Short of finding a native speaker there's not a lot we can do. **Nothing**
+* Text layout
+ - Continue implementing. (Michael)
+* Release 3.10
+ * Which means do the work first needed to complete it
+ * And then do Debian package releases, including removing framebuffer
+ from Debian.
+* Events
+ * Michael to do more UI event support in NetSurf **SHITCANNED**
+
+Pathway to 3.10
+===============
+
+* Complete RISC OS frontend support for pageinfo core window (vince) **DONE**
+* Add url to about:query/ssl to launch cert viewer (the link needs _blank) (Daniel) **DONE**
+* excise sslcert_viewer entirely (Daniel) **DONE**
+ * Monkey doesn't need it, excise from farmer and driver **DONE**
+ * Remove cert_verify from the `gui_misc_table` **DONE**
+ * Email to developer list to say this has been done and that frontends
+ will need to add padlock and page_info support **DONE**
+* [[!bug 2752]] Building without openssl: acknowledged and assigned to Daniel. **DONE**
+* [[!bug 2754]] GTK history delete menu options: acknowledged and assigned to Daniel. **DONE**
+* [[!bug 2753]] RISC OS URL entry bug needs fixed. **DONE**
+
+
+Bug Triage
+==========
+
+* [[!bug 2759]] To be closed when the web site doesn't mention MacOS any more.
+* [[!bug 2740]] Wikipedia has its scrollbar on BODY instead of HTML.
+* [[!bug 2755]] More Wikipedia scrollbars.
+* [[!bug 2752]] Building without openssl: acknowledged and assigned to Daniel.
+* [[!bug 2754]] GTK history delete menu options: acknowledged and assigned to Daniel.
+* [[!bug 2753]] RISC OS URL entry bug needs fixed.
+* [[!bug 2748]] Hubbub needs to know about these elements.
+* [[!bug 2742]] Closed; no change required.
+
+Topics
+======
+
+* HTML5 Canvas.
+* Text layout (maybe).
+* Selection cleanups.
+
+Write ups
+=========
+
+Current Forms Handling
+----------------------
+
+### DOM / Gadget synchronization
+
+Currently both the DOM and the NetSurf gadget for form input elements
+store a representation of the current state of the form element.
+JavaScript can modify the representation in the DOM. Users can
+modify the representation in the form gadget.
+
+There is a `form_gadget_sync_with_dom()` in NetSurf's `form.c`.
+This synchronizes the data both ways. If the DOM has changed, then
+the gadget representation is updated, and if the gadget has changed
+then the DOM is updated. If both have changed, the gadget version
+wins.
+
+The `form_gadget_sync_with_dom()` is called from:
+
+* **[html/dom_event.c]** The DOMSubtreeModified callback.
+* **[html/form.c]** The `form_gadget_update_value()` function, which is called
+ from:
+ * **[html/box_textarea.c]** The desktop/textarea widget callback for
+ TEXTAREA_MSG_TEXT_MODIFIED.
+ * **[html/html.c] The file upload handling in
+ `html_set_file_gadget_filename()`.
+* **[html/forms.c]** The `parse_input_element` function, which ends up getting
+ called during box tree construction of the special box elements in
+ **[html/box_special.c]**.
+
+### NetSurf data structures
+
+The `box` structure has a "gadget" member, which is a `struct form_control`
+pointer. These gadget pointers are set to the corresponding form_control
+when the form_control is created during box construction.
+
+The `html` content contains a forms linked list. These are of type
+`struct form`. The linked list is created by `html_forms_get_forms()` in
+**[html/forms.c]**, called from `html_begin_conversion()` in **[html/html.c]**.
+
+Since box tree construction hasn't happened yet, this collects a list of
+forms which are empty, containing no form controls.
+
+The form controls are added to the form structures as the forms are created
+during box construction. Box construction happens later in the `dom_to_box`
+call in `html_finish_conversion`.
+
+The fact that the form controls are referenced in both the form structures
+and from the box gadget member, and the fact that they aren't ref-counted
+means that we often dare not free them. So they leak everywhere.
+
+It seems that the struct form is only created for the purposes of form
+submission; to collect all the gadgets associated with the form.
+
+Once more unto the breach dear friends…
+---------------------------------------
+
+### …or "how I learned to love HTML forms"
+
+The goal is to fully replace the current HTML form handling with proper DOM
+based forms. To do this we need to resolve a number of operations.
+
+1. Every kind of input element and so on needs its DOM behaviour writing
+ if it is missing, or checking if it is present already
+2. The form element needs to gain requisite methods for resetting and submitting
+ which perform the flow including firing events as needed (or reacting to them)
+3. The main HTML content needs to stop having a form construct entirely, instead
+ deferring to the DOM in all matters form-related
+4. Gadgets should be owned by the boxes and should entirely operate by means
+ of the DOM nodes associated with their boxes.
+5. The DOM becomes the canonical source of data. If the DOM changes, then the
+ gadgets react. If the gadgets wish to change the DOM then they push their
+ changed data into the DOM and cope if the DOM doesn't do entirely as they
+ expected.
+
+The final part is perhaps the hardest. It will require gadget implementations
+to register as event listeners on the dom nodes in question and cope with them
+changing. Done properly this will allow JS to change the options in a select
+gadget at runtime etc. An early part of dynamic content.
+
+The various elements' specifications are here:
+
+* [Categories of elements](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#form-categories)
+ such as form-associated, reassociatable, submittable, labelable, etc.
+* [`<form>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-form-element)
+* [`<label>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-label-element)
+* [`<input>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-input-element)
+* [`<button>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-button-element)
+* [`<select>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-select-element)
+* [`<datalist>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-datalist-element)
+* [`<optgroup>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-optgroup-element)
+* [`<option>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-option-element)
+* [`<textarea>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-textarea-element)
+* [`<output>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-output-element)
+* [`<progress>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-progress-element)
+* [`<meter>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-meter-element)
+* [`<fieldset>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-fieldset-element)
+* [`<legend>`](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-legend-element)
+
+Clearly when submitting a form, only the submittable elements are important for
+computing the form submission variables. Many of the above could reasonably be
+ignored by us for now (e.g. `<output>`, `<meter>`, `<datalist>` etc).
+
+One big piece of work will be in ensuring the form owner property of the
+form-associated elements is managed properly. The parser will need to collude
+(via the treebuilder most likely) to suppress certain behaviours when inserting
+a form element (or else will then have to reassociate the element on
+insertion). See [this
+part](https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#association-of-controls-and-forms)
+of the specification for more details on this. This alone represents a large
+chunk of work and nominally could be done without impacting on the current form
+behaviour.
+
+The [form submission algorithm][submitalgo] is not trivial - Some of it will
+be done by the DOM and some of it will be done by the UA (NetSurf). The act
+of submission is managed by the UA though, including the firing of the submit
+event. The `.submit()` method on the form element has to somehow inform the
+UA that submission is requested and how it is requested. This could be done by
+firing an internal event at the form which the HTML content is registered to
+listen for, and that may indeed be the safest method. i.e. the form fires
+a libdom specific event saying "form wants to be submitted, this is why" and
+the UA catches this in the `dom_event` part of the HTML content handler to
+actually deal with the submission.
+
+[submitalgo]: https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#form-submission-algorithm
+
+In contrast the [form reset algorithm][resetalgo] is much simpler and is almost
+entirely driven by the DOM instead. Resetting elements are not supposed to fire
+DOM events in the traditional sense, so it may make sense for there to be a
+libdom event for this as well which gadgets can listen for.
+
+[resetalgo]: https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#reset
+
+All of the requisite bindings will need to be written to support the form
+behaviours since driving this through the DOM may necessitate JS interactions
+with the forms (e.g. validation).
+
+## Unifying behaviour of `NodeList` and `HTMLCollection`
+
+In order to support Forms properly, a `RadioNodeList` which inherits from
+`NodeList` has to act as though it were a subview of an `HTMLFormControlsCollection`
+which inherits from `HTMLCollection`. Given that `NodeList` and `HTMLCollection`
+are independent heirarchies (they are both top level types) there is nominally
+no way for this to occur.
+
+Plan:
+
+1. Inside libdom, add the concept of a `_dom_live_node_view`
+2. That type's API has ref/unref, implements the tree walker which takes a visitor
+ function pointer. The treewalker always returns the number of nodes it visited
+ afterwards, to make counting easier.
+3. The node visitor API is: `visitor(context, node, index) -> decision`
+ where decision is one of `stop`, `traverse_siblings`, or `traverse_all`.
+4. Rework `NodeList` in terms of this new API, the `NodeList` visitor method
+ will be the current matching matching behaviour, plus the decision of whether
+ to iterate deeply or not. This will allow us to shake out the behaviours
+ of the tree walker etc.
+5. Rework `HTMLCollection` in terms of the new API. The visitor method
+ will, this time, need to match elements. For named item lookup, the
+ visitor will be able to stop iteration at that point since there's no point
+ continuing.
+6. a) Implement `HTMLFormControlsCollection` with its own `namedItem`
+ method which, for the purposes of libdom, can return either an element or
+ a radioitemlist - the client will have to deal with this.
+
+ b) Implement `RadioItemList` so that it can be returned by (a).
+
+ Note: These two will essentially have to share some logic in order to work
+ compatibly. Since (a) is sharing logic with `HTMLCollection` that ought
+ to be moderately easy/safe to do.
+
+
+Tasks
+=====
+
+* Review Vince's text selection change commit.
+* Release 3.10:
+ * Complete RISC OS page-info.
+ * Any blockers from bug triage.
+* Make some progress with text layout.
+* Michael to update Wikipedia scrollbar bug.
+* JavaScript / bindings stuff:
+ - Upgrade Duktape.
+ - Unimplemented JavaScript list.
+ - Binding generator improvements.
+ - Looking at NetSurf's JS error logs and see what we need to do.
+ - Build time heap config for reuse.
+* Remove MacOS from web site.
+
+Activity
+========
+
+Mostly individual activity here
+
+Michael
+-------
+
+* Rebuild on Ubuntu 20.04 and fixed some new compiler warnings.
+* Fixed [[!bug 2748]]: Updated Hubbub to know about some more elements.
+
+Daniel
+------
+
+* Performed `sslcert_viewer`-ectomy
+* Reworked env to prefer cross-env
+* Included link for query/ssl to display certs
+* Made curl fetcher build without openssl again
+* Made treeview cancellation behave right
+* ...and made gtk global history and friends cope with select all
+* Added `<canvas>` support
+* Fixed bug in GTK Quit handling
+* Altered logging in `fs_backing_store`
+* Unbroke monkey driver timeout handling
+* Added cookie counting to `browser_window`
+* Reworked cookie presentation as a `guit->misc` callback
+* ...for all the major frontends
+* Fixed buffer overrun in idna
+* Fixed leak in llcache when new cert chains turn up
+* Wrote Game of Life test for Canvas
+* Fixed int32 and ulong property setting in `html_element` in libdom
+* Fixed title string handling in `html_title_element`
+* Support more types in `_init()` handling in nsgenbind
+* Used `output_ccode` in more places in nsgenbind
+* Fixed AST generation for overloaded methods in nsgenbind
+
+
+Vince
+-----
+
+* Clean up text selection code
+* Implemenmt page infor core window for RISC OS
+* fix core window implementation incorrectly (re)opening windows on resize
+* fix [[!bug 2753]] and [[!bug 2762]]
+* Update release process on wiki
+* Release 3.10
+* Update issue tracker for release
+
+Statement of work
+=================
+
+If at all possible, we'd like to see some of the following addressed before
+the next developer weekend…
+
+*
+
+Next time
+=========
+
+* May 22nd to 26th (Fri through Tuesday)
+* Remote / video conf / IRC.
diff --git a/developer-weekend/nov-2018.mdwn b/developer-weekend/nov-2018.mdwn
index f296cd3..fcdbfdb 100644
--- a/developer-weekend/nov-2018.mdwn
+++ b/developer-weekend/nov-2018.mdwn
@@ -189,6 +189,21 @@ Frontends
We revisited the decisions made in [July](../jul-2018/) and
decided they're all good so we're not changing them for now.
+Statement of work
+=================
+
+Within the fortnight we will:
+
+1. Have `monkeyfarmer` and `monkey-driver` updated to work with 401 and the
+ full feature set thus-far defined.
+2. Have a set of tests in the `netsurf-test` repository along with their
+ metadata.
+3. Have those tests aggregated during the build/install of the repo
+4. Have a CI job which downloads that aggregation, acquires a source-all
+ tarball, and builds monkey from that, running the driver across the test
+ set.
+
+
Next time
=========
diff --git a/developer-weekend/nov-2022.mdwn b/developer-weekend/nov-2022.mdwn
new file mode 100644
index 0000000..83b5433
--- /dev/null
+++ b/developer-weekend/nov-2022.mdwn
@@ -0,0 +1,82 @@
+[[!meta title="Developer Weekend (Nov 2022)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2022-11-26 09:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+Outstanding work (from 2020)
+===========================
+
+* Calc
+
+Activity
+========
+
+Mostly individual activity here
+
+Michael
+-------
+
+* Worked with Daniel on CSS `calc()` support in LibCSS.
+
+Daniel
+------
+
+* Worked with Michael on CSS `calc()` support in LibCSS.
+
+Vince
+-----
+
+* Provided assists on `calc()` support
+* Worked on warnings etc. exposed by more modern gcc
+
+Notes
+=====
+
+Thoughts around `calc()`
+------------------------
+
+(Copied from 2020 for now)
+
+> Currently the `tlsa/calc` branch contains our work-to-date
+
+Remaining work
+
+> Thought:
+>
+> In theory we could make the calculation bytecode be stored as a lwc_string, which means we already have mechanisms for deduplication, identity checking, etc. in libcss.
+
+1. Maybe update generator to construct valid/invalid UNIT types for each property as a table for use later.
+ * This would involve repeating the validation expressions present in `LENGTH_UNIT:()` in `properties.gen` or perhaps reworking that bit too.
+ * This is probably an array, indexed by property, whose values are a bitfield of permitted unit types.
+ * **Done**: This was done after the hack weekend in [parse: properties: Add property-specific unit class masks](http://source.netsurf-browser.org/libcss.git/commit/?h=tlsa/calc&id=e2b4077eed0ad778847cd7b17406e8bf8b61a4ae).
+2. Implementing the cascade
+ * Mostly in the common code.
+ * Should be able to type-check here (property-specific part).
+ * In theory type-check could happen in the parser, but once `var()` gets involved it'll have to be in the cascade, so we may as well put it here from the start.
+3. Reworking the computed style to have a calc section
+ * By this, we mean that the computed styles should have a representation which means "Use calculation N" in the current packed content, and then in the less compact struct we can have calculation bytecode for each unique calculation needed to support the style.
+ * Also consider how this impacts computed style internment / sharing.
+4. Rework API for computed styles to support client functions so that calc can run
+ * This is were we implement doing the calculation.
+ * May need care in the case of invalid results in calc
+ * May permit simplification of things like percentage units.
+ * Maybe the context structure should carry simple values like available width/height viewport width/height, etc. But have a callback for things like relative font sizes etc.
+ * Probably change so all widths emerge from libcss in px.
+5. Write selection tests involving `calc()`
+ * Will involve fixing `dump_computed.h` to the new API
+
+
+After all that, NetSurf needs updating to the new API, which should simplify the CSS client code in NetSurf quite a bit.
+
+Next time
+=========
+
+* Undecided.
diff --git a/developer-weekend/oct-2020.mdwn b/developer-weekend/oct-2020.mdwn
new file mode 100644
index 0000000..32ddc0a
--- /dev/null
+++ b/developer-weekend/oct-2020.mdwn
@@ -0,0 +1,88 @@
+[[!meta title="Developer Weekend (Oct 2020)"]]
+[[!meta author="NetSurf Developers"]]
+[[!meta date="2020-10-22 09:00:00"]]
+
+[[!toc]]
+
+Attendees
+=========
+
+* Michael Drake
+* Vincent Sanders
+* Daniel Silverstone
+
+Outstanding work (from May)
+===========================
+
+* General
+ - Forms cleanup.
+* Text layout
+ - Continue implementing.
+
+Still outstanding after October developer weekend.
+
+Activity
+========
+
+Mostly individual activity here
+
+Michael
+-------
+
+* Worked with Daniel on CSS `calc()` support in LibCSS.
+
+Daniel
+------
+
+* Worked with Michael on CSS `calc()` support in LibCSS.
+* Fixed GTK path plotter translation table. (Fixes svgtiny rendering offset.)
+* Fixed LibDOM fuzz testing issue.
+* Fixed various crashes from the long internet tests.
+
+Vince
+-----
+
+* Added support to LibSVGTiny for paths using arcs.
+* Added a chart renderer to NetSurf.
+
+Notes
+=====
+
+Thoughts around `calc()`
+------------------------
+
+> Currently the `tlsa/calc` branch contains our work-to-date
+
+Remaining work
+
+> Thought:
+>
+> In theory we could make the calculation bytecode be stored as a lwc_string, which means we already have mechanisms for deduplication, identity checking, etc. in libcss.
+
+1. Maybe update generator to construct valid/invalid UNIT types for each property as a table for use later.
+ * This would involve repeating the validation expressions present in `LENGTH_UNIT:()` in `properties.gen` or perhaps reworking that bit too.
+ * This is probably an array, indexed by property, whose values are a bitfield of permitted unit types.
+ * **Done**: This was done after the hack weekend in [parse: properties: Add property-specific unit class masks](http://source.netsurf-browser.org/libcss.git/commit/?h=tlsa/calc&id=e2b4077eed0ad778847cd7b17406e8bf8b61a4ae).
+2. Implementing the cascade
+ * Mostly in the common code.
+ * Should be able to type-check here (property-specific part).
+ * In theory type-check could happen in the parser, but once `var()` gets involved it'll have to be in the cascade, so we may as well put it here from the start.
+3. Reworking the computed style to have a calc section
+ * By this, we mean that the computed styles should have a representation which means "Use calculation N" in the current packed content, and then in the less compact struct we can have calculation bytecode for each unique calculation needed to support the style.
+ * Also consider how this impacts computed style internment / sharing.
+4. Rework API for computed styles to support client functions so that calc can run
+ * This is were we implement doing the calculation.
+ * May need care in the case of invalid results in calc
+ * May permit simplification of things like percentage units.
+ * Maybe the context structure should carry simple values like available width/height viewport width/height, etc. But have a callback for things like relative font sizes etc.
+ * Probably change so all widths emerge from libcss in px.
+5. Write selection tests involving `calc()`
+ * Will involve fixing `dump_computed.h` to the new API
+
+
+After all that, NetSurf needs updating to the new API, which should simplify the CSS client code in NetSurf quite a bit.
+
+Next time
+=========
+
+* Undecided.
diff --git a/gsoc/application.mdwn b/gsoc/application.mdwn
index f66ab8b..accb383 100644
--- a/gsoc/application.mdwn
+++ b/gsoc/application.mdwn
@@ -68,7 +68,7 @@ netsurf-dev@netsurf-browser.org
### IRC channel
-\#netsurf on FreeNode
+\#netsurf on Libera Chat
### Organization application template
diff --git a/gsoc/requirements.mdwn b/gsoc/requirements.mdwn
index 4d4dfc7..89a55f2 100644
--- a/gsoc/requirements.mdwn
+++ b/gsoc/requirements.mdwn
@@ -16,7 +16,7 @@ Expectations for communications
-------------------------------
The NetSurf team use IRC, so you will be expected to be on \#netsurf on
-Freenode and communicate there.
+Libera Chat and communicate there.
Each week, (or more often if suitable) you are expected to send a report
to your mentor indicating what you have achieved, what you intend to
diff --git a/gsoc_2014_ideas.mdwn b/gsoc_2014_ideas.mdwn
index d2c0e67..8bf7c7d 100644
--- a/gsoc_2014_ideas.mdwn
+++ b/gsoc_2014_ideas.mdwn
@@ -15,7 +15,7 @@ General Information
### Before applying for a project
-- Join our IRC channel `#netsurf` on [Freenode](http://freenode.net/)
+- Join our IRC channel `#netsurf` on Libera Chat
and introduce yourself. Also, subscribe to the [developer mailing
list](http://www.netsurf-browser.org/lists/netsurf-dev).
- Get up to speed with
diff --git a/release/allsource.mdwn b/release/allsource.mdwn
new file mode 100644
index 0000000..0abd940
--- /dev/null
+++ b/release/allsource.mdwn
@@ -0,0 +1,97 @@
+[[!meta title="Releasing All source package"]]
+[[!meta author="VincentSanders"]]
+[[!meta date="2020-05-23T10:40:07Z"]]
+
+# Release process for all source package
+
+clone the all repo
+
+ git clone ssh://nsgit@git.netsurf-browser.org/netsurf-all.git
+
+ensure ther submodules are initialised
+
+ git submodule init
+
+output will be something like
+
+ Submodule 'buildsystem' (git://git.netsurf-browser.org/buildsystem.git) registered for path 'buildsystem'
+ Submodule 'libcss' (git://git.netsurf-browser.org/libcss.git) registered for path 'libcss'
+ Submodule 'libdom' (git://git.netsurf-browser.org/libdom.git) registered for path 'libdom'
+ Submodule 'libhubbub' (git://git.netsurf-browser.org/libhubbub.git) registered for path 'libhubbub'
+ Submodule 'libnsbmp' (git://git.netsurf-browser.org/libnsbmp.git) registered for path 'libnsbmp'
+ Submodule 'libnsfb' (git://git.netsurf-browser.org/libnsfb.git) registered for path 'libnsfb'
+ Submodule 'libnsgif' (git://git.netsurf-browser.org/libnsgif.git) registered for path 'libnsgif'
+ Submodule 'libnspsl' (http://git.netsurf-browser.org/libnspsl.git) registered for path 'libnspsl'
+ Submodule 'libnsutils' (http://git.netsurf-browser.org/libnsutils.git/) registered for path 'libnsutils'
+ Submodule 'libparserutils' (git://git.netsurf-browser.org/libparserutils.git) registered for path 'libparserutils'
+ Submodule 'libpencil' (git://git.netsurf-browser.org/libpencil.git) registered for path 'libpencil'
+ Submodule 'librosprite' (git://git.netsurf-browser.org/librosprite.git) registered for path 'librosprite'
+ Submodule 'librufl' (git://git.netsurf-browser.org/librufl.git) registered for path 'librufl'
+ Submodule 'libsvgtiny' (git://git.netsurf-browser.org/libsvgtiny.git) registered for path 'libsvgtiny'
+ Submodule 'libutf8proc' (http://git.netsurf-browser.org/libutf8proc.git/) registered for path 'libutf8proc'
+ Submodule 'libwapcaplet' (git://git.netsurf-browser.org/libwapcaplet.git) registered for path 'libwapcaplet'
+ Submodule 'netsurf' (git://git.netsurf-browser.org/netsurf.git) registered for path 'netsurf'
+ Submodule 'nsgenbind' (git://git.netsurf-browser.org/nsgenbind.git) registered for path 'nsgenbind'
+
+ensure the submodules are updated
+
+ git submodule update
+
+If a new submodule is required (e.g. new library) it must be added and then the .gitmodules file checked for correctnes.
+Once happy commit the changes. Note use the git uri for the submodules not http
+
+ git submodule add git://git.netsurf-browser.org/libnslog.git
+ vi .gitmodules
+ git commit -a -m 'Add libnslog submodule'
+
+if adding a submodule the Makefile may require editing to build the library or utility
+
+for each submodule listed above the correct revision must be set. A utility target is provided in the makefile
+
+ make checkout-release
+
+This obtains the most recent release tag for each submodule and checks it out, equivalent to:
+
+ cd buildsystem
+ git checkout origin/HEAD
+ git checkout $(git describe --abbrev=0 --match="release/*" )
+ cd ..
+
+once each submodule has been updated in the top level netsurf-all directory.
+The modified submodules should then be added ready for commit
+
+ git add buildsystem libcss libdom libhubbub libnsbmp libnsfb libnsgif libparserutils librosprite libsvgtiny libwapcaplet netsurf nsgenbind
+ git commit -m 'Update submodules for 3.7 release'
+
+check the `COMPONENT_VERSION` in the root Makefile matches the version
+number you are releasing, if not change it and commit it so it does.
+
+Update the `ChangeLog.md` as appropriate with rease version numbers etc.
+
+finally tag the branch for release
+
+ git tag -s -m 'Official Release' release/<version number>
+
+make the distribution tarball and check its contents
+
+ make dist
+
+The git-archive-all module is needed for the dist step from
+
+ https://github.com/Kentzo/git-archive-all
+
+Next do a dry run push
+
+ git push -n --tags
+
+ensure this shown the correct repo and the release tag something like
+
+ [gitano] Welcome to the NetSurf Gitano instance.
+ To ssh://nsgit@git.netsurf-browser.org/netsurf-all.git
+ * [new tag] release/3.7 -> release/3.7
+
+If that verifies as correct
+
+ git push && git push --tags
+
+and the release tag is pushed, too late now so be careful and check!
diff --git a/release/corebuildsystem.mdwn b/release/corebuildsystem.mdwn
new file mode 100644
index 0000000..70e3d43
--- /dev/null
+++ b/release/corebuildsystem.mdwn
@@ -0,0 +1,78 @@
+[[!meta title="Releasing Core Buildsystem Components"]]
+[[!meta author="VincentSanders"]]
+[[!meta date="2020-05-23T10:15:07Z"]]
+
+# Release process for projects using buildsystem
+
+We perform all releases from git simply by pushing a
+`release/<version number>` tag
+
+Before creating the tag you should do some basic checks
+
+check the `COMPONENT_VERSION` in the root Makefile matches the version
+number you are releasing, if not change it and commit it so it does.
+
+Any files that should not be put in the distribution archive must be
+placed in the `.gitattributes` file, as a minimum it should contain
+attributes for the `.gitignore` and gitattributes files e.g.
+
+ .gitignore export-ignore
+ .gitattributes export-ignore
+
+in your clone do
+
+ git branch -vv
+
+ensure the top commit looks right and is what you want to tag, for extra
+paranoia check the .git/config to ensure the origin is the correct
+server. You do **not** have to tag from master, for example if this is a
+maintenance release of an old edition and you are tagging from a branch
+etc. just **ensure** you are where you want the release to be.
+
+Create the tag with
+
+ git tag -s -m 'Official Release' release/<version number>
+
+Ensure the version number in the tag matches the component version.
+
+Now run
+
+ make dist
+
+if you get
+
+ Makefile:45: \*\*\* Component Version "1.0" and GIT tag version "1.1" do not match. Stop.
+
+you did not get the tag and version numbers lined up, go back, remove
+your local tag with
+
+ git tag -d release/<bad version>
+
+and try again
+
+when you get a buildsystem-1.0.tar.gz (with appropriate version number)
+well done
+
+Check the contents of the tar are what you intended to release and
+adjust if not (obviously you will need to remove your local tag and
+start over with fresh commits.
+
+Next do a dry run push
+
+ git push -n --tags
+
+ensure this shown the correct repo and the release tag something like
+
+ [gitano] Welcome to the NetSurf Gitano instance.
+ Counting objects: 1, done.
+ Writing objects: 100% (1/1), 800 bytes | 0 bytes/s, done.
+ Total 1 (delta 0), reused 0 (delta 0)
+ To ssh://nsgit@git.netsurf-browser.org/libutf8proc.git
+ * [new tag] release/1.3.1-3 -> release/1.3.1-3
+
+If that verifies as correct
+
+ git push --tags
+ git push
+
+and the release tag is pushed, too late now so be careful and check!
diff --git a/release/netsurfbuildsystem.mdwn b/release/netsurfbuildsystem.mdwn
new file mode 100644
index 0000000..ba80858
--- /dev/null
+++ b/release/netsurfbuildsystem.mdwn
@@ -0,0 +1,103 @@
+[[!meta title="Releasing NetSurf"]]
+[[!meta author="VincentSanders"]]
+[[!meta date="2020-05-23T10:40:07Z"]]
+
+# Release process for NetSurf
+
+ensure you are at the commit from which you want to create the release
+
+ git branch -vv
+
+check the resources for the frontends you are releasing are up to date:
+
+- Fatmessages copyright year
+
+ resources/FatMessages
+
+- credits file copyright years (at a minimum)
+
+ resources/en/credits.html
+ resources/it/credits.html
+ resources/nl/credits.html
+
+- licence file copyright years (at a minimum)
+
+ resources/en/licence.html
+ resources/it/licence.html
+ resources/nl/licence.html
+
+- amiga readme copyright files
+
+ frontends/amiga/pkg/netsurf.readme
+ frontends/amiga/pkg/netsurf\_os3.readme
+
+- windows frontend installer
+
+ windows/res/installer.nsi
+
+Ensure the ca-bundle is updated
+
+ https://curl.haxx.se/docs/caextract.html
+
+create a branch `releasing/<version number>` and switch to it
+
+ git branch releasing/3.11
+ git checkout releasing/3.11
+
+update desktop/version.c to something like
+
+ #include "testament.h"
+
+ const char * const netsurf_version = "3.11 (25th April 2016)";
+ const int netsurf_version_major = 3;
+ const int netsurf_version_minor = 11;
+
+update frontends/amiga/version.c along the same lines
+
+ #define NETSURF_VERSION_MAJOR "3"
+ #define NETSURF_VERSION_MINOR_EXTERNAL "11"
+
+commit to the branch
+
+ git commit -m 'Update version files for release'
+
+once you are sure everything is correct and committed tag the branch for release
+
+ git tag -s -m 'Official Release' release/<version number>
+
+Next do a dry run push
+
+ git push -n --tags
+
+ensure this shown the correct repo and the release tag something like
+
+ [gitano] Welcome to the NetSurf Gitano instance.
+ To ssh://nsgit@git.netsurf-browser.org/netsurf.git
+ * [new tag] release/3.11 -> release/3.11
+
+Next the branch must be merged back to master.
+
+ git checkout master
+ git merge -s ours heads/releasing/3.11
+
+Then edit `desktop/version.c` , `frontends/amiga/version.c` and `utils/jenkins-build.sh` ready for the next release cycle
+
+ git add desktop/version.c frontends/amiga/version.c utils/jenkins-build.sh
+ git commit -m 'Update version for next development cycle'
+
+Remove releasing branch
+
+ git branch -d releasing/3.11
+ Deleted branch releasing/3.11 (was 66fe825c8).
+
+finally push master
+
+ git push origin master
+
+If that verifies as correct
+
+ git push --tags
+
+and the release tag is pushed, too late now so be careful and check!
+
+Please do ensure you *thoroughly* check your work at each step as mistakes are hard to fix once pushed.
diff --git a/release/process.mdwn b/release/process.mdwn
index 86b982b..899c518 100644
--- a/release/process.mdwn
+++ b/release/process.mdwn
@@ -5,120 +5,46 @@
[[!toc]]
-Releasing a new version of NetSurf and libraries
-================================================
+# Releasing a new version of NetSurf and libraries
-firstly the libraries and tool sources must be created (only if they
+First the libraries and tool sources must be created (only if they
need an update) and then the browser itself.
-Process for projects using buildsystem
---------------------------------------
-
-We perform all releases from git simply by pushing a
-release/&gt;version number&lt; tag
-
-Before creating the tag you should do some basic checks
-
-check the COMPONENT\_VERSION in the root Makefile matches the version
-number you are releasing, if not change it and commit it so it does.
-
-Any files that should not be put in the distribution archive must be
-placed in the .gitattributes file, as a minimum it should contain
-attributes for the .gitignore and gitattributes files e.g.
-
- .gitignore export-ignore
- .gitattributes export-ignore
-
-in your clone do
-
- git branch -vv
-
-ensure the top commit looks right and is what you want to tag, for extra
-paranoia check the .git/config to ensure the origin is the correct
-server. You do **not** have to tag from master, for example if this is a
-maintenance release of an old edition and you are tagging from a branch
-etc. just **ensure** you are where you want the release to be.
-
-Create the tag with
-
- git tag -s -m 'Official Release' release/&gt;version number&lt;
-
-Ensure the version number in the tag matches the component version.
-
-Now run
-
- make dist
-
-if you get
-
- Makefile:45: \*\*\* Component Version "1.0" and GIT tag version "1.1" do not match. Stop.
-
-you did not get the tag and version numbers lined up, go back, remove
-your local tag with
-
- git tag -d release/&lt;bad version&gt;
-
-and try again
-
-when you get a buildsystem-1.0.tar.gz (with appropriate version number)
-well done
-
-Check the contents of the tar are what you intended to release and
-adjust if not (obviously you will need to remove your local tag and
-start over with fresh commits.
-
-Next do a dry run push
-
- git push -n --tags
-
-ensure this shown the correct repo and the release tag something like
-
- [gitano] Welcome to the NetSurf Gitano instance.
- Counting objects: 1, done.
- Writing objects: 100% (1/1), 800 bytes | 0 bytes/s, done.
- Total 1 (delta 0), reused 0 (delta 0)
- To ssh://nsgit@git.netsurf-browser.org/libutf8proc.git
- * [new tag] release/1.3.1-3 -> release/1.3.1-3
-
-If that verifies as correct
-
- git push --tags
- git push
-
-and the release tag is pushed, too late now so be careful and check!
-
-Release the buildsystem
------------------------
+# Release the buildsystem
The buildsystem must be released first.
-The buildsystem follows exactly the same process as releasing any
-other component except there is an additional step
+The buildsystem follows exactly the [[same process|release/corebuildsystem]]
+as releasing any other component except there is an additional step.
Because this is the buildsystem and provides the makefiles for all the
other source builds you must go to the CI server and ensure the
source-buildsystem job has successfully run and produced output in
<http://ci.netsurf-browser.org/builds/sources/>
-Release libnspsl
-----------------
+# Release libnspsl
The public suffix list library should be updated for each release
-after the buildsystem..
+after the buildsystem.
-Delete the public_suffix_list.dat file and run make, this will cause a
+Delete the `public_suffix_list.dat` file and run make, this will cause a
fresh copy to be downloaded and converted. You will need the correct
-perl modules installed for this step.
+perl modules installed for this step (at least debian package libidna-punycode-perl).
+
+The [[release process|release/corebuildsystem]] is then the same as
+any other module using the core buildsystem.
-Release libutf8proc
--------------------
+# Release libutf8proc
May have to update to upstream unless upstream have added a pkg-config file
-Other core buildsystem based libraries
---------------------------------------
+The [[release process|release/corebuildsystem]] is largely similar otherwise.
+
+# Other core buildsystem based libraries
-libraries using the core buildsystem in order
+libraries using the core buildsystem all useing the same [[release process|release/corebuildsystem]].
+
+The libraries to release in order:
- libwapcaplet
- libnslog
@@ -137,202 +63,18 @@ libraries using the core buildsystem in order
- librufl
-Releasing NetSurf
------------------
-
-ensure you are at the commit from which you want to create the release
-
- git branch -vv
-
-check the resources for the frontends you are releasing are up to date:
-
-- Fatmessages copyright year
-
- resources/FatMessages
-
-- credits file copyright years (at a minimum)
-
- resources/en/credits.html
- resources/it/credits.html
- resources/nl/credits.html
-
-- licence file copyright years (at a minimum)
-
- resources/en/licence.html
- resources/it/licence.html
- resources/nl/licence.html
-
-- amiga readme copyright files
-
- frontends/amiga/pkg/netsurf.readme
- frontends/amiga/pkg/netsurf\_os3.readme
-
-- windows frontend installer
-
- windows/res/installer.nsi
-
-Ensure the ca-bundle is updated
-
- https://curl.haxx.se/docs/caextract.html
-
-create a branch releasing/<version number> and switch to it
-
- git branch releasing/3.8
- git checkout releasing/3.8
-
-update desktop/version.c to something like
-
- #include "testament.h"
-
- const char * const netsurf_version = "3.8 (25th April 2016)";
- const int netsurf_version_major = 3;
- const int netsurf_version_minor = 8;
-
-update frontends/amiga/version.c along the same lines
-
- #define NETSURF_VERSION_MAJOR "3"
- #define NETSURF_VERSION_MINOR_EXTERNAL "8"
-
-commit to the branch
-
- git commit -m 'Update version files for release'
-
-once you are sure everything is correct and committed tag the branch for release
-
- git tag -s -m 'Official Release' release/<version number>
-
-Next do a dry run push
-
- git push -n --tags
-
-ensure this shown the correct repo and the release tag something like
-
- [gitano] Welcome to the NetSurf Gitano instance.
- To ssh://nsgit@git.netsurf-browser.org/netsurf.git
- * [new tag] release/3.7 -> release/3.7
-
-Next the branch must be merged back to master.
-
- git checkout master
- git merge -s ours heads/releasing/3.7
-
-Then edit desktop/version.c and frontends/amiga/version.c ready for the next release cycle
-
- git add desktop/version.c frontends/amiga/version.c
- git commit -m 'Update version for next development cycle'
-
-Remove releasing branch
-
- git branch -d releasing/3.8
- Deleted branch releasing/3.8 (was 66fe825c8).
-
-finally push master
-
- git push origin master
-
-If that verifies as correct
-
- git push --tags
-
-and the release tag is pushed, too late now so be careful and check!
-
-Please do ensure you *thoroughly* check your work at each step as mistakes are hard to fix once pushed.
-
-Releasing the all source
-------------------------
-
-clone the all repo
-
- git clone ssh://nsgit@git.netsurf-browser.org/netsurf-all.git
-
-ensure ther submodules are initialised
-
- git submodule init
-
-output will be something like
-
- Submodule 'buildsystem' (git://git.netsurf-browser.org/buildsystem.git) registered for path 'buildsystem'
- Submodule 'libcss' (git://git.netsurf-browser.org/libcss.git) registered for path 'libcss'
- Submodule 'libdom' (git://git.netsurf-browser.org/libdom.git) registered for path 'libdom'
- Submodule 'libhubbub' (git://git.netsurf-browser.org/libhubbub.git) registered for path 'libhubbub'
- Submodule 'libnsbmp' (git://git.netsurf-browser.org/libnsbmp.git) registered for path 'libnsbmp'
- Submodule 'libnsfb' (git://git.netsurf-browser.org/libnsfb.git) registered for path 'libnsfb'
- Submodule 'libnsgif' (git://git.netsurf-browser.org/libnsgif.git) registered for path 'libnsgif'
- Submodule 'libnspsl' (http://git.netsurf-browser.org/libnspsl.git) registered for path 'libnspsl'
- Submodule 'libnsutils' (http://git.netsurf-browser.org/libnsutils.git/) registered for path 'libnsutils'
- Submodule 'libparserutils' (git://git.netsurf-browser.org/libparserutils.git) registered for path 'libparserutils'
- Submodule 'libpencil' (git://git.netsurf-browser.org/libpencil.git) registered for path 'libpencil'
- Submodule 'librosprite' (git://git.netsurf-browser.org/librosprite.git) registered for path 'librosprite'
- Submodule 'librufl' (git://git.netsurf-browser.org/librufl.git) registered for path 'librufl'
- Submodule 'libsvgtiny' (git://git.netsurf-browser.org/libsvgtiny.git) registered for path 'libsvgtiny'
- Submodule 'libutf8proc' (http://git.netsurf-browser.org/libutf8proc.git/) registered for path 'libutf8proc'
- Submodule 'libwapcaplet' (git://git.netsurf-browser.org/libwapcaplet.git) registered for path 'libwapcaplet'
- Submodule 'netsurf' (git://git.netsurf-browser.org/netsurf.git) registered for path 'netsurf'
- Submodule 'nsgenbind' (git://git.netsurf-browser.org/nsgenbind.git) registered for path 'nsgenbind'
-
-ensure the submodules are updated
-
- git submodule update
-
-If a new submodule is required (e.g. new library) it must be added and then the .gitmodules file checked for correctnes.
-Once happy commit the changes. Note use the git uri for the submodules not http
-
- git submodule add git://git.netsurf-browser.org/libnslog.git
- vi .gitmodules
- git commit -a -m 'Add libnslog submodule'
-
-if adding a submodule the Makefile may require editing to build the library or utility
-
-for each submodule listed above the correct revision must be set. A utility target is provided in the makefile
-
- make checkout-release
-
-This obtains the most recent release tag for each submodule and checks it out, equivalent to:
-
- cd buildsystem
- git checkout origin/HEAD
- git checkout $(git describe --abbrev=0 --match="release/*" )
- cd ..
-
-once each submodule has been updated in the top level netsurf-all directory.
-The modified submodules should then be added ready for commit
-
- git add buildsystem libcss libdom libhubbub libnsbmp libnsfb libnsgif libparserutils librosprite libsvgtiny libwapcaplet netsurf nsgenbind
- git commit -m 'Update submodules for 3.7 release'
-
-ensure the component version in the Makefile has been updated
-
-finally tag the branch for release
-
- git tag -s -m 'Official Release' release/<version number>
-
-make the distribution tarball and check its contents
-
- make dist
-
-The git-archive-all module is needed for the dist step from
-
- https://github.com/Kentzo/git-archive-all
-
-Next do a dry run push
-
- git push -n --tags
+# Releasing NetSurf
-ensure this shown the correct repo and the release tag something like
+NetSurf itself does not use the core buildsystem and has its own [[release process|release/netsurfbuildsystem]]
- [gitano] Welcome to the NetSurf Gitano instance.
- To ssh://nsgit@git.netsurf-browser.org/netsurf-all.git
- * [new tag] release/3.7 -> release/3.7
-If that verifies as correct
+# Releasing the all source
- git push && git push --tags
+The [[all source release process|release/allsource]] should then be followed.
-and the release tag is pushed, too late now so be careful and check!
-Bugtracker
-----------
+# Bugtracker
The netsurf release version must be marked as released in mantis and the
-next development version added if its not already present
+next development version added if its not already present.
diff --git a/society/constitution.mdwn b/society/constitution.mdwn
index b3fa836..68288b5 100644
--- a/society/constitution.mdwn
+++ b/society/constitution.mdwn
@@ -55,7 +55,7 @@ of the NetSurf Society.
12. No less than two weeks will elapse between the calling of a meeting
(either AGM or EGM) and the meeting taking place.
13. Meetings may occur physically or in the IRC channel \#netsurf on the
- Freenode IRC network.
+ Libera Chat IRC network.
14. The Committee is elected at the AGM and the Committee Members serve
the period starting immediately after the end of the AGM at which
they were elected and ending at the end of the subsequent AGM.