forked from TrueCloudLab/frostfs.info
Compare commits
No commits in common. "empty" and "master" have entirely different histories.
22 changed files with 2176 additions and 2 deletions
55
.forgejo/workflows/build.yml
Normal file
55
.forgejo/workflows/build.yml
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
name: build static site
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
container:
|
||||||
|
image: node:22-bookworm
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |-
|
||||||
|
bin/
|
||||||
|
themes/
|
||||||
|
key: hugo-${{ runner.os }}-${{ hashFiles('Makefile', 'config.toml') }}
|
||||||
|
restore-keys: |
|
||||||
|
hugo-${{ runner.os }}
|
||||||
|
hugo
|
||||||
|
|
||||||
|
- name: make all
|
||||||
|
run: |
|
||||||
|
git submodule sync
|
||||||
|
rm -rf themes/dot-hugo
|
||||||
|
make all
|
||||||
|
|
||||||
|
- name: Setup SSH environment
|
||||||
|
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
|
||||||
|
env:
|
||||||
|
SSH_AUTH_SOCK: /tmp/ssh_agent.socket
|
||||||
|
run: |
|
||||||
|
umask 0077
|
||||||
|
mkdir -p ~/.ssh/
|
||||||
|
ssh-keyscan frostfs.info >> ~/.ssh/known_hosts
|
||||||
|
ssh-keygen -A # create host keys
|
||||||
|
ssh-agent -a "$SSH_AUTH_SOCK"
|
||||||
|
echo "${{ secrets.SSH_DEPLOY_KEY }}" > ~/.ssh/key
|
||||||
|
stat ~/.ssh/key
|
||||||
|
ssh-keygen -y -f ~/.ssh/key
|
||||||
|
ssh-add ~/.ssh/key
|
||||||
|
rm ~/.ssh/key
|
||||||
|
|
||||||
|
- name: make deploy
|
||||||
|
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
|
||||||
|
run: |
|
||||||
|
ssh-add -L
|
||||||
|
make deploy
|
||||||
|
env:
|
||||||
|
SSH_AUTH_SOCK: /tmp/ssh_agent.socket
|
70
.github/logo.svg
vendored
Normal file
70
.github/logo.svg
vendored
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 184.2 51.8" style="enable-background:new 0 0 184.2 51.8;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{display:none;}
|
||||||
|
.st1{display:inline;}
|
||||||
|
.st2{fill:#01E397;}
|
||||||
|
.st3{display:inline;fill:#010032;}
|
||||||
|
.st4{display:inline;fill:#00E599;}
|
||||||
|
.st5{display:inline;fill:#00AF92;}
|
||||||
|
.st6{fill:#00C3E5;}
|
||||||
|
</style>
|
||||||
|
<g id="Layer_2">
|
||||||
|
<g id="Layer_1-2" class="st0">
|
||||||
|
<g class="st1">
|
||||||
|
<path class="st2" d="M146.6,18.3v7.2h10.9V29h-10.9v10.7h-4V14.8h18v3.5H146.6z"/>
|
||||||
|
<path class="st2" d="M180,15.7c1.7,0.9,3,2.2,4,3.8l-3,2.7c-0.6-1.3-1.5-2.4-2.6-3.3c-1.3-0.7-2.8-1-4.3-1
|
||||||
|
c-1.4-0.1-2.8,0.3-4,1.1c-0.9,0.5-1.5,1.5-1.4,2.6c0,1,0.5,1.9,1.4,2.4c1.5,0.8,3.2,1.3,4.9,1.5c1.9,0.3,3.7,0.8,5.4,1.6
|
||||||
|
c1.2,0.5,2.2,1.3,2.9,2.3c0.6,1,1,2.2,0.9,3.4c0,1.4-0.5,2.7-1.3,3.8c-0.9,1.2-2.1,2.1-3.5,2.6c-1.7,0.6-3.4,0.9-5.2,0.8
|
||||||
|
c-5,0-8.6-1.6-10.7-5l2.9-2.8c0.7,1.4,1.8,2.5,3.1,3.3c1.5,0.7,3.1,1.1,4.7,1c1.5,0.1,2.9-0.2,4.2-0.9c0.9-0.5,1.5-1.5,1.5-2.6
|
||||||
|
c0-0.9-0.5-1.8-1.3-2.2c-1.5-0.7-3.1-1.2-4.8-1.5c-1.9-0.3-3.7-0.8-5.5-1.5c-1.2-0.5-2.2-1.4-3-2.4c-0.6-1-1-2.2-0.9-3.4
|
||||||
|
c0-1.4,0.4-2.7,1.2-3.8c0.8-1.2,2-2.2,3.3-2.8c1.6-0.7,3.4-1.1,5.2-1C176.1,14.3,178.2,14.8,180,15.7z"/>
|
||||||
|
</g>
|
||||||
|
<path class="st3" d="M73.3,16.3c1.9,1.9,2.9,4.5,2.7,7.1v15.9h-4V24.8c0-2.6-0.5-4.5-1.6-5.7c-1.2-1.2-2.8-1.8-4.5-1.7
|
||||||
|
c-1.3,0-2.5,0.3-3.7,0.8c-1.2,0.7-2.2,1.7-2.9,2.9c-0.8,1.5-1.1,3.2-1.1,4.9v13.3h-4V15.1l3.6,1.5v1.7c0.8-1.5,2.1-2.6,3.6-3.3
|
||||||
|
c1.5-0.8,3.2-1.2,4.9-1.1C68.9,13.8,71.3,14.7,73.3,16.3z"/>
|
||||||
|
<path class="st3" d="M104.4,28.3H85.6c0.1,2.2,1,4.3,2.5,5.9c1.5,1.4,3.5,2.2,5.6,2.1c1.6,0.1,3.2-0.2,4.6-0.9
|
||||||
|
c1.1-0.6,2-1.6,2.5-2.8l3.3,1.8c-0.9,1.7-2.3,3.1-4,4c-2,1-4.2,1.5-6.4,1.4c-3.7,0-6.7-1.1-8.8-3.4s-3.2-5.5-3.2-9.6s1-7.2,3-9.5
|
||||||
|
s5-3.4,8.7-3.4c2.1-0.1,4.2,0.5,6.1,1.5c1.6,1,3,2.5,3.8,4.2c0.9,1.8,1.3,3.9,1.3,5.9C104.6,26.4,104.6,27.4,104.4,28.3z
|
||||||
|
M88.1,19.3c-1.4,1.5-2.2,3.4-2.4,5.5h15.1c-0.2-2-1-3.9-2.3-5.5c-1.4-1.3-3.2-2-5.1-1.9C91.5,17.3,89.6,18,88.1,19.3z"/>
|
||||||
|
<path class="st3" d="M131,17.3c2.2,2.3,3.2,5.5,3.2,9.5s-1,7.3-3.2,9.6s-5.1,3.4-8.8,3.4s-6.7-1.1-8.9-3.4s-3.2-5.5-3.2-9.6
|
||||||
|
s1.1-7.2,3.2-9.5s5.1-3.4,8.9-3.4S128.9,15,131,17.3z M116.2,19.9c-1.5,2-2.2,4.4-2.1,6.9c-0.2,2.5,0.6,5,2.1,7
|
||||||
|
c1.5,1.7,3.7,2.7,6,2.6c2.3,0.1,4.4-0.9,5.9-2.6c1.5-2,2.3-4.5,2.1-7c0.1-2.5-0.6-4.9-2.1-6.9c-1.5-1.7-3.6-2.7-5.9-2.6
|
||||||
|
C119.9,17.2,117.7,18.2,116.2,19.9z"/>
|
||||||
|
<polygon class="st4" points="0,9.1 0,43.7 22.5,51.8 22.5,16.9 46.8,7.9 24.8,0 "/>
|
||||||
|
<polygon class="st5" points="24.3,17.9 24.3,36.8 46.8,44.9 46.8,9.6 "/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st6" d="M41.6,17.5H28.2v6.9h10.4v3.3H28.2v10.2h-3.9V14.2h17.2V17.5z"/>
|
||||||
|
<path class="st6" d="M45.8,37.9v-18h3.3l0.4,3.2c0.5-1.2,1.2-2.1,2.1-2.7c0.9-0.6,2.1-0.9,3.5-0.9c0.4,0,0.7,0,1.1,0.1
|
||||||
|
c0.4,0.1,0.7,0.2,0.9,0.3l-0.5,3.4c-0.3-0.1-0.6-0.2-0.9-0.2C55.4,23,54.9,23,54.4,23c-0.7,0-1.5,0.2-2.2,0.6
|
||||||
|
c-0.7,0.4-1.3,1-1.8,1.8s-0.7,1.8-0.7,3v9.5H45.8z"/>
|
||||||
|
<path class="st6" d="M68.6,19.6c1.8,0,3.3,0.4,4.6,1.1c1.3,0.7,2.4,1.8,3.1,3.2s1.1,3.1,1.1,5c0,1.9-0.4,3.6-1.1,5
|
||||||
|
c-0.8,1.4-1.8,2.5-3.1,3.2c-1.3,0.7-2.9,1.1-4.6,1.1s-3.3-0.4-4.6-1.1c-1.3-0.7-2.4-1.8-3.2-3.2c-0.8-1.4-1.2-3.1-1.2-5
|
||||||
|
c0-1.9,0.4-3.6,1.2-5s1.8-2.5,3.2-3.2C65.3,19.9,66.8,19.6,68.6,19.6z M68.6,22.6c-1.1,0-2,0.2-2.8,0.7c-0.8,0.5-1.3,1.2-1.7,2.1
|
||||||
|
s-0.6,2.1-0.6,3.5c0,1.3,0.2,2.5,0.6,3.4s1,1.7,1.7,2.2s1.7,0.7,2.8,0.7c1.1,0,2-0.2,2.7-0.7c0.7-0.5,1.3-1.2,1.7-2.2
|
||||||
|
s0.6-2.1,0.6-3.4c0-1.4-0.2-2.5-0.6-3.5s-1-1.6-1.7-2.1C70.6,22.8,69.6,22.6,68.6,22.6z"/>
|
||||||
|
<path class="st6" d="M89.2,38.3c-1.8,0-3.4-0.3-4.9-1c-1.5-0.7-2.7-1.7-3.5-3l2.7-2.3c0.5,1,1.3,1.8,2.3,2.4
|
||||||
|
c1,0.6,2.2,0.9,3.6,0.9c1.1,0,2-0.2,2.6-0.6c0.6-0.4,1-0.9,1-1.6c0-0.5-0.2-0.9-0.5-1.2s-0.9-0.6-1.7-0.8l-3.8-0.8
|
||||||
|
c-1.9-0.4-3.3-1-4.1-1.9c-0.8-0.9-1.2-1.9-1.2-3.3c0-1,0.3-1.9,0.9-2.7c0.6-0.8,1.4-1.5,2.5-2s2.5-0.8,4-0.8c1.8,0,3.3,0.3,4.6,1
|
||||||
|
c1.3,0.6,2.2,1.5,2.9,2.7l-2.7,2.2c-0.5-1-1.1-1.7-2-2.1c-0.9-0.5-1.8-0.7-2.8-0.7c-0.8,0-1.4,0.1-2,0.3c-0.6,0.2-1,0.5-1.3,0.8
|
||||||
|
c-0.3,0.3-0.4,0.7-0.4,1.2c0,0.5,0.2,0.9,0.5,1.3s1,0.6,1.9,0.8l4.1,0.9c1.7,0.3,2.9,0.9,3.7,1.7c0.7,0.8,1.1,1.8,1.1,2.9
|
||||||
|
c0,1.2-0.3,2.2-0.9,3c-0.6,0.9-1.5,1.6-2.6,2C92.1,38.1,90.7,38.3,89.2,38.3z"/>
|
||||||
|
<path class="st6" d="M112.8,19.9v3H99.3v-3H112.8z M106.6,14.6v17.9c0,0.9,0.2,1.5,0.7,1.9c0.5,0.4,1.1,0.6,1.9,0.6
|
||||||
|
c0.6,0,1.2-0.1,1.7-0.3c0.5-0.2,0.9-0.5,1.3-0.8l0.9,2.8c-0.6,0.5-1.2,0.9-2,1.1c-0.8,0.3-1.7,0.4-2.7,0.4c-1,0-2-0.2-2.8-0.5
|
||||||
|
s-1.5-0.9-2-1.6c-0.5-0.8-0.7-1.7-0.8-3V15.7L106.6,14.6z"/>
|
||||||
|
<path d="M137.9,17.5h-13.3v6.9h10.4v3.3h-10.4v10.2h-3.9V14.2h17.2V17.5z"/>
|
||||||
|
<path d="M150.9,13.8c2.1,0,4,0.4,5.5,1.2c1.6,0.8,2.9,2,4,3.5l-2.6,2.5c-0.9-1.4-1.9-2.4-3.1-3c-1.1-0.6-2.5-0.9-4-0.9
|
||||||
|
c-1.2,0-2.1,0.2-2.8,0.5c-0.7,0.3-1.3,0.7-1.6,1.2c-0.3,0.5-0.5,1.1-0.5,1.7c0,0.7,0.3,1.4,0.8,1.9c0.5,0.6,1.5,1,2.9,1.3
|
||||||
|
l4.8,1.1c2.3,0.5,3.9,1.3,4.9,2.3c1,1,1.4,2.3,1.4,3.9c0,1.5-0.4,2.7-1.2,3.8c-0.8,1.1-1.9,1.9-3.3,2.5s-3.1,0.9-5,0.9
|
||||||
|
c-1.7,0-3.2-0.2-4.5-0.6c-1.3-0.4-2.5-1-3.5-1.8c-1-0.7-1.8-1.6-2.5-2.6l2.7-2.7c0.5,0.8,1.1,1.6,1.9,2.2
|
||||||
|
c0.8,0.7,1.7,1.2,2.7,1.5c1,0.4,2.2,0.5,3.4,0.5c1.1,0,2.1-0.1,2.9-0.4c0.8-0.3,1.4-0.7,1.8-1.2c0.4-0.5,0.6-1.1,0.6-1.9
|
||||||
|
c0-0.7-0.2-1.3-0.7-1.8c-0.5-0.5-1.3-0.9-2.6-1.2l-5.2-1.2c-1.4-0.3-2.6-0.8-3.6-1.3c-0.9-0.6-1.6-1.3-2.1-2.1s-0.7-1.8-0.7-2.8
|
||||||
|
c0-1.3,0.4-2.6,1.1-3.7c0.7-1.1,1.8-2,3.2-2.6C147.3,14.1,148.9,13.8,150.9,13.8z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
.DS_Store
|
||||||
|
.idea
|
||||||
|
*.log
|
||||||
|
*.lock
|
||||||
|
tmp/
|
||||||
|
bin/hugo*
|
||||||
|
|
||||||
|
public/
|
||||||
|
resources/_gen
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "themes/dot-hugo"]
|
||||||
|
path = themes/dot-hugo
|
||||||
|
url = https://git.frostfs.info/TrueCloudLab/dot-hugo
|
||||||
|
branch = frostfs_design_version
|
438
LICENSE
Normal file
438
LICENSE
Normal file
|
@ -0,0 +1,438 @@
|
||||||
|
Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||||
|
does not provide legal services or legal advice. Distribution of
|
||||||
|
Creative Commons public licenses does not create a lawyer-client or
|
||||||
|
other relationship. Creative Commons makes its licenses and related
|
||||||
|
information available on an "as-is" basis. Creative Commons gives no
|
||||||
|
warranties regarding its licenses, any material licensed under their
|
||||||
|
terms and conditions, or any related information. Creative Commons
|
||||||
|
disclaims all liability for damages resulting from their use to the
|
||||||
|
fullest extent possible.
|
||||||
|
|
||||||
|
Using Creative Commons Public Licenses
|
||||||
|
|
||||||
|
Creative Commons public licenses provide a standard set of terms and
|
||||||
|
conditions that creators and other rights holders may use to share
|
||||||
|
original works of authorship and other material subject to copyright
|
||||||
|
and certain other rights specified in the public license below. The
|
||||||
|
following considerations are for informational purposes only, are not
|
||||||
|
exhaustive, and do not form part of our licenses.
|
||||||
|
|
||||||
|
Considerations for licensors: Our public licenses are
|
||||||
|
intended for use by those authorized to give the public
|
||||||
|
permission to use material in ways otherwise restricted by
|
||||||
|
copyright and certain other rights. Our licenses are
|
||||||
|
irrevocable. Licensors should read and understand the terms
|
||||||
|
and conditions of the license they choose before applying it.
|
||||||
|
Licensors should also secure all rights necessary before
|
||||||
|
applying our licenses so that the public can reuse the
|
||||||
|
material as expected. Licensors should clearly mark any
|
||||||
|
material not subject to the license. This includes other CC-
|
||||||
|
licensed material, or material used under an exception or
|
||||||
|
limitation to copyright. More considerations for licensors:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensors
|
||||||
|
|
||||||
|
Considerations for the public: By using one of our public
|
||||||
|
licenses, a licensor grants the public permission to use the
|
||||||
|
licensed material under specified terms and conditions. If
|
||||||
|
the licensor's permission is not necessary for any reason--for
|
||||||
|
example, because of any applicable exception or limitation to
|
||||||
|
copyright--then that use is not regulated by the license. Our
|
||||||
|
licenses grant only permissions under copyright and certain
|
||||||
|
other rights that a licensor has authority to grant. Use of
|
||||||
|
the licensed material may still be restricted for other
|
||||||
|
reasons, including because others have copyright or other
|
||||||
|
rights in the material. A licensor may make special requests,
|
||||||
|
such as asking that all changes be marked or described.
|
||||||
|
Although not required by our licenses, you are encouraged to
|
||||||
|
respect those requests where reasonable. More considerations
|
||||||
|
for the public:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensees
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
|
Public License
|
||||||
|
|
||||||
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
|
Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||||
|
("Public License"). To the extent this Public License may be
|
||||||
|
interpreted as a contract, You are granted the Licensed Rights in
|
||||||
|
consideration of Your acceptance of these terms and conditions, and the
|
||||||
|
Licensor grants You such rights in consideration of benefits the
|
||||||
|
Licensor receives from making the Licensed Material available under
|
||||||
|
these terms and conditions.
|
||||||
|
|
||||||
|
|
||||||
|
Section 1 -- Definitions.
|
||||||
|
|
||||||
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
|
Rights that is derived from or based upon the Licensed Material
|
||||||
|
and in which the Licensed Material is translated, altered,
|
||||||
|
arranged, transformed, or otherwise modified in a manner requiring
|
||||||
|
permission under the Copyright and Similar Rights held by the
|
||||||
|
Licensor. For purposes of this Public License, where the Licensed
|
||||||
|
Material is a musical work, performance, or sound recording,
|
||||||
|
Adapted Material is always produced where the Licensed Material is
|
||||||
|
synched in timed relation with a moving image.
|
||||||
|
|
||||||
|
b. Adapter's License means the license You apply to Your Copyright
|
||||||
|
and Similar Rights in Your contributions to Adapted Material in
|
||||||
|
accordance with the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
c. BY-NC-SA Compatible License means a license listed at
|
||||||
|
creativecommons.org/compatiblelicenses, approved by Creative
|
||||||
|
Commons as essentially the equivalent of this Public License.
|
||||||
|
|
||||||
|
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||||
|
closely related to copyright including, without limitation,
|
||||||
|
performance, broadcast, sound recording, and Sui Generis Database
|
||||||
|
Rights, without regard to how the rights are labeled or
|
||||||
|
categorized. For purposes of this Public License, the rights
|
||||||
|
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||||
|
Rights.
|
||||||
|
|
||||||
|
e. Effective Technological Measures means those measures that, in the
|
||||||
|
absence of proper authority, may not be circumvented under laws
|
||||||
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
|
agreements.
|
||||||
|
|
||||||
|
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||||
|
any other exception or limitation to Copyright and Similar Rights
|
||||||
|
that applies to Your use of the Licensed Material.
|
||||||
|
|
||||||
|
g. License Elements means the license attributes listed in the name
|
||||||
|
of a Creative Commons Public License. The License Elements of this
|
||||||
|
Public License are Attribution, NonCommercial, and ShareAlike.
|
||||||
|
|
||||||
|
h. Licensed Material means the artistic or literary work, database,
|
||||||
|
or other material to which the Licensor applied this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
i. Licensed Rights means the rights granted to You subject to the
|
||||||
|
terms and conditions of this Public License, which are limited to
|
||||||
|
all Copyright and Similar Rights that apply to Your use of the
|
||||||
|
Licensed Material and that the Licensor has authority to license.
|
||||||
|
|
||||||
|
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
|
under this Public License.
|
||||||
|
|
||||||
|
k. NonCommercial means not primarily intended for or directed towards
|
||||||
|
commercial advantage or monetary compensation. For purposes of
|
||||||
|
this Public License, the exchange of the Licensed Material for
|
||||||
|
other material subject to Copyright and Similar Rights by digital
|
||||||
|
file-sharing or similar means is NonCommercial provided there is
|
||||||
|
no payment of monetary compensation in connection with the
|
||||||
|
exchange.
|
||||||
|
|
||||||
|
l. Share means to provide material to the public by any means or
|
||||||
|
process that requires permission under the Licensed Rights, such
|
||||||
|
as reproduction, public display, public performance, distribution,
|
||||||
|
dissemination, communication, or importation, and to make material
|
||||||
|
available to the public including in ways that members of the
|
||||||
|
public may access the material from a place and at a time
|
||||||
|
individually chosen by them.
|
||||||
|
|
||||||
|
m. Sui Generis Database Rights means rights other than copyright
|
||||||
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
|
as amended and/or succeeded, as well as other essentially
|
||||||
|
equivalent rights anywhere in the world.
|
||||||
|
|
||||||
|
n. You means the individual or entity exercising the Licensed Rights
|
||||||
|
under this Public License. Your has a corresponding meaning.
|
||||||
|
|
||||||
|
|
||||||
|
Section 2 -- Scope.
|
||||||
|
|
||||||
|
a. License grant.
|
||||||
|
|
||||||
|
1. Subject to the terms and conditions of this Public License,
|
||||||
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
|
|
||||||
|
a. reproduce and Share the Licensed Material, in whole or
|
||||||
|
in part, for NonCommercial purposes only; and
|
||||||
|
|
||||||
|
b. produce, reproduce, and Share Adapted Material for
|
||||||
|
NonCommercial purposes only.
|
||||||
|
|
||||||
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
|
Exceptions and Limitations apply to Your use, this Public
|
||||||
|
License does not apply, and You do not need to comply with
|
||||||
|
its terms and conditions.
|
||||||
|
|
||||||
|
3. Term. The term of this Public License is specified in Section
|
||||||
|
6(a).
|
||||||
|
|
||||||
|
4. Media and formats; technical modifications allowed. The
|
||||||
|
Licensor authorizes You to exercise the Licensed Rights in
|
||||||
|
all media and formats whether now known or hereafter created,
|
||||||
|
and to make technical modifications necessary to do so. The
|
||||||
|
Licensor waives and/or agrees not to assert any right or
|
||||||
|
authority to forbid You from making technical modifications
|
||||||
|
necessary to exercise the Licensed Rights, including
|
||||||
|
technical modifications necessary to circumvent Effective
|
||||||
|
Technological Measures. For purposes of this Public License,
|
||||||
|
simply making modifications authorized by this Section 2(a)
|
||||||
|
(4) never produces Adapted Material.
|
||||||
|
|
||||||
|
5. Downstream recipients.
|
||||||
|
|
||||||
|
a. Offer from the Licensor -- Licensed Material. Every
|
||||||
|
recipient of the Licensed Material automatically
|
||||||
|
receives an offer from the Licensor to exercise the
|
||||||
|
Licensed Rights under the terms and conditions of this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
b. Additional offer from the Licensor -- Adapted Material.
|
||||||
|
Every recipient of Adapted Material from You
|
||||||
|
automatically receives an offer from the Licensor to
|
||||||
|
exercise the Licensed Rights in the Adapted Material
|
||||||
|
under the conditions of the Adapter's License You apply.
|
||||||
|
|
||||||
|
c. No downstream restrictions. You may not offer or impose
|
||||||
|
any additional or different terms or conditions on, or
|
||||||
|
apply any Effective Technological Measures to, the
|
||||||
|
Licensed Material if doing so restricts exercise of the
|
||||||
|
Licensed Rights by any recipient of the Licensed
|
||||||
|
Material.
|
||||||
|
|
||||||
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
|
may be construed as permission to assert or imply that You
|
||||||
|
are, or that Your use of the Licensed Material is, connected
|
||||||
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
|
the Licensor or others designated to receive attribution as
|
||||||
|
provided in Section 3(a)(1)(A)(i).
|
||||||
|
|
||||||
|
b. Other rights.
|
||||||
|
|
||||||
|
1. Moral rights, such as the right of integrity, are not
|
||||||
|
licensed under this Public License, nor are publicity,
|
||||||
|
privacy, and/or other similar personality rights; however, to
|
||||||
|
the extent possible, the Licensor waives and/or agrees not to
|
||||||
|
assert any such rights held by the Licensor to the limited
|
||||||
|
extent necessary to allow You to exercise the Licensed
|
||||||
|
Rights, but not otherwise.
|
||||||
|
|
||||||
|
2. Patent and trademark rights are not licensed under this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
3. To the extent possible, the Licensor waives any right to
|
||||||
|
collect royalties from You for the exercise of the Licensed
|
||||||
|
Rights, whether directly or through a collecting society
|
||||||
|
under any voluntary or waivable statutory or compulsory
|
||||||
|
licensing scheme. In all other cases the Licensor expressly
|
||||||
|
reserves any right to collect such royalties, including when
|
||||||
|
the Licensed Material is used other than for NonCommercial
|
||||||
|
purposes.
|
||||||
|
|
||||||
|
|
||||||
|
Section 3 -- License Conditions.
|
||||||
|
|
||||||
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
|
following conditions.
|
||||||
|
|
||||||
|
a. Attribution.
|
||||||
|
|
||||||
|
1. If You Share the Licensed Material (including in modified
|
||||||
|
form), You must:
|
||||||
|
|
||||||
|
a. retain the following if it is supplied by the Licensor
|
||||||
|
with the Licensed Material:
|
||||||
|
|
||||||
|
i. identification of the creator(s) of the Licensed
|
||||||
|
Material and any others designated to receive
|
||||||
|
attribution, in any reasonable manner requested by
|
||||||
|
the Licensor (including by pseudonym if
|
||||||
|
designated);
|
||||||
|
|
||||||
|
ii. a copyright notice;
|
||||||
|
|
||||||
|
iii. a notice that refers to this Public License;
|
||||||
|
|
||||||
|
iv. a notice that refers to the disclaimer of
|
||||||
|
warranties;
|
||||||
|
|
||||||
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
|
extent reasonably practicable;
|
||||||
|
|
||||||
|
b. indicate if You modified the Licensed Material and
|
||||||
|
retain an indication of any previous modifications; and
|
||||||
|
|
||||||
|
c. indicate the Licensed Material is licensed under this
|
||||||
|
Public License, and include the text of, or the URI or
|
||||||
|
hyperlink to, this Public License.
|
||||||
|
|
||||||
|
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||||
|
reasonable manner based on the medium, means, and context in
|
||||||
|
which You Share the Licensed Material. For example, it may be
|
||||||
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
|
hyperlink to a resource that includes the required
|
||||||
|
information.
|
||||||
|
3. If requested by the Licensor, You must remove any of the
|
||||||
|
information required by Section 3(a)(1)(A) to the extent
|
||||||
|
reasonably practicable.
|
||||||
|
|
||||||
|
b. ShareAlike.
|
||||||
|
|
||||||
|
In addition to the conditions in Section 3(a), if You Share
|
||||||
|
Adapted Material You produce, the following conditions also apply.
|
||||||
|
|
||||||
|
1. The Adapter's License You apply must be a Creative Commons
|
||||||
|
license with the same License Elements, this version or
|
||||||
|
later, or a BY-NC-SA Compatible License.
|
||||||
|
|
||||||
|
2. You must include the text of, or the URI or hyperlink to, the
|
||||||
|
Adapter's License You apply. You may satisfy this condition
|
||||||
|
in any reasonable manner based on the medium, means, and
|
||||||
|
context in which You Share Adapted Material.
|
||||||
|
|
||||||
|
3. You may not offer or impose any additional or different terms
|
||||||
|
or conditions on, or apply any Effective Technological
|
||||||
|
Measures to, Adapted Material that restrict exercise of the
|
||||||
|
rights granted under the Adapter's License You apply.
|
||||||
|
|
||||||
|
|
||||||
|
Section 4 -- Sui Generis Database Rights.
|
||||||
|
|
||||||
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
|
|
||||||
|
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||||
|
to extract, reuse, reproduce, and Share all or a substantial
|
||||||
|
portion of the contents of the database for NonCommercial purposes
|
||||||
|
only;
|
||||||
|
|
||||||
|
b. if You include all or a substantial portion of the database
|
||||||
|
contents in a database in which You have Sui Generis Database
|
||||||
|
Rights, then the database in which You have Sui Generis Database
|
||||||
|
Rights (but not its individual contents) is Adapted Material,
|
||||||
|
including for purposes of Section 3(b); and
|
||||||
|
|
||||||
|
c. You must comply with the conditions in Section 3(a) if You Share
|
||||||
|
all or a substantial portion of the contents of the database.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 4 supplements and does not
|
||||||
|
replace Your obligations under this Public License where the Licensed
|
||||||
|
Rights include other Copyright and Similar Rights.
|
||||||
|
|
||||||
|
|
||||||
|
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||||
|
|
||||||
|
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||||
|
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||||
|
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||||
|
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||||
|
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||||
|
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||||
|
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||||
|
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||||
|
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||||
|
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||||
|
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||||
|
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||||
|
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||||
|
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||||
|
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||||
|
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
c. The disclaimer of warranties and limitation of liability provided
|
||||||
|
above shall be interpreted in a manner that, to the extent
|
||||||
|
possible, most closely approximates an absolute disclaimer and
|
||||||
|
waiver of all liability.
|
||||||
|
|
||||||
|
|
||||||
|
Section 6 -- Term and Termination.
|
||||||
|
|
||||||
|
a. This Public License applies for the term of the Copyright and
|
||||||
|
Similar Rights licensed here. However, if You fail to comply with
|
||||||
|
this Public License, then Your rights under this Public License
|
||||||
|
terminate automatically.
|
||||||
|
|
||||||
|
b. Where Your right to use the Licensed Material has terminated under
|
||||||
|
Section 6(a), it reinstates:
|
||||||
|
|
||||||
|
1. automatically as of the date the violation is cured, provided
|
||||||
|
it is cured within 30 days of Your discovery of the
|
||||||
|
violation; or
|
||||||
|
|
||||||
|
2. upon express reinstatement by the Licensor.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||||
|
right the Licensor may have to seek remedies for Your violations
|
||||||
|
of this Public License.
|
||||||
|
|
||||||
|
c. For the avoidance of doubt, the Licensor may also offer the
|
||||||
|
Licensed Material under separate terms or conditions or stop
|
||||||
|
distributing the Licensed Material at any time; however, doing so
|
||||||
|
will not terminate this Public License.
|
||||||
|
|
||||||
|
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 7 -- Other Terms and Conditions.
|
||||||
|
|
||||||
|
a. The Licensor shall not be bound by any additional or different
|
||||||
|
terms or conditions communicated by You unless expressly agreed.
|
||||||
|
|
||||||
|
b. Any arrangements, understandings, or agreements regarding the
|
||||||
|
Licensed Material not stated herein are separate from and
|
||||||
|
independent of the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 8 -- Interpretation.
|
||||||
|
|
||||||
|
a. For the avoidance of doubt, this Public License does not, and
|
||||||
|
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||||
|
conditions on any use of the Licensed Material that could lawfully
|
||||||
|
be made without permission under this Public License.
|
||||||
|
|
||||||
|
b. To the extent possible, if any provision of this Public License is
|
||||||
|
deemed unenforceable, it shall be automatically reformed to the
|
||||||
|
minimum extent necessary to make it enforceable. If the provision
|
||||||
|
cannot be reformed, it shall be severed from this Public License
|
||||||
|
without affecting the enforceability of the remaining terms and
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
c. No term or condition of this Public License will be waived and no
|
||||||
|
failure to comply consented to unless expressly agreed to by the
|
||||||
|
Licensor.
|
||||||
|
|
||||||
|
d. Nothing in this Public License constitutes or may be interpreted
|
||||||
|
as a limitation upon, or waiver of, any privileges and immunities
|
||||||
|
that apply to the Licensor or You, including from the legal
|
||||||
|
processes of any jurisdiction or authority.
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons is not a party to its public
|
||||||
|
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||||
|
its public licenses to material it publishes and in those instances
|
||||||
|
will be considered the “Licensor.” The text of the Creative Commons
|
||||||
|
public licenses is dedicated to the public domain under the CC0 Public
|
||||||
|
Domain Dedication. Except for the limited purpose of indicating that
|
||||||
|
material is shared under a Creative Commons public license or as
|
||||||
|
otherwise permitted by the Creative Commons policies published at
|
||||||
|
creativecommons.org/policies, Creative Commons does not authorize the
|
||||||
|
use of the trademark "Creative Commons" or any other trademark or logo
|
||||||
|
of Creative Commons without its prior written consent including,
|
||||||
|
without limitation, in connection with any unauthorized modifications
|
||||||
|
to any of its public licenses or any other arrangements,
|
||||||
|
understandings, or agreements concerning use of licensed material. For
|
||||||
|
the avoidance of doubt, this paragraph does not form part of the
|
||||||
|
public licenses.
|
||||||
|
|
||||||
|
Creative Commons may be contacted at creativecommons.org.
|
||||||
|
|
34
Makefile
Normal file
34
Makefile
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
SHELL = bash
|
||||||
|
|
||||||
|
PUBDIR = public
|
||||||
|
HUGO_VERSION = 0.91.0
|
||||||
|
HUGO_BIN ?= bin/hugo-$(HUGO_VERSION)
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
all: public
|
||||||
|
|
||||||
|
bin/hugo-$(HUGO_VERSION):
|
||||||
|
@wget -q https://github.com/gohugoio/hugo/releases/download/v$(HUGO_VERSION)/hugo_extended_$(HUGO_VERSION)_Linux-64bit.tar.gz -O - |\
|
||||||
|
tar -xz -C bin/ hugo;
|
||||||
|
@mv bin/hugo $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -rf $(PUBDIR)
|
||||||
|
@rm -rf tmp
|
||||||
|
@rm -rf bin/hugo*
|
||||||
|
|
||||||
|
public: submodules $(HUGO_BIN)
|
||||||
|
@$(HUGO_BIN)
|
||||||
|
|
||||||
|
server: submodules $(HUGO_BIN)
|
||||||
|
@$(HUGO_BIN) server --disableFastRender
|
||||||
|
|
||||||
|
submodules:
|
||||||
|
@git submodule init
|
||||||
|
@git submodule update --recursive --remote
|
||||||
|
|
||||||
|
.PHONY: deploy
|
||||||
|
deploy:
|
||||||
|
test -f public/index.html
|
||||||
|
cd public && tar --gzip --create . | ssh deploy@frostfs.info frostfs.info
|
41
README.md
41
README.md
|
@ -1,3 +1,40 @@
|
||||||
# WIP area: this repo is just a fork!
|
<p align="center">
|
||||||
|
<img src="./.github/logo.svg" width="500px" alt="FrostFS logo">
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
FrostFS Documentation site
|
||||||
|
</p>
|
||||||
|
|
||||||
Useful things may be published only in [other branches](../../../branches)
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Welcome to the FrostFS Documentation site repository!
|
||||||
|
|
||||||
|
This is a TrueCloudLab maintained and community supported FrostFS documentation
|
||||||
|
project, where everyone can contribute new articles, suggest new topics and
|
||||||
|
enhance existing content.
|
||||||
|
|
||||||
|
We use Hugo for static content generation, so most of Hugo guides are applicable
|
||||||
|
for this site.
|
||||||
|
|
||||||
|
## How to contribute
|
||||||
|
|
||||||
|
1. Fork the repo
|
||||||
|
2. Make some changes
|
||||||
|
3. Check how it looks localy with `make server`
|
||||||
|
4. Submit a PR
|
||||||
|
5. Wait for PR to be merged =)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To build and run doc site locally one needs to run `make public`. This `make`
|
||||||
|
target will download the required version of hugo and use it for site generation.
|
||||||
|
|
||||||
|
The resulting static site content will be in the `public` directory.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
License: CC BY-NC-SA 4.0
|
||||||
|
|
||||||
|
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
|
||||||
|
|
0
bin/.empty
Normal file
0
bin/.empty
Normal file
70
config.toml
Normal file
70
config.toml
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
################################# Site configuration ###################
|
||||||
|
baseURL = 'https://frostfs.info/'
|
||||||
|
# disable language
|
||||||
|
disableLanguages = []
|
||||||
|
|
||||||
|
title = 'FrostFS site'
|
||||||
|
theme = 'dot-hugo'
|
||||||
|
|
||||||
|
enableEmoji = true
|
||||||
|
|
||||||
|
# unsafe html
|
||||||
|
[markup.goldmark.renderer]
|
||||||
|
unsafe = true
|
||||||
|
|
||||||
|
# table of contents
|
||||||
|
[markup.tableOfContents]
|
||||||
|
endLevel = 4
|
||||||
|
ordered = false
|
||||||
|
startLevel = 2
|
||||||
|
|
||||||
|
############################# Default Parameters ##########################
|
||||||
|
[params]
|
||||||
|
# logo is for all page
|
||||||
|
logo = 'images/FrostFS.svg'
|
||||||
|
|
||||||
|
# customize color
|
||||||
|
primary_color = "#00c3e5"
|
||||||
|
bg_color = "#00c3e5"
|
||||||
|
body_color = "#f9f9f9"
|
||||||
|
text_color = "#003"
|
||||||
|
text_color_dark = "#003"
|
||||||
|
white_color = "#ffffff"
|
||||||
|
light_color = "#00c3e5"
|
||||||
|
|
||||||
|
# font family
|
||||||
|
font_family = "WorkSans" # Choose font family from : https://fonts.google.com/
|
||||||
|
|
||||||
|
# contact form action
|
||||||
|
contact_form_action = "#" # contact form works with : https://formspree.io
|
||||||
|
|
||||||
|
############################## social links ##############################
|
||||||
|
[[params.social]]
|
||||||
|
icon = "ti-github" # themify icon pack : https://themify.me/themify-icons
|
||||||
|
name = "Forgejo instance"
|
||||||
|
link = "https://git.frostfs.info/TrueCloudLab"
|
||||||
|
|
||||||
|
################################ English Language ######################
|
||||||
|
[Languages.en]
|
||||||
|
languageName = "En"
|
||||||
|
languageCode = "en-us"
|
||||||
|
weight = 1
|
||||||
|
copyright = "Copyright © [TrueCloudLab](https://git.frostfs.info/TrueCloudLab) 2022-2024"
|
||||||
|
|
||||||
|
# banner
|
||||||
|
[Languages.en.params.banner]
|
||||||
|
title = "FrostFS Documentation site"
|
||||||
|
subtitle = "Articles and answers from developers and user community"
|
||||||
|
#bg_image = "images/header.svg"
|
||||||
|
placeholder = "Have a question? Just ask here or enter terms"
|
||||||
|
|
||||||
|
################## english navigation #################
|
||||||
|
[[Languages.en.menu.main]]
|
||||||
|
name = "Proposals"
|
||||||
|
url = "proposals/"
|
||||||
|
weight = 1
|
||||||
|
|
||||||
|
[[Languages.en.menu.main]]
|
||||||
|
name = "SDK & API"
|
||||||
|
url = "api/"
|
||||||
|
weight = 2
|
9
content/api/_index.en.md
Normal file
9
content/api/_index.en.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
title: "API & SDK"
|
||||||
|
icon: "ti-panel"
|
||||||
|
description: "API and SDK implementations"
|
||||||
|
type: "docs"
|
||||||
|
date: "2022-12-22"
|
||||||
|
---
|
||||||
|
|
||||||
|
FrostFS provides has language agnostic [gRPC API](https://git.frostfs.info/TrueCloudLab/frostfs-api) declarations and few API and SDK implementation for different programming languages.
|
31
content/proposals/_index.en.md
Normal file
31
content/proposals/_index.en.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
title: "FrostFS Proposals"
|
||||||
|
icon: "ti-blackboard"
|
||||||
|
description: "Index of FrostFS Enhancement Proposals"
|
||||||
|
type: "docs"
|
||||||
|
date: "2022-12-22"
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
|
||||||
|
FrostFS Enhancement Proposals (FEPs) describe standards for the whole FrostFS
|
||||||
|
stack, including core protocol, API specification and services behavior.
|
||||||
|
|
||||||
|
Proposals numbers are assigned by the proposals editors, and once assigned are
|
||||||
|
never changed.
|
||||||
|
|
||||||
|
To learn more about the purpose of FEPs and how to go about writing one, please
|
||||||
|
refer to [FEP-1]({{< ref "/proposals/proc/fep-0001" >}}).
|
||||||
|
|
||||||
|
## FEP Status Key
|
||||||
|
|
||||||
|
- **Accepted** — Normative proposal accepted for implementation
|
||||||
|
- **Active** — Currently valid informational guidance, or an in-use process
|
||||||
|
- **Deferred** — Inactive draft that may be taken up again at a later time
|
||||||
|
- **Draft** — Proposal under active discussion and revision
|
||||||
|
- **Final** — Accepted and implementation complete, or no longer active
|
||||||
|
- **Provisional** — Provisionally accepted but additional feedback needed
|
||||||
|
- **Rejected** — Formally declined and will not be accepted
|
||||||
|
- **Superseded** — Replaced by another succeeding FEP
|
||||||
|
- **Withdrawn** — Removed from consideration by sponsor or authors
|
14
content/proposals/info/_index.en.md
Normal file
14
content/proposals/info/_index.en.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
title: "Informational"
|
||||||
|
date: "2023-02-01"
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< proposals_table "info" "Accepted" >}}
|
||||||
|
{{< proposals_table "info" "Active" >}}
|
||||||
|
{{< proposals_table "info" "Deferred" >}}
|
||||||
|
{{< proposals_table "info" "Draft" >}}
|
||||||
|
{{< proposals_table "info" "Final" >}}
|
||||||
|
{{< proposals_table "info" "Provisional" >}}
|
||||||
|
{{< proposals_table "info" "Rejected" >}}
|
||||||
|
{{< proposals_table "info" "Superseded" >}}
|
||||||
|
{{< proposals_table "info" "Withdrawn" >}}
|
582
content/proposals/proc/FEP-0001.md
Normal file
582
content/proposals/proc/FEP-0001.md
Normal file
|
@ -0,0 +1,582 @@
|
||||||
|
---
|
||||||
|
FEP: 1
|
||||||
|
Title: FEP Purpose and Guidelines
|
||||||
|
Author: Stanislav Bogatyrev <realloc@realloc.spb.ru>
|
||||||
|
Discussions-To:
|
||||||
|
- https://git.frostfs.info/TrueCloudLab/frostfs.info/pulls/12
|
||||||
|
- https://github.com/TrueCloudLab/frostfs.info/pull/3
|
||||||
|
Status: Active
|
||||||
|
Type: Process
|
||||||
|
Date: 2023-04-17
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
|
## What is a FEP?
|
||||||
|
|
||||||
|
FEP stands for FrostFS Enhancement Proposal. The idea and most of the process is
|
||||||
|
derived from Python [PEP-1](https://www.python.org/dev/peps/pep-0001/). Almost
|
||||||
|
all text was simply copied and modified.
|
||||||
|
|
||||||
|
A FEP is a design document providing information to the FrostFS community, or
|
||||||
|
describing a new feature for FrostFS or its processes or environment. The FEP
|
||||||
|
should provide a concise technical specification of the feature and a rationale
|
||||||
|
for the feature.
|
||||||
|
|
||||||
|
We intend FEPs to be the primary mechanisms for proposing major new features,
|
||||||
|
for collecting community input on an issue, and for documenting the design
|
||||||
|
decisions that have gone into FrostFS. The FEP author is responsible for
|
||||||
|
building consensus within the community and documenting dissenting opinions.
|
||||||
|
|
||||||
|
Because the FEPs are maintained as text files in a versioned repository, their
|
||||||
|
revision history is the historical record of the feature proposal. This
|
||||||
|
historical record is available by the normal git commands for retrieving older
|
||||||
|
revisions, and can also be browsed in [frostfs.info
|
||||||
|
repository](https://git.frostfs.info/TrueCloudLab/frostfs.info/src/branch/master/content/proposals).
|
||||||
|
The current rendered version is available on [frostfs.info
|
||||||
|
site](https://frostfs.info/proposals/).
|
||||||
|
|
||||||
|
## FEP Audience
|
||||||
|
|
||||||
|
The typical primary audience for FEPs are the FrostFS Core and Service
|
||||||
|
developers, Architecture Committee, as well as developers of applications
|
||||||
|
relying on FrostFS or using it's parts.
|
||||||
|
|
||||||
|
However, other parts of the FrostFS community may also choose to use the process
|
||||||
|
(particularly for Informational FEPs) to document expected API conventions and
|
||||||
|
to manage complex design coordination problems that require collaboration across
|
||||||
|
multiple projects.
|
||||||
|
|
||||||
|
## FEP Types
|
||||||
|
|
||||||
|
There are three kinds of FEP:
|
||||||
|
|
||||||
|
1. A **Standards Track** FEP describes a new feature or implementation for
|
||||||
|
FrostFS. It may also describe an interoperability standard that will be
|
||||||
|
supported outside the standard API for current FrostFS versions before a
|
||||||
|
subsequent FEP adds support for that API in a future version.
|
||||||
|
|
||||||
|
2. An **Informational** FEP describes a FrostFS design issue, or provides
|
||||||
|
general guidelines or information to the community, but does not propose a
|
||||||
|
new feature. Informational FEPs do not necessarily represent a FrostFS
|
||||||
|
community consensus or recommendation, so users and implementers are free to
|
||||||
|
ignore Informational FEPs or follow their advice.
|
||||||
|
|
||||||
|
3. A **Process** FEP describes a process surrounding FrostFS, or proposes a
|
||||||
|
change to (or an event in) a process. Process FEPs are like Standards Track
|
||||||
|
FEPs but apply to areas other than the FrostFS itself. They may propose an
|
||||||
|
implementation, but not to FrostFS's codebase; they often require community
|
||||||
|
consensus; unlike Informational FEPs, they are more than recommendations, and
|
||||||
|
community members are typically not free to ignore them. Examples include
|
||||||
|
procedures, guidelines, changes to the decision-making process, and changes
|
||||||
|
to the tools or environment used in FrostFS development.
|
||||||
|
|
||||||
|
## FEP Workflow
|
||||||
|
|
||||||
|
### Starting with an idea
|
||||||
|
|
||||||
|
There are several references in this FEP to the "Architecture Committee",
|
||||||
|
"Community Committee", "Committers" and "Developers". The detailed roles and
|
||||||
|
project governance description is available in FEP-X (FrostFS Project
|
||||||
|
Governance).
|
||||||
|
|
||||||
|
The FEP process begins with a new idea for the FrostFS stack. It is highly
|
||||||
|
recommended that a single FEP contain a single key proposal or new idea; the
|
||||||
|
more focused the FEP, the more successful it tends to be. Most enhancements and
|
||||||
|
bug fixes don't need a FEP and can be submitted directly to the project's issue
|
||||||
|
tracker for the corresponding repository. The Architecture Committee reserves
|
||||||
|
the right to reject FEP proposals if they appear too unfocused or too broad. If
|
||||||
|
in doubt, split your FEP into several well-focused ones.
|
||||||
|
|
||||||
|
Each FEP must have a champion -- someone who writes the FEP using the style and
|
||||||
|
format described below, shepherds the discussions in the appropriate issues or
|
||||||
|
chats, and attempts to build community consensus around the idea. The FEP author
|
||||||
|
should first attempt to ascertain whether the idea is feasible for the new FEP.
|
||||||
|
Creating an issue in appropriate repository with 'idea' or 'discussion' label is
|
||||||
|
usually the best way to go about this, unless a more specialized venue is
|
||||||
|
appropriate.
|
||||||
|
|
||||||
|
Vetting an idea publicly before going as far as writing a FEP is meant to save
|
||||||
|
the potential author time. Asking the FrostFS community first if an idea is
|
||||||
|
original helps prevent too much time being spent on something that is guaranteed
|
||||||
|
to be rejected based on prior discussions (searching the internet does not
|
||||||
|
always do the trick). It also helps to make sure the idea is applicable to the
|
||||||
|
entire community and not just the author. Just because an idea sounds good to
|
||||||
|
the author does not mean it will work for most people in most areas where
|
||||||
|
FrostFS is used.
|
||||||
|
|
||||||
|
Once the champion has asked the community as to whether an idea has any chance
|
||||||
|
of acceptance, a draft FEP should be presented to the appropriate venue
|
||||||
|
mentioned above. This gives the author a chance to flesh out the draft FEP to
|
||||||
|
make properly formatted, of high quality, and to address initial concerns about
|
||||||
|
the proposal.
|
||||||
|
|
||||||
|
### Submitting a FEP
|
||||||
|
|
||||||
|
Following the above initial discussion, the workflow varies based on whether any
|
||||||
|
of the FEP's co-authors are Committers. If one or more of the FEP's co-authors
|
||||||
|
are Committers, they are responsible for following the process outlined below.
|
||||||
|
Otherwise (i.e. none of the co-authors are Committers), then the FEP author(s)
|
||||||
|
will need to find a sponsor for the FEP.
|
||||||
|
|
||||||
|
Ideally, a Committer sponsor is identified, but non-Committer sponsors may also
|
||||||
|
be selected with the approval of the Architecture Committee. Members of the
|
||||||
|
"Committers" and "Architecture Committee" teams are pre-approved to be sponsors.
|
||||||
|
The sponsor's job is to provide guidance to the FEP author to help them through
|
||||||
|
the logistics of the FEP process (somewhat acting like a mentor). Being a
|
||||||
|
sponsor does **not** disqualify that person from becoming a co-author. The
|
||||||
|
sponsor of a FEP is recorded in the "Sponsor:" field of the header.
|
||||||
|
|
||||||
|
Once the sponsor or the Committer(s) co-authoring the FEP deem the document
|
||||||
|
ready for submission, the proposal should be submitted as a draft FEP via a
|
||||||
|
[Pull request in frostfs.info
|
||||||
|
repository](https://git.frostfs.info/TrueCloudLab/frostfs.info/pulls). The draft must
|
||||||
|
be written in FEP style as described below, else it will fail review immediately
|
||||||
|
(although minor errors may be corrected by the editors).
|
||||||
|
|
||||||
|
The standard FEP workflow is:
|
||||||
|
|
||||||
|
* You, the FEP author, fork the [frostfs.info
|
||||||
|
repository](https://git.frostfs.info/TrueCloudLab/frostfs.info/), and create a file
|
||||||
|
named `content/proposals/<type>/fep-X.md` that contains your new FEP. Use "X"
|
||||||
|
as your draft FEP number.
|
||||||
|
|
||||||
|
* In the "Type:" header field, enter "Standards Track",
|
||||||
|
"Informational", or "Process" as appropriate, and for the "Status:"
|
||||||
|
field enter "Draft". For full details, see [FEP Header Preamble]({{<ref
|
||||||
|
"#fep_header_preamble">}}).
|
||||||
|
|
||||||
|
* Push this to your git repository fork and submit a pull request.
|
||||||
|
|
||||||
|
* The FEP editors review your PR for structure, formatting, and other
|
||||||
|
errors. Approval criteria are:
|
||||||
|
|
||||||
|
* It sound and complete. The ideas must make technical sense. The editors do
|
||||||
|
not consider whether they seem likely to be accepted.
|
||||||
|
* The title accurately describes the content.
|
||||||
|
* The FEP's language (spelling, grammar, sentence structure, etc.) and code
|
||||||
|
style should be correct and conformant. FEPs with invalid markup will not be
|
||||||
|
approved.
|
||||||
|
|
||||||
|
Editors are generally quite lenient about this initial review, expecting that
|
||||||
|
problems will be corrected by the reviewing process.
|
||||||
|
|
||||||
|
**Note:** Approval of the FEP is no guarantee that there are no embarrassing
|
||||||
|
mistakes! Correctness is the responsibility of authors and reviewers, not the
|
||||||
|
editors.
|
||||||
|
|
||||||
|
If the FEP isn't ready for approval, an editor will send it back to the author
|
||||||
|
for revision, with specific instructions, using pull requests mechanism.
|
||||||
|
|
||||||
|
* Once approved, Architecture Committee will assign your FEP a number.
|
||||||
|
|
||||||
|
Once the review process is complete, and the FEP editors approve it (note that
|
||||||
|
this is *not* the same as accepting your FEP!), they will squash commit your
|
||||||
|
pull request onto the `master` branch.
|
||||||
|
|
||||||
|
The FEP editors will not unreasonably deny publication of a FEP. Reasons for
|
||||||
|
denying FEP status include duplication of effort, being technically unsound, not
|
||||||
|
providing proper motivation or addressing backwards compatibility, or not in
|
||||||
|
keeping with the FrostFS philosophy. The Architecture Committee can be consulted
|
||||||
|
during the approval phase, and are the final arbiter of a draft's FEP-ability.
|
||||||
|
|
||||||
|
As updates are necessary, the FEP author can check in new versions if they (or a
|
||||||
|
collaborating developer) have write access to the FEP repository. Getting a FEP
|
||||||
|
number assigned early can be useful for ease of reference, especially when
|
||||||
|
multiple draft FEPs are being considered at the same time.
|
||||||
|
|
||||||
|
Standards Track FEPs consist of two parts, a design document and a reference
|
||||||
|
implementation or prototype with proof of concept. It is generally recommended
|
||||||
|
that at least a prototype implementation be co-developed with the FEP, as ideas
|
||||||
|
that sound good in principle sometimes turn out to be impractical when subjected
|
||||||
|
to the test of implementation.
|
||||||
|
|
||||||
|
### Discussing a FEP
|
||||||
|
|
||||||
|
As soon as a FEP number has been assigned and the draft FEP is committed to the
|
||||||
|
FEP repository, a discussion thread for the FEP should be created to provide a
|
||||||
|
central place to discuss and review its contents, and the FEP should be updated
|
||||||
|
so that the ``Discussions-To`` header links to it. Normally it should be an
|
||||||
|
issue or Pull Request.
|
||||||
|
|
||||||
|
If a FEP undergoes a significant re-write or other major, substantive changes to
|
||||||
|
its proposed specification, a new issue should typically be created to solicit
|
||||||
|
additional feedback. If this occurs, the ``Discussions-To`` link must be updated
|
||||||
|
and a new ``Post-History`` entry added pointing to this new thread.
|
||||||
|
|
||||||
|
FEP authors are responsible for collecting community feedback on a FEP before
|
||||||
|
submitting it for review. However, to avoid long-winded and open-ended
|
||||||
|
discussions, strategies such as soliciting private or more narrowly-tailored
|
||||||
|
feedback in the early design phase, collaborating with other community members
|
||||||
|
with expertise in the FEP's subject matter, and picking an
|
||||||
|
appropriately-specialized discussion for the FEP's topic (if applicable) should
|
||||||
|
be considered. FEP authors should use their discretion here.
|
||||||
|
|
||||||
|
Once the FEP is assigned a number and committed to the FEP repository,
|
||||||
|
substantive issues should generally be discussed in corresponding pull request
|
||||||
|
reviews or issues. This ensures everyone can follow and contribute, avoids
|
||||||
|
fragmenting the discussion, and makes sure it is fully considered as part of the
|
||||||
|
FEP review process. Comments, support, concerns and other feedback on this
|
||||||
|
designated thread are a critical part of what the Architecture Committee or
|
||||||
|
FEP-Delegate will consider when reviewing the FEP.
|
||||||
|
|
||||||
|
### FEP Review & Resolution
|
||||||
|
|
||||||
|
Once the authors have completed a FEP, they may request a review for style and
|
||||||
|
consistency from the FEP editors. However, content review and acceptance of the
|
||||||
|
FEP is ultimately the responsibility of the Architecture Committee or Community
|
||||||
|
Committee, which is formally initiated by opening a Pull Request once the
|
||||||
|
authors determine the FEP is ready for final review and resolution.
|
||||||
|
|
||||||
|
To expedite the process in selected cases (e.g. when a change is clearly
|
||||||
|
beneficial and ready to be accepted, but the FEP hasn't been formally submitted
|
||||||
|
for review yet), the Architecture Committee or Community Committee may also
|
||||||
|
initiate a FEP review, first notifying the FEP author(s) and giving them a
|
||||||
|
chance to make revisions.
|
||||||
|
|
||||||
|
For a FEP to be accepted it must meet certain minimum criteria. It must be a
|
||||||
|
clear and complete description of the proposed enhancement. The enhancement must
|
||||||
|
represent a net improvement. The proposed implementation, if applicable, must be
|
||||||
|
solid and must not complicate the system unduly. Finally, a proposed enhancement
|
||||||
|
must follow the spirit of decentralization and reliability in order to be
|
||||||
|
accepted by the Architecture or Community Committees. (However, the spirit is an
|
||||||
|
imprecise description; it may be defined as whatever is acceptable to the
|
||||||
|
Committee. This logic is intentionally circular.)
|
||||||
|
|
||||||
|
Once a FEP has been accepted, the reference implementation must be completed.
|
||||||
|
When the reference implementation is complete and incorporated into the main
|
||||||
|
source code repository, the status will be changed to "Final".
|
||||||
|
|
||||||
|
To allow gathering of additional design and interface feedback before committing
|
||||||
|
to long term stability for data storage format, protocols or API, a FEP may also
|
||||||
|
be marked as "Provisional". This is short for "Provisionally Accepted", and
|
||||||
|
indicates that the proposal has been accepted for inclusion in the reference
|
||||||
|
implementation, but additional user feedback is needed before the full design
|
||||||
|
can be considered "Final". Unlike regular accepted FEPs, provisionally accepted
|
||||||
|
FEPs may still be Rejected or Withdrawn *even after the related changes have
|
||||||
|
been included in a FrostFS release*.
|
||||||
|
|
||||||
|
Wherever possible, it is considered preferable to reduce the scope of a proposal
|
||||||
|
to avoid the need to rely on the "Provisional" status (e.g. by deferring some
|
||||||
|
features to later FEPs), as this status can lead to version compatibility
|
||||||
|
challenges in the wider FrostFS ecosystem.
|
||||||
|
|
||||||
|
A FEP can also be assigned the status "Deferred". The FEP author or an editor
|
||||||
|
can assign the FEP this status when no progress is being made on the FEP. Once a
|
||||||
|
FEP is deferred, a FEP editor can reassign it to draft status.
|
||||||
|
|
||||||
|
A FEP can also be "Rejected". Perhaps after all is said and done it was not a
|
||||||
|
good idea. It is still important to have a record of this fact. The "Withdrawn"
|
||||||
|
status is similar - it means that the FEP author themselves has decided that the
|
||||||
|
FEP is actually a bad idea, or has accepted that a competing proposal is a
|
||||||
|
better alternative.
|
||||||
|
|
||||||
|
When a FEP is Accepted, Rejected or Withdrawn, the FEP should be updated
|
||||||
|
accordingly. In addition to updating the Status field, at the very least the
|
||||||
|
Resolution header should be added with a direct link to the relevant post making
|
||||||
|
a decision on the FEP.
|
||||||
|
|
||||||
|
FEPs can also be superseded by a different FEP, rendering the original obsolete.
|
||||||
|
This is intended for Informational FEPs, where version 2 of an API can replace
|
||||||
|
version 1.
|
||||||
|
|
||||||
|
The possible paths of the status of FEPs are as follows:
|
||||||
|
|
||||||
|
![FEP process flow diagram](process_flow.svg)
|
||||||
|
|
||||||
|
While not shown in the diagram, "Accepted" FEPs may technically move to
|
||||||
|
"Rejected" or "Withdrawn" even after acceptance. This will only occur if the
|
||||||
|
implementation process reveals fundamental flaws in the design that were not
|
||||||
|
noticed prior to acceptance of the FEP. Unlike Provisional FEPs, these
|
||||||
|
transitions are only permitted if the accepted proposal has *not* been included
|
||||||
|
in a FrostFS release - released changes must instead go through the regular
|
||||||
|
deprecation process (which may require a new FEP providing the rationale for the
|
||||||
|
deprecation).
|
||||||
|
|
||||||
|
Some Informational and Process FEPs may also have a status of "Active" if they
|
||||||
|
are never meant to be completed. E.g. [FEP-1]({{< ref "/proposals/proc/fep-0001"
|
||||||
|
>}}) (this FEP :smile:).
|
||||||
|
|
||||||
|
### FEP Maintenance {#fep_maintenance}
|
||||||
|
|
||||||
|
In general, FEPs are no longer substantially modified after they have reached
|
||||||
|
the Accepted, Final, Rejected or Superseded state. Once resolution is reached, a
|
||||||
|
FEP is considered a historical document rather than a living specification.
|
||||||
|
Formal documentation of the expected behavior should be maintained elsewhere,
|
||||||
|
such as the API specification.
|
||||||
|
|
||||||
|
If changes based on implementation experience and user feedback are made to
|
||||||
|
Standards track FEPs while in the Provisional or (with Committee approval)
|
||||||
|
Accepted state, they should be noted in the FEP, such that the FEP accurately
|
||||||
|
describes the implementation at the point where it is marked Final.
|
||||||
|
|
||||||
|
Active (Informational and Process) FEPs may be updated over time to reflect
|
||||||
|
changes to development practices and other details. The precise process
|
||||||
|
followed in these cases will depend on the nature and purpose of the FEP
|
||||||
|
in question.
|
||||||
|
|
||||||
|
Occasionally, a Deferred or even a Withdrawn FEP may be resurrected
|
||||||
|
with major updates, but it is often better to just propose a new one.
|
||||||
|
|
||||||
|
## What belongs in a successful FEP?
|
||||||
|
|
||||||
|
Each FEP should have the following parts/sections:
|
||||||
|
|
||||||
|
1. Preamble -- RFC-2822 style headers in [Hugo page level
|
||||||
|
params](https://gohugo.io/variables/page/#page-level-params) format
|
||||||
|
containing meta-data about the FEP, including the FEP number, a short
|
||||||
|
descriptive title (limited to a maximum of 44 characters), the names, and
|
||||||
|
optionally the contact info for each author, etc.
|
||||||
|
|
||||||
|
2. Abstract -- a short (~200 word) description of the technical issue being
|
||||||
|
addressed.
|
||||||
|
|
||||||
|
3. Motivation -- The motivation is critical flor FEPs that want to change the
|
||||||
|
FrostFS protocols, data formats, API, or ecosystem. It should clearly explain
|
||||||
|
why the existing specification is inadequate to address the problem that the
|
||||||
|
FEP solves. This can include collecting documented support for the FEP from
|
||||||
|
important projects in the FrostFS ecosystem. FEP submissions without
|
||||||
|
sufficient motivation may be rejected.
|
||||||
|
|
||||||
|
4. Rationale -- The rationale fleshes out the specification by describing why
|
||||||
|
particular design decisions were made. It should describe alternate designs
|
||||||
|
that were considered and related work, e.g. how the feature is supported in
|
||||||
|
other systems.
|
||||||
|
|
||||||
|
The rationale should provide evidence of consensus within the community and
|
||||||
|
discuss important objections or concerns raised during discussion.
|
||||||
|
|
||||||
|
5. Specification -- The technical specification should describe the semantics of
|
||||||
|
any new feature. The specification should be detailed enough to allow
|
||||||
|
competing, interoperable implementations.
|
||||||
|
|
||||||
|
6. Backwards Compatibility -- All FEPs that introduce backwards
|
||||||
|
incompatibilities must include a section describing these incompatibilities
|
||||||
|
and their severity. The FEP must explain how the author proposes to deal with
|
||||||
|
these incompatibilities. FEP submissions without a sufficient backwards
|
||||||
|
compatibility treatise may be rejected outright.
|
||||||
|
|
||||||
|
7. Security Implications -- If there are security concerns in relation to the
|
||||||
|
FEP, those concerns should be explicitly written out to make sure reviewers
|
||||||
|
of the FEP are aware of them.
|
||||||
|
|
||||||
|
8. How to Teach This -- For a FEP that adds new functionality or changes system
|
||||||
|
behavior, it is helpful to include a section on how to teach users, new and
|
||||||
|
experienced, how to apply the FEP to their work.
|
||||||
|
|
||||||
|
9. Reference Implementation -- The reference implementation must be completed
|
||||||
|
before any FEP is given status "Final", but it need not be completed before
|
||||||
|
the FEP is accepted. While there is merit to the approach of reaching
|
||||||
|
consensus on the specification and rationale before writing code, the
|
||||||
|
principle of "rough consensus and running code" is still useful when it comes
|
||||||
|
to resolving many discussions of API details.
|
||||||
|
|
||||||
|
10. Rejected Ideas -- Throughout the discussion of a FEP, various ideas will be
|
||||||
|
proposed which are not accepted. Those rejected ideas should be recorded
|
||||||
|
along with the reasoning as to why they were rejected. This both helps
|
||||||
|
record the thought process behind the final version of the FEP as well as
|
||||||
|
preventing people from bringing up the same rejected idea again in
|
||||||
|
subsequent discussions.
|
||||||
|
|
||||||
|
In a way this section can be thought of as a breakout section of the
|
||||||
|
Rationale section that is focused specifically on why certain ideas were not
|
||||||
|
ultimately pursued.
|
||||||
|
|
||||||
|
11. Open Issues -- While a FEP is in draft, ideas can come up which warrant
|
||||||
|
further discussion. Those ideas should be recorded so people know that they
|
||||||
|
are being thought about but do not have a concrete resolution. This helps
|
||||||
|
make sure all issues required for the FEP to be ready for consideration are
|
||||||
|
complete and reduces people duplicating prior discussion.
|
||||||
|
|
||||||
|
12. Footnotes -- A collection of footnotes cited in the FEP, and a place to list
|
||||||
|
non-inline hyperlink targets.
|
||||||
|
|
||||||
|
13. Copyright/license -- Each new FEP must be placed under a Creative Commons
|
||||||
|
Attribution-NonCommercial-ShareAlike 4.0 International License ([CC BY-NC-SA
|
||||||
|
4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)).
|
||||||
|
|
||||||
|
## FEP Formats and Templates
|
||||||
|
|
||||||
|
FEPs are UTF-8 encoded text files using the Markdown format in a dialect used by
|
||||||
|
[Hugo](https://gohugo.io/) static site generator. Markdown allows for rich
|
||||||
|
markup that is still quite easy to read, but also results in good-looking and
|
||||||
|
functional HTML.
|
||||||
|
|
||||||
|
The FEP text files are automatically converted to HTML for easier online reading
|
||||||
|
at [FrostFS site](https://frostfs.info/proposals/)
|
||||||
|
|
||||||
|
## FEP Header Preamble {#fep_header_preamble}
|
||||||
|
|
||||||
|
Each FEP must begin with an RFC-2822 style preamble in [Hugo page level
|
||||||
|
params](https://gohugo.io/variables/page/#page-level-params) format. The
|
||||||
|
headers must appear in the following order. Headers marked with "*" are
|
||||||
|
optional and are described below. All other headers are required.
|
||||||
|
|
||||||
|
```YAML
|
||||||
|
FEP: <fep number>
|
||||||
|
Title: <fep title>
|
||||||
|
Author: <list of authors' real names and optionally, email addrs>
|
||||||
|
* Sponsor: <real name of sponsor>
|
||||||
|
Discussions-To: <URL of current canonical discussion thread>
|
||||||
|
Status: <Draft | Active | Accepted | Provisional | Deferred | Rejected |
|
||||||
|
Withdrawn | Final | Superseded>
|
||||||
|
Type: <Standards Track | Informational | Process>
|
||||||
|
Date: <date created on, in yyyy-mm-dd format>
|
||||||
|
* Requires: <fep numbers>
|
||||||
|
* Replaces: <fep number>
|
||||||
|
* Superseded-By: <fep number>
|
||||||
|
```
|
||||||
|
|
||||||
|
The Author header lists the names, and optionally the email addresses or
|
||||||
|
GitHub/Codeberg/TrueCloudab Forgejo handles of all the authors/owners of the
|
||||||
|
FEP. The format of the Author header values must be:
|
||||||
|
|
||||||
|
```YAML
|
||||||
|
Random J. User <random@example.com>
|
||||||
|
```
|
||||||
|
|
||||||
|
if the email address is included, and just:
|
||||||
|
|
||||||
|
```YAML
|
||||||
|
Random J. User
|
||||||
|
```
|
||||||
|
|
||||||
|
if the address is not given.
|
||||||
|
|
||||||
|
If there are multiple authors, each should be on a separate line as defined in
|
||||||
|
YAML list format, like:
|
||||||
|
|
||||||
|
```YAML
|
||||||
|
Author:
|
||||||
|
- Random J. User <random@example.com>
|
||||||
|
- Snegurocka (@snegurochka-chan)
|
||||||
|
```
|
||||||
|
|
||||||
|
The Sponsor field records which Committer or developer (approved by the
|
||||||
|
Architecture Committees) is sponsoring the FEP. If one of the authors of the FEP
|
||||||
|
is a Committer then no sponsor is necessary and thus this field should be left
|
||||||
|
out.
|
||||||
|
|
||||||
|
The Discussions-To header provides the URL to the relevant discussion thread for
|
||||||
|
the FEP. Normally an issue or Pull Request. For email lists, this should be a
|
||||||
|
direct link to the thread in the list's archives, rather than just a mailto: or
|
||||||
|
hyperlink to the list itself.
|
||||||
|
|
||||||
|
The Type header specifies the type of FEP: Standards Track, Informational, or
|
||||||
|
Process.
|
||||||
|
|
||||||
|
The Date header records the date that the FEP was assigned a number. Dates
|
||||||
|
should be in `yyyy-mm-dd` format, e.g. `2023-02-01`.
|
||||||
|
|
||||||
|
FEPs may have a Requires header, indicating the FEP numbers that this FEP
|
||||||
|
depends on.
|
||||||
|
|
||||||
|
FEPs may also have a Superseded-By header indicating that a FEP has been
|
||||||
|
rendered obsolete by a later document; the value is the number of the FEP that
|
||||||
|
replaces the current document. The newer FEP must have a Replaces header
|
||||||
|
containing the number of the FEP that it rendered obsolete.
|
||||||
|
|
||||||
|
## Auxiliary Files
|
||||||
|
|
||||||
|
FEPs may include auxiliary files such as diagrams. All support files may be
|
||||||
|
placed in a subdirectory called ``fep-XXXX``, where "XXXX" is the FEP number.
|
||||||
|
When using a subdirectory, there are no constraints on the names used in files.
|
||||||
|
|
||||||
|
## Changing Existing FEPs
|
||||||
|
|
||||||
|
Draft FEPs are freely open for discussion and proposed modification, at the
|
||||||
|
discretion of the authors, until submitted to the corresponding Committee for
|
||||||
|
review and resolution. Substantive content changes should generally be first
|
||||||
|
proposed on the FEP's discussion thread listed in its `Discussions-To` header,
|
||||||
|
while copyedits and corrections can be submitted as an issue or Pull
|
||||||
|
Request. FEP authors with write access to the FEP repository can update the FEPs
|
||||||
|
themselves by using a PR to submit their changes. For guidance on
|
||||||
|
modifying other FEPs, consult the [FEP Maintenance]({{<ref
|
||||||
|
"#fep_maintenance">}}) section.
|
||||||
|
|
||||||
|
See the [Contributing
|
||||||
|
Guide](https://git.frostfs.info/TrueCloudLab/frostfs.info/blob/master/CONTRIBUTING.md)
|
||||||
|
for additional details, and when in doubt, please check first with the FEP
|
||||||
|
author and/or a FEP editor.
|
||||||
|
|
||||||
|
## Transferring FEP Ownership
|
||||||
|
|
||||||
|
It occasionally becomes necessary to transfer ownership of FEPs to a new
|
||||||
|
champion. In general, it is preferable to retain the original author as a
|
||||||
|
co-author of the transferred FEP, but that's really up to the original author. A
|
||||||
|
good reason to transfer ownership is because the original author no longer has
|
||||||
|
the time or interest in updating it or following through with the FEP process,
|
||||||
|
or has fallen off the face of the 'net (i.e. is unreachable or not responding to
|
||||||
|
email). A bad reason to transfer ownership is because the author doesn't agree
|
||||||
|
with the direction of the FEP. One aim of the FEP process is to try to build
|
||||||
|
consensus around a FEP, but if that's not possible, an author can always submit
|
||||||
|
a competing FEP.
|
||||||
|
|
||||||
|
If you are interested in assuming ownership of a FEP, you can also do this via
|
||||||
|
pull request. Fork the FEP repository, make your ownership modification, and
|
||||||
|
submit a pull request. You should mention both the original author and
|
||||||
|
`@TrueCloudLab/architecture-committee` or `@TrueCloudLab/community-committee` in
|
||||||
|
a comment on the pull request. (If the original author's username is unknown,
|
||||||
|
use email.) If the original author doesn't respond in a timely manner, the
|
||||||
|
Committee will make a unilateral decision (it's not like such decisions can't be
|
||||||
|
reversed :smile:).
|
||||||
|
|
||||||
|
## Committee Responsibilities & Workflow
|
||||||
|
|
||||||
|
A FEP editor must be added to the `@TrueCloudLab/architecture-committee` or
|
||||||
|
`@TrueCloudLab/community-committee` group, depending on the relevant FEP types,
|
||||||
|
and must watch the [FEP
|
||||||
|
repository](https://git.frostfs.info/TrueCloudLab/frostfs.info).
|
||||||
|
|
||||||
|
Note that developers with write access to the `FEP repository` may handle the
|
||||||
|
tasks that would normally be taken care of by the FEP editors. Alternately, even
|
||||||
|
developers may request assistance from FEP editors by mentioning the relevant
|
||||||
|
group.
|
||||||
|
|
||||||
|
For each new FEP that comes in an editor does the following:
|
||||||
|
|
||||||
|
* Make sure that the FEP is either co-authored by a Committer, has a Committer
|
||||||
|
as a sponsor, or has a sponsor specifically approved for this FEP by the
|
||||||
|
Committee.
|
||||||
|
|
||||||
|
* Read the FEP to check if it is ready: sound and complete. The ideas must make
|
||||||
|
technical sense, even if they don't seem likely to be accepted.
|
||||||
|
|
||||||
|
* The title should accurately describe the content.
|
||||||
|
|
||||||
|
* The file name extension is correct (i.e. `.md`).
|
||||||
|
|
||||||
|
* Skim the FEP for obvious defects in language (spelling, grammar, sentence
|
||||||
|
structure, etc.), and code style . Editors may correct problems themselves,
|
||||||
|
but are not required to do so.
|
||||||
|
|
||||||
|
* If a project is portrayed as benefiting from or supporting the FEP, make sure
|
||||||
|
there is some direct indication from the project included to make the support
|
||||||
|
clear. This is to avoid a FEP accidentally portraying a project as supporting
|
||||||
|
a FEP when in fact the support is based on conjecture.
|
||||||
|
|
||||||
|
If the FEP isn't ready, an editor will send it back to the author for revision,
|
||||||
|
with specific instructions.
|
||||||
|
|
||||||
|
Once the FEP is ready for the repository, a FEP editor will:
|
||||||
|
|
||||||
|
* Assign a FEP number (almost always just the next available number, but
|
||||||
|
sometimes it's a special/joke number, like 666 or 3141).
|
||||||
|
|
||||||
|
* Check that the author has correctly labeled the FEP's type
|
||||||
|
("Standards Track", "Informational", or "Process"), and marked its
|
||||||
|
status as "Draft".
|
||||||
|
|
||||||
|
* Ensure all CI build and lint checks pass without errors,
|
||||||
|
and there are no obvious issues in the rendered preview output.
|
||||||
|
|
||||||
|
* Merge the new (or updated) FEP.
|
||||||
|
|
||||||
|
* Inform the author of the next steps (open a discussion thread and
|
||||||
|
update the FEP with it, post an announcement, etc).
|
||||||
|
|
||||||
|
Updates to existing FEPs should be submitted as a pull request.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
This work is licensed under a Creative Commons
|
||||||
|
Attribution-NonCommercial-ShareAlike 4.0 International License.
|
14
content/proposals/proc/_index.en.md
Normal file
14
content/proposals/proc/_index.en.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
title: "Process"
|
||||||
|
date: "2022-12-22"
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< proposals_table "proc" "Accepted" >}}
|
||||||
|
{{< proposals_table "proc" "Active" >}}
|
||||||
|
{{< proposals_table "proc" "Deferred" >}}
|
||||||
|
{{< proposals_table "proc" "Draft" >}}
|
||||||
|
{{< proposals_table "proc" "Final" >}}
|
||||||
|
{{< proposals_table "proc" "Provisional" >}}
|
||||||
|
{{< proposals_table "proc" "Rejected" >}}
|
||||||
|
{{< proposals_table "proc" "Superseded" >}}
|
||||||
|
{{< proposals_table "proc" "Withdrawn" >}}
|
580
content/proposals/proc/fep-0001/process_flow.svg
Normal file
580
content/proposals/proc/fep-0001/process_flow.svg
Normal file
|
@ -0,0 +1,580 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.0"
|
||||||
|
width="518.000000pt"
|
||||||
|
height="230.000000pt"
|
||||||
|
viewBox="0 0 518.000000 230.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet"
|
||||||
|
id="svg3789"
|
||||||
|
sodipodi:docname="pep-0001-1.svg"
|
||||||
|
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||||
|
<metadata
|
||||||
|
id="metadata3795">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs3793">
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="marker26466"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path26464"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible;"
|
||||||
|
id="marker24282"
|
||||||
|
refX="0.0"
|
||||||
|
refY="0.0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
id="path24280" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible;"
|
||||||
|
id="marker18063"
|
||||||
|
refX="0.0"
|
||||||
|
refY="0.0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend">
|
||||||
|
<path
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
id="path18061" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="marker16749"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path16747"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible;"
|
||||||
|
id="marker15177"
|
||||||
|
refX="0.0"
|
||||||
|
refY="0.0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
id="path15175" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="marker14679"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
id="path14677"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible;"
|
||||||
|
id="marker13779"
|
||||||
|
refX="0.0"
|
||||||
|
refY="0.0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
id="path13777" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="marker12309"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
id="path12307"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible;"
|
||||||
|
id="marker11613"
|
||||||
|
refX="0.0"
|
||||||
|
refY="0.0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend">
|
||||||
|
<path
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
id="path11611" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="marker9945"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
id="path9943"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible;"
|
||||||
|
id="marker5313"
|
||||||
|
refX="0.0"
|
||||||
|
refY="0.0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
id="path5311" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="Arrow1Mend"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
id="path4732"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="Arrow1Lend"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path4726"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.8) rotate(180) translate(12.5,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow2Lend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="marker5033"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path5031"
|
||||||
|
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
|
||||||
|
transform="scale(1.1) rotate(180) translate(1,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Lstart"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="Arrow1Lstart"
|
||||||
|
style="overflow:visible"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path4723"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
transform="scale(0.8) translate(12.5,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow2Lend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="Arrow2Lend"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path4744"
|
||||||
|
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
|
||||||
|
transform="scale(1.1) rotate(180) translate(1,0)" />
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
id="namedview3791"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1.7126796"
|
||||||
|
inkscape:cx="356.07349"
|
||||||
|
inkscape:cy="132.46132"
|
||||||
|
inkscape:window-x="3200"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg3789"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.509846,117.79787"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4717"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="88.019964,219.39306"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide4719"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="416.89059,151.51696"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide21702"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="219.83096,105.97429"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide21704"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="254.42587,56.052518"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide21706"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<g
|
||||||
|
id="g4690"
|
||||||
|
transform="translate(-95.026522,-3.0384519)">
|
||||||
|
<rect
|
||||||
|
id="rect4612"
|
||||||
|
width="127"
|
||||||
|
height="37"
|
||||||
|
x="194.48441"
|
||||||
|
y="61.797592"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
id="text4622"
|
||||||
|
y="88.499252"
|
||||||
|
x="198.61234"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
|
||||||
|
y="88.499252"
|
||||||
|
x="198.61234"
|
||||||
|
id="tspan4620"
|
||||||
|
sodipodi:role="line">Provisional</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4675"
|
||||||
|
transform="translate(-0.490154,-0.39305957)">
|
||||||
|
<rect
|
||||||
|
id="rect4606"
|
||||||
|
width="127"
|
||||||
|
height="37"
|
||||||
|
x="11"
|
||||||
|
y="11"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;image-rendering:auto" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="45.952637"
|
||||||
|
y="37.70166"
|
||||||
|
id="text4630"><tspan
|
||||||
|
id="tspan4632"
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="45.952637"
|
||||||
|
y="37.70166"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px">Draft</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4700"
|
||||||
|
transform="translate(26.712527,-17.52529)">
|
||||||
|
<rect
|
||||||
|
id="rect4616"
|
||||||
|
width="127"
|
||||||
|
height="37"
|
||||||
|
x="194.92232"
|
||||||
|
y="172.58888"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="199.76997"
|
||||||
|
y="199.29054"
|
||||||
|
id="text4638"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4636"
|
||||||
|
x="199.76997"
|
||||||
|
y="199.29054"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px">Withdrawn</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4695"
|
||||||
|
transform="translate(-20.143873,-6.5596308)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="113.471"
|
||||||
|
x="180.90918"
|
||||||
|
height="37"
|
||||||
|
width="127"
|
||||||
|
id="rect4614" />
|
||||||
|
<text
|
||||||
|
id="text4642"
|
||||||
|
y="138.04034"
|
||||||
|
x="196.46143"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
|
||||||
|
y="138.04034"
|
||||||
|
x="196.46143"
|
||||||
|
id="tspan4640"
|
||||||
|
sodipodi:role="line">Rejected</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4710"
|
||||||
|
transform="translate(2.9753917,-0.39303668)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="11"
|
||||||
|
x="371"
|
||||||
|
height="37"
|
||||||
|
width="127"
|
||||||
|
id="rect3797" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="409.07324"
|
||||||
|
y="37.70166"
|
||||||
|
id="text4646"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4644"
|
||||||
|
x="409.07324"
|
||||||
|
y="37.70166"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px">Final</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4685"
|
||||||
|
transform="translate(-1.7850301,-1.7067669)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="12.31373"
|
||||||
|
x="192.29486"
|
||||||
|
height="37"
|
||||||
|
width="127"
|
||||||
|
id="rect4610" />
|
||||||
|
<text
|
||||||
|
id="text4650"
|
||||||
|
y="36.883068"
|
||||||
|
x="205.44623"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
|
||||||
|
y="36.883068"
|
||||||
|
x="205.44623"
|
||||||
|
id="tspan4648"
|
||||||
|
sodipodi:role="line">Accepted</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4680"
|
||||||
|
transform="translate(-0.490154,12.699399)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="173"
|
||||||
|
x="11"
|
||||||
|
height="37"
|
||||||
|
width="127"
|
||||||
|
id="rect4608" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="26.165527"
|
||||||
|
y="199.70166"
|
||||||
|
id="text4654"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4652"
|
||||||
|
x="26.165527"
|
||||||
|
y="199.70166"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px">Deferred</tspan></text>
|
||||||
|
</g>
|
||||||
|
<flowRoot
|
||||||
|
xml:space="preserve"
|
||||||
|
id="flowRoot4656"
|
||||||
|
style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
|
||||||
|
id="flowRegion4658"><rect
|
||||||
|
id="rect4660"
|
||||||
|
width="8.7582054"
|
||||||
|
height="81.743256"
|
||||||
|
x="99.843544"
|
||||||
|
y="115.73779" /></flowRegion><flowPara
|
||||||
|
id="flowPara4662" /></flowRoot> <g
|
||||||
|
id="g4715"
|
||||||
|
transform="translate(2.9753917,12.699399)">
|
||||||
|
<rect
|
||||||
|
id="rect4604"
|
||||||
|
width="127"
|
||||||
|
height="37"
|
||||||
|
x="371"
|
||||||
|
y="173"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="400.96826"
|
||||||
|
y="199.70166"
|
||||||
|
id="text4666"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4664"
|
||||||
|
x="400.96826"
|
||||||
|
y="199.70166"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px">Active</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4705"
|
||||||
|
transform="translate(0,7.4535255)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.125;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="90.699661"
|
||||||
|
x="374.46555"
|
||||||
|
height="37"
|
||||||
|
width="127"
|
||||||
|
id="rect4618" />
|
||||||
|
<text
|
||||||
|
id="text4670"
|
||||||
|
y="115.269"
|
||||||
|
x="387.37521"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
|
||||||
|
y="115.269"
|
||||||
|
x="387.37521"
|
||||||
|
id="tspan4668"
|
||||||
|
sodipodi:role="line">Replaced</tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
|
||||||
|
d="M 17.515858,48.274259 V 183.04703"
|
||||||
|
id="path4721"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5309"
|
||||||
|
d="M 26.545549,185.99111 V 49.504289"
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5313)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.00000001, 1.5;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker9945)"
|
||||||
|
d="M 439.22346,47.398438 V 96.65244"
|
||||||
|
id="path9941"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12309)"
|
||||||
|
d="m 137.13596,29.727733 h 52.04728"
|
||||||
|
id="path12305"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13775"
|
||||||
|
d="M 318.43082,27.538182 H 370.4781"
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker13779)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker14679)"
|
||||||
|
d="M 69.843993,48.540525 V 77.774512 H 97.059211"
|
||||||
|
id="path14669"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15173"
|
||||||
|
d="M 55.952177,47.433136 V 123.87614 H 158.23713"
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker15177)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16749)"
|
||||||
|
d="M 42.113037,47.312202 V 173.81084 H 220.13598"
|
||||||
|
id="path16745"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path18059"
|
||||||
|
d="M 226.35002,69.110911 H 403.09174 V 50.174148"
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker18063)" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path24278"
|
||||||
|
d="m 226.85286,85.449036 h 29.78208 v 20.112814"
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.00000001,1.5;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker24282)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.00000001,1.5;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker26466)"
|
||||||
|
d="M 226.44001,77.758634 H 316.6304 V 153.39305"
|
||||||
|
id="path26462"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 27 KiB |
14
content/proposals/std/_index.en.md
Normal file
14
content/proposals/std/_index.en.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
title: "Standards Track"
|
||||||
|
date: "2023-01-01"
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< proposals_table "std" "Accepted" >}}
|
||||||
|
{{< proposals_table "std" "Active" >}}
|
||||||
|
{{< proposals_table "std" "Deferred" >}}
|
||||||
|
{{< proposals_table "std" "Draft" >}}
|
||||||
|
{{< proposals_table "std" "Final" >}}
|
||||||
|
{{< proposals_table "std" "Provisional" >}}
|
||||||
|
{{< proposals_table "std" "Rejected" >}}
|
||||||
|
{{< proposals_table "std" "Superseded" >}}
|
||||||
|
{{< proposals_table "std" "Withdrawn" >}}
|
5
i18n/en.yaml
Normal file
5
i18n/en.yaml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
- id: topics_title
|
||||||
|
translation: Find your answer by subject
|
||||||
|
|
||||||
|
- id: send
|
||||||
|
translation: Send
|
1
layouts/partials/title.html
Normal file
1
layouts/partials/title.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{ with .Params.FEP }}FEP {{ . }} – {{ end }}{{ .Title }}
|
136
layouts/shortcodes/proposals_table.html
Normal file
136
layouts/shortcodes/proposals_table.html
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
<h5 id="index-by-category" style="margin-bottom: 10px;">{{ .Get 1 }}</h5>
|
||||||
|
{{ $active_category := .Get 0 }}
|
||||||
|
{{ $active_status := .Get 1 }}
|
||||||
|
|
||||||
|
{{ $is_exists := 0 }}
|
||||||
|
{{ range $page := .Site.RegularPages }}
|
||||||
|
{{ if gt (len (findRE $active_status $page.Params.status)) 0 }}
|
||||||
|
{{ if gt (len (findRE (print "/" $active_category "/") $page.File)) 0 }}
|
||||||
|
{{ $is_exists = 1 }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if eq $is_exists 1 }}
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="table-th">Status</th>
|
||||||
|
<th class="table-th">PEP</th>
|
||||||
|
<th class="table-th">Authors</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range $page := .Site.RegularPages }}
|
||||||
|
{{ if gt (len (findRE $active_status $page.Params.status)) 0 }}
|
||||||
|
{{ if gt (len (findRE (print "/" $active_category "/") $page.File)) 0 }}
|
||||||
|
<tr>
|
||||||
|
<th class="table-th status">{{ substr $page.Params.status 0 1 }}{{ substr $page.Params.type 0 1 }}
|
||||||
|
<span class="tooltiptext">{{ $page.Params.status }}, {{ $page.Params.type }}</span>
|
||||||
|
</th>
|
||||||
|
<th class="table-th">
|
||||||
|
<a href="{{ $page.Permalink }}">{{ $page.Title }}</a>
|
||||||
|
</th>
|
||||||
|
<th class="table-th">
|
||||||
|
<div class="authors">
|
||||||
|
{{ if (isset $page.Params.author 0) }}
|
||||||
|
{{ range $elem_index, $elem_val := $page.Params.author }}
|
||||||
|
{{ $initialEmail := delimit (findRE `<.*@.*>` $elem_val) "" }}
|
||||||
|
{{ $initialLogin := delimit (findRE `\(@.*\)` $elem_val) "" }}
|
||||||
|
{{ $initialLink := delimit (findRE `\([^@].*\)` $elem_val) "" }}
|
||||||
|
{{ $nameWithoutEmail := trim (substr $elem_val 0 (sub (len $elem_val) (len $initialEmail))) " " }}
|
||||||
|
{{ $nameWithoutLogin := trim (substr $elem_val 0 (sub (len $elem_val) (len $initialLogin))) " " }}
|
||||||
|
{{ $nameWithoutLink := trim (substr $elem_val 0 (sub (len $elem_val) (len $initialLink))) " " }}
|
||||||
|
|
||||||
|
<span class="author-name">
|
||||||
|
{{ if $initialEmail }}
|
||||||
|
{{ $nameWithoutEmail }}
|
||||||
|
<span class="tooltiptext">
|
||||||
|
{{ $email := slicestr $initialEmail 1 (sub (len $initialEmail) 1) }}
|
||||||
|
<div class="author-contact">
|
||||||
|
<i class="ti-email"></i>
|
||||||
|
<a href="mailto:{{ $email }}">{{ $email }}</a>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
{{ else if ($initialLogin) }}
|
||||||
|
{{ $nameWithoutLogin }}
|
||||||
|
<span class="tooltiptext">
|
||||||
|
{{ $login := slicestr $initialLogin 1 (sub (len $initialLogin) 1) }}
|
||||||
|
{{ $linkLogin := trim $login "@" }}
|
||||||
|
<div class="author-contact">
|
||||||
|
<i class="ti-link"></i>
|
||||||
|
<a href="https://git.frostfs.info/{{ $linkLogin }}" target="_blank">{{ $login }}</a>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
{{ else if ($initialLink) }}
|
||||||
|
{{ $nameWithoutLink }}
|
||||||
|
<span class="tooltiptext">
|
||||||
|
{{ $link := slicestr $initialLink 1 (sub (len $initialLink) 1) }}
|
||||||
|
<div class="author-contact">
|
||||||
|
<i class="ti-new-window"></i>
|
||||||
|
<a href="https://{{ $link }}" target="_blank">{{ $link }}</a>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
{{ else }}
|
||||||
|
{{ $elem_val }}
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
{{ if gt (sub (len $page.Params.author) 1) $elem_index }}
|
||||||
|
<span class="author-delimiter">, </span>
|
||||||
|
{{end}}
|
||||||
|
{{ end }}
|
||||||
|
{{ else }}
|
||||||
|
{{ $initialEmail := delimit (findRE `<.*@.*>` $page.Params.author) "" }}
|
||||||
|
{{ $initialLogin := delimit (findRE `\(@.*\)` $page.Params.author) "" }}
|
||||||
|
{{ $initialLink := delimit (findRE `\([^@].*\)` $page.Params.author) "" }}
|
||||||
|
{{ $nameWithoutEmail := trim (substr $page.Params.author 0 (sub (len $page.Params.author) (len $initialEmail))) " " }}
|
||||||
|
{{ $nameWithoutLogin := trim (substr $page.Params.author 0 (sub (len $page.Params.author) (len $initialLogin))) " " }}
|
||||||
|
{{ $nameWithoutLink := trim (substr $page.Params.author 0 (sub (len $page.Params.author) (len $initialLink))) " " }}
|
||||||
|
|
||||||
|
<span class="author-name">
|
||||||
|
{{ if $initialEmail }}
|
||||||
|
{{ $nameWithoutEmail }}
|
||||||
|
<span class="tooltiptext">
|
||||||
|
{{ $email := slicestr $initialEmail 1 (sub (len $initialEmail) 1) }}
|
||||||
|
<div class="author-contact">
|
||||||
|
<i class="ti-email"></i>
|
||||||
|
<a href="mailto:{{ $email }}">{{ $email }}</a>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
{{ else if ($initialLogin) }}
|
||||||
|
{{ $nameWithoutLogin }}
|
||||||
|
<span class="tooltiptext">
|
||||||
|
{{ $login := slicestr $initialLogin 1 (sub (len $initialLogin) 1) }}
|
||||||
|
{{ $linkLogin := trim $login "@" }}
|
||||||
|
<div class="author-contact">
|
||||||
|
<i class="ti-link"></i>
|
||||||
|
<a href="https://git.frostfs.info/{{ $linkLogin }}" target="_blank">{{ $login }}</a>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
{{ else if ($initialLink) }}
|
||||||
|
{{ $nameWithoutLink }}
|
||||||
|
<span class="tooltiptext">
|
||||||
|
{{ $link := slicestr $initialLink 1 (sub (len $initialLink) 1) }}
|
||||||
|
<div class="author-contact">
|
||||||
|
<i class="ti-new-window"></i>
|
||||||
|
<a href="https://{{ $link }}" target="_blank">{{ $link }}</a>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
{{ else }}
|
||||||
|
{{ $page.Params.author }}
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{{ else }}
|
||||||
|
<p>Not found</p>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
|
70
static/images/FrostFS.svg
Normal file
70
static/images/FrostFS.svg
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 184.2 51.8" style="enable-background:new 0 0 184.2 51.8;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{display:none;}
|
||||||
|
.st1{display:inline;}
|
||||||
|
.st2{fill:#01E397;}
|
||||||
|
.st3{display:inline;fill:#010032;}
|
||||||
|
.st4{display:inline;fill:#00E599;}
|
||||||
|
.st5{display:inline;fill:#00AF92;}
|
||||||
|
.st6{fill:#00C3E5;}
|
||||||
|
</style>
|
||||||
|
<g id="Layer_2">
|
||||||
|
<g id="Layer_1-2" class="st0">
|
||||||
|
<g class="st1">
|
||||||
|
<path class="st2" d="M146.6,18.3v7.2h10.9V29h-10.9v10.7h-4V14.8h18v3.5H146.6z"/>
|
||||||
|
<path class="st2" d="M180,15.7c1.7,0.9,3,2.2,4,3.8l-3,2.7c-0.6-1.3-1.5-2.4-2.6-3.3c-1.3-0.7-2.8-1-4.3-1
|
||||||
|
c-1.4-0.1-2.8,0.3-4,1.1c-0.9,0.5-1.5,1.5-1.4,2.6c0,1,0.5,1.9,1.4,2.4c1.5,0.8,3.2,1.3,4.9,1.5c1.9,0.3,3.7,0.8,5.4,1.6
|
||||||
|
c1.2,0.5,2.2,1.3,2.9,2.3c0.6,1,1,2.2,0.9,3.4c0,1.4-0.5,2.7-1.3,3.8c-0.9,1.2-2.1,2.1-3.5,2.6c-1.7,0.6-3.4,0.9-5.2,0.8
|
||||||
|
c-5,0-8.6-1.6-10.7-5l2.9-2.8c0.7,1.4,1.8,2.5,3.1,3.3c1.5,0.7,3.1,1.1,4.7,1c1.5,0.1,2.9-0.2,4.2-0.9c0.9-0.5,1.5-1.5,1.5-2.6
|
||||||
|
c0-0.9-0.5-1.8-1.3-2.2c-1.5-0.7-3.1-1.2-4.8-1.5c-1.9-0.3-3.7-0.8-5.5-1.5c-1.2-0.5-2.2-1.4-3-2.4c-0.6-1-1-2.2-0.9-3.4
|
||||||
|
c0-1.4,0.4-2.7,1.2-3.8c0.8-1.2,2-2.2,3.3-2.8c1.6-0.7,3.4-1.1,5.2-1C176.1,14.3,178.2,14.8,180,15.7z"/>
|
||||||
|
</g>
|
||||||
|
<path class="st3" d="M73.3,16.3c1.9,1.9,2.9,4.5,2.7,7.1v15.9h-4V24.8c0-2.6-0.5-4.5-1.6-5.7c-1.2-1.2-2.8-1.8-4.5-1.7
|
||||||
|
c-1.3,0-2.5,0.3-3.7,0.8c-1.2,0.7-2.2,1.7-2.9,2.9c-0.8,1.5-1.1,3.2-1.1,4.9v13.3h-4V15.1l3.6,1.5v1.7c0.8-1.5,2.1-2.6,3.6-3.3
|
||||||
|
c1.5-0.8,3.2-1.2,4.9-1.1C68.9,13.8,71.3,14.7,73.3,16.3z"/>
|
||||||
|
<path class="st3" d="M104.4,28.3H85.6c0.1,2.2,1,4.3,2.5,5.9c1.5,1.4,3.5,2.2,5.6,2.1c1.6,0.1,3.2-0.2,4.6-0.9
|
||||||
|
c1.1-0.6,2-1.6,2.5-2.8l3.3,1.8c-0.9,1.7-2.3,3.1-4,4c-2,1-4.2,1.5-6.4,1.4c-3.7,0-6.7-1.1-8.8-3.4s-3.2-5.5-3.2-9.6s1-7.2,3-9.5
|
||||||
|
s5-3.4,8.7-3.4c2.1-0.1,4.2,0.5,6.1,1.5c1.6,1,3,2.5,3.8,4.2c0.9,1.8,1.3,3.9,1.3,5.9C104.6,26.4,104.6,27.4,104.4,28.3z
|
||||||
|
M88.1,19.3c-1.4,1.5-2.2,3.4-2.4,5.5h15.1c-0.2-2-1-3.9-2.3-5.5c-1.4-1.3-3.2-2-5.1-1.9C91.5,17.3,89.6,18,88.1,19.3z"/>
|
||||||
|
<path class="st3" d="M131,17.3c2.2,2.3,3.2,5.5,3.2,9.5s-1,7.3-3.2,9.6s-5.1,3.4-8.8,3.4s-6.7-1.1-8.9-3.4s-3.2-5.5-3.2-9.6
|
||||||
|
s1.1-7.2,3.2-9.5s5.1-3.4,8.9-3.4S128.9,15,131,17.3z M116.2,19.9c-1.5,2-2.2,4.4-2.1,6.9c-0.2,2.5,0.6,5,2.1,7
|
||||||
|
c1.5,1.7,3.7,2.7,6,2.6c2.3,0.1,4.4-0.9,5.9-2.6c1.5-2,2.3-4.5,2.1-7c0.1-2.5-0.6-4.9-2.1-6.9c-1.5-1.7-3.6-2.7-5.9-2.6
|
||||||
|
C119.9,17.2,117.7,18.2,116.2,19.9z"/>
|
||||||
|
<polygon class="st4" points="0,9.1 0,43.7 22.5,51.8 22.5,16.9 46.8,7.9 24.8,0 "/>
|
||||||
|
<polygon class="st5" points="24.3,17.9 24.3,36.8 46.8,44.9 46.8,9.6 "/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st6" d="M41.6,17.5H28.2v6.9h10.4v3.3H28.2v10.2h-3.9V14.2h17.2V17.5z"/>
|
||||||
|
<path class="st6" d="M45.8,37.9v-18h3.3l0.4,3.2c0.5-1.2,1.2-2.1,2.1-2.7c0.9-0.6,2.1-0.9,3.5-0.9c0.4,0,0.7,0,1.1,0.1
|
||||||
|
c0.4,0.1,0.7,0.2,0.9,0.3l-0.5,3.4c-0.3-0.1-0.6-0.2-0.9-0.2C55.4,23,54.9,23,54.4,23c-0.7,0-1.5,0.2-2.2,0.6
|
||||||
|
c-0.7,0.4-1.3,1-1.8,1.8s-0.7,1.8-0.7,3v9.5H45.8z"/>
|
||||||
|
<path class="st6" d="M68.6,19.6c1.8,0,3.3,0.4,4.6,1.1c1.3,0.7,2.4,1.8,3.1,3.2s1.1,3.1,1.1,5c0,1.9-0.4,3.6-1.1,5
|
||||||
|
c-0.8,1.4-1.8,2.5-3.1,3.2c-1.3,0.7-2.9,1.1-4.6,1.1s-3.3-0.4-4.6-1.1c-1.3-0.7-2.4-1.8-3.2-3.2c-0.8-1.4-1.2-3.1-1.2-5
|
||||||
|
c0-1.9,0.4-3.6,1.2-5s1.8-2.5,3.2-3.2C65.3,19.9,66.8,19.6,68.6,19.6z M68.6,22.6c-1.1,0-2,0.2-2.8,0.7c-0.8,0.5-1.3,1.2-1.7,2.1
|
||||||
|
s-0.6,2.1-0.6,3.5c0,1.3,0.2,2.5,0.6,3.4s1,1.7,1.7,2.2s1.7,0.7,2.8,0.7c1.1,0,2-0.2,2.7-0.7c0.7-0.5,1.3-1.2,1.7-2.2
|
||||||
|
s0.6-2.1,0.6-3.4c0-1.4-0.2-2.5-0.6-3.5s-1-1.6-1.7-2.1C70.6,22.8,69.6,22.6,68.6,22.6z"/>
|
||||||
|
<path class="st6" d="M89.2,38.3c-1.8,0-3.4-0.3-4.9-1c-1.5-0.7-2.7-1.7-3.5-3l2.7-2.3c0.5,1,1.3,1.8,2.3,2.4
|
||||||
|
c1,0.6,2.2,0.9,3.6,0.9c1.1,0,2-0.2,2.6-0.6c0.6-0.4,1-0.9,1-1.6c0-0.5-0.2-0.9-0.5-1.2s-0.9-0.6-1.7-0.8l-3.8-0.8
|
||||||
|
c-1.9-0.4-3.3-1-4.1-1.9c-0.8-0.9-1.2-1.9-1.2-3.3c0-1,0.3-1.9,0.9-2.7c0.6-0.8,1.4-1.5,2.5-2s2.5-0.8,4-0.8c1.8,0,3.3,0.3,4.6,1
|
||||||
|
c1.3,0.6,2.2,1.5,2.9,2.7l-2.7,2.2c-0.5-1-1.1-1.7-2-2.1c-0.9-0.5-1.8-0.7-2.8-0.7c-0.8,0-1.4,0.1-2,0.3c-0.6,0.2-1,0.5-1.3,0.8
|
||||||
|
c-0.3,0.3-0.4,0.7-0.4,1.2c0,0.5,0.2,0.9,0.5,1.3s1,0.6,1.9,0.8l4.1,0.9c1.7,0.3,2.9,0.9,3.7,1.7c0.7,0.8,1.1,1.8,1.1,2.9
|
||||||
|
c0,1.2-0.3,2.2-0.9,3c-0.6,0.9-1.5,1.6-2.6,2C92.1,38.1,90.7,38.3,89.2,38.3z"/>
|
||||||
|
<path class="st6" d="M112.8,19.9v3H99.3v-3H112.8z M106.6,14.6v17.9c0,0.9,0.2,1.5,0.7,1.9c0.5,0.4,1.1,0.6,1.9,0.6
|
||||||
|
c0.6,0,1.2-0.1,1.7-0.3c0.5-0.2,0.9-0.5,1.3-0.8l0.9,2.8c-0.6,0.5-1.2,0.9-2,1.1c-0.8,0.3-1.7,0.4-2.7,0.4c-1,0-2-0.2-2.8-0.5
|
||||||
|
s-1.5-0.9-2-1.6c-0.5-0.8-0.7-1.7-0.8-3V15.7L106.6,14.6z"/>
|
||||||
|
<path d="M137.9,17.5h-13.3v6.9h10.4v3.3h-10.4v10.2h-3.9V14.2h17.2V17.5z"/>
|
||||||
|
<path d="M150.9,13.8c2.1,0,4,0.4,5.5,1.2c1.6,0.8,2.9,2,4,3.5l-2.6,2.5c-0.9-1.4-1.9-2.4-3.1-3c-1.1-0.6-2.5-0.9-4-0.9
|
||||||
|
c-1.2,0-2.1,0.2-2.8,0.5c-0.7,0.3-1.3,0.7-1.6,1.2c-0.3,0.5-0.5,1.1-0.5,1.7c0,0.7,0.3,1.4,0.8,1.9c0.5,0.6,1.5,1,2.9,1.3
|
||||||
|
l4.8,1.1c2.3,0.5,3.9,1.3,4.9,2.3c1,1,1.4,2.3,1.4,3.9c0,1.5-0.4,2.7-1.2,3.8c-0.8,1.1-1.9,1.9-3.3,2.5s-3.1,0.9-5,0.9
|
||||||
|
c-1.7,0-3.2-0.2-4.5-0.6c-1.3-0.4-2.5-1-3.5-1.8c-1-0.7-1.8-1.6-2.5-2.6l2.7-2.7c0.5,0.8,1.1,1.6,1.9,2.2
|
||||||
|
c0.8,0.7,1.7,1.2,2.7,1.5c1,0.4,2.2,0.5,3.4,0.5c1.1,0,2.1-0.1,2.9-0.4c0.8-0.3,1.4-0.7,1.8-1.2c0.4-0.5,0.6-1.1,0.6-1.9
|
||||||
|
c0-0.7-0.2-1.3-0.7-1.8c-0.5-0.5-1.3-0.9-2.6-1.2l-5.2-1.2c-1.4-0.3-2.6-0.8-3.6-1.3c-0.9-0.6-1.6-1.3-2.1-2.1s-0.7-1.8-0.7-2.8
|
||||||
|
c0-1.3,0.4-2.6,1.1-3.7c0.7-1.1,1.8-2,3.2-2.6C147.3,14.1,148.9,13.8,150.9,13.8z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
BIN
static/images/favicon.png
Normal file
BIN
static/images/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
1
themes/dot-hugo
Submodule
1
themes/dot-hugo
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 59820ed5c97af782f0688cbbb6d416bb909db39a
|
Loading…
Reference in a new issue